Commit 17aa9503 authored by Théo GUILLON's avatar Théo GUILLON
Browse files

Correction : multi coresponsable

Ajout: multi soustraitance
parent f4482787
......@@ -241,6 +241,13 @@ ALTER TABLE coresponsables ADD CONSTRAINT coresponsables_telephonestructure_phon
ALTER TABLE coresponsables ADD CONSTRAINT coresponsables_faxstructure_phone_chk CHECK ( cakephp_validate_phone( faxstructure, NULL, 'fr' ) );
ALTER TABLE coresponsables ADD CONSTRAINT coresponsables_emailstructure_email_chk CHECK ( cakephp_validate_email( emailstructure ) );
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='telephonecoresponsable';
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='siretstructure';
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='apestructure';
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='telephonestructure';
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='faxstructure';
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='emailstructure';
INSERT INTO coresponsables (
fiche_id,
responsable_id,
......@@ -297,4 +304,70 @@ DELETE FROM valeurs WHERE champ_name IN (
'emailstructure'
);
CREATE TABLE soustraitances (
id serial NOT NULL PRIMARY KEY,
fiche_id INTEGER NOT NULL REFERENCES fiches(id) ON DELETE CASCADE ON UPDATE CASCADE,
soustraitant_id INTEGER NOT NULL,
raisonsociale VARCHAR(75) NOT NULL,
siret VARCHAR(14) NOT NULL,
ape VARCHAR(5) NOT NULL,
telephone VARCHAR(15),
fax VARCHAR(15),
adresse TEXT,
email VARCHAR(75),
created timestamp without time zone NOT NULL,
modified timestamp without time zone NOT NULL
);
ALTER TABLE soustraitances ADD CONSTRAINT soustraitances_ape_alpha_numeric_chk CHECK ( cakephp_validate_alpha_numeric( ape ) );
ALTER TABLE soustraitances ADD CONSTRAINT soustraitances_telephone_phone_chk CHECK ( cakephp_validate_phone( telephone, NULL, 'fr' ) );
ALTER TABLE soustraitances ADD CONSTRAINT soustraitances_fax_phone_chk CHECK ( cakephp_validate_phone( fax, NULL, 'fr' ) );
ALTER TABLE soustraitances ADD CONSTRAINT soustraitances_email_email_chk CHECK ( cakephp_validate_email( email ) );
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='soustraitantsiret';
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='soustraitantape';
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='soustraitanttelephone';
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='soustraitantfax';
UPDATE valeurs SET valeur = replace(valeur, ' ', '') WHERE champ_name='soustraitantemail';
INSERT INTO soustraitances (
fiche_id,
soustraitant_id,
raisonsociale,
siret,
ape,
telephone,
fax,
adresse,
email,
created,
modified
)
SELECT
fiches.id,
fiches.soustraitantid,
(SELECT valeurs.valeur FROM valeurs WHERE valeurs.fiche_id = fiches.id AND valeurs.champ_name = 'soustraitantraisonsociale' LIMIT 1) AS "soustraitantraisonsociale",
(SELECT valeurs.valeur FROM valeurs WHERE valeurs.fiche_id = fiches.id AND valeurs.champ_name = 'soustraitantsiret' LIMIT 1) AS "soustraitantsiret",
(SELECT valeurs.valeur FROM valeurs WHERE valeurs.fiche_id = fiches.id AND valeurs.champ_name = 'soustraitantape' LIMIT 1) AS "soustraitantape",
(SELECT valeurs.valeur FROM valeurs WHERE valeurs.fiche_id = fiches.id AND valeurs.champ_name = 'soustraitanttelephone' LIMIT 1) AS "soustraitanttelephone",
(SELECT valeurs.valeur FROM valeurs WHERE valeurs.fiche_id = fiches.id AND valeurs.champ_name = 'soustraitantfax' LIMIT 1) AS "soustraitantfax",
(SELECT valeurs.valeur FROM valeurs WHERE valeurs.fiche_id = fiches.id AND valeurs.champ_name = 'soustraitantadresse' LIMIT 1) AS "soustraitantadresse",
(SELECT valeurs.valeur FROM valeurs WHERE valeurs.fiche_id = fiches.id AND valeurs.champ_name = 'soustraitantemail' LIMIT 1) AS "soustraitantemail",
NOW(),
NOW()
FROM fiches
WHERE
fiches.soustraitantid IS NOT NULL ;
ALTER TABLE fiches DROP soustraitantid;
DELETE FROM valeurs WHERE champ_name IN (
'soustraitantraisonsociale',
'soustraitantsiret',
'soustraitantape',
'soustraitanttelephone',
'soustraitantfax',
'soustraitantadresse',
'soustraitantemail'
);
COMMIT;
......@@ -54,6 +54,7 @@ class FichesController extends AppController
'Organisation',
'Service',
'Soustraitant',
'Soustraitance',
'SoustraitantOrganisation',
'Typage',
'TypageOrganisation',
......@@ -412,7 +413,10 @@ class FichesController extends AppController
// On récupère les responsable
$responsables = $this->_responsables();
$this->set(compact('formulaire_id', 'formulaireOLD', 'typages', 'responsables'));
// On récupère les soustraitant
$soustraitants = $this->_soustraitants();
$this->set(compact('formulaire_id', 'formulaireOLD', 'typages', 'responsables', 'soustraitants'));
}
/**
......@@ -449,15 +453,19 @@ class FichesController extends AppController
protected function _coresponsables($fiche_id)
{
$coresponsables = $this->Coresponsable->find('all', [
'conditions' => [
'fiche_id' => $fiche_id
]
]);
$coresponsables = null;
$coresponsableSelected = Hash::extract($coresponsables, '{n}.Coresponsable.responsable_id');
if (empty($this->request->data['Coresponsable'])) {
$coresponsables = $this->Coresponsable->find('all', [
'conditions' => [
'fiche_id' => $fiche_id
]
]);
$coresponsableSelected = Hash::extract($coresponsables, '{n}.Coresponsable.responsable_id');
$this->request->data['Coresponsable']['coresponsables'] = $coresponsableSelected;
$this->request->data['Coresponsable']['coresponsables'] = $coresponsableSelected;
}
$this->set(compact('coresponsables'));
}
......@@ -493,6 +501,25 @@ class FichesController extends AppController
return $soustraitants;
}
protected function _soustraitances($fiche_id)
{
$soustraitances = null;
if (empty($this->request->data['Soustraitance'])) {
$soustraitances = $this->Soustraitance->find('all', [
'conditions' => [
'fiche_id' => $fiche_id
]
]);
$soustraitanceSelected = Hash::extract($soustraitances, '{n}.Soustraitance.soustraitant_id');
$this->request->data['Soustraitance']['soustraitances'] = $soustraitanceSelected;
}
$this->set(compact('soustraitances'));
}
/**
* Gère la suppression de traitement
*
......@@ -603,8 +630,6 @@ class FichesController extends AppController
$this->redirect($this->Referers->get());
}
// debug($this->request->data);die;
$success = true;
$this->Fiche->begin();
......@@ -684,7 +709,6 @@ class FichesController extends AppController
'norme_id',
'coresponsable',
'soustraitance',
'soustraitantid',
'obligation_pia',
'realisation_pia',
'depot_pia',
......@@ -714,38 +738,46 @@ class FichesController extends AppController
]
]);
// On récupère les responsables
$responsables = $this->_responsables();
$this->set(compact('responsables'));
// On récupère les coresponsables
$this->_coresponsables($id);
// On récupère les responsables
$soustraitants = $this->_soustraitants();
$this->set(compact('soustraitants'));
// On récupère la soustraitance
$this->_soustraitances($id);
// if ($formulaireOLD['Formulaire']['oldformulaire'] === true) {
// // Reprise des données de la version v1.1.0 pour la coresponsabilité
//// $responsables = $this->_responsables();
//// $this->set(compact('responsables'));
//// $this->request->data['Fiche']['coresponsableid'] = $fiche['Fiche']['coresponsableid'];
//
// // Reprise des données de la version v1.1.0 pour la soustraitance
// if ($formulaireOLD['Formulaire']['soustraitant'] === true && $fiche['Fiche']['soustraitance'] === true) {
// $soustraitance = $this->Formulaire->find('first', [
// 'conditions' => [
// 'id' => $fiche['Fiche']['form_id']
// ],
// 'fields' => [
// 'soustraitant'
// ]
// ]);
//
// $soustraitants = $this->_soustraitants();
//
// $this->set(compact('soustraitance', 'soustraitants'));
// }
// } else {
// // Récupére en BDD les options des champs défini lors de la création du formulaire
// $this->getOptionsFields($fiche['Fiche']['form_id']);
// }
$coresponsable = $this->_coresponsables($id);
// debug($coresponsable);die;
if ($formulaireOLD['Formulaire']['oldformulaire'] === true) {
// Reprise des données de la version v1.1.0 pour la coresponsabilité
$responsables = $this->_responsables();
$this->set(compact('responsables'));
$this->request->data['Fiche']['coresponsableid'] = $fiche['Fiche']['coresponsableid'];
// Reprise des données de la version v1.1.0 pour la soustraitance
if ($formulaireOLD['Formulaire']['soustraitant'] === true && $fiche['Fiche']['soustraitance'] === true) {
$soustraitance = $this->Formulaire->find('first', [
'conditions' => [
'id' => $fiche['Fiche']['form_id']
],
'fields' => [
'soustraitant'
]
]);
$soustraitants = $this->_soustraitants();
$this->set(compact('soustraitance', 'soustraitants'));
$this->request->data['Fiche']['soustraitantid'] = $fiche['Fiche']['soustraitantid'];
}
} else {
// Récupére en BDD les options des champs défini lors de la création du formulaire
$this->getOptionsFields($fiche['Fiche']['form_id']);
}
// Récupére en BDD les options des champs défini lors de la création du formulaire
$this->getOptionsFields($fiche['Fiche']['form_id']);
$this->request->data['Fiche']['norme_id'] = $fiche['Fiche']['norme_id'];
$this->request->data['Fiche']['coresponsable'] = $fiche['Fiche']['coresponsable'];
......@@ -867,7 +899,6 @@ class FichesController extends AppController
$soustraitants = $this->_soustraitants();
$this->set(compact('soustraitance', 'soustraitants'));
$this->request->data['Fiche']['soustraitantid'] = $fiche['Fiche']['soustraitantid'];
}
} else {
// Récupére en BDD les options des champs défini lors de la création du formulaire
......@@ -1722,7 +1753,6 @@ class FichesController extends AppController
'organisation_id' => $organisation_id,
'norme_id' => $fiche['Fiche']['norme_id'],
'numero' => $fiche['Fiche']['numero'],
'soustraitantid' => $fiche['Fiche']['soustraitantid'],
'coresponsable' => $fiche['Fiche']['coresponsable'],
'coresponsableid' => $fiche['Fiche']['coresponsableid']
]
......
......@@ -73,7 +73,7 @@ msgid "fiche.ongletInformationTraitement"
msgstr "Information générale"
msgid "fiche.ongletSousTraitant"
msgstr "Sous-traitant"
msgstr "Sous-traitance(s)"
msgid "fiche.ongletFormulaire"
msgstr "Formulaire"
......
......@@ -95,30 +95,4 @@ class Coresponsable extends AppModel {
'foreignKey' => 'fiche_id'
]
];
/**
* hasMany associations
*
* @var array
*
* @access public
* @created 11/04/2018
* @version v1.0.0
*/
// public $hasAndBelongsToMany = [
// 'Organisation' => [
// 'className' => 'Organisation',
// 'joinTable' => 'responsables_organisations',
// 'foreignKey' => 'responsable_id',
// 'associationForeignKey' => 'organisation_id',
// 'unique' => true,
// 'conditions' => '',
// 'fields' => '',
// 'order' => '',
// 'limit' => '',
// 'offset' => '',
// 'finderQuery' => '',
// 'with' => 'ResponsableOrganisation'
// ]
// ];
}
......@@ -463,6 +463,11 @@ class Fiche extends AppModel {
'foreignKey' => 'fiche_id',
'dependant' => true
],
'Soustraitance' => [
'className' => 'Soustraitance',
'foreignKey' => 'fiche_id',
'dependant' => true
],
];
/**
......
<?php
/**
* Model Soustraitance
*
* web-DPO : Outil de gestion de vos traitements dans le cadre de la
* réglementation relative à la protection des données personnelles (RGPD)
*
* Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
*
* Licensed under The CeCiLL V2 License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
* @link https://www.libriciel.fr/web-cil/
* @since web-DPO
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html CeCiLL V2 License
* @version v1.2.0
* @package AppModel
*/
App::uses('AppModel', 'Model');
class Soustraitance extends AppModel {
public $name = 'Soustraitance';
public $validationDomain = 'validation';
public $actsAs = [
'Database.DatabaseFormattable' => [
'Database.DatabaseDefaultFormatter' => [
'formatTrim' => [
'NOT' => ['binary']
],
'formatNull' => true,
'formatNumeric' => [
'float',
'integer'
],
'formatSuffix' => '/_id$/',
'formatStripNotAlnum' => '/^(telephone|fax|siret)$/'
]
],
];
/**
* validate associations
*
* @var array
*
* @access public
* @created 12/04/2018
* @version v1.0.0
*/
public $validate = [
'siret' => [
'luhn' => [
'rule' => [
'luhn',
true
],
'message' => 'validation.numeroSIRETNonValide'
],
[
'rule' => 'numeric',
'message' => 'validation.numeroSIRETUniquementComposeChiffre'
],
],
];
/**
* belongsTo associations
*
* @var array
*
* @access public
* @created 18/06/2015
* @version V0.9.0
*/
public $belongsTo = [
'Fiche' => [
'className' => 'Fiche',
'foreignKey' => 'fiche_id'
]
];
}
......@@ -70,67 +70,7 @@ class WebdpoFiche extends AppModel {
]
],
// ---------------------------------------------------------------------
// 'declarantraisonsociale' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'declarantadresse' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'declarantemail' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'declarantsiret' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'declarantape' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'declaranttelephone' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'personneresponsable' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'fonctionresponsable' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'emailresponsable' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'telephoneresponsable' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'personnedpo' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// 'emaildpo' => [
// 'notBlank' => [
// 'rule' => ['notBlank']
// ]
// ],
// ---------------------------------------------------------------------
// ------------------INFORMATION TRAITEMENT-----------------------------
'decisionAutomatisee' => [
'notBlank' => [
'rule' => ['notBlank']
......@@ -193,52 +133,19 @@ class WebdpoFiche extends AppModel {
]
],
// ---------------------------------------------------------------------
'coresponsableid' => [
'checkNotBlankIf' => [
'rule' => ['checkNotBlankIf', 'coresponsable', true, ['1']]
]
],
'nomcoresponsable' => [
'checkNotBlankIf' => [
'rule' => ['checkNotBlankIf', 'coresponsable', true, ['1']]
]
],
'prenomcoresponsable' => [
'checkNotBlankIf' => [
'rule' => ['checkNotBlankIf', 'coresponsable', true, ['1']]
]
],
'fonctioncoresponsable' => [
'checkNotBlankIf' => [
'rule' => ['checkNotBlankIf', 'coresponsable', true, ['1']]
]
],
'emailcoresponsable' => [
'checkNotBlankIf' => [
'rule' => ['checkNotBlankIf', 'coresponsable', true, ['1']]
]
],
'telephonecoresponsable' => [
'checkNotBlankIf' => [
'rule' => ['checkNotBlankIf', 'coresponsable', true, ['1']]
]
],
'raisonsocialestructure' => [
'checkNotBlankIf' => [
'rule' => ['checkNotBlankIf', 'coresponsable', true, ['1']]
]
],
'siretstructure' => [
'checkNotBlankIf' => [
'rule' => ['checkNotBlankIf', 'coresponsable', true, ['1']]
// --------------------------- CORESPONSABLE ---------------------------
'coresponsable' => [
'notBlank' => [
'rule' => ['notBlank']
]
],
'apestructure' => [
'coresponsables' => [
'checkNotBlankIf' => [
'rule' => ['checkNotBlankIf', 'coresponsable', true, ['1']]
]
],
// ---------------------------------------------------------------------
// ------------------------------- AIPD --------------------------------
// @info: usepia est un champ virtuel nécessaire venant du modèle Formulaire
'ressources_humaines' => [
'checkNotBlankIf' => [
......@@ -483,6 +390,9 @@ class WebdpoFiche extends AppModel {
// Co-responsable
$success = false !== $this->coresponsableSave($Fiche->id, $data['Coresponsable'], $data['Fiche']['coresponsable']) && $success;
// Soustraitance
$success = false !== $this->soustraitanceSave($Fiche->id, $data['Soustraitance'], $data['Fiche']['soustraitance']) && $success;
$newDataChamps = $this->checkDataConditons($data, $champs);
$data = Hash::extract($newDataChamps, 'data');
$champs = Hash::extract($newDataChamps, 'champs');
......@@ -858,9 +768,16 @@ class WebdpoFiche extends AppModel {
$success = $Coresponsable->deleteAll([
'Coresponsable.fiche_id' => $fiche_id
]) && $success;
return true;
}
if (empty($dataCoresponsable['currentCoresponsable']) && empty($dataCoresponsable['coresponsables'])) {
// @TODO Erreur sur le champs Coresponsables
return false;
}
if (isset($dataCoresponsable['currentCoresponsable']) && !empty($dataCoresponsable['currentCoresponsable'])) {
if (isset($dataCoresponsable['currentCoresponsable']) && !empty($dataCoresponsable['currentCoresponsable']) && !empty($dataCoresponsable['coresponsables'])) {
foreach ($dataCoresponsable['currentCoresponsable'] as $currentCoresponsable) {
if (($key = array_search($currentCoresponsable['responsable_id'], $dataCoresponsable['coresponsables'])) !== false) {
unset($dataCoresponsable['coresponsables'][$key]);
......@@ -871,7 +788,6 @@ class WebdpoFiche extends AppModel {
$success = $Coresponsable->deleteAll([
'Coresponsable.id !=' => $noDeleteCoresponsable
]) && $success;
} else {
$success = $Coresponsable->deleteAll([
'Coresponsable.fiche_id' => $fiche_id
......@@ -915,6 +831,77 @@ class WebdpoFiche extends AppModel {
return $success;
}
private function soustraitanceSave ($fiche_id, $dataSoustraitance, $useSoustraitance)
{
if (empty($fiche_id)) {
return false;
}
$success = true;
$Soustraitance = ClassRegistry::init('Soustraitance');
if ($useSoustraitance == false) {
$success = $Soustraitance->deleteAll([
'Soustraitance.fiche_id' => $fiche_id
]) && $success;
return true;
}
if (empty($dataSoustraitance['currentSoustraitance']) && empty($dataSoustraitance['soustraitances'])) {
// @TODO Erreur sur le champs Soustraitances
return false;
}
if (isset($dataSoustraitance['currentSoustraitance']) && !empty($dataSoustraitance['currentSoustraitance']) && !empty($dataSoustraitance['soustraitances'])) {
foreach ($dataSoustraitance['currentSoustraitance'] as $currentSoustraitance) {
if (($key = array_search($currentSoustraitance['soustraitant_id'], $dataSoustraitance['soustraitances'])) !== false) {
unset($dataSoustraitance['soustraitances'][$key]);
}
}
$noDeleteSoustraitance = Hash::extract($dataSoustraitance['currentSoustraitance'], '{n}.soustraitance_id');
$success = $Soustraitance->deleteAll([
'Soustraitance.id !=' => $noDeleteSoustraitance
]) && $success;
} else {
$success = $Soustraitance->deleteAll([
'Soustraitance.fiche_id' => $fiche_id
]) && $success;
}
if ($success === false) {