Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 201 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
RequestGenerator | |
0.00% |
0 / 201 |
|
0.00% |
0 / 3 |
812 | |
0.00% |
0 / 1 |
addGlobalOverview | |
0.00% |
0 / 26 |
|
0.00% |
0 / 1 |
90 | |||
addSyntheticView | |
0.00% |
0 / 21 |
|
0.00% |
0 / 1 |
20 | |||
addDetailedView | |
0.00% |
0 / 154 |
|
0.00% |
0 / 1 |
240 |
1 | <?php |
2 | |
3 | /** |
4 | * This file is part of the MADIS - RGPD Management application. |
5 | * |
6 | * @copyright Copyright (c) 2018-2019 Soluris - Solutions Numériques Territoriales Innovantes |
7 | * |
8 | * This program is free software: you can redistribute it and/or modify |
9 | * it under the terms of the GNU Affero General Public License as published by |
10 | * the Free Software Foundation, either version 3 of the License, or |
11 | * (at your option) any later version. |
12 | * |
13 | * This program is distributed in the hope that it will be useful, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * GNU Affero General Public License for more details. |
17 | * |
18 | * You should have received a copy of the GNU Affero General Public License |
19 | * along with this program. If not, see <https://www.gnu.org/licenses/>. |
20 | */ |
21 | |
22 | declare(strict_types=1); |
23 | |
24 | namespace App\Domain\Reporting\Generator\Word; |
25 | |
26 | use App\Domain\Registry\Dictionary\RequestAnswerTypeDictionary; |
27 | use App\Domain\Registry\Dictionary\RequestCivilityDictionary; |
28 | use App\Domain\Registry\Dictionary\RequestObjectDictionary; |
29 | use App\Domain\Registry\Dictionary\RequestStateDictionary; |
30 | use App\Domain\Registry\Model\Request; |
31 | use PhpOffice\PhpWord\Element\Section; |
32 | |
33 | class RequestGenerator extends AbstractGenerator implements ImpressionGeneratorInterface |
34 | { |
35 | /** |
36 | * Global overview : Information to display for request in overview report. |
37 | * |
38 | * @throws \Exception |
39 | */ |
40 | public function addGlobalOverview(Section $section, array $data): void |
41 | { |
42 | if ($this->collectivity) { |
43 | $collectivity = $this->collectivity; |
44 | } else { |
45 | $collectivity = $this->userProvider->getAuthenticatedUser()->getCollectivity(); |
46 | } |
47 | |
48 | // Aggregate data before rendering |
49 | $tableData = [ |
50 | [ |
51 | 'Date de la demande', |
52 | 'Objet de la demande', |
53 | 'Date de traitement', |
54 | 'Statut', |
55 | ], |
56 | ]; |
57 | $nbTotal = \count($data); |
58 | foreach ($data as $request) { |
59 | $tableData[] = [ |
60 | $request->getDate() ? $this->getDate($request->getDate(), 'd/m/Y') : '', |
61 | array_key_exists($request->getObject(), RequestObjectDictionary::getObjects()) ? RequestObjectDictionary::getObjects()[$request->getObject()] : $request->getObject(), |
62 | $request->getAnswer() ? $this->getDate($request->getAnswer()->getDate(), 'd/m/Y') : '', |
63 | array_key_exists($request->getState(), RequestStateDictionary::getStates()) ? RequestStateDictionary::getStates()[$request->getState()] : $request->getState(), |
64 | ]; |
65 | } |
66 | |
67 | $section->addTitle('Registre des demandes de personnes concernées', 2); |
68 | |
69 | $section->addText('Un registre des demandes des personnes concernées est disponible et tenu à jour.'); |
70 | if (0 === $nbTotal) { |
71 | $section->addText('À ce jour, il n’y a pas eu de demande de personnes concernées.'); |
72 | } |
73 | |
74 | if (0 < $nbTotal) { |
75 | $section->addText("Il y a eu {$nbTotal} demandes des personnes concernées."); |
76 | $this->addTable($section, $tableData, true, self::TABLE_ORIENTATION_HORIZONTAL); |
77 | } |
78 | } |
79 | |
80 | public function addSyntheticView(Section $section, array $data): void |
81 | { |
82 | $section->addTitle('Liste des demandes', 1); |
83 | |
84 | // Aggregate data before rendering |
85 | $tableData = [ |
86 | [ |
87 | 'Personne concernée', |
88 | 'Date de la demande', |
89 | 'Objet de la demande', |
90 | 'Date de traitement', |
91 | ], |
92 | ]; |
93 | foreach ($data as $request) { |
94 | if ($request->getApplicant()->isConcernedPeople() || ' ' === $request->getConcernedPeople()->getFullName()) { |
95 | $concernedPeople = $request->getApplicant()->getFullName(); |
96 | } else { |
97 | $concernedPeople = $request->getConcernedPeople()->getFullName(); |
98 | } |
99 | |
100 | $tableData[] = [ |
101 | $concernedPeople, |
102 | $this->getDate($request->getDate(), 'd/m/Y'), |
103 | RequestObjectDictionary::getObjects()[$request->getObject()], |
104 | $this->getDate($request->getAnswer()->getDate(), 'd/m/Y'), |
105 | ]; |
106 | } |
107 | |
108 | // Rendering |
109 | $this->addTable($section, $tableData, true, self::TABLE_ORIENTATION_HORIZONTAL); |
110 | $section->addPageBreak(); |
111 | } |
112 | |
113 | public function addDetailedView(Section $section, array $data): void |
114 | { |
115 | $section->addTitle('Détail des demandes', 1); |
116 | |
117 | /** @var Request $request */ |
118 | foreach ($data as $key => $request) { |
119 | if (0 !== $key) { |
120 | $section->addPageBreak(); |
121 | } |
122 | $section->addTitle($request->__toString(), 2); |
123 | |
124 | $requestData = []; |
125 | |
126 | // Ajouter les services si le module est actif |
127 | if ($request->getCollectivity()->getIsServicesEnabled()) { |
128 | $requestData[] = [ |
129 | 'Service', |
130 | $request->getService(), |
131 | ]; |
132 | } |
133 | |
134 | $requestData = array_merge($requestData, [ |
135 | [ |
136 | 'Objet de la demande', |
137 | $request->getObject() ? RequestObjectDictionary::getObjects()[$request->getObject()] : null, |
138 | ], |
139 | [ |
140 | 'Demande explicite', |
141 | $request->getOtherObject(), |
142 | ], |
143 | [ |
144 | 'Date de la demande', |
145 | $this->getDate($request->getDate(), 'd/m/Y'), |
146 | ], |
147 | [ |
148 | 'Motif', |
149 | $request->getReason(), |
150 | ], |
151 | [ |
152 | 'Demande complète', |
153 | $request->isComplete() ? 'Oui' : 'Non', |
154 | ], |
155 | [ |
156 | 'Demandeur légitime', |
157 | $request->isLegitimateApplicant() ? 'Oui' : 'Non', |
158 | ], |
159 | [ |
160 | 'Demande légitime', |
161 | $request->isLegitimateRequest() ? 'Oui' : 'Non', |
162 | ], |
163 | ]); |
164 | |
165 | $applicant = $request->getApplicant(); |
166 | $applicantData = [ |
167 | [ |
168 | 'Civilité', |
169 | $applicant->getCivility() ? RequestCivilityDictionary::getCivilities()[$applicant->getCivility()] : null, |
170 | ], |
171 | [ |
172 | 'Prénom', |
173 | $applicant->getFirstName(), |
174 | ], |
175 | [ |
176 | 'Nom', |
177 | $applicant->getLastName(), |
178 | ], |
179 | [ |
180 | 'Adresse', |
181 | $applicant->getAddress(), |
182 | ], |
183 | [ |
184 | 'Email', |
185 | $applicant->getMail(), |
186 | ], |
187 | [ |
188 | 'Téléphone', |
189 | $applicant->getPhoneNumber(), |
190 | ], |
191 | [ |
192 | 'Personne concernée', |
193 | $applicant->isConcernedPeople() ? 'Oui' : 'Non', |
194 | ], |
195 | ]; |
196 | |
197 | $concernedPeople = $request->getConcernedPeople(); |
198 | $concernedPeopleData = [ |
199 | [ |
200 | 'Civilité', |
201 | $concernedPeople->getCivility() ? RequestCivilityDictionary::getCivilities()[$concernedPeople->getCivility()] : null, |
202 | ], |
203 | [ |
204 | 'Prénom', |
205 | $concernedPeople->getFirstName(), |
206 | ], |
207 | [ |
208 | 'Nom', |
209 | $concernedPeople->getLastName(), |
210 | ], |
211 | [ |
212 | 'Adresse', |
213 | $concernedPeople->getAddress(), |
214 | ], |
215 | [ |
216 | 'Email', |
217 | $concernedPeople->getMail(), |
218 | ], |
219 | [ |
220 | 'Téléphone', |
221 | $concernedPeople->getPhoneNumber(), |
222 | ], |
223 | [ |
224 | 'Lien avec le demandeur', |
225 | $concernedPeople->getLinkWithApplicant(), |
226 | ], |
227 | ]; |
228 | |
229 | $response = $request->getAnswer(); |
230 | $responseData = [ |
231 | [ |
232 | 'Statut', |
233 | $request->getState() ? RequestStateDictionary::getStates()[$request->getState()] : '', |
234 | ], |
235 | ]; |
236 | |
237 | if (RequestStateDictionary::STATE_DENIED === $request->getState()) { |
238 | $responseData[] = [ |
239 | 'Motif du refus', |
240 | $request->getStateRejectionReason(), |
241 | ]; |
242 | } |
243 | |
244 | $responseData[] = [ |
245 | 'Réponse apportée', |
246 | $response->getResponse(), |
247 | ]; |
248 | |
249 | $responseData[] = [ |
250 | 'Date de la réponse', |
251 | $this->getDate($response->getDate(), 'd/m/Y'), |
252 | ]; |
253 | |
254 | $responseData[] = [ |
255 | 'Moyen de la réponse', |
256 | $response->getType() ? RequestAnswerTypeDictionary::getTypes()[$response->getType()] : null, |
257 | ]; |
258 | |
259 | $historyData = [ |
260 | [ |
261 | 'Date de création', |
262 | $this->getDate($request->getCreatedAt()), |
263 | ], |
264 | [ |
265 | 'Date de modification', |
266 | $this->getDate($request->getUpdatedAt()), |
267 | ], |
268 | [ |
269 | 'Modifié par ', |
270 | $request->getUpdatedBy(), |
271 | ], |
272 | ]; |
273 | |
274 | $section->addTitle('Demande', 3); |
275 | $this->addTable($section, $requestData, false, self::TABLE_ORIENTATION_VERTICAL); |
276 | |
277 | $section->addTitle('Demandeur', 3); |
278 | $this->addTable($section, $applicantData, false, self::TABLE_ORIENTATION_VERTICAL); |
279 | |
280 | // Only display concerned people if applicant isn't concerned one |
281 | if (!$applicant->isConcernedPeople()) { |
282 | $section->addTitle('Personne concernée', 3); |
283 | $this->addTable($section, $concernedPeopleData, false, self::TABLE_ORIENTATION_VERTICAL); |
284 | } |
285 | |
286 | $section->addTitle('Réponse', 3); |
287 | $this->addTable($section, $responseData, false, self::TABLE_ORIENTATION_VERTICAL); |
288 | |
289 | $section->addTitle('Éléments associés', 3); |
290 | $this->addLinkedData($section, $request); |
291 | |
292 | $section->addTitle('Historique', 3); |
293 | $this->addTable($section, $historyData, false, self::TABLE_ORIENTATION_VERTICAL); |
294 | } |
295 | } |
296 | } |