Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
96.55% |
28 / 29 |
|
75.00% |
3 / 4 |
CRAP | |
0.00% |
0 / 1 |
DuplicationFormDTOTransformer | |
96.55% |
28 / 29 |
|
75.00% |
3 / 4 |
12 | |
0.00% |
0 / 1 |
__construct | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
toModelObject | |
94.12% |
16 / 17 |
|
0.00% |
0 / 1 |
5.01 | |||
addTargetCollectivitiesPerCollectivity | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
3 | |||
addTargetCollectivitiesPerType | |
100.00% |
7 / 7 |
|
100.00% |
1 / 1 |
3 |
1 | <?php |
2 | |
3 | declare(strict_types=1); |
4 | |
5 | namespace App\Domain\Admin\Transformer; |
6 | |
7 | use App\Domain\Admin\Dictionary\DuplicationTargetOptionDictionary; |
8 | use App\Domain\Admin\DTO\DuplicationFormDTO; |
9 | use App\Domain\Admin\Hydrator\DuplicationHydrator; |
10 | use App\Domain\Admin\Model\DuplicatedObject; |
11 | use App\Domain\Admin\Model\Duplication; |
12 | use App\Domain\User\Repository as UserRepository; |
13 | |
14 | class DuplicationFormDTOTransformer |
15 | { |
16 | /** |
17 | * @var UserRepository\Collectivity |
18 | */ |
19 | private $collectivityRepository; |
20 | |
21 | /** |
22 | * @var DuplicationHydrator |
23 | */ |
24 | private $hydrator; |
25 | |
26 | /** |
27 | * DuplicationDTOTransformer constructor. |
28 | */ |
29 | public function __construct( |
30 | UserRepository\Collectivity $collectivityRepository, |
31 | DuplicationHydrator $hydrator, |
32 | ) { |
33 | $this->collectivityRepository = $collectivityRepository; |
34 | $this->hydrator = $hydrator; |
35 | } |
36 | |
37 | /** |
38 | * Transform a DuplicationFormDTO to a Duplication object model. |
39 | * |
40 | * @throws \Exception |
41 | */ |
42 | public function toModelObject(DuplicationFormDTO $formDTO): Duplication |
43 | { |
44 | $model = new Duplication( |
45 | $formDTO->getType(), |
46 | $formDTO->getSourceCollectivity(), |
47 | [] |
48 | ); |
49 | |
50 | foreach ($formDTO->getData() as $data) { |
51 | $model->addDataId($data); |
52 | } |
53 | |
54 | switch ($formDTO->getTargetOption()) { |
55 | case DuplicationTargetOptionDictionary::KEY_PER_COLLECTIVITY: |
56 | $this->addTargetCollectivitiesPerCollectivity($formDTO, $model); |
57 | break; |
58 | case DuplicationTargetOptionDictionary::KEY_PER_TYPE: |
59 | $this->addTargetCollectivitiesPerType($formDTO, $model); |
60 | break; |
61 | default: |
62 | throw new \RuntimeException('Unable to read target collectivities for provided target option ' . $formDTO->getTargetOption()); |
63 | } |
64 | |
65 | $this->hydrator->hydrate($model); |
66 | |
67 | return $model; |
68 | } |
69 | |
70 | /** |
71 | * Add target collectivities formatted from "PER COLLECTIVITY" target options. |
72 | */ |
73 | protected function addTargetCollectivitiesPerCollectivity(DuplicationFormDTO $formDTO, Duplication $model): void |
74 | { |
75 | foreach ($formDTO->getTargetCollectivities() as $collectivity) { |
76 | foreach ($model->getDataIds() as $id) { |
77 | $model->addDuplicatedObjet(new DuplicatedObject($model, $collectivity, $id)); |
78 | } |
79 | } |
80 | } |
81 | |
82 | /** |
83 | * Add target collectivities formatted from "PER TYPE" target options. |
84 | */ |
85 | protected function addTargetCollectivitiesPerType(DuplicationFormDTO $formDTO, Duplication $model): void |
86 | { |
87 | $collectivities = $this->collectivityRepository->findByTypes( |
88 | $formDTO->getTargetCollectivityTypes(), |
89 | $formDTO->getSourceCollectivity() |
90 | ); |
91 | |
92 | foreach ($collectivities as $collectivity) { |
93 | foreach ($model->getDataIds() as $id) { |
94 | $model->addDuplicatedObjet(new DuplicatedObject($model, $collectivity, $id)); |
95 | } |
96 | } |
97 | } |
98 | } |