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