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 ENTITY_CLASS = '\BO\Zmsentities\Request';
13
14    public function hasRequests($requestIdCsv)
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    public function toSortedByGroup()
26    {
27        $list = array();
28        foreach ($this as $entity) {
29            if (! Property::__keyExists($entity->group, $list)) {
30                $list[$entity->group] = new self();
31            }
32            $list[$entity->group]->addEntity($entity)->sortByName();
33        }
34        ksort($list);
35        return $list;
36    }
37
38    /**
39     * Filter the request list and return a new list with appropriate numbers of requests
40     *
41     * @param array $countlist - a list with the request.id as number and a count as value
42     *
43     * @return RequestList
44     */
45    public function withCountList($countList)
46    {
47        $requestList = new self();
48        foreach ($countList as $requestId => $counter) {
49            if (!$this->hasEntity($requestId)) {
50                throw new \BO\Zmsentities\Exception\RequestListMissing(
51                    "Requested item '$requestId' in RequestList is missing"
52                );
53            }
54            while ($counter-- > 0) {
55                $requestList[] = $this->getEntity($requestId);
56            }
57        }
58        return $requestList;
59    }
60
61    public function hasAppointmentFromProviderData()
62    {
63        foreach ($this as $entity) {
64            if ($entity->hasAppointmentFromProviderData()) {
65                return true;
66            }
67        }
68        return false;
69    }
70
71    public function withUniqueRequests()
72    {
73        $requestList = new self();
74        foreach ($this as $request) {
75            if (! $requestList->hasEntity($request->id)) {
76                $requestList->addEntity(clone $request);
77            }
78        }
79        return $requestList;
80    }
81
82    public function withDataAsObject()
83    {
84        $list = new self();
85        foreach ($this as $request) {
86            if (isset($request['data']) && '{}' != $request->data) {
87                if (is_string($request->data)) {
88                    $request->data = json_decode($request->data);
89                } elseif (is_array($request->data)) {
90                    $request->data = json_decode(json_encode($request->data, JSON_FORCE_OBJECT));
91                }
92            } else {
93                unset($request['data']);
94            }
95            $list->addEntity($request);
96        }
97        return $list;
98    }
99}