Commit 752a3cc6 authored by THEO GUILLON's avatar THEO GUILLON
Browse files

Merge branch '172-construire-un-registre-en-tant-que-sous-traitant' into '1.2.0'

Resolve "Construire un registre en tant que sous-traitant"

See merge request libriciel/pole-citoyens/web-DPO/web-DPO!317
parents c16d06cd abe31481
......@@ -39,6 +39,7 @@ la création d'un traitement.
- Ajout des normes "Référentiel santé" (RS)
- Ajout des normes "Métodomogies de référence" (MR)
- Ajout possibilité de rentre obligatoire un champ case à coché dans le formulaire
- Mise en place des traitements dit de sous-traitance (responsable de traitement externe)
### Evolutions
- Affichage de l'onglet "Information de l'entité" lors de la visualisation d'un traitement au registre
......
......@@ -402,4 +402,7 @@ UPDATE valeurs SET champ_name = 'entite_emailDpo' WHERE champ_name='emailDpo';
DELETE FROM valeurs WHERE champ_name = 'coresponsable';
DELETE FROM valeurs WHERE champ_name = 'soustraitance';
ALTER TABLE formulaires ADD COLUMN rt_externe BOOL DEFAULT FALSE;
ALTER TABLE fiches ADD COLUMN rt_externe BOOL NOT NULL DEFAULT FALSE;
COMMIT;
......@@ -178,24 +178,24 @@ class AppController extends Controller
public function beforeRender()
{
parent::beforeRender();
// $this->set('formulaires_actifs', $this->FormGen->getAll([
// 'organisations_id' => $this->Session->read('Organisation.id'),
// 'active' => true
// ]));
$formulaires_actifs = $this->Formulaire->find('all', [
'conditions' => [
'organisations_id' => $this->Session->read('Organisation.id'),
'active' => true
'active' => true,
'rt_externe' => false
]
]);
$this->set(compact('formulaires_actifs'));
// $this->set('formulaires_soustraitance', $this->FormGen->getAll([
// 'organisations_id' => $this->Session->read('Organisation.id'),
// 'active' => true,
// 'soustraitant' => true
// ]));
$formulaires_soustraitances = $this->Formulaire->find('all', [
'conditions' => [
'organisations_id' => $this->Session->read('Organisation.id'),
'active' => true,
'rt_externe' => true
]
]);
$this->set(compact('formulaires_actifs', 'formulaires_soustraitances'));
$serviceUser = $this->OrganisationUser->find('all', [
'conditions' => [
......
......@@ -990,10 +990,10 @@ class EtatFichesController extends AppController
if ($success === true) {
$this->Fiche->id = $id;
$success = $success && $this->Fiche->save([
'id' => $id,
'numero' => $numero,
'norme_id' => $norme
]) !== false;
'id' => $id,
'numero' => $numero,
'norme_id' => $norme
]) !== false;
}
if ($success === true) {
......@@ -1079,9 +1079,23 @@ class EtatFichesController extends AppController
$idEncoursValid['Fiche']['id']
]);
$ficheRT = $this->Fiche->find('first', [
'conditions' => [
'id' => $id
],
'fields' => [
'rt_externe'
]
]);
$action = 'registreActivite';
if ($ficheRT['Fiche']['rt_externe'] === true) {
$action = 'registreSoustraitance';
}
$this->redirect([
'controller' => 'registres',
'action' => 'index'
'action' => $action
]);
} else {
$this->EtatFiche->rollback();
......@@ -1133,6 +1147,20 @@ class EtatFichesController extends AppController
unset($entite['Organisation']['dpo']);
$ficheIsRT = $this->Fiche->find('first', [
'conditions' => [
'Fiche.id' => $fiche_id
],
'fields' => [
'rt_externe'
]
]);
$prefixChampName = 'rt_organisation_';
if ($ficheIsRT['Fiche']['rt_externe'] === true) {
$prefixChampName = 'st_organisation_';
}
$entite = Hash::extract($entite, 'Organisation');
$keyEntite = array_keys($entite);
......@@ -1142,7 +1170,7 @@ class EtatFichesController extends AppController
$this->Valeur->create([
'fiche_id' => $fiche_id,
'valeur' => $entite[$val],
'champ_name'=> 'entite_'.$val
'champ_name'=> $prefixChampName.$val
]);
$success = $success && false !== $this->Valeur->save();
}
......@@ -1160,30 +1188,34 @@ class EtatFichesController extends AppController
$userDPO['dpo'] = $userDPO[$val];
unset($userDPO[$val]);
$val = 'dpo';
$champ_name = 'nom_complet_dpo';
}
if ($val === 'email') {
$userDPO['emailDpo'] = $userDPO[$val];
unset($userDPO[$val]);
$val = 'emailDpo';
$champ_name = 'email_dpo';
}
if ($val === 'telephoneportable') {
$userDPO['portableDpo'] = $userDPO[$val];
unset($userDPO[$val]);
$val = 'portableDpo';
$champ_name = 'telephoneportable_dpo';
}
if ($val === 'telephonefixe') {
$userDPO['fixDpo'] = $userDPO[$val];
unset($userDPO[$val]);
$val = 'fixDpo';
$champ_name = 'telephonefixe_dpo';
}
$this->Valeur->create([
'fiche_id' => $fiche_id,
'valeur' => $userDPO[$val],
'champ_name'=> 'entite_'.$val
'champ_name'=> $prefixChampName.$champ_name
]);
$success = $success && false !== $this->Valeur->save();
}
......
......@@ -298,6 +298,21 @@ class FichesController extends AppController
$data['Fiche']['obligation_pia'] = $this->deductValueFieldObligationPia($data);
}
$formulaireRT = $this->Formulaire->find('first', [
'conditions' => [
'id' => $formulaire_id
],
'fields' => [
'rt_externe'
]
]);
if ($formulaireRT['Formulaire']['rt_externe'] === true) {
$data['Fiche']['rt_externe'] = true;
} else {
$data['Fiche']['rt_externe'] = 0;
}
$success = $this->WebdpoFiche->saveWithVirtualFields($data, $formulaireFields, $formulaireOptions, false, true);
if ($success == true) {
......@@ -408,6 +423,20 @@ class FichesController extends AppController
$this->redirect($this->Referers->get());
}
$rt_externe = $this->Formulaire->find('first', [
'conditions' => [
'id' => $formulaire_id
],
'fields' => [
'rt_externe',
]
]);
$this->set('rt_externe', $rt_externe['Formulaire']['rt_externe']);
if ($rt_externe['Formulaire']['rt_externe'] === true) {
$this->getOrganisationForSt();
}
$this->getFormulaireFields($formulaire_id, $useValueDefault);
// Récupére en BDD les options des champs défini lors de la création du formulaire
......@@ -638,9 +667,6 @@ class FichesController extends AppController
$this->redirect($this->Referers->get());
}
// debug($this->request->data);
// die;
$success = true;
$this->Fiche->begin();
......@@ -699,6 +725,21 @@ class FichesController extends AppController
}
}
$formulaireRT = $this->Formulaire->find('first', [
'conditions' => [
'id' => $form_id['Fiche']['form_id']
],
'fields' => [
'rt_externe'
]
]);
if ($formulaireRT['Formulaire']['rt_externe'] === true) {
$data['Fiche']['rt_externe'] = true;
} else {
$data['Fiche']['rt_externe'] = 0;
}
$success = $this->WebdpoFiche->saveWithVirtualFields($data, $formulaireFields, $formulaireOptions, $formulaireOLD['Formulaire']['oldformulaire']);
if ($success == true) {
......@@ -800,6 +841,7 @@ class FichesController extends AppController
'obligation_pia',
'realisation_pia',
'depot_pia',
'rt_externe'
]
]);
......@@ -819,7 +861,7 @@ class FichesController extends AppController
$this->request->data['Fiche']['depot_pia'] = $fiche['Fiche']['depot_pia'];
// Récupère les valeurs des champs du traitement
$this->getValueFields($id);
$this->getValueFields($id, $fiche['Fiche']['rt_externe']);
}
$this->getFilesSave($id);
......@@ -834,6 +876,27 @@ class FichesController extends AppController
]
]);
$this->set('rt_externe', $fiche['Fiche']['rt_externe']);
$etatTraitement = $this->EtatFiche->find('first', [
'conditions' => [
'fiche_id' => $id,
'actif' => true
],
'fields' => [
'etat_id'
]
]);
$showRegistre = false;
if (in_array($etatTraitement['EtatFiche']['etat_id'], EtatFiche::LISTE_ETAT_TRAITEMENT_REGISTRE)) {
$showRegistre = true;
}
if ($showRegistre === false && $fiche['Fiche']['rt_externe'] === true) {
$this->getOrganisationForSt();
}
// On récupère les responsables associés à l'entité
$responsables = $this->_responsables();
$this->set(compact('responsables'));
......@@ -922,7 +985,7 @@ class FichesController extends AppController
}
// Récupère les valeurs des champs du traitement
$this->getValueFields($id);
$this->getValueFields($id, $fiche['Fiche']['rt_externe']);
$this->getFormulaireFields($fiche['Fiche']['form_id']);
......@@ -942,6 +1005,8 @@ class FichesController extends AppController
]
]);
$this->set('rt_externe', $fiche['Fiche']['rt_externe']);
// Récupére en BDD les options des champs défini lors de la création du formulaire
$this->getOptionsFields($fiche['Fiche']['form_id']);
......@@ -960,6 +1025,10 @@ class FichesController extends AppController
$showRegistre = true;
}
if ($showRegistre === false && $fiche['Fiche']['rt_externe'] === true) {
$this->getOrganisationForSt();
}
$this->request->data['Fiche']['coresponsable'] = $fiche['Fiche']['coresponsable'];
$this->request->data['Fiche']['soustraitance'] = $fiche['Fiche']['soustraitance'];
$this->request->data['Fiche']['obligation_pia'] = $fiche['Fiche']['obligation_pia'];
......@@ -2096,33 +2165,38 @@ class FichesController extends AppController
* @version V1.2.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
private function getValueFields($fiche_id)
private function getValueFields($fiche_id, $rt_externe = false)
{
$prefix = 'rt_';
if ($rt_externe === true) {
$prefix = 'st_';
}
$changeArrayFields = [
'declarantpersonnenom',
'declarantservice',
'declarantpersonneemail',
'declarantpersonnefix',
'declarantpersonneportable',
'entite_raisonsociale',
'entite_telephone',
'entite_fax',
'entite_adresse',
'entite_email',
'entite_sigle',
'entite_siret',
'entite_ape',
'entite_civiliteresponsable',
'entite_nomresponsable',
'entite_prenomresponsable',
'entite_fonctionresponsable',
'entite_emailresponsable',
'entite_telephoneresponsable',
'entite_dpo',
'entite_numerodpo',
'entite_fixDpo',
'entite_portableDpo',
'entite_emailDpo'
$prefix.'organisation_raisonsociale',
$prefix.'organisation_telephone',
$prefix.'organisation_fax',
$prefix.'organisation_adresse',
$prefix.'organisation_email',
$prefix.'organisation_sigle',
$prefix.'organisation_siret',
$prefix.'organisation_ape',
$prefix.'organisation_civiliteresponsable',
$prefix.'organisation_nomresponsable',
$prefix.'organisation_prenomresponsable',
$prefix.'organisation_fonctionresponsable',
$prefix.'organisation_emailresponsable',
$prefix.'organisation_telephoneresponsable',
$prefix.'organisation_nom_complet_dpo',
$prefix.'organisation_numerodpo',
$prefix.'organisation_email_dpo',
$prefix.'organisation_telephonefixe_dpo',
$prefix.'organisation_telephoneportable_dpo'
];
$valeurs = $this->Valeur->find('all', [
......@@ -2260,4 +2334,55 @@ class FichesController extends AppController
return $typages;
}
/**
*
*
* @access public
*
* @created 01/06/2020
* @version V2.0.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
protected function getOrganisationForSt()
{
$organisation = $this->Organisation->find('first', [
'joins' => [
$this->Organisation->join('Dpo', ['type' => 'INNER']),
],
'conditions' => [
'Organisation.id' => $this->Session->read('Organisation.id'),
'Dpo.id = Organisation.dpo'
],
'fields' => [
'Organisation.raisonsociale',
'Organisation.telephone',
'Organisation.fax',
'Organisation.adresse',
'Organisation.email',
'Organisation.sigle',
'Organisation.siret',
'Organisation.ape',
'Organisation.civiliteresponsable',
'Organisation.prenomresponsable',
'Organisation.nomresponsable',
'Organisation.emailresponsable',
'Organisation.telephoneresponsable',
'Organisation.fonctionresponsable',
'Organisation.numerodpo',
$this->Organisation->Dpo->vfNomComplet(),
'Dpo.email',
'Dpo.telephonefixe',
'Dpo.telephoneportable',
]
]);
foreach ($organisation['Organisation'] as $key => $value) {
$this->request->data['Trash']['st_organisation_'.$key] = $value;
}
foreach ($organisation['Dpo'] as $key => $value) {
$this->request->data['Trash']['st_organisation_'.$key.'_dpo'] = $value;
}
}
}
......@@ -64,6 +64,7 @@ class FormulairesController extends AppController {
'active',
'description',
'oldformulaire',
'rt_externe',
'created'
],
'order' => [
......@@ -134,7 +135,7 @@ class FormulairesController extends AppController {
'organisations_id' => $organisation['Organisation']['id'],
'libelle' => $this->request->data['Formulaire']['libelle'],
'description' => $this->request->data['Formulaire']['description'],
// 'soustraitant' => $this->request->data['Formulaire']['soustraitant'],
'rt_externe' => $this->request->data['Formulaire']['rt_externe'],
'active' => false
]);
......@@ -209,7 +210,7 @@ class FormulairesController extends AppController {
'organisations_id' => $this->request->data['Formulaire']['organisationCible'],
'libelle' => $this->request->data['Formulaire']['libelle'],
'description' => $this->request->data['Formulaire']['description'],
// 'soustraitant' => $this->request->data['Formulaire']['soustraitant'],
'rt_externe' => $this->request->data['Formulaire']['rt_externe'],
'active' => false
]);
......@@ -450,7 +451,8 @@ class FormulairesController extends AppController {
'fields' => [
'libelle',
'active',
'oldformulaire'
'oldformulaire',
'rt_externe'
]
]);
if (empty($formulaire) || $formulaire['Formulaire']['oldformulaire'] === true) {
......@@ -464,6 +466,7 @@ class FormulairesController extends AppController {
$title = __d('formulaire', 'formulaire.titreEditerFormulaire');
}
$this->set('title', $title . $formulaire['Formulaire']['libelle']);
$this->set('rt_externe', $formulaire['Formulaire']['rt_externe']);
if ($this->request->is('POST') || $this->request->is('PUT')) {
if ('Cancel' === Hash::get($this->request->data, 'submit')) {
......@@ -474,7 +477,7 @@ class FormulairesController extends AppController {
$this->Formulaire->begin();
$data = $this->request->data;
unset($data['Fiche']);
unset($data['Fiche'], $data['Trash']);
$this->Formulaire->create([
'id' => $id,
......@@ -484,7 +487,8 @@ class FormulairesController extends AppController {
'usetransferthorsue' => $data['Formulaire']['usetransferthorsue'],
'usedonneessensible' => $data['Formulaire']['usedonneessensible'],
'useallextensionfiles' => $data['Formulaire']['useallextensionfiles'],
'usepia' => $data['Formulaire']['usepia']
'usepia' => $data['Formulaire']['usepia'],
'rt_externe' => $formulaire['Formulaire']['rt_externe']
]);
$success = false !== $this->Formulaire->save() && $success;
......@@ -528,6 +532,10 @@ class FormulairesController extends AppController {
$this->getFields($id);
if ($formulaire['Formulaire']['rt_externe'] === true) {
$this->getOrganisationForSt();
}
$this->view = 'edit';
}
......@@ -862,7 +870,8 @@ class FormulairesController extends AppController {
'fields' => [
'libelle',
'oldformulaire',
'soustraitant'
'soustraitant',
'rt_externe'
]
]);
$this->set('title', __d('formulaire', 'formulaire.titreShowFormulaire') . $formulaire['Formulaire']['libelle']);
......@@ -872,7 +881,58 @@ class FormulairesController extends AppController {
$this->getFields($id, $formulaireOLD);
$this->set('rt_externe', $formulaire['Formulaire']['rt_externe']);
$this->set(compact('formulaireOLD', 'soustraitantOLD'));
}
/**
*
*
* @access public
*
* @created 01/06/2020
* @version V2.0.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
protected function getOrganisationForSt()
{
$organisation = $this->Organisation->find('first', [
'joins' => [
$this->Organisation->join('Dpo', ['type' => 'INNER']),
],
'conditions' => [
'Organisation.id' => $this->Session->read('Organisation.id'),
'Dpo.id = Organisation.dpo'
],
'fields' => [
'Organisation.raisonsociale',
'Organisation.telephone',
'Organisation.fax',
'Organisation.adresse',
'Organisation.email',
'Organisation.sigle',
'Organisation.siret',
'Organisation.ape',
'Organisation.civiliteresponsable',
'Organisation.prenomresponsable',
'Organisation.nomresponsable',
'Organisation.emailresponsable',
'Organisation.telephoneresponsable',
'Organisation.fonctionresponsable',
'Organisation.numerodpo',
$this->Organisation->Dpo->vfNomComplet(),
'Dpo.email',
'Dpo.telephonefixe',
'Dpo.telephoneportable',
]
]);
foreach ($organisation['Organisation'] as $key => $value) {
$this->request->data['Trash']['st_organisation_'.$key] = $value;
}
foreach ($organisation['Dpo'] as $key => $value) {
$this->request->data['Trash']['st_organisation_'.$key.'_dpo'] = $value;
}
}
}
......@@ -329,7 +329,86 @@ class ModelesController extends AppController {
]
]);
$this->set(compact('variables', 'optionsUseFormulaire'));
$formulaireRT = $this->Formulaire->find('first', [
'conditions' => [
'id' => $idFormulaire
],
'fields' => [
'rt_externe'
]
]);
$this->set('rt_externe', $formulaireRT['Formulaire']['rt_externe']);
$prefixChampName = 'rt_organisation_';
$rtVariables = [];
if ($formulaireRT['Formulaire']['rt_externe'] === true) {
$rtVariables = [
'rt_externe_raisonsociale',
'rt_externe_telephone',
'rt_externe_fax',
'rt_externe_adresse',
'rt_externe_email',
'rt_externe_siret',
'rt_externe_ape',
'rt_externe_civiliteresponsable',
'rt_externe_prenomresponsable',
'rt_externe_nomresponsable',
'rt_externe_fonctionresponsable',
'rt_externe_emailresponsable',
'rt_externe_telephoneresponsable',
'rt_externe_civility_dpo',
'rt_externe_prenom_dpo',
'rt_externe_nom_dpo',
'rt_externe_numerocnil_dpo',
'rt_externe_email_dpo',
'rt_externe_telephonefixe_dpo',
'rt_externe_telephoneportable_dpo',
];
$prefixChampName = 'st_organisation_';
}
$rtOrstValues = $this->Organisation->find('first', [
'joins' => [
$this->Organisation->join('Dpo', ['type' => 'INNER']),