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 | 'waitingcalculated' => 'maximal berechnete Wartezeit Spontankunden', |
22 | 'waitingcount_termin' => 'Wartende Terminkunden', |
23 | 'waitingtime_termin' => 'gemessene Wartezeit Terminkunden', |
24 | 'waitingcalculated_termin' => 'maximal berechnete Wartezeit Terminkunden', |
25 | 'waytime' => 'gemessene Wegezeit Spontankunden', |
26 | 'waytime_termin' => 'gemessene Wegezeit Terminkunden', |
27 | ]; |
28 | |
29 | /** |
30 | * @SuppressWarnings(Param) |
31 | * @return ResponseInterface |
32 | */ |
33 | public function readResponse( |
34 | RequestInterface $request, |
35 | ResponseInterface $response, |
36 | array $args |
37 | ) { |
38 | $title = 'waitingstatistic_' . $args['period']; |
39 | $download = (new Download($request))->setSpreadSheet($title); |
40 | |
41 | $this->writeInfoHeader($args, $download->getSpreadSheet()); |
42 | foreach ($args['reports'] as $report) { |
43 | if ('month' == $report->period) { |
44 | $this->writeWaitingReport($report, $download->getSpreadSheet(), 'yyyy', 'MMMM'); |
45 | } else { |
46 | $this->writeWaitingReport($report, $download->getSpreadSheet()); |
47 | } |
48 | } |
49 | |
50 | return $download->writeDownload($response); |
51 | } |
52 | |
53 | public function writeWaitingReport( |
54 | ReportEntity $report, |
55 | Spreadsheet $spreadsheet, |
56 | $datePatternCol1 = 'MMMM', |
57 | $datePatternCol2 = 'dd (ccc)' |
58 | ) { |
59 | $sheet = $spreadsheet->getActiveSheet(); |
60 | $this->writeHeader($report, $sheet, $datePatternCol1, $datePatternCol2); |
61 | $this->writeTotals($report, $sheet); |
62 | foreach ($this->reportParts as $partName => $headline) { |
63 | $this->writeReportPart($report, $sheet, $partName, $headline); |
64 | } |
65 | |
66 | return $spreadsheet; |
67 | } |
68 | |
69 | public function writeHeader(ReportEntity $report, $sheet, $datePatternCol1, $datePatternCol2) |
70 | { |
71 | $dateString = $report->firstDay->year . '-' . $report->firstDay->month . '-' . $report->firstDay->day; |
72 | $reportHeader = []; |
73 | $reportHeader[] = null; |
74 | $reportHeader[] = $this->getFormatedDates($this->setDateTime($dateString), $datePatternCol1); |
75 | foreach (array_keys($report->data) as $date) { |
76 | if (! in_array($date, static::$ignoreColumns)) { |
77 | $date = $this->getFormatedDates($this->setDateTime($date), $datePatternCol2); |
78 | $reportHeader[] = $date; |
79 | } |
80 | } |
81 | $sheet->fromArray($reportHeader, null, 'A' . ($sheet->getHighestRow() + 2)); |
82 | } |
83 | |
84 | public function writeTotals(ReportEntity $report, $sheet) |
85 | { |
86 | $entity = clone $report; |
87 | $totals = array_pop($entity->data); |
88 | $reportTotal['max'][] = 'Tagesmaximum Spontankunden der gemessenen Zeit'; |
89 | $reportTotal['average'][] = 'Tagesdurchschnitt Spontankunden der gemessenen Zeit'; |
90 | $reportTotal['average_waytime'][] = 'Tagesdurchschnitt Wegezeit Spontankunden'; |
91 | $reportTotal['max'][] = $totals['max_waitingtime']; |
92 | $reportTotal['average'][] = $totals['average_waitingtime']; |
93 | $reportTotal['average_waytime'][] = $totals['average_waytime']; |
94 | foreach ($entity->data as $entry) { |
95 | $reportTotal['max'][] = $entry['max_waitingtime']; |
96 | $reportTotal['average'][] = $entry['average_waitingtime']; |
97 | $reportTotal['average_waytime'][] = $entry['average_waytime']; |
98 | } |
99 | $sheet->fromArray($reportTotal, null, 'A' . ($sheet->getHighestRow() + 1)); |
100 | |
101 | $reportTotal2['max'][] = 'Tagesmaximum Terminkunden der gemessenen Zeit'; |
102 | $reportTotal2['average'][] = 'Tagesdurchschnitt Terminkunden der gemessenen Zeit'; |
103 | $reportTotal2['average_waytime'][] = 'Tagesdurchschnitt Wegezeit Terminkunden'; |
104 | $reportTotal2['max'][] = $totals['max_waitingtime_termin']; |
105 | $reportTotal2['average'][] = $totals['average_waitingtime_termin']; |
106 | $reportTotal2['average_waytime'][] = $totals['average_waytime_termin']; |
107 | foreach ($entity->data as $entry) { |
108 | $reportTotal2['max'][] = $entry['max_waitingtime_termin']; |
109 | $reportTotal2['average'][] = $entry['average_waitingtime_termin']; |
110 | $reportTotal2['average_waytime'][] = $entry['average_waytime_termin']; |
111 | } |
112 | $sheet->fromArray($reportTotal2, null, 'A' . ($sheet->getHighestRow() + 1)); |
113 | } |
114 | |
115 | public function writeReportPart(ReportEntity $report, $sheet, $rangeName, $headline) |
116 | { |
117 | $entity = clone $report; |
118 | $totals = $entity->data['max']; |
119 | unset($entity->data['max']); |
120 | $reportData['headline'] = ['Zeitabschnitte',$headline]; |
121 | foreach ($entity->data as $entry) { |
122 | foreach ($entry as $hour => $item) { |
123 | if (5 < $hour && 22 > $hour) { |
124 | if (! isset($reportData[$hour])) { |
125 | $reportData[$hour] = []; |
126 | } |
127 | $range = $hour . '-' . ($hour + 1) . ' Uhr'; |
128 | if (! in_array($range, $reportData[$hour])) { |
129 | $reportData[$hour][] = $range; |
130 | $reportData[$hour][] = $totals[$hour][$rangeName]; |
131 | } |
132 | $reportData[$hour][] = $item[$rangeName]; |
133 | } |
134 | } |
135 | } |
136 | $sheet->fromArray($reportData, null, 'A' . ($sheet->getHighestRow() + 2)); |
137 | } |
138 | } |