Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
82.35% covered (warning)
82.35%
28 / 34
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProcessListByScopeAndDate
82.35% covered (warning)
82.35%
28 / 34
0.00% covered (danger)
0.00%
0 / 1
6.20
0.00% covered (danger)
0.00%
0 / 1
 readResponse
82.35% covered (warning)
82.35%
28 / 34
0.00% covered (danger)
0.00%
0 / 1
6.20
1<?php
2
3/**
4 * @package ZMS API
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsapi;
9
10use BO\Slim\Render;
11use BO\Mellon\Validator;
12use BO\Zmsdb\Scope as Query;
13use BO\Zmsdb\ProcessStatusArchived;
14use BO\Zmsentities\Collection\QueueList;
15
16class ProcessListByScopeAndDate extends BaseController
17{
18    /**
19     * @SuppressWarnings(Param)
20     * @return \Psr\Http\Message\ResponseInterface
21     */
22    #[\Override]
23    public function readResponse(
24        \Psr\Http\Message\RequestInterface $request,
25        \Psr\Http\Message\ResponseInterface $response,
26        array $args
27    ) {
28        $showWeek = Validator::param('showWeek')->isNumber()->setDefault(0)->getValue();
29        $dateTime = new \BO\Zmsentities\Helper\DateTime($args['date']);
30        $dateTime = $dateTime->modify(\App::$now->format('H:i'));
31        $dates = [$dateTime];
32
33        if ($showWeek) {
34            $dates = [];
35            $startDate = clone $dateTime->modify('Monday this week');
36            $endDate = clone $dateTime->modify('Sunday this week');
37
38            while ($startDate <= $endDate) {
39                $dates[] = $startDate;
40                $startDate = $startDate->modify('+1 day');
41            }
42        }
43
44        $query = new Query();
45        $scope = $query->readWithWorkstationCount($args['id'], \App::$now, 0, ['none']);
46        if (! $scope || ! $scope->getId()) {
47            throw new Exception\Scope\ScopeNotFound();
48        }
49
50        (new Helper\User($request, 2))->checkPermissions(
51            new \BO\Zmsentities\Useraccount\EntityAccess($scope)
52        );
53
54        $queueList = new QueueList();
55        foreach ($dates as $date) {
56            $queueList->addList($query->readQueueListWithWaitingTime(
57                $scope,
58                $date,
59                2,
60                ['availability', 'scope', 'scopeprovider']
61            ));
62        }
63
64        $archivedProcesses =
65            (new ProcessStatusArchived())->readListByScopesAndDates([$scope->getId()], $dates);
66
67        $message = Response\Message::create($request);
68        $message->data = $queueList->toProcessList()->sortByEstimatedWaitingTime()->withResolveLevel(2);
69        $message->data->addData($archivedProcesses);
70
71        $response = Render::withLastModified($response, time(), '0');
72        $response = Render::withJson($response, $message, 200);
73        return $response;
74    }
75}