Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
82 / 82 |
|
100.00% |
9 / 9 |
CRAP | |
100.00% |
1 / 1 |
RequestRelation | |
100.00% |
82 / 82 |
|
100.00% |
9 / 9 |
19 | |
100.00% |
1 / 1 |
readEntity | |
100.00% |
9 / 9 |
|
100.00% |
1 / 1 |
1 | |||
readListBySource | |
100.00% |
9 / 9 |
|
100.00% |
1 / 1 |
1 | |||
readListByRequestId | |
100.00% |
10 / 10 |
|
100.00% |
1 / 1 |
1 | |||
readListByProviderId | |
100.00% |
10 / 10 |
|
100.00% |
1 / 1 |
1 | |||
writeListBySource | |
100.00% |
14 / 14 |
|
100.00% |
1 / 1 |
6 | |||
writeEntity | |
100.00% |
9 / 9 |
|
100.00% |
1 / 1 |
1 | |||
writeImportList | |
100.00% |
13 / 13 |
|
100.00% |
1 / 1 |
5 | |||
readList | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
2 | |||
writeDeleteListBySource | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
1 |
1 | <?php |
2 | |
3 | namespace BO\Zmsdb; |
4 | |
5 | use BO\Zmsentities\RequestRelation as Entity; |
6 | use BO\Zmsentities\Collection\RequestRelationList as Collection; |
7 | |
8 | class RequestRelation extends Base |
9 | { |
10 | public function readEntity($requestId, $providerId, $resolveReferences = 0) |
11 | { |
12 | $query = new Query\RequestRelation(Query\Base::SELECT); |
13 | $query |
14 | ->setResolveLevel(0) |
15 | ->addEntityMapping() |
16 | ->addResolvedReferences($resolveReferences) |
17 | ->addConditionBookable() |
18 | ->addConditionProviderId($providerId) |
19 | ->addConditionRequestId($requestId); |
20 | return $this->fetchOne($query, new Entity()); |
21 | } |
22 | |
23 | public function readListBySource($source, $resolveReferences = 0) |
24 | { |
25 | $query = new Query\RequestRelation(Query\Base::SELECT); |
26 | $query |
27 | ->setResolveLevel(0) |
28 | ->addEntityMapping() |
29 | ->addResolvedReferences($resolveReferences) |
30 | ->addConditionBookable() |
31 | ->addConditionSource($source); |
32 | $statement = $this->fetchStatement($query); |
33 | return $this->readList($statement); |
34 | } |
35 | |
36 | public function readListByRequestId($requestId, $source, $resolveReferences = 0) |
37 | { |
38 | $query = new Query\RequestRelation(Query\Base::SELECT); |
39 | $query |
40 | ->setResolveLevel(0) |
41 | ->addEntityMapping() |
42 | ->addResolvedReferences($resolveReferences) |
43 | ->addConditionRequestId($requestId) |
44 | ->addConditionBookable() |
45 | ->addConditionSource($source); |
46 | $statement = $this->fetchStatement($query); |
47 | return $this->readList($statement); |
48 | } |
49 | |
50 | public function readListByProviderId($providerId, $source, $resolveReferences = 0) |
51 | { |
52 | $query = new Query\RequestRelation(Query\Base::SELECT); |
53 | $query |
54 | ->setResolveLevel(0) |
55 | ->addEntityMapping() |
56 | ->addResolvedReferences($resolveReferences) |
57 | ->addConditionProviderId($providerId) |
58 | ->addConditionBookable() |
59 | ->addConditionSource($source); |
60 | $statement = $this->fetchStatement($query); |
61 | return $this->readList($statement); |
62 | } |
63 | |
64 | public function writeListBySource(\BO\Zmsentities\Source $source) |
65 | { |
66 | if ($source->getRequestRelationList()->count()) { |
67 | foreach ($source->getRequestRelationList() as $entity) { |
68 | $this->writeEntity($entity); |
69 | } |
70 | } elseif ($source->isCompleteAndEditable()) { |
71 | foreach ($source->getProviderList() as $provider) { |
72 | foreach ($source->getRequestList() as $request) { |
73 | $entity = new Entity([ |
74 | 'source' => $source->getSource(), |
75 | 'provider' => $provider, |
76 | 'request' => $request, |
77 | 'slots' => 1 |
78 | ]); |
79 | $this->writeEntity($entity); |
80 | } |
81 | } |
82 | } |
83 | |
84 | return $this->readListBySource($source->getSource()); |
85 | } |
86 | |
87 | public function writeEntity(Entity $entity) |
88 | { |
89 | $query = new Query\RequestRelation(Query\Base::REPLACE); |
90 | $query->addValues([ |
91 | 'source' => $entity->getSource(), |
92 | 'provider__id' => $entity->getProvider()->getId(), |
93 | 'request__id' => $entity->getRequest()->getId(), |
94 | 'slots' => $entity->getSlotCount() |
95 | ]); |
96 | $this->writeItem($query); |
97 | return $this->readEntity($entity->getRequest()->getId(), $entity->getProvider()->getId()); |
98 | } |
99 | |
100 | public function writeImportList($providerList, $source = 'dldb') |
101 | { |
102 | foreach ($providerList as $provider) { |
103 | // Do not import locations without address |
104 | if ($provider['address']['postal_code']) { |
105 | foreach ($provider['services'] as $reference) { |
106 | $query = new Query\RequestRelation(Query\Base::REPLACE); |
107 | $query->addValues([ |
108 | 'source' => $source, |
109 | 'provider__id' => $provider['id'], |
110 | 'request__id' => $reference['service'], |
111 | 'slots' => $reference['appointment']['slots'], |
112 | 'bookable' => ($reference['appointment']['allowed'] ? 1 : 0) |
113 | ]); |
114 | $this->writeItem($query); |
115 | } |
116 | } |
117 | } |
118 | return $this->readListBySource($source); |
119 | } |
120 | |
121 | protected function readList($statement) |
122 | { |
123 | $collection = new Collection(); |
124 | while ($requestRelationData = $statement->fetch(\PDO::FETCH_ASSOC)) { |
125 | $entity = new Entity($requestRelationData); |
126 | $collection->addEntity($entity); |
127 | } |
128 | return $collection; |
129 | } |
130 | |
131 | public function writeDeleteListBySource($source) |
132 | { |
133 | $query = new Query\RequestRelation(Query\Base::DELETE); |
134 | $query->addConditionSource($source); |
135 | return $this->deleteItem($query); |
136 | } |
137 | } |