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