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