Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
64 / 64
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
Queue
100.00% covered (success)
100.00%
64 / 64
100.00% covered (success)
100.00%
4 / 4
9
100.00% covered (success)
100.00%
1 / 1
 getEntityMapping
100.00% covered (success)
100.00%
33 / 33
100.00% covered (success)
100.00%
1 / 1
1
 addConditionAssigned
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 postProcess
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
6
 addRequiredJoins
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace BO\Zmsdb\Query;
4
5/**
6*
7* @SuppressWarnings(Methods)
8* @SuppressWarnings(Complexity)
9 */
10class Queue extends Process implements MappingInterface
11{
12    const ALIAS = 'process';
13
14    #[\Override]
15    public function getEntityMapping()
16    {
17        $status_expression = self::expression(
18            'CASE
19                WHEN process.Name = "(abgesagt)"
20                    THEN "deleted"
21                WHEN process.Name = "dereferenced" AND process.StandortID = 0
22                    THEN "blocked"
23                WHEN process.vorlaeufigeBuchung = 1 AND process.bestaetigt = 0 
24                    THEN "reserved"
25                WHEN process.nicht_erschienen != 0
26                    THEN "missed"
27                WHEN process.Abholer != 0 AND process.AbholortID != 0 AND process.NutzerID = 0
28                    THEN "pending"
29                WHEN process.AbholortID = 0 AND process.aufruferfolgreich != 0 AND process.NutzerID != 0
30                    THEN "processing"
31                WHEN process.aufrufzeit != "00:00:00" AND process.NutzerID != 0 AND process.AbholortID = 0
32                    THEN "called"
33                WHEN process.wsm_aufnahmezeit != "00:00:00"
34                    THEN "queued"
35                WHEN process.vorlaeufigeBuchung = 0 AND process.bestaetigt = 0  AND IPTimeStamp
36                    THEN "preconfirmed"
37                WHEN process.vorlaeufigeBuchung = 0 AND process.bestaetigt = 1 AND IPTimeStamp
38                    THEN "confirmed"
39                ELSE "free"
40            END'
41        );
42        return [
43            //'id' => 'process.BuergerID',
44            'status' => $status_expression,
45            'arrivalTime' => self::expression(
46                'CONCAT(
47                    `process`.`Datum`,
48                    " ",
49                    IF(`process`.`Uhrzeit`, `process`.`Uhrzeit`, `process`.`wsm_aufnahmezeit`)
50                )'
51            ),
52            'callCount' => 'process.AnzahlAufrufe',
53            'priority' => 'process.priority',
54            'callTime' => self::expression(
55                'CONCAT(
56                    `process`.`Datum`,
57                    " ",
58                    `process`.`aufrufzeit`
59                )'
60            ),
61            'lastCallTime' => self::expression(
62                'CONCAT(
63                    `process`.`Datum`,
64                    " ",
65                    `process`.`Timestamp`
66                )'
67            ),
68            'number' => self::expression(
69                'IF(`process`.`wartenummer`,
70                    `process`.`wartenummer`,
71                    `process`.`BuergerID`
72)'
73            ),
74            'destination' => 'processuser.Arbeitsplatznr',
75            'destinationHint' => 'processuser.aufrufzusatz',
76            'waitingTime' => 'process.waiting_time',
77            'wayTime' => 'process.way_time',
78            'withAppointment' => self::expression(
79                'IF(`process`.`wartenummer`,
80                    "0",
81                    "1"
82                )'
83            ),
84        ];
85    }
86
87    #[\Override]
88    public function addConditionAssigned()
89    {
90        $this->query->where(function (\BO\Zmsdb\Query\Builder\ConditionBuilder $query) {
91            $query->andWith(self::expression('process.istFolgeterminvon IS NULL OR process.istFolgeterminvon'), '=', 0);
92        });
93        return $this;
94    }
95
96
97    #[\Override]
98    public function postProcess($data)
99    {
100        if (false === strpos($data[$this->getPrefixed("callTime")], '00:00:00')) {
101            $data[$this->getPrefixed("callTime")] = strtotime($data[$this->getPrefixed("callTime")]);
102        } else {
103            $data[$this->getPrefixed("callTime")] = 0;
104        }
105        if (false === strpos($data[$this->getPrefixed("lastCallTime")], '00:00:00')) {
106            $data[$this->getPrefixed("lastCallTime")] = strtotime($data[$this->getPrefixed("lastCallTime")]);
107        } else {
108            $data[$this->getPrefixed("lastCallTime")] = 0;
109        }
110        if (!$data[$this->getPrefixed("waitingTime")]) {
111            $data[$this->getPrefixed("waitingTime")] = 0;
112        };
113        if (!$data[$this->getPrefixed("wayTime")]) {
114            $data[$this->getPrefixed("wayTime")] = 0;
115        };
116        $data[$this->getPrefixed("arrivalTime")] =
117            strtotime($data[$this->getPrefixed("arrivalTime")]);
118        $data[$this->getPrefixed("withAppointment")] =
119            ($data[$this->getPrefixed("withAppointment")])  ? true : false;
120        return $data;
121    }
122
123    #[\Override]
124    protected function addRequiredJoins()
125    {
126        $this->leftJoin(
127            new Alias(Useraccount::TABLE, 'processuser'),
128            'process.NutzerID',
129            '=',
130            'processuser.NutzerID'
131        );
132        $this->leftJoin(
133            new Alias(Scope::TABLE, 'processscope'),
134            'process.StandortID',
135            '=',
136            'processscope.StandortID'
137        );
138    }
139}