Skip to content
Snippets Groups Projects
Commit b727d7eb authored by Jonathan Foucher's avatar Jonathan Foucher
Browse files

Fix #960

parent 5872301f
No related branches found
No related tags found
No related merge requests found
Pipeline #84775 failed
......@@ -40,131 +40,133 @@ class ConformiteTraitementGenerator extends AbstractGenerator implements Impress
/**
* Global overview : Information to display for conformiteTraitement in overview report.
*/
public function addGlobalOverview(Section $section, array $data, $withAIPD = true): void
public function addGlobalOverview(Section $section, array $data, $withAIPD = true, $withConform = true): void
{
if (empty($data)) {
return;
}
$section->addTitle('Analyse de la conformité des traitements', 2);
uasort($data, [$this, 'sortTreatmentByConformiteTraitementByLevelAndTreatmentName']);
// Table data
// Add header
$tableData = [
[
'Traitement',
'Gestionnaire',
'Date de révision de la conformité',
'Conformité',
],
$tableStyleConformite = [
'borderColor' => '006699',
'borderSize' => 6,
'cellMargin' => 100,
'unit' => TblWidth::PERCENT,
'width' => 100 * 50,
];
$chartCategories = [];
$chartData = [];
$conformites = ConformiteTraitementLevelDictionary::getConformites();
foreach ($conformites as $key => $label) {
$chartCategories[] = $label;
$chartData[$key] = 0;
}
if ($withConform) {
$section->addTitle('Analyse de la conformité des traitements', 2);
/** @var Treatment $treatment */
foreach ($data as $treatment) {
$conformiteTraitement = $treatment->getConformiteTraitement();
$level = ConformiteTraitementCompletion::getConformiteTraitementLevel($conformiteTraitement);
uasort($data, [$this, 'sortTreatmentByConformiteTraitementByLevelAndTreatmentName']);
$date = null;
if (!\is_null($conformiteTraitement)) {
$date = $conformiteTraitement->getCreatedAt();
}
$tableData[] = [
$treatment->getName(),
$treatment->getManager(),
ConformiteTraitementLevelDictionary::getConformites()[$level],
$this->getDate($date, 'd/m/Y'),
// Table data
// Add header
$tableData = [
[
'Traitement',
'Gestionnaire',
'Date de révision de la conformité',
'Conformité',
],
];
++$chartData[$level];
}
$section->addText('Les 10 critères suivants correspondent aux principes fondamentaux du RGPD et ont fait l’objet d’une évaluation :');
$listStyle = ['listType' => ListItem::TYPE_NUMBER];
$section->addListItem('Finalités', 0, null, $listStyle);
$section->addListItem('Licéité', 0, null, $listStyle);
$section->addListItem('Minimisation des données', 0, null, $listStyle);
$section->addListItem('Qualité des données', 0, null, $listStyle);
$section->addListItem('Durée de conservation', 0, null, $listStyle);
$section->addListItem('Information des personnes concernées', 0, null, $listStyle);
$section->addListItem('Recueil de consentement', 0, null, $listStyle);
$section->addListItem('Exercice des différents droits', 0, null, $listStyle);
$section->addListItem('Sous-traitance', 0, null, $listStyle);
$section->addListItem('Transferts en dehors de l’union européenne', 0, null, $listStyle);
$textrun = $section->addTextRun();
$textrun->addText('Une synthèse de l’analyse de la conformité des traitements et à valeur de preuve ');
$textrun->addLink('listConformityTreatments', 'figure en annexe', ['underline' => 'single'], [], true);
$textrun->addText('.');
$section->addText('Ci-dessous l’évaluation de la conformité des traitements au ' . date('d/m/Y') . ' :');
$chart = $section->addChart(
'pie',
$chartCategories,
$chartData,
[
'height' => Converter::cmToEmu(11),
'width' => Converter::cmToEmu(15),
]
);
$chartCategories = [];
$chartData = [];
$conformites = ConformiteTraitementLevelDictionary::getConformites();
foreach ($conformites as $key => $label) {
$chartCategories[] = $label;
$chartData[$key] = 0;
}
$chart->getStyle()->setColors(\array_values(ConformiteTraitementLevelDictionary::getHexaConformitesColors()));
/** @var Treatment $treatment */
foreach ($data as $treatment) {
$conformiteTraitement = $treatment->getConformiteTraitement();
$level = ConformiteTraitementCompletion::getConformiteTraitementLevel($conformiteTraitement);
$countTypes = array_count_values(array_column($tableData, '2'));
$conformes = array_key_exists('Conforme', $countTypes) ? $countTypes['Conforme'] : 0;
$nonConformesMineurs = array_key_exists('Non-conformité mineure', $countTypes) ? $countTypes['Non-conformité mineure'] : 0;
$nonConformesMajeurs = array_key_exists('Non-conformité majeure', $countTypes) ? $countTypes['Non-conformité majeure'] : 0;
$NonEvalues = array_key_exists('Non évalué', $countTypes) ? $countTypes['Non évalué'] : 0;
$date = null;
if (!\is_null($conformiteTraitement)) {
$date = $conformiteTraitement->getCreatedAt();
}
$section->addText('Sur les ' . (count($tableData) - 1) . ' traitements :');
$section->addListItem('Conforme(s) : ' . $conformes);
$section->addListItem('Non-conformité(s) mineure(s) : ' . $nonConformesMineurs);
$section->addListItem('Non-conformité(s) majeure(s) : ' . $nonConformesMajeurs);
$section->addListItem('Non évalué(s) : ' . $NonEvalues);
$tableData[] = [
$treatment->getName(),
$treatment->getManager(),
ConformiteTraitementLevelDictionary::getConformites()[$level],
$this->getDate($date, 'd/m/Y'),
];
$tableStyleConformite = [
'borderColor' => '006699',
'borderSize' => 6,
'cellMargin' => 100,
'unit' => TblWidth::PERCENT,
'width' => 100 * 50,
];
++$chartData[$level];
}
$tableConformite = $section->addTable($tableStyleConformite);
$headersTable = $tableData[0];
$tableConformite->addRow(null, ['tblHeader' => true, 'cantsplit' => true]);
foreach ($headersTable as $element) {
$cell = $tableConformite->addCell(2500, $this->cellHeadStyle);
$cell->addText($element, $this->textHeadStyle);
}
unset($tableData[0]);
foreach ($tableData as $line) {
$tableConformite->addRow(null, ['cantsplit' => true]);
$cell1 = $tableConformite->addCell(2500);
$cell1->addText($line[0]);
$cell2 = $tableConformite->addCell(2500);
$cell2->addText($line[1]);
$cell3 = $tableConformite->addCell(2500);
$cell3->addText($line[3]);
$styleCellConformite = match ($line[2]) {
'Conforme' => ['bgColor' => 'bce292'],
'Non-conformité mineure' => ['bgColor' => 'fac9ad'],
'Non-conformité majeure' => ['bgColor' => 'ffa7a7'],
'Non évalué' => ['bgColor' => 'ffffff'],
};
$cell4 = $tableConformite->addCell(2500, $styleCellConformite);
$cell4->addText($line[2], ['bold' => true]);
$section->addText('Les 10 critères suivants correspondent aux principes fondamentaux du RGPD et ont fait l’objet d’une évaluation :');
$listStyle = ['listType' => ListItem::TYPE_NUMBER];
$section->addListItem('Finalités', 0, null, $listStyle);
$section->addListItem('Licéité', 0, null, $listStyle);
$section->addListItem('Minimisation des données', 0, null, $listStyle);
$section->addListItem('Qualité des données', 0, null, $listStyle);
$section->addListItem('Durée de conservation', 0, null, $listStyle);
$section->addListItem('Information des personnes concernées', 0, null, $listStyle);
$section->addListItem('Recueil de consentement', 0, null, $listStyle);
$section->addListItem('Exercice des différents droits', 0, null, $listStyle);
$section->addListItem('Sous-traitance', 0, null, $listStyle);
$section->addListItem('Transferts en dehors de l’union européenne', 0, null, $listStyle);
$textrun = $section->addTextRun();
$textrun->addText('Une synthèse de l’analyse de la conformité des traitements et à valeur de preuve ');
$textrun->addLink('listConformityTreatments', 'figure en annexe', ['underline' => 'single'], [], true);
$textrun->addText('.');
$section->addText('Ci-dessous l’évaluation de la conformité des traitements au ' . date('d/m/Y') . ' :');
$chart = $section->addChart(
'pie',
$chartCategories,
$chartData,
[
'height' => Converter::cmToEmu(11),
'width' => Converter::cmToEmu(15),
]
);
$chart->getStyle()->setColors(\array_values(ConformiteTraitementLevelDictionary::getHexaConformitesColors()));
$countTypes = array_count_values(array_column($tableData, '2'));
$conformes = array_key_exists('Conforme', $countTypes) ? $countTypes['Conforme'] : 0;
$nonConformesMineurs = array_key_exists('Non-conformité mineure', $countTypes) ? $countTypes['Non-conformité mineure'] : 0;
$nonConformesMajeurs = array_key_exists('Non-conformité majeure', $countTypes) ? $countTypes['Non-conformité majeure'] : 0;
$NonEvalues = array_key_exists('Non évalué', $countTypes) ? $countTypes['Non évalué'] : 0;
$section->addText('Sur les ' . (count($tableData) - 1) . ' traitements :');
$section->addListItem('Conforme(s) : ' . $conformes);
$section->addListItem('Non-conformité(s) mineure(s) : ' . $nonConformesMineurs);
$section->addListItem('Non-conformité(s) majeure(s) : ' . $nonConformesMajeurs);
$section->addListItem('Non évalué(s) : ' . $NonEvalues);
$tableConformite = $section->addTable($tableStyleConformite);
$headersTable = $tableData[0];
$tableConformite->addRow(null, ['tblHeader' => true, 'cantsplit' => true]);
foreach ($headersTable as $element) {
$cell = $tableConformite->addCell(2500, $this->cellHeadStyle);
$cell->addText($element, $this->textHeadStyle);
}
unset($tableData[0]);
foreach ($tableData as $line) {
$tableConformite->addRow(null, ['cantsplit' => true]);
$cell1 = $tableConformite->addCell(2500);
$cell1->addText($line[0]);
$cell2 = $tableConformite->addCell(2500);
$cell2->addText($line[1]);
$cell3 = $tableConformite->addCell(2500);
$cell3->addText($line[3]);
$styleCellConformite = match ($line[2]) {
'Conforme' => ['bgColor' => 'bce292'],
'Non-conformité mineure' => ['bgColor' => 'fac9ad'],
'Non-conformité majeure' => ['bgColor' => 'ffa7a7'],
'Non évalué' => ['bgColor' => 'ffffff'],
};
$cell4 = $tableConformite->addCell(2500, $styleCellConformite);
$cell4->addText($line[2], ['bold' => true]);
}
}
if (false === $withAIPD) {
......
......@@ -313,6 +313,7 @@ class OverviewGenerator extends AbstractGenerator
|| ($collectivity->isHasModuleConformiteTraitement() && $collectivity->getReviewData() && in_array(ReviewData::TREATMENT_CONFORMITY, $collectivity->getReviewData()->getSections()))
|| ($collectivity->isHasModuleConformiteOrganisation() && $collectivity->getReviewData() && in_array(ReviewData::COLLECTIVITY_CONFORMITY, $collectivity->getReviewData()->getSections()))
|| ($collectivity->getReviewData() && in_array(ReviewData::PROTECT_ACTIONS, $collectivity->getReviewData()->getSections()))
|| ($collectivity->getReviewData() && in_array(ReviewData::AIPD, $collectivity->getReviewData()->getSections()))
) {
$section->addTitle('Système de management des données à caractère personnel et conformité', 1);
}
......@@ -323,8 +324,9 @@ class OverviewGenerator extends AbstractGenerator
}
if ($collectivity->isHasModuleConformiteTraitement() && $collectivity->getReviewData() && (in_array(ReviewData::AIPD, $collectivity->getReviewData()->getSections()) || in_array(ReviewData::TREATMENT_CONFORMITY, $collectivity->getReviewData()->getSections()))) {
$withAIPD = in_array(ReviewData::AIPD, $collectivity->getReviewData()->getSections());
$this->conformiteTraitementGenerator->addGlobalOverview($section, $treatments, $withAIPD);
$withAIPD = in_array(ReviewData::AIPD, $collectivity->getReviewData()->getSections());
$withConform = in_array(ReviewData::TREATMENT_CONFORMITY, $collectivity->getReviewData()->getSections());
$this->conformiteTraitementGenerator->addGlobalOverview($section, $treatments, $withAIPD, $withConform);
}
if ($collectivity->isHasModuleConformiteOrganisation() && $collectivity->getReviewData() && in_array(ReviewData::COLLECTIVITY_CONFORMITY, $collectivity->getReviewData()->getSections())) {
$this->conformiteOrganisationGenerator->addGlobalOverview($section, $evaluation);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment