Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
96.72% covered (success)
96.72%
59 / 61
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ReportRequestIndex
96.72% covered (success)
96.72%
59 / 61
33.33% covered (danger)
33.33%
1 / 3
7
0.00% covered (danger)
0.00%
0 / 1
 readResponse
97.14% covered (success)
97.14%
34 / 35
0.00% covered (danger)
0.00%
0 / 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\ReportRequestService;
13use Psr\Http\Message\RequestInterface;
14use Psr\Http\Message\ResponseInterface;
15
16class ReportRequestIndex 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        $reportRequestService = new ReportRequestService();
32        $reportHelper = new ReportHelper();
33
34        $selectedScopes = $reportHelper->extractSelectedScopes(
35            $validator->getParameter('scopes')->isArray()->getValue() ?? []
36        );
37
38        $workstationScopeId = $reportHelper->getWorkstationScopeId($this->workstation);
39        $scopeIds = $reportHelper->resolveScopeIdParam($selectedScopes, $workstationScopeId);
40
41        $requestPeriod = $workstationScopeId !== null
42            ? $reportRequestService->getRequestPeriod((string) $workstationScopeId)
43            : null;
44
45        $dateRange = $reportHelper->extractDateRange(
46            $validator->getParameter('from')->isString()->getValue(),
47            $validator->getParameter('to')->isString()->getValue()
48        );
49
50        $exchangeRequest = $reportRequestService->getExchangeRequestData($scopeIds, $dateRange, $args);
51
52        $type = $validator->getParameter('type')->isString()->getValue();
53        if ($type) {
54            return $this->handleDownloadRequest(
55                $request,
56                $response,
57                $args,
58                $exchangeRequest,
59                $dateRange,
60                $selectedScopes,
61                $reportRequestService
62            );
63        }
64
65        return $this->renderHtmlResponse(
66            $response,
67            $args,
68            $requestPeriod,
69            $dateRange,
70            $exchangeRequest,
71            $selectedScopes
72        );
73    }
74
75    /**
76     * Handle download request and return Excel file
77     */
78    private function handleDownloadRequest(
79        $request,
80        $response,
81        $args,
82        $exchangeRequest,
83        $dateRange,
84        $selectedScopes = [],
85        $reportRequestService = null
86    ): ResponseInterface {
87        if ($reportRequestService === null) {
88            $reportRequestService = new ReportRequestService();
89        }
90
91        $args = $reportRequestService->prepareDownloadArgs($args, $exchangeRequest, $dateRange, $selectedScopes);
92
93        $args['scope'] = $this->workstation->getScope();
94        $args['department'] = $this->department;
95        $args['organisation'] = $this->organisation;
96
97        return (new Download\RequestReport(\App::$slim->getContainer()))->readResponse($request, $response, $args);
98    }
99
100    /**
101     * Render HTML response for the report page
102     */
103    private function renderHtmlResponse(
104        $response,
105        $args,
106        $requestPeriod,
107        $dateRange,
108        $exchangeRequest,
109        $selectedScopes = []
110    ): ResponseInterface {
111        return Render::withHtml(
112            $response,
113            'page/reportRequestIndex.twig',
114            array(
115                'title' => 'Dienstleistungsstatistik Standort',
116                'activeScope' => 'active',
117                'menuActive' => 'request',
118                'department' => $this->department,
119                'organisation' => $this->organisation,
120                'requestPeriod' => $requestPeriod,
121                'showAll' => 1,
122                'period' => isset($args['period']) ? $args['period'] : null,
123                'dateRange' => $dateRange,
124                'exchangeRequest' => $exchangeRequest,
125                'source' => ['entity' => 'RequestIndex'],
126                'selectedScopeIds' => $selectedScopes,
127                'workstation' => $this->workstation->getArrayCopy()
128            )
129        );
130    }
131}