Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
89.47% covered (warning)
89.47%
85 / 95
91.67% covered (success)
91.67%
11 / 12
CRAP
0.00% covered (danger)
0.00%
0 / 1
Ticketprinter
89.47% covered (warning)
89.47%
85 / 95
91.67% covered (success)
91.67%
11 / 12
24.67
0.00% covered (danger)
0.00%
0 / 1
 readEntity
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
 readList
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 readByHash
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
 readByButtonList
60.00% covered (warning)
60.00%
15 / 25
0.00% covered (danger)
0.00%
0 / 1
12.10
 readExceptions
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
3
 readWithContactData
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 readSingleScopeFromButtonList
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 writeEntityWithHash
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
1
 writeEntity
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
1
 readByOrganisationId
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 deleteEntity
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 readExpiredTicketprinterList
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace BO\Zmsbackend\Ticketprinter\Service;
4
5use BO\Zmsentities\Ticketprinter as Entity;
6use BO\Zmsentities\Collection\TicketprinterList as Collection;
7
8/**
9 *
10 * @SuppressWarnings(CouplingBetweenObjects)
11 */
12class Ticketprinter extends \BO\Zmsbackend\Base
13{
14    /**
15     * read entity
16     *
17     * @param int|string $itemId
18     *
19     * @return Entity
20     */
21    public function readEntity($itemId)
22    {
23        $query = new \BO\Zmsbackend\Ticketprinter\Repository\Ticketprinter(\BO\Zmsbackend\Query\Base::SELECT);
24        $query
25            ->addEntityMapping()
26            ->addConditionTicketprinterId($itemId);
27        $ticketprinter = $this->fetchOne($query, new Entity());
28        $ticketprinter = $this->readWithContactData($ticketprinter);
29        $ticketprinter->enabled = (1 == $ticketprinter->enabled);
30        return $ticketprinter;
31    }
32
33    /**
34     * read list of ticketprinters
35     *
36     * @return Collection
37     */
38    protected function readList($statement)
39    {
40        $ticketprinterList = new Collection();
41        while ($entityData = $statement->fetch(\PDO::FETCH_ASSOC)) {
42            $entity = new Entity($entityData);
43            $ticketprinterList->addEntity($entity);
44        }
45        return $ticketprinterList;
46    }
47
48    /**
49     * read Ticketprinter by Hash
50     *
51     * @param string $hash
52     *
53     * @return Entity
54     */
55    public function readByHash($hash)
56    {
57        $query = new \BO\Zmsbackend\Ticketprinter\Repository\Ticketprinter(\BO\Zmsbackend\Query\Base::SELECT);
58        $query
59            ->addEntityMapping()
60            ->addConditionHash($hash);
61        $ticketprinter = $this->fetchOne($query, new Entity());
62        $ticketprinter = $this->readWithContactData($ticketprinter);
63        $ticketprinter->enabled = (1 == $ticketprinter->enabled);
64        return $ticketprinter;
65    }
66
67    /**
68     * read Ticketprinter by comma separated buttonlist
69     *
70     * @param \BO\Zmsentities\Ticketprinter $ticketprinter
71     * @param \DateTimeInterface $now
72     *
73     * @return Entity
74     */
75    public function readByButtonList(Entity $ticketprinter, \DateTimeImmutable $now)
76    {
77        if (count($ticketprinter->buttons) > 6) {
78            throw new \BO\Zmsbackend\Ticketprinter\Exception\TooManyButtons();
79        }
80
81        foreach ($ticketprinter->buttons as $key => $button) {
82            if ('scope' == $button['type']) {
83                $query = new \BO\Zmsbackend\Scope\Service\Scope();
84                $scope = $query->readWithWorkstationCount($button['scope']['id'], $now);
85                if (! $scope) {
86                    throw new \BO\Zmsbackend\Ticketprinter\Exception\UnvalidButtonList();
87                }
88                $ticketprinter->buttons[$key]['scope'] = $scope;
89                $ticketprinter->buttons[$key]['enabled'] = $query->readIsEnabled($scope->id, $now);
90                $ticketprinter->buttons[$key]['name'] = $scope->getPreference('ticketprinter', 'buttonName');
91            }
92
93            if ('request' == $button['type']) {
94                $scopeId = explode('-', $button['request']['id'])[0];
95                $requestId = explode('-', $button['request']['id'])[1];
96                $request = (new \BO\Zmsbackend\Request\Service\Request())->readEntity('dldb', $requestId);
97                $scope = (new \BO\Zmsbackend\Scope\Service\Scope())->readWithWorkstationCount($scopeId, $now);
98
99                if (! $request || ! $scope) {
100                    throw new \BO\Zmsbackend\Ticketprinter\Exception\UnvalidButtonList();
101                }
102                $ticketprinter->buttons[$key]['scope'] = $scope;
103
104                $ticketprinter->buttons[$key]['requestId'] = $requestId;
105                $ticketprinter->buttons[$key]['enabled'] = (new \BO\Zmsbackend\Scope\Service\Scope())->readIsEnabled($scope->id, $now);
106                $ticketprinter->buttons[$key]['name'] = $request->getProperty('name');
107            }
108        }
109        $this->readExceptions($ticketprinter);
110        $ticketprinter = $this->readWithContactData($ticketprinter);
111        return $ticketprinter;
112    }
113
114    /**
115     * @return void
116     */
117    protected function readExceptions(Entity $ticketprinter)
118    {
119        $query = new \BO\Zmsbackend\Scope\Service\Scope();
120        $scope = $this->readSingleScopeFromButtonList($ticketprinter);
121        if ($scope && ! $query->readIsGivenNumberInContingent($scope['id'])) {
122            throw new \BO\Zmsbackend\Scope\Exception\GivenNumberCountExceeded();
123        }
124    }
125
126    protected function readWithContactData(Entity $entity): Entity
127    {
128        $contact = new \BO\Zmsentities\Contact();
129
130        /* cluster not allowed anymore as button (2018-01-30, Abnahme mit TE)
131        if (1 == $entity->getClusterList()->count() && 0 == $entity->getScopeList()->count()) {
132            $contact->name = $entity->getClusterList()->getFirst()->name;
133        } elseif (0 == $entity->getClusterList()->count() && 1 == $entity->getScopeList()->count()) {
134            $department = (new \BO\Zmsbackend\Department\Service\Department())->readByScopeId($entity->getScopeList()->getFirst()->id);
135            $contact->name = $department->name;
136        }
137        */
138
139        if (1 == $entity->getScopeList()->count()) {
140            $department = (new \BO\Zmsbackend\Department\Service\Department())->readByScopeId($entity->getScopeList()->getFirst()->id);
141            $contact->name = $department->name;
142        }
143
144        $entity->contact = $contact;
145        return $entity;
146    }
147
148    public function readSingleScopeFromButtonList(Entity $ticketprinter): \BO\Zmsentities\Scope|null
149    {
150        $scope = null;
151        if (1 == $ticketprinter->getScopeList()->count()) {
152            $scope = $ticketprinter->getScopeList()->getFirst();
153            $scope = (new \BO\Zmsbackend\Scope\Service\Scope())->readEntity($scope['id']);
154        }
155        /* cluster not allowed anymore as button (2018-01-30, Abnahme mit TE)
156        elseif (1 == $ticketprinter->getClusterList()->count()) {
157            $scopeList = $ticketprinter->getClusterList()->getFirst()->scopes;
158            $scopeList = new \BO\Zmsentities\Collection\ScopeList($scopeList);
159            if (1 == $scopeList->count()) {
160                $scope = (new \BO\Zmsbackend\Scope\Service\Scope())->readEntity($scopeList->getFirst()['id']);
161            }
162        }
163        */
164        return $scope;
165    }
166
167    /**
168     * write a cookie for ticketprinter
169     *
170     * @param int $organisationId
171     * @param string $ticketprinterName
172     *
173     * @return Entity
174     */
175    public function writeEntityWithHash($organisationId, $ticketprinterName = '')
176    {
177        $query = new \BO\Zmsbackend\Ticketprinter\Repository\Ticketprinter(\BO\Zmsbackend\Query\Base::INSERT);
178        $ticketprinter = (new Entity())->getHashWith($organisationId);
179        $ticketprinter->name = $ticketprinterName;
180
181        $organisation = (new \BO\Zmsbackend\Organisation\Service\Organisation())->readEntity($organisationId);
182
183        $values = $query->reverseEntityMapping($ticketprinter, $organisation->id);
184        //get owner by organisation
185        $owner = (new \BO\Zmsbackend\Owner\Service\Owner())->readByOrganisationId($organisationId);
186        $values['kundenid'] = $owner->id;
187        $query->addValues($values);
188        $this->writeItem($query);
189        $lastInsertId = $this->getWriter()->lastInsertId();
190        return $this->readEntity($lastInsertId);
191    }
192
193    /**
194     * write a ticketprinter
195     *
196     * @param \BO\Zmsentities\Ticketprinter $entity
197     * @param int $organisationId
198     *
199     * @return Entity
200     */
201    public function writeEntity(Entity $entity, $organisationId)
202    {
203        $query = new \BO\Zmsbackend\Ticketprinter\Repository\Ticketprinter(\BO\Zmsbackend\Query\Base::INSERT);
204        $values = $query->reverseEntityMapping($entity, $organisationId);
205
206        //get owner by organisation
207        $owner = (new \BO\Zmsbackend\Owner\Service\Owner())->readByOrganisationId($organisationId);
208        $values['kundenid'] = $owner->id;
209
210        $query->addValues($values);
211        $this->writeItem($query);
212        $lastInsertId = $this->getWriter()->lastInsertId();
213        return $this->readEntity($lastInsertId);
214    }
215
216    /**
217     * read list of ticketprinter by organisation
218     *
219     * @param int $organisationId
220     *
221     * @return Collection
222     */
223    public function readByOrganisationId($organisationId)
224    {
225        $query = new \BO\Zmsbackend\Ticketprinter\Repository\Ticketprinter(\BO\Zmsbackend\Query\Base::SELECT);
226        $query
227            ->addEntityMapping()
228            ->addConditionOrganisationId($organisationId);
229        $statement = $this->fetchStatement($query);
230        return $this->readList($statement);
231    }
232
233    /**
234    * remove an ticketprinter
235    *
236     * @param int|string $itemId
237     *
238     * @return Entity|null
239    */
240    public function deleteEntity($itemId)
241    {
242        $query =  new \BO\Zmsbackend\Ticketprinter\Repository\Ticketprinter(\BO\Zmsbackend\Query\Base::DELETE);
243        $query->addConditionTicketprinterId($itemId);
244        return $this->deleteItem($query);
245    }
246
247    public function readExpiredTicketprinterList($expirationDate): Collection
248    {
249        $selectQuery = new \BO\Zmsbackend\Ticketprinter\Repository\Ticketprinter(\BO\Zmsbackend\Query\Base::SELECT);
250        $selectQuery
251            ->addEntityMapping()
252            ->addConditionDeleteInterval($expirationDate);
253        $statement = $this->fetchStatement($selectQuery);
254        return $this->readList($statement);
255    }
256}