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
ReportRequestIndex
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\ReportRequestService;
13use Psr\Http\Message\RequestInterface;
14use Psr\Http\Message\ResponseInterface;
15
16class ReportRequestIndex extends BaseController
17{
18    protected $resolveLevel = 3;
19
20    /**
21     * @SuppressWarnings(Param)
22     * @return ResponseInterface
23     */
24    public function readResponse(
25        RequestInterface $request,
26        ResponseInterface $response,
27        array $args
28    ) {
29        $validator = $request->getAttribute('validator');
30        $reportRequestService = new ReportRequestService();
31        $reportHelper = new ReportHelper();
32
33        $selectedScopes = $reportHelper->extractSelectedScopes(
34            $validator->getParameter('scopes')->isArray()->getValue() ?? []
35        );
36
37        $scopeIds = !empty($selectedScopes) ? implode(',', $selectedScopes) : $this->workstation->scope['id'];
38
39        $requestPeriod = $reportRequestService->getRequestPeriod($this->workstation->scope['id']);
40
41        $dateRange = $reportHelper->extractDateRange(
42            $validator->getParameter('from')->isString()->getValue(),
43            $validator->getParameter('to')->isString()->getValue()
44        );
45
46        $exchangeRequest = $reportRequestService->getExchangeRequestData($scopeIds, $dateRange, $args);
47
48        $type = $validator->getParameter('type')->isString()->getValue();
49        if ($type) {
50            return $this->handleDownloadRequest(
51                $request,
52                $response,
53                $args,
54                $exchangeRequest,
55                $dateRange,
56                $selectedScopes,
57                $reportRequestService
58            );
59        }
60
61        return $this->renderHtmlResponse(
62            $response,
63            $args,
64            $requestPeriod,
65            $dateRange,
66            $exchangeRequest,
67            $selectedScopes
68        );
69    }
70
71    /**
72     * Handle download request and return Excel file
73     */
74    private function handleDownloadRequest(
75        $request,
76        $response,
77        $args,
78        $exchangeRequest,
79        $dateRange,
80        $selectedScopes = [],
81        $reportRequestService = null
82    ): ResponseInterface {
83        if ($reportRequestService === null) {
84            $reportRequestService = new ReportRequestService();
85        }
86
87        $args = $reportRequestService->prepareDownloadArgs($args, $exchangeRequest, $dateRange, $selectedScopes);
88
89        $args['scope'] = $this->workstation->getScope();
90        $args['department'] = $this->department;
91        $args['organisation'] = $this->organisation;
92
93        return (new Download\RequestReport(\App::$slim->getContainer()))->readResponse($request, $response, $args);
94    }
95
96    /**
97     * Render HTML response for the report page
98     */
99    private function renderHtmlResponse(
100        $response,
101        $args,
102        $requestPeriod,
103        $dateRange,
104        $exchangeRequest,
105        $selectedScopes = []
106    ): ResponseInterface {
107        return Render::withHtml(
108            $response,
109            'page/reportRequestIndex.twig',
110            array(
111                'title' => 'Kundenstatistik Standort',
112                'activeScope' => 'active',
113                'menuActive' => 'request',
114                'department' => $this->department,
115                'organisation' => $this->organisation,
116                'requestPeriod' => $requestPeriod,
117                'showAll' => 1,
118                'period' => isset($args['period']) ? $args['period'] : null,
119                'dateRange' => $dateRange,
120                'exchangeRequest' => $exchangeRequest,
121                'source' => ['entity' => 'RequestIndex'],
122                'selectedScopeIds' => $selectedScopes,
123                'workstation' => $this->workstation->getArrayCopy()
124            )
125        );
126    }
127}