Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
38.61% covered (danger)
38.61%
39 / 101
29.41% covered (danger)
29.41%
5 / 17
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProcessStatus
38.61% covered (danger)
38.61%
39 / 101
29.41% covered (danger)
29.41%
5 / 17
892.75
0.00% covered (danger)
0.00%
0 / 1
 writeUpdatedStatus
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
1 / 1
3
 readProcessStatus
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
3
 setStatusPreconfirmed
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 setStatusConfirmed
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 setStatusCalled
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 setStatusReserved
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 isBlockedProcess
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 isQueuedProcess
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
42
 isPreconfirmedProcess
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
30
 isConfirmedProcess
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
30
 isReservedProcess
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
20
 isCalledProcess
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
42
 isProcessingProcess
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
30
 isPendingProcess
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
42
 isMissedProcess
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
30
 isParkedProcess
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
30
 isDeletedProcess
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace BO\Zmsdb\Helper;
4
5use BO\Zmsdb\Log;
6
7/**
8 * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
9 */
10class ProcessStatus extends \BO\Zmsdb\Process
11{
12    public function writeUpdatedStatus(
13        \BO\Zmsentities\Process $process,
14        $status,
15        \DateTimeInterface $dateTime,
16        $resolveReferences,
17        $userAccount
18    ) {
19        $query = new \BO\Zmsdb\Query\Process(\BO\Zmsdb\Query\Base::UPDATE);
20        $query->addConditionProcessId($process['id']);
21        $query->addConditionAuthKey($process['authKey']);
22
23        $statusList = [
24            'reserved' => 'setStatusReserved',
25            'confirmed' => 'setStatusConfirmed',
26            'preconfirmed' => 'setStatusPreconfirmed',
27            'called' => 'setStatusCalled'
28        ];
29
30        $entity = call_user_func_array(array($this, $statusList[$status]), array($process));
31        $query->addValuesStatusData($entity, $dateTime);
32        $checksum = ($userAccount) ? sha1($process->id . '-' . $userAccount->getId()) : '';
33
34        $this->writeItem($query, 'process', $query::TABLE);
35        $this->perform(\BO\Zmsdb\Query\Process::QUERY_UPDATE_FOLLOWING_PROCESS, [
36            'reserved' => ($process->status == 'reserved') ? 1 : 0,
37            'processID' => $process->getId(),
38        ]);
39        $process = $this->readEntity($process['id'], $process['authKey'], $resolveReferences);
40        $process['status'] = $this->readProcessStatus($process['id'], $process['authKey']);
41
42        Log::writeProcessLog(
43            "UPDATE (ProcessStatus::writeUpdatedStatus) $process $checksum",
44            Log::ACTION_STATUS_CHANGE,
45            $process,
46            $userAccount
47        );
48
49        return $process;
50    }
51
52    /**
53     * get the current process status from given Id and authKey
54     *
55     * @return String
56     */
57    public function readProcessStatus($processId, $authKey)
58    {
59        $processData = $this->getReader()->fetchOne(
60            'SELECT
61            *
62            FROM buerger AS b
63            WHERE
64                b.BuergerID = "' . $processId . '"
65                AND b.absagecode = "' . $authKey . '"
66            LIMIT 1
67            '
68        );
69
70        return $processData['status'];
71
72        $statusList = [
73            'free' => true,
74            'reserved' => $this->isReservedProcess($processData),
75            'confirmed' => $this->isConfirmedProcess($processData),
76            'preconfirmed' => $this->isPreconfirmedProcess($processData),
77            'queued' => $this->isQueuedProcess($processData),
78            'called' => $this->isCalledProcess($processData),
79            'processing' => $this->isProcessingProcess($processData),
80            'pending' => $this->isPendingProcess($processData),
81            'missed' => $this->isMissedProcess($processData),
82            'parked' => $this->isParkedProcess($processData),
83            'blocked' => $this->isBlockedProcess($processData),
84            'deleted' => $this->isDeletedProcess($processData),
85        ];
86        foreach ($statusList as $statusType => $statusCheck) {
87            if ($statusCheck) {
88                $status = $statusType;
89            }
90        }
91        return $status;
92    }
93
94    protected function setStatusPreconfirmed($process)
95    {
96        $process['status'] = $process::STATUS_PRECONFIRMED;
97        return $process;
98    }
99
100    protected function setStatusConfirmed($process)
101    {
102        $process['status'] = $process::STATUS_CONFIRMED;
103        return $process;
104    }
105
106    protected function setStatusCalled($process)
107    {
108        $process['status'] = $process::STATUS_CALLED;
109        return $process;
110    }
111
112    protected function setStatusReserved($process)
113    {
114        $process['status'] = $process::STATUS_RESERVED;
115        return $process;
116    }
117
118    /**
119     * check if it is a blocked appointment
120     *
121     * @return Bool
122     */
123    protected function isBlockedProcess($process)
124    {
125        return ($process['Name'] == 'dereferenced');
126    }
127
128    /**
129     * check if it is a queued appointment
130     *
131     * @return Bool
132     */
133    protected function isQueuedProcess($process)
134    {
135        return ($process['Name'] != 'dereferenced'
136            && $process['vorlaeufigeBuchung'] == 0
137            && $process['StandortID'] != 0
138            && $process['wsm_aufnahmezeit'] != '00:00:00'
139            && $process['aufrufzeit'] != '00:00:00'
140            && empty($process['istFolgeterminvon'])
141            );
142    }
143
144    /**
145     * check if it is a confirmed appointment
146     *
147     * @return Bool
148     */
149    protected function isPreconfirmedProcess($process)
150    {
151        return ($process['Name'] != 'dereferenced'
152            && $process['vorlaeufigeBuchung'] == 0
153            && $process['StandortID'] != 0
154            && $process['bestaetigt'] == 0
155            && empty($process['istFolgeterminvon'])
156        );
157    }
158
159    /**
160     * check if it is a confirmed appointment
161     *
162     * @return Bool
163     */
164    protected function isConfirmedProcess($process)
165    {
166        return ($process['Name'] != 'dereferenced'
167            && $process['vorlaeufigeBuchung'] == 0
168            && $process['bestaetigt'] == 1
169            && $process['StandortID'] != 0
170            && empty($process['istFolgeterminvon'])
171        );
172    }
173
174    /**
175     * check if it is a reserved appointment
176     *
177     * @return Bool
178     */
179    protected function isReservedProcess($process)
180    {
181        return ($process['Name'] != 'dereferenced'
182            && $process['vorlaeufigeBuchung'] == 1
183            && $process['StandortID'] != 0
184            && empty($process['istFolgeterminvon'])
185        );
186    }
187
188    /**
189     * check if it is a called appointment
190     *
191     * @return Bool
192     */
193    protected function isCalledProcess($process)
194    {
195        return ($process['Name'] != 'dereferenced'
196            && $process['vorlaeufigeBuchung'] == 0
197            && $process['StandortID'] != 0
198            && $process['aufrufzeit'] != '00:00:00'
199            && $process['aufruferfolgreich'] == 0
200            && empty($process['istFolgeterminvon'])
201        );
202    }
203
204    /**
205     * check if it is a processing appointment
206     *
207     * @return Bool
208     */
209    protected function isProcessingProcess($process)
210    {
211        return ($process['Name'] != 'dereferenced'
212            && $process['vorlaeufigeBuchung'] == 0
213            && $process['StandortID'] != 0
214            && $process['aufruferfolgreich'] != 0
215            && empty($process['istFolgeterminvon'])
216        );
217    }
218
219    /**
220     * check if it is a processing appointment
221     *
222     * @return Bool
223     */
224    protected function isPendingProcess($process)
225    {
226        return ($process['Name'] != 'dereferenced'
227            && $process['vorlaeufigeBuchung'] == 0
228            && $process['StandortID'] != 0
229            && $process['Abholer'] != 0
230            && $process['AbholortID'] != 0
231            && empty($process['istFolgeterminvon'])
232        );
233    }
234
235    /**
236     * check if it is a missed appointment
237     *
238     * @return Bool
239     */
240    protected function isMissedProcess($process)
241    {
242        return ($process['Name'] != 'dereferenced'
243            && $process['vorlaeufigeBuchung'] == 0
244            && $process['StandortID'] != 0
245            && $process['nicht_erschienen'] != 0
246            && empty($process['istFolgeterminvon'])
247        );
248    }
249
250    /**
251     * check if it is a missed appointment
252     *
253     * @return Bool
254     */
255    protected function isParkedProcess($process)
256    {
257        return ($process['Name'] != 'dereferenced'
258            && $process['vorlaeufigeBuchung'] == 0
259            && $process['StandortID'] != 0
260            && $process['parked'] != 0
261            && empty($process['istFolgeterminvon'])
262        );
263    }
264
265    /**
266     * check if it is a deleted appointment
267     *
268     * @return Bool
269     */
270    protected function isDeletedProcess($process)
271    {
272        return ($process['Name'] == '(abgesagt)'
273            && empty($process['istFolgeterminvon'])
274        );
275    }
276}