Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
70.00% covered (warning)
70.00%
21 / 30
33.33% covered (danger)
33.33%
1 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ConformiteTraitementCompletion
70.00% covered (warning)
70.00%
21 / 30
33.33% covered (danger)
33.33%
1 / 3
15.89
0.00% covered (danger)
0.00%
0 / 1
 calculConformite
94.44% covered (success)
94.44%
17 / 18
0.00% covered (danger)
0.00%
0 / 1
5.00
 setCalculsConformite
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 getConformiteTraitementLevel
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
42
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
22declare(strict_types=1);
23
24namespace App\Domain\Registry\Calculator\Completion;
25
26use App\Domain\Registry\Dictionary\ConformiteTraitementLevelDictionary;
27use App\Domain\Registry\Model;
28
29class ConformiteTraitementCompletion
30{
31    /**
32     * Calcul nbConformes, nbNonConformesMineures and nbNonConformesMajeures for a ConformiteTraitement.
33     */
34    private function calculConformite(Model\ConformiteTraitement\ConformiteTraitement $conformiteTraitement): array
35    {
36        $calculs = [
37            'nbConformes'            => 0,
38            'nbNonConformesMineures' => 0,
39            'nbNonConformesMajeures' => 0,
40        ];
41        foreach ($conformiteTraitement->getReponses() as $reponse) {
42            if (true === $reponse->isConforme()) {
43                ++$calculs['nbConformes'];
44            } else {
45                if (empty($reponse->getActionProtections())) {
46                    ++$calculs['nbNonConformesMajeures'];
47                } else {
48                    $nbPlanified = array_filter(\iterable_to_array($reponse->getActionProtections()),
49                        function (Model\Mesurement $mesurement) {
50                            return !\is_null($mesurement->getPlanificationDate());
51                        });
52
53                    if (count($nbPlanified) > 0) {
54                        ++$calculs['nbNonConformesMineures'];
55                    } else {
56                        ++$calculs['nbNonConformesMajeures'];
57                    }
58                }
59            }
60        }
61
62        return $calculs;
63    }
64
65    public function setCalculsConformite(Model\ConformiteTraitement\ConformiteTraitement $conformiteTraitement)
66    {
67        $calculs = $this->calculConformite($conformiteTraitement);
68
69        $conformiteTraitement->setNbConformes($calculs['nbConformes']);
70        $conformiteTraitement->setNbNonConformesMineures($calculs['nbNonConformesMineures']);
71        $conformiteTraitement->setNbNonConformesMajeures($calculs['nbNonConformesMajeures']);
72    }
73
74    public static function getConformiteTraitementLevel(?Model\ConformiteTraitement\ConformiteTraitement $conformiteTraitement)
75    {
76        switch (true) {
77            case \is_null($conformiteTraitement):
78                return ConformiteTraitementLevelDictionary::NON_EVALUE;
79                break;
80            case $conformiteTraitement->getNbNonConformesMajeures() >= 1:
81            case $conformiteTraitement->getNbNonConformesMineures() >= 3:
82                return ConformiteTraitementLevelDictionary::NON_CONFORMITE_MAJEURE;
83                break;
84            case $conformiteTraitement->getNbNonConformesMineures() >= 1:
85                return ConformiteTraitementLevelDictionary::NON_CONFORMITE_MINEURE;
86                break;
87            default:
88                return ConformiteTraitementLevelDictionary::CONFORME;
89        }
90    }
91}