initial commit
[namibia] / module / Company / src / Company / Service / Group.php
1 <?php
2 namespace Company\Service;
3
4
5
6 /**
7  * Manage Group data.
8  * @author andre.fourie
9  */
10 class Group extends \Company\DataBin\Group
11 {
12
13
14         /**
15          * Contract for custom select list.
16          * @param object|null $jobRecord
17          * @param array $input
18          * @return \Workspace\Contract\Recurring
19          */
20         public function contractJoinedSelectList($jobRecord, array $input = array())
21         {
22
23                 $options = new \Workspace\UseCase\Options();
24                 $requirement = new \Workspace\UseCase\Requirement();
25                 $requirement->addRequiredInput(array(
26                                 'Filter' => array(
27                                                 'region'                        => 'Id'
28                                 )
29                 ));
30                 return new \Workspace\Contract\Recurring($options, $requirement);
31         }
32
33         /**
34          * A custom select list.
35          * @param object|null $jobRecord
36          * @param \Workspace\Utility\ServiceInputParams $contract
37          * @return array
38          */
39         public function executeJoinedSelectList($jobRecord, \Workspace\Utility\ServiceInputParams $contract)
40         {
41                 $items = $this->em->createQuery(
42                                 'SELECT partial companyGroup.{id,name} '
43                                 . 'FROM Company\Entity\Group companyGroup '
44                                 . 'JOIN companyGroup.divisions divisions '
45                                 . 'JOIN divisions.companies company '
46                                 . 'WHERE IDENTITY(company.region) = :regionId '
47                                 . 'ORDER BY companyGroup.name ASC'
48                         )
49                         ->setParameter('regionId', $contract->data->Filter['region'])
50                         ->getArrayResult();
51                 $data = array();
52                 $ids = array();
53                 foreach ($items as $item)
54                 {
55                         if (isset($ids[$item['id']]))
56                         {
57                                 continue;
58                         }
59                         $ids[$item['id']] = true;
60                         $data[] = array(
61                                         'value' => $item['id'],
62                                         'label' => $item['name']
63                         );
64                 }
65                 return $contract->success(
66                                 'List retrieved.',
67                                 $data
68                                 );
69         }
70
71
72 }