Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
62 / 62 |
|
100.00% |
5 / 5 |
CRAP | |
100.00% |
1 / 1 |
WaitingReport | |
100.00% |
62 / 62 |
|
100.00% |
5 / 5 |
18 | |
100.00% |
1 / 1 |
readResponse | |
100.00% |
8 / 8 |
|
100.00% |
1 / 1 |
3 | |||
writeWaitingReport | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
2 | |||
writeHeader | |
100.00% |
9 / 9 |
|
100.00% |
1 / 1 |
3 | |||
writeTotals | |
100.00% |
24 / 24 |
|
100.00% |
1 / 1 |
3 | |||
writeReportPart | |
100.00% |
15 / 15 |
|
100.00% |
1 / 1 |
7 |
1 | <?php |
2 | |
3 | /** |
4 | * @package zmsstatistic |
5 | * @copyright BerlinOnline Stadtportal GmbH & Co. KG |
6 | **/ |
7 | |
8 | namespace BO\Zmsstatistic\Download; |
9 | |
10 | use BO\Zmsentities\Exchange as ReportEntity; |
11 | use BO\Zmsstatistic\Helper\Download; |
12 | use PhpOffice\PhpSpreadsheet\Spreadsheet; |
13 | use Psr\Http\Message\RequestInterface; |
14 | use Psr\Http\Message\ResponseInterface; |
15 | |
16 | class WaitingReport extends Base |
17 | { |
18 | protected $reportParts = [ |
19 | 'waitingcount' => 'Wartende Spontankunden', |
20 | 'waitingtime' => 'gemessene Wartezeit Spontankunden', |
21 | 'waitingcount_termin' => 'Wartende Terminkunden', |
22 | 'waitingtime_termin' => 'gemessene Wartezeit Terminkunden', |
23 | 'waytime' => 'gemessene Wegezeit Spontankunden', |
24 | 'waytime_termin' => 'gemessene Wegezeit Terminkunden', |
25 | ]; |
26 | |
27 | /** |
28 | * @SuppressWarnings(Param) |
29 | * @return ResponseInterface |
30 | */ |
31 | public function readResponse( |
32 | RequestInterface $request, |
33 | ResponseInterface $response, |
34 | array $args |
35 | ) { |
36 | $title = 'waitingstatistic_' . $args['period']; |
37 | $download = (new Download($request))->setSpreadSheet($title); |
38 | |
39 | $this->writeInfoHeader($args, $download->getSpreadSheet()); |
40 | foreach ($args['reports'] as $report) { |
41 | if ('month' == $report->period) { |
42 | $this->writeWaitingReport($report, $download->getSpreadSheet(), 'yyyy', 'MMMM'); |
43 | } else { |
44 | $this->writeWaitingReport($report, $download->getSpreadSheet()); |
45 | } |
46 | } |
47 | |
48 | return $download->writeDownload($response); |
49 | } |
50 | |
51 | public function writeWaitingReport( |
52 | ReportEntity $report, |
53 | Spreadsheet $spreadsheet, |
54 | $datePatternCol1 = 'MMMM', |
55 | $datePatternCol2 = 'dd (ccc)' |
56 | ) { |
57 | $sheet = $spreadsheet->getActiveSheet(); |
58 | $this->writeHeader($report, $sheet, $datePatternCol1, $datePatternCol2); |
59 | $this->writeTotals($report, $sheet); |
60 | foreach ($this->reportParts as $partName => $headline) { |
61 | $this->writeReportPart($report, $sheet, $partName, $headline); |
62 | } |
63 | |
64 | return $spreadsheet; |
65 | } |
66 | |
67 | public function writeHeader(ReportEntity $report, $sheet, $datePatternCol1, $datePatternCol2) |
68 | { |
69 | $dateString = $report->firstDay->year . '-' . $report->firstDay->month . '-' . $report->firstDay->day; |
70 | $reportHeader = []; |
71 | $reportHeader[] = null; |
72 | $reportHeader[] = $this->getFormatedDates($this->setDateTime($dateString), $datePatternCol1); |
73 | foreach (array_keys($report->data) as $date) { |
74 | if (! in_array($date, static::$ignoreColumns)) { |
75 | $date = $this->getFormatedDates($this->setDateTime($date), $datePatternCol2); |
76 | $reportHeader[] = $date; |
77 | } |
78 | } |
79 | $sheet->fromArray($reportHeader, null, 'A' . ($sheet->getHighestRow() + 2)); |
80 | } |
81 | |
82 | public function writeTotals(ReportEntity $report, $sheet) |
83 | { |
84 | $entity = clone $report; |
85 | $totals = array_pop($entity->data); |
86 | $reportTotal['max'][] = 'Tagesmaximum Spontankunden der gemessenen Zeit'; |
87 | $reportTotal['average'][] = 'Tagesdurchschnitt Spontankunden der gemessenen Zeit'; |
88 | $reportTotal['average_waytime'][] = 'Tagesdurchschnitt Wegezeit Spontankunden'; |
89 | $reportTotal['max'][] = $totals['max_waitingtime']; |
90 | $reportTotal['average'][] = $totals['average_waitingtime']; |
91 | $reportTotal['average_waytime'][] = $totals['average_waytime']; |
92 | foreach ($entity->data as $entry) { |
93 | $reportTotal['max'][] = $entry['max_waitingtime']; |
94 | $reportTotal['average'][] = $entry['average_waitingtime']; |
95 | $reportTotal['average_waytime'][] = $entry['average_waytime']; |
96 | } |
97 | $sheet->fromArray($reportTotal, null, 'A' . ($sheet->getHighestRow() + 1)); |
98 | |
99 | $reportTotal2['max'][] = 'Tagesmaximum Terminkunden der gemessenen Zeit'; |
100 | $reportTotal2['average'][] = 'Tagesdurchschnitt Terminkunden der gemessenen Zeit'; |
101 | $reportTotal2['average_waytime'][] = 'Tagesdurchschnitt Wegezeit Terminkunden'; |
102 | $reportTotal2['max'][] = $totals['max_waitingtime_termin']; |
103 | $reportTotal2['average'][] = $totals['average_waitingtime_termin']; |
104 | $reportTotal2['average_waytime'][] = $totals['average_waytime_termin']; |
105 | foreach ($entity->data as $entry) { |
106 | $reportTotal2['max'][] = $entry['max_waitingtime_termin']; |
107 | $reportTotal2['average'][] = $entry['average_waitingtime_termin']; |
108 | $reportTotal2['average_waytime'][] = $entry['average_waytime_termin']; |
109 | } |
110 | $sheet->fromArray($reportTotal2, null, 'A' . ($sheet->getHighestRow() + 1)); |
111 | } |
112 | |
113 | public function writeReportPart(ReportEntity $report, $sheet, $rangeName, $headline) |
114 | { |
115 | $entity = clone $report; |
116 | $totals = $entity->data['max']; |
117 | unset($entity->data['max']); |
118 | $reportData['headline'] = ['Zeitabschnitte',$headline]; |
119 | foreach ($entity->data as $entry) { |
120 | foreach ($entry as $hour => $item) { |
121 | if (5 < $hour && 22 > $hour) { |
122 | if (! isset($reportData[$hour])) { |
123 | $reportData[$hour] = []; |
124 | } |
125 | $range = $hour . '-' . ($hour + 1) . ' Uhr'; |
126 | if (! in_array($range, $reportData[$hour])) { |
127 | $reportData[$hour][] = $range; |
128 | $reportData[$hour][] = $totals[$hour][$rangeName]; |
129 | } |
130 | $reportData[$hour][] = $item[$rangeName] ?? '-'; |
131 | } |
132 | } |
133 | } |
134 | $sheet->fromArray($reportData, null, 'A' . ($sheet->getHighestRow() + 2)); |
135 | } |
136 | } |