Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.64% covered (success)
94.64%
53 / 56
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
UserQueue
94.64% covered (success)
94.64%
53 / 56
0.00% covered (danger)
0.00%
0 / 1
10.02
0.00% covered (danger)
0.00%
0 / 1
 readResponse
94.64% covered (success)
94.64%
53 / 56
0.00% covered (danger)
0.00%
0 / 1
10.02
1<?php
2
3/**
4 * @package ZMS API
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsbackend\Useraccount\Api;
9
10use BO\Slim\Render;
11use BO\Mellon\Validator;
12use BO\Zmsbackend\Department\Service\Department;
13use BO\Zmsentities\Collection\QueueList;
14use BO\Zmsentities\Helper\DateTime;
15
16class UserQueue extends \BO\Zmsbackend\Api\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        $workstation = (new \BO\Zmsbackend\Helper\User($request, 2))
29            ->checkAnyPermission(
30                'waitingqueue',
31                'openqueue',
32                'parkedqueue',
33                'missedqueue',
34                'finishedqueue'
35            );
36
37        $resolveReferences = Validator::param('resolveReferences')->isNumber()->setDefault(1)->getValue();
38        $statusParameter = Validator::param('status')->isString()->getValue();
39        $statuses = empty($statusParameter) ? [] : array_map('trim', explode(',', $statusParameter));
40        $selectedDate = Validator::param('date')->isString()->getValue();
41        $dateTime = ($selectedDate)
42            ? (new DateTime($selectedDate))->modify(\App::$now->format('H:i'))
43            : \App::$now;
44
45        $message = \BO\Zmsbackend\Api\Response\Message::create($request);
46
47        $useraccount = $workstation->getUseraccount();
48        $departmentService = new Department();
49        $queueList = new QueueList();
50
51        foreach ($useraccount['departments'] as $department) {
52            $queueList->addList(
53                $departmentService->readQueueList(
54                    $department->id,
55                    $dateTime,
56                    $resolveReferences
57                )
58            );
59        }
60
61        $queues = $queueList->withSortedWaitingTime();
62
63        $permissionByStatus = [
64            'preconfirmed' => 'waitingqueue',
65            'confirmed' => 'waitingqueue',
66            'queued' => 'waitingqueue',
67            'reserved' => 'waitingqueue',
68            'deleted' => 'waitingqueue',
69            'called' => 'openqueue',
70            'processing' => 'openqueue',
71            'parked' => 'parkedqueue',
72            'missed' => 'missedqueue',
73            'finished' => 'finishedqueue',
74        ];
75
76        $filteredQueues = [];
77
78        foreach ($queues as $queue) {
79            $requiredPermission = $permissionByStatus[$queue->status] ?? null;
80
81            if (
82                $requiredPermission === null
83                || ! $useraccount->hasPermissions([$requiredPermission])
84            ) {
85                continue;
86            }
87
88            if (
89                ! empty($statuses)
90                && ! in_array($queue->status, $statuses, true)
91            ) {
92                continue;
93            }
94
95            if ($resolveReferences > 1) {
96                $queue->process = $queue->getProcess();
97            }
98
99            $filteredQueues[] = $queue;
100        }
101
102        $message->data = $filteredQueues;
103
104        $response = Render::withLastModified($response, time(), '0');
105        $response = Render::withJson($response, $message, 200);
106
107        return $response;
108    }
109}