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