Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
40 / 40
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
1 / 1
RequestList
100.00% covered (success)
100.00%
40 / 40
100.00% covered (success)
100.00%
6 / 6
22
100.00% covered (success)
100.00%
1 / 1
 hasRequests
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
3
 toSortedByGroup
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
3
 withCountList
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
4
 hasAppointmentFromProviderData
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
3
 withUniqueRequests
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
3
 withDataAsObject
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
6
1<?php
2
3namespace BO\Zmsentities\Collection;
4
5use BO\Zmsentities\Helper\Property;
6
7/**
8 * @extends Base<\BO\Zmsentities\Request>
9 */
10class RequestList extends Base
11{
12    public const string ENTITY_CLASS = '\BO\Zmsentities\Request';
13
14    public function hasRequests(string $requestIdCsv): bool
15    {
16        $requestIdCsv = explode(',', $requestIdCsv);
17        foreach ($requestIdCsv as $requestId) {
18            if (!in_array($requestId, $this->getIds())) {
19                return false;
20            }
21        }
22        return true;
23    }
24
25    /**
26     * @return self[]
27     *
28     */
29    public function toSortedByGroup(): array
30    {
31        $list = array();
32        foreach ($this as $entity) {
33            if (! Property::__keyExists($entity->group, $list)) {
34                $list[$entity->group] = new self();
35            }
36            $list[$entity->group]->addEntity($entity)->sortByName();
37        }
38        ksort($list);
39        return $list;
40    }
41
42    /**
43     * Filter the request list and return a new list with appropriate numbers of requests
44     *
45     * @param array $countlist - a list with the request.id as number and a count as value
46     *
47     * @return RequestList
48     */
49    public function withCountList($countList)
50    {
51        $requestList = new self();
52        foreach ($countList as $requestId => $counter) {
53            if (!$this->hasEntity($requestId)) {
54                throw new \BO\Zmsentities\Exception\RequestListMissing(
55                    "Requested item '$requestId' in RequestList is missing"
56                );
57            }
58            while ($counter-- > 0) {
59                $requestList[] = $this->getEntity($requestId);
60            }
61        }
62        return $requestList;
63    }
64
65    public function hasAppointmentFromProviderData(): bool
66    {
67        foreach ($this as $entity) {
68            if ($entity->hasAppointmentFromProviderData()) {
69                return true;
70            }
71        }
72        return false;
73    }
74
75    public function withUniqueRequests(): self
76    {
77        $requestList = new self();
78        foreach ($this as $request) {
79            if (! $requestList->hasEntity($request->id)) {
80                $requestList->addEntity(clone $request);
81            }
82        }
83        return $requestList;
84    }
85
86    public function withDataAsObject(): self
87    {
88        $list = new self();
89        foreach ($this as $request) {
90            if (isset($request['data']) && '{}' != $request->data) {
91                if (is_string($request->data)) {
92                    $request->data = json_decode($request->data);
93                } elseif (is_array($request->data)) {
94                    $request->data = json_decode(json_encode($request->data, JSON_FORCE_OBJECT));
95                }
96            } else {
97                unset($request['data']);
98            }
99            $list->addEntity($request);
100        }
101        return $list;
102    }
103}