Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
28 / 28
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
AvailabilityConflicts
100.00% covered (success)
100.00%
28 / 28
100.00% covered (success)
100.00%
2 / 2
8
100.00% covered (success)
100.00%
1 / 1
 readResponse
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 getAvailabilityData
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
1 / 1
7
1<?php
2
3/**
4 * @package Zmsadmin
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsadmin\Helper;
9
10use BO\Zmsadmin\BaseController;
11use BO\Zmsentities\Availability;
12use BO\Zmsentities\Collection\AvailabilityList;
13
14/**
15 * Check if new Availability is in conflict with existing availability
16 *
17 */
18class AvailabilityConflicts extends BaseController
19{
20    /**
21     * @SuppressWarnings(Param)
22     * @return String
23     */
24    public function readResponse(
25        \Psr\Http\Message\RequestInterface $request,
26        \Psr\Http\Message\ResponseInterface $response,
27        array $args
28    ) {
29        $validator = $request->getAttribute('validator');
30        $input = $validator->getInput()->isJson()->assertValid()->getValue();
31        $data = static::getAvailabilityData($input);
32        return \BO\Slim\Render::withJson(
33            $response,
34            $data
35        );
36    }
37
38    protected static function getAvailabilityData($input)
39    {
40        $conflictList = new \BO\Zmsentities\Collection\ProcessList();
41        $availabilityList = (new AvailabilityList())->addData($input['availabilityList']);
42        $conflictedList = [];
43
44        $selectedDateTime = (new \DateTimeImmutable($input['selectedDate']))->modify(\App::$now->format('H:i:s'));
45        $selectedAvailability = new Availability($input['selectedAvailability']);
46        $startDateTime = ($selectedAvailability->getStartDateTime() >= \App::$now) ?
47            $selectedAvailability->getStartDateTime() : $selectedDateTime;
48        $endDateTime = ($input['selectedAvailability']) ?
49            $selectedAvailability->getEndDateTime() : $selectedDateTime;
50
51        $availabilityList = $availabilityList->sortByCustomStringKey('endTime');
52        $conflictList = $availabilityList->getConflicts($startDateTime, $endDateTime);
53
54        foreach ($conflictList as $conflict) {
55            $availabilityId = ($conflict->getFirstAppointment()->getAvailability()->getId()) ?
56                $conflict->getFirstAppointment()->getAvailability()->getId() :
57                $conflict->getFirstAppointment()->getAvailability()->tempId;
58            if (! in_array($availabilityId, $conflictedList)) {
59                $conflictedList[] = $availabilityId;
60            }
61        }
62
63        return [
64            'conflictList' => $conflictList->toConflictListByDay(),
65            'conflictIdList' => (count($conflictedList)) ? $conflictedList : []
66        ];
67    }
68
69    /*
70    protected static function getAvailabilityList($scope, $dateTime)
71    {
72        try {
73            $availabilityList = \App::$http
74                ->readGetResult(
75                    '/scope/' . $scope->getId() . '/availability/',
76                    [
77                        'resolveReferences' => 0,
78                        'startDate' => $dateTime->format('Y-m-d') //for skipping old availabilities
79                    ]
80                )
81                ->getCollection();
82        } catch (\BO\Zmsclient\Exception $exception) {
83            if ($exception->template != 'BO\Zmsapi\Exception\Availability\AvailabilityNotFound') {
84                throw $exception;
85            }
86            $availabilityList = new \BO\Zmsentities\Collection\AvailabilityList();
87        }
88        return $availabilityList->withScope($scope);
89    }
90    */
91}