initial commit
[namibia] / module / Company / src / Company / Service / GroupDivision.php
1 <?php
2 namespace Company\Service;
3
4
5
6 /**
7  * Manage GroupDivision data.
8  * @author andre.fourie
9  */
10 class GroupDivision extends \Company\DataBin\GroupDivision
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                                                 'group'                         => 'Id',
28                                                 'region'                        => 'Id',
29                                                 'regionalManager'       => 'Array'
30                                 )
31                 ));
32                 return new \Workspace\Contract\Recurring($options, $requirement);
33         }
34
35         /**
36          * A custom select list.
37          * @param object|null $jobRecord
38          * @param \Workspace\Utility\ServiceInputParams $contract
39          * @return array
40          */
41         public function executeJoinedSelectList($jobRecord, \Workspace\Utility\ServiceInputParams $contract)
42         {
43                 $items = $this->em->createQuery(
44                                 'SELECT partial groupDivision.{id,name} '
45                                 . 'FROM Company\Entity\GroupDivision groupDivision '
46                                 . 'JOIN groupDivision.group grp '
47                                 . 'JOIN grp.regionalManagers regionalManager '
48                                 . 'JOIN groupDivision.companies company '
49                                 . 'WHERE IDENTITY(groupDivision.group) = :groupId '
50                                 . ' AND regionalManager.id IN (:regionalManagerId) '
51                                 . ' AND IDENTITY(company.region) = :regionId '
52                                 . 'ORDER BY groupDivision.name ASC'
53                         )
54                         ->setParameter('groupId', $contract->data->Filter['group'])
55                         ->setParameter('regionalManagerId', $contract->data->Filter['regionalManager'])
56                         ->setParameter('regionId', $contract->data->Filter['region'])
57                         ->getArrayResult();
58                 $data = array();
59                 $ids = array();
60                 foreach ($items as $item)
61                 {
62                         if (isset($ids[$item['id']]))
63                         {
64                                 continue;
65                         }
66                         $ids[$item['id']] = true;
67                         $data[] = array(
68                                         'value' => $item['id'],
69                                         'label' => $item['name']
70                         );
71                 }
72                 return $contract->success(
73                                 'List retrieved.',
74                                 $data
75                                 );
76         }
77
78
79 }