Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
98.28% covered (success)
98.28%
57 / 58
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ReportWaitingIndex
98.28% covered (success)
98.28%
57 / 58
66.67% covered (warning)
66.67%
2 / 3
7
0.00% covered (danger)
0.00%
0 / 1
 readResponse
100.00% covered (success)
100.00%
32 / 32
100.00% covered (success)
100.00%
1 / 1
3
 handleDownloadRequest
85.71% covered (warning)
85.71%
6 / 7
0.00% covered (danger)
0.00%
0 / 1
2.01
 renderHtmlResponse
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3/**
4 * @package Zmsadmin
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsstatistic;
9
10use BO\Slim\Render;
11use BO\Zmsstatistic\Helper\ReportHelper;
12use BO\Zmsstatistic\Service\ReportWaitingService;
13use Psr\Http\Message\RequestInterface;
14use Psr\Http\Message\ResponseInterface;
15
16class ReportWaitingIndex extends BaseController
17{
18    protected $resolveLevel = 2;
19
20    /**
21     * @SuppressWarnings(Param)
22     * @return ResponseInterface
23     */
24    #[\Override]
25    public function readResponse(
26        RequestInterface $request,
27        ResponseInterface $response,
28        array $args
29    ) {
30        $validator = $request->getAttribute('validator');
31        $reportWaitingService = new ReportWaitingService();
32        $reportHelper = new ReportHelper();
33
34        $selectedScopes = $reportHelper->extractSelectedScopes(
35            $validator->getParameter('scopes')->isArray()->getValue() ?? []
36        );
37
38        $scopeIds = !empty($selectedScopes) ? implode(',', $selectedScopes) : $this->workstation->scope['id'];
39
40        $waitingPeriod = $reportWaitingService->getWaitingPeriod($this->workstation->scope['id']);
41
42        $dateRange = $reportHelper->extractDateRange(
43            $validator->getParameter('from')->isString()->getValue(),
44            $validator->getParameter('to')->isString()->getValue()
45        );
46
47        $exchangeWaiting = $reportWaitingService->getExchangeWaitingData($scopeIds, $dateRange, $args);
48
49        $type = $validator->getParameter('type')->isString()->getValue();
50        if ($type) {
51            return $this->handleDownloadRequest(
52                $request,
53                $response,
54                $args,
55                $exchangeWaiting,
56                $dateRange,
57                $selectedScopes,
58                $reportWaitingService
59            );
60        }
61
62        return $this->renderHtmlResponse(
63            $response,
64            $args,
65            $waitingPeriod,
66            $dateRange,
67            $exchangeWaiting,
68            $selectedScopes
69        );
70    }
71
72    /**
73     * Handle download request and return Excel file
74     */
75    private function handleDownloadRequest(
76        $request,
77        $response,
78        $args,
79        $exchangeWaiting,
80        $dateRange,
81        $selectedScopes = [],
82        $reportWaitingService = null
83    ): ResponseInterface {
84        if ($reportWaitingService === null) {
85            $reportWaitingService = new ReportWaitingService();
86        }
87
88        $args = $reportWaitingService->prepareDownloadArgs($args, $exchangeWaiting, $dateRange, $selectedScopes);
89
90        $args['scope'] = $this->workstation->getScope();
91        $args['department'] = $this->department;
92        $args['organisation'] = $this->organisation;
93
94        return (new Download\WaitingReport(\App::$slim->getContainer()))->readResponse($request, $response, $args);
95    }
96
97    /**
98     * Render HTML response for the waiting report page
99     */
100    private function renderHtmlResponse(
101        $response,
102        $args,
103        $waitingPeriod,
104        $dateRange,
105        $exchangeWaiting,
106        $selectedScopes = []
107    ): ResponseInterface {
108        return Render::withHtml(
109            $response,
110            'page/reportWaitingIndex.twig',
111            [
112                'title' => 'Wartestatistik Standort',
113                'activeScope' => 'active',
114                'menuActive' => 'waiting',
115                'department' => $this->department,
116                'organisation' => $this->organisation,
117                'waitingPeriod' => $waitingPeriod,
118                'showAll' => 1,
119                'period' => isset($args['period']) ? $args['period'] : null,
120                'dateRange' => $dateRange,
121                'exchangeWaiting' => $exchangeWaiting,
122                'source' => ['entity' => 'WaitingIndex'],
123                'selectedScopeIds' => $selectedScopes,
124                'workstation' => $this->workstation->getArrayCopy()
125            ]
126        );
127    }
128}