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