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