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            `datum` AS datum,
210            " . self::WAITING_VALUES . "
211        FROM " . self::TABLE . "
212        WHERE
213            `standortid` = :scopeid AND
214            `datum` BETWEEN :datestart AND :dateend
215        GROUP BY `datum`
216        ORDER BY `datum` ASC
217    ";
218
219    //PLEASE REMEMBER THE REALY COOL DYNAMIC VERSION
220    const QUERY_READ_MONTH = "
221        SELECT
222            DATE_FORMAT(`datum`, '%Y-%m') as datum,
223            " . self::WAITING_VALUES . "
224        FROM " . self::TABLE . "
225        WHERE
226            `standortid` = :scopeid AND
227            `datum` BETWEEN :datestart AND :dateend
228        GROUP BY DATE_FORMAT(`datum`, '%Y-%m')
229        ORDER BY DATE_FORMAT(`datum`, '%Y-%m') ASC
230    ";
231
232    const QUERY_READ_QUARTER = "
233        SELECT
234          CONCAT(YEAR(w.`datum`),'-',QUARTER(w.`datum`)) as datum,
235          " . self::WAITING_VALUES . "
236        FROM " . self::TABLE . " w
237        WHERE
238          w.`standortid` = :scopeid AND
239          w.`datum` BETWEEN :datestart AND :dateend
240        GROUP BY CONCAT(YEAR(w.`datum`),'-',QUARTER(w.`datum`))
241        ORDER BY CONCAT(YEAR(w.`datum`),'-',QUARTER(w.`datum`)) ASC
242    ";
243
244    const QUERY_SUBJECTS = '
245        SELECT
246            scope.`StandortID` as subject,
247            periodstart,
248            periodend,
249            CONCAT(scope.`Bezeichnung`, " ", scope.`standortinfozeile`) AS description
250        FROM ' . Scope::TABLE . ' AS scope
251            INNER JOIN
252              (
253          SELECT
254            w.standortid as scopeid,
255            MIN(w.`datum`) AS periodstart,
256            MAX(w.`datum`) AS periodend
257          FROM ' . self::TABLE . ' w
258          group by scopeid
259        )
260            maxAndminDate ON maxAndminDate.`scopeid` = scope.`StandortID`
261        GROUP BY scope.`StandortID`
262        ORDER BY scope.`StandortID` ASC, periodstart DESC
263    ';
264
265    const QUERY_PERIODLIST_DAY = '
266        SELECT
267            `datum`
268        FROM ' . self::TABLE . ' AS w
269        WHERE `standortid` = :scopeid
270        ORDER BY `datum` ASC
271    ';
272
273    const QUERY_PERIODLIST_MONTH = '
274        SELECT DISTINCT DATE_FORMAT(`datum`,"%Y-%m") AS date
275        FROM ' . self::TABLE . ' AS w
276        WHERE `standortid` = :scopeid
277        ORDER BY `datum` ASC
278    ';
279
280    const QUERY_CREATE = '
281        INSERT INTO ' . self::TABLE . ' SET
282            `standortid` = :scopeid,
283            `datum` = :date
284    ';
285
286    /**
287     * For backward compatibility on db table optimization, we have to convert the field name
288     * Drawback: No prepared statement using the date
289     */
290    public static function getQuerySelectByDateTime(\DateTimeInterface $date, bool $withAppointment = false)
291    {
292        $suffix = $withAppointment ? 'termin' : 'spontan';
293
294        $query = sprintf(
295            "SELECT
296                `zeit_ab_%s_%s` AS waitingcalculated,
297                `wartende_ab_%s_%s` AS waitingcount,
298                `echte_zeit_ab_%s_%s` AS waitingtime,
299                `wegezeit_ab_%s_%s` AS waytime
300             FROM %s
301             WHERE `standortid` = :scopeid
302                AND `datum` = :date
303                AND :hour IS NOT NULL
304            ",
305            $date->format('H'),
306            $suffix,
307            $date->format('H'),
308            $suffix,
309            $date->format('H'),
310            $suffix,
311            $date->format('H'),
312            $suffix,
313            self::TABLE
314        );
315        return $query;
316    }
317
318    /**
319     * For backward compatibility on db table optimization, we have to convert the field name
320     * Drawback: No prepared statement using the date
321     */
322    public static function getQueryUpdateByDateTime(\DateTimeInterface $date, bool $withAppointment = false)
323    {
324        $suffix = $withAppointment ? 'termin' : 'spontan';
325
326        $query = sprintf(
327            "UPDATE %s
328             SET
329                `zeit_ab_%s_%s`= :waitingcalculated,
330                `wartende_ab_%s_%s` = :waitingcount,
331                `echte_zeit_ab_%s_%s` = :waitingtime,
332                `wegezeit_ab_%s_%s` = :waytime
333             WHERE `standortid` = :scopeid
334                AND `datum` = :date
335                AND :hour IS NOT NULL
336            ",
337            self::TABLE,
338            $date->format('H'),
339            $suffix,
340            $date->format('H'),
341            $suffix,
342            $date->format('H'),
343            $suffix,
344            $date->format('H'),
345            $suffix
346        );
347        return $query;
348    }
349}