Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
30 / 30
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ExchangeWaitingscope
100.00% covered (success)
100.00%
30 / 30
100.00% covered (success)
100.00%
2 / 2
4
100.00% covered (success)
100.00%
1 / 1
 getQuerySelectByDateTime
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
2
 getQueryUpdateByDateTime
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace BO\Zmsdb\Query;
4
5class ExchangeWaitingscope extends Base
6{
7    /**
8     * @var String TABLE mysql table reference
9     */
10    const TABLE = 'wartenrstatistik';
11
12    const WAITING_VALUES = "
13        AVG(echte_zeit_ab_00_spontan) as echte_zeit_ab_00_spontan,
14        AVG(echte_zeit_ab_01_spontan) as echte_zeit_ab_01_spontan,
15        AVG(echte_zeit_ab_02_spontan) as echte_zeit_ab_02_spontan,
16        AVG(echte_zeit_ab_03_spontan) as echte_zeit_ab_03_spontan,
17        AVG(echte_zeit_ab_04_spontan) as echte_zeit_ab_04_spontan,
18        AVG(echte_zeit_ab_05_spontan) as echte_zeit_ab_05_spontan,
19        AVG(echte_zeit_ab_06_spontan) as echte_zeit_ab_06_spontan,
20        AVG(echte_zeit_ab_07_spontan) as echte_zeit_ab_07_spontan,
21        AVG(echte_zeit_ab_08_spontan) as echte_zeit_ab_08_spontan,
22        AVG(echte_zeit_ab_09_spontan) as echte_zeit_ab_09_spontan,
23        AVG(echte_zeit_ab_10_spontan) as echte_zeit_ab_10_spontan,
24        AVG(echte_zeit_ab_11_spontan) as echte_zeit_ab_11_spontan,
25        AVG(echte_zeit_ab_12_spontan) as echte_zeit_ab_12_spontan,
26        AVG(echte_zeit_ab_13_spontan) as echte_zeit_ab_13_spontan,
27        AVG(echte_zeit_ab_14_spontan) as echte_zeit_ab_14_spontan,
28        AVG(echte_zeit_ab_15_spontan) as echte_zeit_ab_15_spontan,
29        AVG(echte_zeit_ab_16_spontan) as echte_zeit_ab_16_spontan,
30        AVG(echte_zeit_ab_17_spontan) as echte_zeit_ab_17_spontan,
31        AVG(echte_zeit_ab_18_spontan) as echte_zeit_ab_18_spontan,
32        AVG(echte_zeit_ab_19_spontan) as echte_zeit_ab_19_spontan,
33        AVG(echte_zeit_ab_20_spontan) as echte_zeit_ab_20_spontan,
34        AVG(echte_zeit_ab_21_spontan) as echte_zeit_ab_21_spontan,
35        AVG(echte_zeit_ab_22_spontan) as echte_zeit_ab_22_spontan,
36        AVG(echte_zeit_ab_23_spontan) as echte_zeit_ab_23_spontan,
37        AVG(zeit_ab_00_spontan) as zeit_ab_00_spontan,
38        AVG(zeit_ab_01_spontan) as zeit_ab_01_spontan,
39        AVG(zeit_ab_02_spontan) as zeit_ab_02_spontan,
40        AVG(zeit_ab_03_spontan) as zeit_ab_03_spontan,
41        AVG(zeit_ab_04_spontan) as zeit_ab_04_spontan,
42        AVG(zeit_ab_05_spontan) as zeit_ab_05_spontan,
43        AVG(zeit_ab_06_spontan) as zeit_ab_06_spontan,
44        AVG(zeit_ab_07_spontan) as zeit_ab_07_spontan,
45        AVG(zeit_ab_08_spontan) as zeit_ab_08_spontan,
46        AVG(zeit_ab_09_spontan) as zeit_ab_09_spontan,
47        AVG(zeit_ab_10_spontan) as zeit_ab_10_spontan,
48        AVG(zeit_ab_11_spontan) as zeit_ab_11_spontan,
49        AVG(zeit_ab_12_spontan) as zeit_ab_12_spontan,
50        AVG(zeit_ab_13_spontan) as zeit_ab_13_spontan,
51        AVG(zeit_ab_14_spontan) as zeit_ab_14_spontan,
52        AVG(zeit_ab_15_spontan) as zeit_ab_15_spontan,
53        AVG(zeit_ab_16_spontan) as zeit_ab_16_spontan,
54        AVG(zeit_ab_17_spontan) as zeit_ab_17_spontan,
55        AVG(zeit_ab_18_spontan) as zeit_ab_18_spontan,
56        AVG(zeit_ab_19_spontan) as zeit_ab_19_spontan,
57        AVG(zeit_ab_20_spontan) as zeit_ab_20_spontan,
58        AVG(zeit_ab_21_spontan) as zeit_ab_21_spontan,
59        AVG(zeit_ab_22_spontan) as zeit_ab_22_spontan,
60        AVG(zeit_ab_23_spontan) as zeit_ab_23_spontan,
61        AVG(wegezeit_ab_00_spontan) as wegezeit_ab_00_spontan,
62        AVG(wegezeit_ab_01_spontan) as wegezeit_ab_01_spontan,
63        AVG(wegezeit_ab_02_spontan) as wegezeit_ab_02_spontan,
64        AVG(wegezeit_ab_03_spontan) as wegezeit_ab_03_spontan,
65        AVG(wegezeit_ab_04_spontan) as wegezeit_ab_04_spontan,
66        AVG(wegezeit_ab_05_spontan) as wegezeit_ab_05_spontan,
67        AVG(wegezeit_ab_06_spontan) as wegezeit_ab_06_spontan,
68        AVG(wegezeit_ab_07_spontan) as wegezeit_ab_07_spontan,
69        AVG(wegezeit_ab_08_spontan) as wegezeit_ab_08_spontan,
70        AVG(wegezeit_ab_09_spontan) as wegezeit_ab_09_spontan,
71        AVG(wegezeit_ab_10_spontan) as wegezeit_ab_10_spontan,
72        AVG(wegezeit_ab_11_spontan) as wegezeit_ab_11_spontan,
73        AVG(wegezeit_ab_12_spontan) as wegezeit_ab_12_spontan,
74        AVG(wegezeit_ab_13_spontan) as wegezeit_ab_13_spontan,
75        AVG(wegezeit_ab_14_spontan) as wegezeit_ab_14_spontan,
76        AVG(wegezeit_ab_15_spontan) as wegezeit_ab_15_spontan,
77        AVG(wegezeit_ab_16_spontan) as wegezeit_ab_16_spontan,
78        AVG(wegezeit_ab_17_spontan) as wegezeit_ab_17_spontan,
79        AVG(wegezeit_ab_18_spontan) as wegezeit_ab_18_spontan,
80        AVG(wegezeit_ab_19_spontan) as wegezeit_ab_19_spontan,
81        AVG(wegezeit_ab_20_spontan) as wegezeit_ab_20_spontan,
82        AVG(wegezeit_ab_21_spontan) as wegezeit_ab_21_spontan,
83        AVG(wegezeit_ab_22_spontan) as wegezeit_ab_22_spontan,
84        AVG(wegezeit_ab_23_spontan) as wegezeit_ab_23_spontan,
85        MAX(wartende_ab_00_spontan) as wartende_ab_00_spontan,
86        MAX(wartende_ab_01_spontan) as wartende_ab_01_spontan,
87        MAX(wartende_ab_02_spontan) as wartende_ab_02_spontan,
88        MAX(wartende_ab_03_spontan) as wartende_ab_03_spontan,
89        MAX(wartende_ab_04_spontan) as wartende_ab_04_spontan,
90        MAX(wartende_ab_05_spontan) as wartende_ab_05_spontan,
91        MAX(wartende_ab_06_spontan) as wartende_ab_06_spontan,
92        MAX(wartende_ab_07_spontan) as wartende_ab_07_spontan,
93        MAX(wartende_ab_08_spontan) as wartende_ab_08_spontan,
94        MAX(wartende_ab_09_spontan) as wartende_ab_09_spontan,
95        MAX(wartende_ab_10_spontan) as wartende_ab_10_spontan,
96        MAX(wartende_ab_11_spontan) as wartende_ab_11_spontan,
97        MAX(wartende_ab_12_spontan) as wartende_ab_12_spontan,
98        MAX(wartende_ab_13_spontan) as wartende_ab_13_spontan,
99        MAX(wartende_ab_14_spontan) as wartende_ab_14_spontan,
100        MAX(wartende_ab_15_spontan) as wartende_ab_15_spontan,
101        MAX(wartende_ab_16_spontan) as wartende_ab_16_spontan,
102        MAX(wartende_ab_17_spontan) as wartende_ab_17_spontan,
103        MAX(wartende_ab_18_spontan) as wartende_ab_18_spontan,
104        MAX(wartende_ab_19_spontan) as wartende_ab_19_spontan,
105        MAX(wartende_ab_20_spontan) as wartende_ab_20_spontan,
106        MAX(wartende_ab_21_spontan) as wartende_ab_21_spontan,
107        MAX(wartende_ab_22_spontan) as wartende_ab_22_spontan,
108        MAX(wartende_ab_23_spontan) as wartende_ab_23_spontan,
109        AVG(echte_zeit_ab_00_termin) as echte_zeit_ab_00_termin,
110        AVG(echte_zeit_ab_01_termin) as echte_zeit_ab_01_termin,
111        AVG(echte_zeit_ab_02_termin) as echte_zeit_ab_02_termin,
112        AVG(echte_zeit_ab_03_termin) as echte_zeit_ab_03_termin,
113        AVG(echte_zeit_ab_04_termin) as echte_zeit_ab_04_termin,
114        AVG(echte_zeit_ab_05_termin) as echte_zeit_ab_05_termin,
115        AVG(echte_zeit_ab_06_termin) as echte_zeit_ab_06_termin,
116        AVG(echte_zeit_ab_07_termin) as echte_zeit_ab_07_termin,
117        AVG(echte_zeit_ab_08_termin) as echte_zeit_ab_08_termin,
118        AVG(echte_zeit_ab_09_termin) as echte_zeit_ab_09_termin,
119        AVG(echte_zeit_ab_10_termin) as echte_zeit_ab_10_termin,
120        AVG(echte_zeit_ab_11_termin) as echte_zeit_ab_11_termin,
121        AVG(echte_zeit_ab_12_termin) as echte_zeit_ab_12_termin,
122        AVG(echte_zeit_ab_13_termin) as echte_zeit_ab_13_termin,
123        AVG(echte_zeit_ab_14_termin) as echte_zeit_ab_14_termin,
124        AVG(echte_zeit_ab_15_termin) as echte_zeit_ab_15_termin,
125        AVG(echte_zeit_ab_16_termin) as echte_zeit_ab_16_termin,
126        AVG(echte_zeit_ab_17_termin) as echte_zeit_ab_17_termin,
127        AVG(echte_zeit_ab_18_termin) as echte_zeit_ab_18_termin,
128        AVG(echte_zeit_ab_19_termin) as echte_zeit_ab_19_termin,
129        AVG(echte_zeit_ab_20_termin) as echte_zeit_ab_20_termin,
130        AVG(echte_zeit_ab_21_termin) as echte_zeit_ab_21_termin,
131        AVG(echte_zeit_ab_22_termin) as echte_zeit_ab_22_termin,
132        AVG(echte_zeit_ab_23_termin) as echte_zeit_ab_23_termin,
133        AVG(zeit_ab_00_termin) as zeit_ab_00_termin,
134        AVG(zeit_ab_01_termin) as zeit_ab_01_termin,
135        AVG(zeit_ab_02_termin) as zeit_ab_02_termin,
136        AVG(zeit_ab_03_termin) as zeit_ab_03_termin,
137        AVG(zeit_ab_04_termin) as zeit_ab_04_termin,
138        AVG(zeit_ab_05_termin) as zeit_ab_05_termin,
139        AVG(zeit_ab_06_termin) as zeit_ab_06_termin,
140        AVG(zeit_ab_07_termin) as zeit_ab_07_termin,
141        AVG(zeit_ab_08_termin) as zeit_ab_08_termin,
142        AVG(zeit_ab_09_termin) as zeit_ab_09_termin,
143        AVG(zeit_ab_10_termin) as zeit_ab_10_termin,
144        AVG(zeit_ab_11_termin) as zeit_ab_11_termin,
145        AVG(zeit_ab_12_termin) as zeit_ab_12_termin,
146        AVG(zeit_ab_13_termin) as zeit_ab_13_termin,
147        AVG(zeit_ab_14_termin) as zeit_ab_14_termin,
148        AVG(zeit_ab_15_termin) as zeit_ab_15_termin,
149        AVG(zeit_ab_16_termin) as zeit_ab_16_termin,
150        AVG(zeit_ab_17_termin) as zeit_ab_17_termin,
151        AVG(zeit_ab_18_termin) as zeit_ab_18_termin,
152        AVG(zeit_ab_19_termin) as zeit_ab_19_termin,
153        AVG(zeit_ab_20_termin) as zeit_ab_20_termin,
154        AVG(zeit_ab_21_termin) as zeit_ab_21_termin,
155        AVG(zeit_ab_22_termin) as zeit_ab_22_termin,
156        AVG(zeit_ab_23_termin) as zeit_ab_23_termin,
157        AVG(wegezeit_ab_00_termin) as wegezeit_ab_00_termin,
158        AVG(wegezeit_ab_01_termin) as wegezeit_ab_01_termin,
159        AVG(wegezeit_ab_02_termin) as wegezeit_ab_02_termin,
160        AVG(wegezeit_ab_03_termin) as wegezeit_ab_03_termin,
161        AVG(wegezeit_ab_04_termin) as wegezeit_ab_04_termin,
162        AVG(wegezeit_ab_05_termin) as wegezeit_ab_05_termin,
163        AVG(wegezeit_ab_06_termin) as wegezeit_ab_06_termin,
164        AVG(wegezeit_ab_07_termin) as wegezeit_ab_07_termin,
165        AVG(wegezeit_ab_08_termin) as wegezeit_ab_08_termin,
166        AVG(wegezeit_ab_09_termin) as wegezeit_ab_09_termin,
167        AVG(wegezeit_ab_10_termin) as wegezeit_ab_10_termin,
168        AVG(wegezeit_ab_11_termin) as wegezeit_ab_11_termin,
169        AVG(wegezeit_ab_12_termin) as wegezeit_ab_12_termin,
170        AVG(wegezeit_ab_13_termin) as wegezeit_ab_13_termin,
171        AVG(wegezeit_ab_14_termin) as wegezeit_ab_14_termin,
172        AVG(wegezeit_ab_15_termin) as wegezeit_ab_15_termin,
173        AVG(wegezeit_ab_16_termin) as wegezeit_ab_16_termin,
174        AVG(wegezeit_ab_17_termin) as wegezeit_ab_17_termin,
175        AVG(wegezeit_ab_18_termin) as wegezeit_ab_18_termin,
176        AVG(wegezeit_ab_19_termin) as wegezeit_ab_19_termin,
177        AVG(wegezeit_ab_20_termin) as wegezeit_ab_20_termin,
178        AVG(wegezeit_ab_21_termin) as wegezeit_ab_21_termin,
179        AVG(wegezeit_ab_22_termin) as wegezeit_ab_22_termin,
180        AVG(wegezeit_ab_23_termin) as wegezeit_ab_23_termin,
181        MAX(wartende_ab_00_termin) as wartende_ab_00_termin,
182        MAX(wartende_ab_01_termin) as wartende_ab_01_termin,
183        MAX(wartende_ab_02_termin) as wartende_ab_02_termin,
184        MAX(wartende_ab_03_termin) as wartende_ab_03_termin,
185        MAX(wartende_ab_04_termin) as wartende_ab_04_termin,
186        MAX(wartende_ab_05_termin) as wartende_ab_05_termin,
187        MAX(wartende_ab_06_termin) as wartende_ab_06_termin,
188        MAX(wartende_ab_07_termin) as wartende_ab_07_termin,
189        MAX(wartende_ab_08_termin) as wartende_ab_08_termin,
190        MAX(wartende_ab_09_termin) as wartende_ab_09_termin,
191        MAX(wartende_ab_10_termin) as wartende_ab_10_termin,
192        MAX(wartende_ab_11_termin) as wartende_ab_11_termin,
193        MAX(wartende_ab_12_termin) as wartende_ab_12_termin,
194        MAX(wartende_ab_13_termin) as wartende_ab_13_termin,
195        MAX(wartende_ab_14_termin) as wartende_ab_14_termin,
196        MAX(wartende_ab_15_termin) as wartende_ab_15_termin,
197        MAX(wartende_ab_16_termin) as wartende_ab_16_termin,
198        MAX(wartende_ab_17_termin) as wartende_ab_17_termin,
199        MAX(wartende_ab_18_termin) as wartende_ab_18_termin,
200        MAX(wartende_ab_19_termin) as wartende_ab_19_termin,
201        MAX(wartende_ab_20_termin) as wartende_ab_20_termin,
202        MAX(wartende_ab_21_termin) as wartende_ab_21_termin,
203        MAX(wartende_ab_22_termin) as wartende_ab_22_termin,
204        MAX(wartende_ab_23_termin) as wartende_ab_23_termin
205    ";
206
207    const QUERY_READ_DAY = "
208        SELECT
209            standortid,
210            `datum` AS datum,
211            " . self::WAITING_VALUES . "
212        FROM " . self::TABLE . "
213        WHERE
214            `standortid` IN (:scopeid) AND
215            `datum` BETWEEN :datestart AND :dateend
216        GROUP BY `datum`
217        ORDER BY `datum` ASC
218    ";
219
220    //PLEASE REMEMBER THE REALY COOL DYNAMIC VERSION
221    const QUERY_READ_MONTH = "
222        SELECT
223            standortid,
224            DATE_FORMAT(`datum`, '%Y-%m') as datum,
225            " . self::WAITING_VALUES . "
226        FROM " . self::TABLE . "
227        WHERE
228            `standortid` = :scopeid AND
229            `datum` BETWEEN :datestart AND :dateend
230        GROUP BY DATE_FORMAT(`datum`, '%Y-%m')
231        ORDER BY DATE_FORMAT(`datum`, '%Y-%m') ASC
232    ";
233
234    const QUERY_READ_QUARTER = "
235        SELECT
236            standortid,
237            CONCAT(YEAR(w.`datum`),'-',QUARTER(w.`datum`)) as datum,
238            " . self::WAITING_VALUES . "
239        FROM " . self::TABLE . " w
240        WHERE
241            w.`standortid` = :scopeid AND
242            w.`datum` BETWEEN :datestart AND :dateend
243        GROUP BY CONCAT(YEAR(w.`datum`),'-',QUARTER(w.`datum`))
244        ORDER BY CONCAT(YEAR(w.`datum`),'-',QUARTER(w.`datum`)) ASC
245    ";
246
247    const QUERY_SUBJECTS = '
248        SELECT
249            scope.`StandortID` as subject,
250            periodstart,
251            periodend,
252            CONCAT(scope.`Bezeichnung`, " ", scope.`standortinfozeile`) AS description
253        FROM ' . Scope::TABLE . ' AS scope
254            INNER JOIN
255              (
256          SELECT
257            w.standortid as scopeid,
258            MIN(w.`datum`) AS periodstart,
259            MAX(w.`datum`) AS periodend
260          FROM ' . self::TABLE . ' w
261          group by scopeid
262        )
263            maxAndminDate ON maxAndminDate.`scopeid` = scope.`StandortID`
264        GROUP BY scope.`StandortID`
265        ORDER BY scope.`StandortID` ASC, periodstart DESC
266    ';
267
268    const QUERY_PERIODLIST_DAY = '
269        SELECT
270            `datum`
271        FROM ' . self::TABLE . ' AS w
272        WHERE `standortid` = :scopeid
273        ORDER BY `datum` ASC
274    ';
275
276    const QUERY_PERIODLIST_MONTH = '
277        SELECT DISTINCT DATE_FORMAT(`datum`,"%Y-%m") AS date
278        FROM ' . self::TABLE . ' AS w
279        WHERE `standortid` = :scopeid
280        ORDER BY `datum` ASC
281    ';
282
283    const QUERY_CREATE = '
284        INSERT INTO ' . self::TABLE . ' SET
285            `standortid` = :scopeid,
286            `datum` = :date
287    ';
288
289    /**
290     * For backward compatibility on db table optimization, we have to convert the field name
291     * Drawback: No prepared statement using the date
292     */
293    public static function getQuerySelectByDateTime(\DateTimeInterface $date, bool $withAppointment = false)
294    {
295        $suffix = $withAppointment ? 'termin' : 'spontan';
296
297        $query = sprintf(
298            "SELECT
299                `zeit_ab_%s_%s` AS waitingcalculated,
300                `wartende_ab_%s_%s` AS waitingcount,
301                `echte_zeit_ab_%s_%s` AS waitingtime,
302                `wegezeit_ab_%s_%s` AS waytime
303             FROM %s
304             WHERE `standortid` = :scopeid
305                AND `datum` = :date
306                AND :hour IS NOT NULL
307            ",
308            $date->format('H'),
309            $suffix,
310            $date->format('H'),
311            $suffix,
312            $date->format('H'),
313            $suffix,
314            $date->format('H'),
315            $suffix,
316            self::TABLE
317        );
318        return $query;
319    }
320
321    /**
322     * For backward compatibility on db table optimization, we have to convert the field name
323     * Drawback: No prepared statement using the date
324     */
325    public static function getQueryUpdateByDateTime(\DateTimeInterface $date, bool $withAppointment = false)
326    {
327        $suffix = $withAppointment ? 'termin' : 'spontan';
328
329        $query = sprintf(
330            "UPDATE %s
331             SET
332                `zeit_ab_%s_%s`= :waitingcalculated,
333                `wartende_ab_%s_%s` = :waitingcount,
334                `echte_zeit_ab_%s_%s` = :waitingtime,
335                `wegezeit_ab_%s_%s` = :waytime
336             WHERE `standortid` = :scopeid
337                AND `datum` = :date
338                AND :hour IS NOT NULL
339            ",
340            self::TABLE,
341            $date->format('H'),
342            $suffix,
343            $date->format('H'),
344            $suffix,
345            $date->format('H'),
346            $suffix,
347            $date->format('H'),
348            $suffix
349        );
350        return $query;
351    }
352}