Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
79 / 79
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
ExchangeWaitingdepartment
100.00% covered (success)
100.00%
79 / 79
100.00% covered (success)
100.00%
3 / 3
10
100.00% covered (success)
100.00%
1 / 1
 readEntity
100.00% covered (success)
100.00%
44 / 44
100.00% covered (success)
100.00%
1 / 1
4
 readSubjectList
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
2
 readPeriodList
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3namespace BO\Zmsdb;
4
5use BO\Zmsentities\Exchange;
6
7class ExchangeWaitingdepartment extends Base implements Interfaces\ExchangeSubject
8{
9    #[\Override]
10    public function readEntity(
11        $subjectid,
12        \DateTimeInterface $datestart,
13        \DateTimeInterface $dateend,
14        $period = 'day'
15    ) {
16        $department = (new Department())->readEntity($subjectid);
17        $organisation = (new Organisation())->readByDepartmentId($subjectid);
18        $entity = new Exchange();
19        $entity['title'] = "Wartestatistik $organisation->name -> $department->name";
20        $entity->setPeriod($datestart, $dateend, $period);
21        $entity->addDictionaryEntry('subjectid', 'string', 'ID of a department', 'department.id');
22        $entity->addDictionaryEntry('date', 'string', 'date of report entry');
23        $entity->addDictionaryEntry('hour', 'string', 'hour of report entry');
24        $entity->addDictionaryEntry('waitingcount', 'number', 'amount of waiting spontaneous clients');
25        $entity->addDictionaryEntry('waitingtime', 'number', 'real waitingtime for spontaneous clients');
26        $entity->addDictionaryEntry('waytime', 'number', 'real waytime for spontaneous clients');
27        $entity->addDictionaryEntry('waitingcalculated', 'number', 'calculated waitingtime for spontaneous clients');
28        $entity->addDictionaryEntry('waitingcount_termin', 'number', 'amount of waiting clients with termin');
29        $entity->addDictionaryEntry('waitingtime_termin', 'number', 'real waitingtime with termin');
30        $entity->addDictionaryEntry('waytime_termin', 'number', 'real waytime with appointment');
31        $entity->addDictionaryEntry('waitingcalculated_termin', 'number', 'calculated waitingtime with termin');
32        $subjectIdList = explode(',', $subjectid);
33        foreach ($subjectIdList as $subjectid) {
34            $raw = $this
35                ->getReader()
36                ->fetchAll(
37                    constant("\BO\Zmsdb\Query\ExchangeWaitingdepartment::QUERY_READ_" . strtoupper($period)),
38                    [
39                        'departmentid' => $subjectid,
40                        'datestart' => $datestart->format('Y-m-d'),
41                        'dateend' => $dateend->format('Y-m-d'),
42                    ]
43                );
44
45            foreach ($raw as $entry) {
46                foreach (range(0, 23) as $hour) {
47                    $entity->addDataSet([
48                        $subjectid,
49                        $entry['datum'],
50                        $hour,
51                        $entry[sprintf('hour_%02d_waiting_count_spontaneous', $hour)],
52                        $entry[sprintf('hour_%02d_waiting_time_spontaneous', $hour)],
53                        $entry[sprintf('hour_%02d_way_time_spontaneous', $hour)],
54                        $entry[sprintf('hour_%02d_estimated_waiting_time_spontaneous', $hour)],
55                        $entry[sprintf('hour_%02d_waiting_count_appointment', $hour)],
56                        $entry[sprintf('hour_%02d_waiting_time_appointment', $hour)],
57                        $entry[sprintf('hour_%02d_way_time_appointment', $hour)],
58                        $entry[sprintf('hour_%02d_estimated_waiting_time_appointment', $hour)],
59                    ]);
60                }
61            }
62        }
63        return $entity;
64    }
65
66    #[\Override]
67    public function readSubjectList()
68    {
69        $raw = $this->getReader()->fetchAll(Query\ExchangeWaitingdepartment::QUERY_SUBJECTS, []);
70        $entity = new Exchange();
71        $entity['title'] = "Wartestatistik";
72        $entity->setPeriod(new \DateTimeImmutable(), new \DateTimeImmutable());
73        $entity->addDictionaryEntry('subject', 'string', 'Behörde ID', 'department.id');
74        $entity->addDictionaryEntry('periodstart', 'string', 'Datum von');
75        $entity->addDictionaryEntry('periodend', 'string', 'Datum bis');
76        $entity->addDictionaryEntry('organisationname', 'string', 'Name der Organisation');
77        $entity->addDictionaryEntry('description', 'string', 'Name der Behörde');
78        foreach ($raw as $entry) {
79            $entity->addDataSet(array_values($entry));
80        }
81        return $entity;
82    }
83
84    #[\Override]
85    public function readPeriodList($subjectid, $period = 'day')
86    {
87        $department = (new Department())->readEntity($subjectid);
88        $organisation = (new Organisation())->readByDepartmentId($subjectid);
89        $entity = new Exchange();
90        $entity['title'] = "Wartestatistik $organisation->name -> $department->name";
91        $entity->setPeriod(new \DateTimeImmutable(), new \DateTimeImmutable(), $period);
92        $entity->addDictionaryEntry('period');
93
94        $montsList = $this->getReader()->fetchAll(
95            constant("\BO\Zmsdb\Query\ExchangeWaitingdepartment::QUERY_PERIODLIST_MONTH"),
96            [
97                'departmentid' => $subjectid,
98            ]
99        );
100        $raw = [];
101        foreach ($montsList as $month) {
102            $date = new \DateTimeImmutable($month['date']);
103            $raw[$date->format('Y')][] = $month['date'];
104            rsort($raw[$date->format('Y')]);
105        }
106        krsort($raw);
107
108        foreach ($raw as $year => $months) {
109            $entity->addDataSet([$year]);
110            foreach ($months as $month) {
111                $entity->addDataSet([$month]);
112            }
113        }
114        return $entity;
115    }
116}