Commit 6a1d510c authored by Théo GUILLON's avatar Théo GUILLON
Browse files

Modification : lors de l'initialisation d'un traitement, les champs...

Modification : lors de l'initialisation d'un traitement, les champs obligatoires ont été rendu non obligatoire.
Modification : de l'état 12
Ajout : de l'état 13
parent 7dd806e2
......@@ -419,4 +419,9 @@ DELETE FROM valeurs WHERE champ_name = 'donneesSensible';
INSERT INTO liste_droits (libelle, value, created, modified) VALUES
('Consulter tous les traitements dans l''entité', 33, NOW(), NOW());
UPDATE etats SET libelle = 'Traitement initialisé, recu pour rédaction' WHERE value = 12;
INSERT INTO etats (libelle, value, created, modified) VALUES
('Rédaction du traitement initialisé par le DPO', 13, NOW(), NOW());
COMMIT;
......@@ -154,7 +154,8 @@ class BanettesComponent extends Component {
EtatFiche::ENCOURS_REDACTION,
EtatFiche::REPONSE_AVIS,
EtatFiche::REPLACER_REDACTION,
EtatFiche::REDACTION_TRAITEMENT_INITIALISE
EtatFiche::TRAITEMENT_INITIALISE_RECU,
EtatFiche::TRAITEMENT_INITIALISE_REDIGER
],
'EtatFiche.actif' => true,
'EtatFiche.user_id' => $this->Session->read('Auth.User.id')
......
......@@ -564,7 +564,7 @@ class EtatFichesController extends AppController
$etat_fiches_id = $traitementEnReponse['EtatFiche']['previous_etat_id'];
$actif = true;
break;
case EtatFiche::REDACTION_TRAITEMENT_INITIALISE:
case EtatFiche::TRAITEMENT_INITIALISE_RECU:
$etat_fiches_id = $traitementEnReponse['EtatFiche']['previous_etat_id'];
$actif = true;
break;
......@@ -1260,7 +1260,7 @@ class EtatFichesController extends AppController
$this->EtatFiche->create([
'EtatFiche' => [
'fiche_id' => $this->request->data['EtatFiche']['ficheNum'],
'etat_id' => EtatFiche::REDACTION_TRAITEMENT_INITIALISE,
'etat_id' => EtatFiche::TRAITEMENT_INITIALISE_RECU,
'previous_user_id' => $this->Auth->user('id'),
'user_id' => $this->request->data['EtatFiche']['destinataire']
]
......@@ -1290,22 +1290,22 @@ class EtatFichesController extends AppController
$this->Historique->create([
'Historique' => [
'content' => $this->Auth->user('prenom') . ' ' . $this->Auth->user('nom') . ' ' . $messageHistorique . ' ' . $destinataire['User']['prenom'] . ' ' . $destinataire['User']['nom'] . ' ' . __d('historique', 'historique.redaction'),
'content' => $this->Auth->user('nom_complet') . ' ' . $messageHistorique . ' ' . $destinataire['User']['prenom'] . ' ' . $destinataire['User']['nom'] . ' ' . __d('historique', 'historique.redaction'),
'fiche_id' => $this->request->data['EtatFiche']['ficheNum']
]
]);
$success = $success && false !== $this->Historique->save(null, ['atomic' => false]);
// @todo
if ($success == true) {
$this->Historique->create([
'Historique' => [
'content' => __d('historique', 'historique.redactionInitialisationTraitement') . ' ' . $destinataire['User']['prenom'] . ' ' . $destinataire['User']['nom'] . ' ' . __d('historique', 'historique.redactiontraitementInitialisationTraitement'),
'fiche_id' => $this->request->data['EtatFiche']['ficheNum']
]
]);
$success = $success && false !== $this->Historique->save(null, ['atomic' => false]);
}
// if ($success == true) {
// $this->Historique->create([
// 'Historique' => [
// 'content' => __d('historique', 'historique.redactionInitialisationTraitement') . ' ' . $destinataire['User']['prenom'] . ' ' . $destinataire['User']['nom'] . ' ' . __d('historique', 'historique.redactiontraitementInitialisationTraitement'),
// 'fiche_id' => $this->request->data['EtatFiche']['ficheNum']
// ]
// ]);
// $success = $success && false !== $this->Historique->save(null, ['atomic' => false]);
// }
}
}
}
......
......@@ -246,19 +246,66 @@ class FichesController extends AppController
}
/**
* Gère l'ajout de fiches
* Gère l'ajout d'un fiche
*
* @param int $id
* @param int $formulaire_id : ID du formulaire utilisé
*
* @access public
* @created 17/06/2015
* @version V1.0.0
*
* @modified 11/12/2019
* @version V1.2.0
* @modified 23/06/2020
* @version V2.0.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
public function add($formulaire_id, $initialisation = false)
public function add($formulaire_id)
{
if ($this->Droits->existDPO() === false) {
throw new ForbiddenException("Aucun DPO n'a été défini pour votre entité. Veuillez contacter votre administrateur.");
}
if (true !== $this->Droits->authorized(ListeDroit::REDIGER_TRAITEMENT)) {
throw new ForbiddenException(__d('default', 'default.flasherrorPasDroitPage'));
}
$this->set('title', __d('fiche', 'fiche.titreCrationFiche'));
return $this->_createFiche($formulaire_id, false);
}
/**
* Gère l'initialisation d'une fiche
*
* @param int $formulaire_id : ID du formulaire utilisé
*
* @access public
*
* @created 23/06/2020
* @version V2.0.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
public function initialisation($formulaire_id)
{
if (true !== $this->Droits->authorized($this->Droits->isDpo())) {
throw new ForbiddenException(__d('default', 'default.flasherrorPasDroitPage'));
}
$this->set('title', __d('fiche', 'fiche.titreInitialisationFiche'));
return $this->_createFiche($formulaire_id, true);
}
/**
* Gère la création d'une fiche
*
* @param int $formulaire_id : ID du formulaire utilisé
* @param bool $initialisationMode : Connaitre le mode de création de la fiche (rédaction = false, initialisation = true)
*
* @created 23/06/2020
* @version V2.0.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
protected function _createFiche($formulaire_id, $initialisationMode)
{
if (empty($this->Session->read($this->Session->read('Auth.User.uuid')))) {
$dir = CHEMIN_PIECE_JOINT_TMP . $this->Session->read('Auth.User.id') . DS . $this->Session->read('Auth.User.uuid');
......@@ -267,14 +314,8 @@ class FichesController extends AppController
$this->set('files', $files);
}
if ($this->Droits->existDPO() === false) {
throw new ForbiddenException("Aucun DPO n'a été défini pour votre entité. Veuillez contacter votre administrateur.");
}
$this->Droits->assertRecordAuthorized('Formulaire', $formulaire_id);
$this->set('title', __d('fiche', 'fiche.titreCrationFiche'));
if ($this->request->is('POST')) {
if ('Cancel' === Hash::get($this->request->data, 'submit')) {
if (!empty($this->Session->read('Auth.User.uuid'))) {
......@@ -337,37 +378,36 @@ class FichesController extends AppController
$data['Fiche']['rt_externe'] = 0;
}
$success = $this->WebdpoFiche->saveWithVirtualFields($data, $formulaireFields, $formulaireOptions, false, true);
$success = $this->WebdpoFiche->saveWithVirtualFields(
$data,
$formulaireFields,
$formulaireOptions,
false,
true,
$initialisationMode
);
if ($success == true) {
$last = $this->Fiche->getLastInsertID();
if ($success == true) {
if ($initialisation == true) {
$commentaireHistorique = __d('historique', 'historique.initialisationTraitement');
$etat_id_traitement = EtatFiche::INITIALISATION_TRAITEMENT;
} else {
$commentaireHistorique = __d('historique', 'historique.creationTraitement');
$etat_id_traitement = EtatFiche::ENCOURS_REDACTION;
}
if ($initialisationMode == true) {
$commentaireHistorique = __d('historique', 'historique.initialisationTraitement');
$etat_id_traitement = EtatFiche::INITIALISATION_TRAITEMENT;
} else {
$commentaireHistorique = __d('historique', 'historique.creationTraitement');
$etat_id_traitement = EtatFiche::ENCOURS_REDACTION;
}
$this->Historique->create([
'Historique' => [
'content' => $commentaireHistorique . ' ' . $this->Auth->user('prenom') . ' ' . $this->Auth->user('nom'),
'fiche_id' => $last
]
]);
$success = $success && false !== $this->Historique->save(null, ['atomic' => false]);
$contentHistorique = $commentaireHistorique . ' ' . $this->Auth->user('nom_complet');
$success = $success && false !== $this->_saveHistorique($contentHistorique, $last);
$this->EtatFiche->create([
'EtatFiche' => [
'fiche_id' => $last,
'etat_id' => $etat_id_traitement,
'previous_user_id' => $this->Auth->user('id'),
'user_id' => $this->Auth->user('id')
]
]);
$success = $success && false !== $this->EtatFiche->save(null, ['atomic' => false]);
if ($success == true) {
$success = $success && false !== $this->_saveEtatFiche(
$last,
$etat_id_traitement,
$this->Auth->user('id'),
$this->Auth->user('id')
);
if (!empty($this->Session->read('Auth.User.uuid'))) {
if ($success == true) {
......@@ -469,15 +509,25 @@ class FichesController extends AppController
// Récupère en BDD les normes. Renvoie les normes et les descriptions
$this->getNormes();
// On récupère les types d'annexes
$typages = $this->_typages();
// On récupère les responsable
// On récupère les responsables
$responsables = $this->_responsables();
// On récupère les soustraitant
// On récupère les soustraitants
$soustraitants = $this->_soustraitants();
$this->set(compact('formulaire_id', 'formulaireOLD', 'typages', 'responsables', 'soustraitants'));
$this->set(compact(
'formulaire_id',
'formulaireOLD',
'typages',
'responsables',
'soustraitants',
'initialisationMode'
));
$this->view = 'add';
}
/**
......@@ -598,19 +648,35 @@ class FichesController extends AppController
throw new ForbiddenException(__d('default', 'default.flasherrorPasDroitPage'));
}
$fichiers = $this->Fichier->find('all', [
$success = true;
$this->Fiche->begin();
$etatFiche = $this->EtatFiche->find('first', [
'conditions' => [
'fiche_id' => $id
'fiche_id' => $id,
'actif' => true
],
'fields' => [
'url'
'etat_id'
]
]);
$success = true;
$this->Fiche->begin();
if ($etatFiche['EtatFiche']['etat_id'] === EtatFiche::TRAITEMENT_INITIALISE_RECU) {
$success = false;
}
if ($success == true) {
$fichiers = $this->Fichier->find('all', [
'conditions' => [
'fiche_id' => $id
],
'fields' => [
'url'
]
]);
$success = $success && false !== $this->Fiche->delete($id);
$success = $success && false !== $this->Fiche->delete($id);
}
if ($success == true) {
$this->Fiche->commit();
......@@ -762,7 +828,29 @@ class FichesController extends AppController
$data['Fiche']['rt_externe'] = 0;
}
$success = $this->WebdpoFiche->saveWithVirtualFields($data, $formulaireFields, $formulaireOptions, $formulaireOLD['Formulaire']['oldformulaire']);
$etatFiche = $this->EtatFiche->find('first', [
'conditions' => [
'fiche_id' => $id,
'actif' => true
],
'fields' => [
'etat_id'
]
]);
$initialisationMode = false;
if ($etatFiche['EtatFiche']['etat_id'] === EtatFiche::INITIALISATION_TRAITEMENT) {
$initialisationMode = true;
}
$success = $this->WebdpoFiche->saveWithVirtualFields(
$data,
$formulaireFields,
$formulaireOptions,
$formulaireOLD['Formulaire']['oldformulaire'],
false,
$initialisationMode
);
if ($success == true) {
$etatTraitement = $this->EtatFiche->find('first', [
......@@ -777,17 +865,14 @@ class FichesController extends AppController
if ($etatTraitement['EtatFiche']['etat_id'] === EtatFiche::MODIFICATION_TRAITEMENT_REGISTRE) {
$texteHistorique = __d('historique', 'historique.modifierTraitementRegistre');
} else {
} elseif ($etatTraitement['EtatFiche']['etat_id'] === EtatFiche::TRAITEMENT_INITIALISE_RECU) {
$texteHistorique = __d('historique', 'historique.redactionTraitementInitialiser');
}else {
$texteHistorique = __d('historique', 'historique.modifierTraitement');
}
$this->Historique->create([
'Historique' => [
'content' => $this->Auth->user('nom_complet') . ' ' . $texteHistorique,
'fiche_id' => $id
]
]);
$success = false !== $this->Historique->save(null, ['atomic' => false]) && $success;
$contentHistorique = $this->Auth->user('nom_complet') . ' ' . $texteHistorique;
$success = $success && false !== $this->_saveHistorique($contentHistorique, $id);
if (isset($this->request->data['delfiles']) && !empty($this->request->data['delfiles'])) {
debug("lalal");die;
......@@ -833,6 +918,24 @@ class FichesController extends AppController
}
}
}
if ($success == true && $etatFiche['EtatFiche']['etat_id'] === EtatFiche::TRAITEMENT_INITIALISE_RECU) {
$success = $success && $this->EtatFiche->updateAll([
'actif' => false
], [
'fiche_id' => $id
]) !== false;
if ($success == true) {
$success = $success && false !== $this->_saveEtatFiche(
$id,
EtatFiche::TRAITEMENT_INITIALISE_REDIGER,
$this->Auth->user('id'),
$this->Auth->user('id')
);
}
}
}
if ($success == true &&
......@@ -943,7 +1046,22 @@ class FichesController extends AppController
$typages = $this->_typages();
$this->set(compact('formulaireOLD', 'typages'));
$etatFiche = $this->EtatFiche->find('first', [
'conditions' => [
'fiche_id' => $id,
'actif' => true
],
'fields' => [
'etat_id'
]
]);
$initialisationMode = false;
if ($etatFiche['EtatFiche']['etat_id'] === EtatFiche::INITIALISATION_TRAITEMENT) {
$initialisationMode = true;
}
$this->set(compact('formulaireOLD', 'typages', 'initialisationMode'));
$this->set('formulaire_id', $fiche['Fiche']['form_id']);
$this->view = 'add';
......@@ -1056,11 +1174,13 @@ class FichesController extends AppController
$this->getOrganisationForSt();
}
$this->request->data['Fiche']['coresponsable'] = $fiche['Fiche']['coresponsable'];
$this->request->data['Fiche']['soustraitance'] = $fiche['Fiche']['soustraitance'];
$this->request->data['Fiche']['transfert_hors_ue'] = $fiche['Fiche']['transfert_hors_ue'];
$this->request->data['Fiche']['donnees_sensibles'] = $fiche['Fiche']['donnees_sensibles'];
$this->request->data['Fiche']['obligation_pia'] = $fiche['Fiche']['obligation_pia'];
$this->request->data['Fiche']['realisation_pia'] = $fiche['Fiche']['realisation_pia'];
$this->request->data['Fiche']['depot_pia'] = $fiche['Fiche']['depot_pia'];
$this->request->data['Fiche']['coresponsable'] = $fiche['Fiche']['coresponsable'];
$this->request->data['Fiche']['soustraitance'] = $fiche['Fiche']['soustraitance'];
// On récupère les responsable
$responsables = $this->_responsables();
......@@ -1596,13 +1716,8 @@ class FichesController extends AppController
$success = $success && false !== $this->Fiche->EtatFiche->save(null, ['atomic' => false]);
if ($success == true) {
$this->Historique->create([
'Historique' => [
'content' => $this->Auth->user('prenom') . ' ' . $this->Auth->user('nom') . ' ' . __d ('historique', 'historique.verrouillerTraitement'),
'fiche_id' => $id
]
]);
$success = $success && false !== $this->Historique->save(null, ['atomic' => false]);
$contentHistorique = $this->Auth->user('nom_complet') . ' ' . __d ('historique', 'historique.verrouillerTraitement');
$success = $success && false !== $this->_saveHistorique($contentHistorique, $id);
}
}
}
......@@ -1934,26 +2049,16 @@ class FichesController extends AppController
}
if ($success === true) {
$commentaireHistorique = __d('historique', 'historique.initialisationTraitement');
$this->Historique->create([
'Historique' => [
'content' => $commentaireHistorique . ' ' . $this->Auth->user('prenom') . ' ' . $this->Auth->user('nom'),
'fiche_id' => $idNewFiche
]
]);
$success = $success && false !== $this->Historique->save(null, ['atomic' => false]);
$contentHistorique = __d('historique', 'historique.initialisationTraitement') . ' ' . $this->Auth->user('nom_complet');
$success = $success && false !== $this->_saveHistorique($contentHistorique, $idNewFiche);
if ($success === true) {
$this->EtatFiche->create([
'EtatFiche' => [
'fiche_id' => $idNewFiche,
'etat_id' => EtatFiche::INITIALISATION_TRAITEMENT,
'previous_user_id' => $user_id,
'user_id' => $user_id
]
]);
$success = $success && false !== $this->EtatFiche->save(null, ['atomic' => false]);
$success = $success && false !== $this->_saveEtatFiche(
$idNewFiche,
EtatFiche::INITIALISATION_TRAITEMENT,
$user_id,
$user_id
);
}
}
}
......@@ -2421,4 +2526,60 @@ class FichesController extends AppController
$this->request->data['Trash']['st_organisation_'.$key.'_dpo'] = $value;
}
}
/**
* Enregistre l'historique de la fiche
*
* @param string $content : texte de l'historique
* @param int $fiche_id : ID de la fiche
* @return bool
*
* @access private
*
* @created 23/06/2020
* @version V2.0.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
private function _saveHistorique($content, $fiche_id)
{
$this->Historique->create([
'Historique' => [
'content' => $content,
'fiche_id' => $fiche_id
]
]);
$success = $this->Historique->save(null, ['atomic' => false]);
return $success;
}
/**
* Enregistre l'état de la fiche
*
* @param int $fiche_id : ID de la fiche
* @param int $etat_id : ID du nouveau état de la fiche
* @param int $previous_user_id : ID de l'ancien utilisateur détenteur de la fiche
* @param int $user_id : ID du nouveau utilisateur détenteur de la fiche
* @return bool
*
* @access private
*
* @created 23/06/2020
* @version V2.0.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
private function _saveEtatFiche($fiche_id, $etat_id, $previous_user_id, $user_id)
{
$this->EtatFiche->create([
'EtatFiche' => [
'fiche_id' => $fiche_id,
'etat_id' => $etat_id,
'previous_user_id' => $previous_user_id,
'user_id' => $user_id
]
]);
$success = $this->EtatFiche->save(null, ['atomic' => false]);
return $success;
}
}
......@@ -891,7 +891,7 @@ class PannelController extends AppController {
EtatFiche::REPLACER_REDACTION => __d('pannel', 'pannel.textEtatReplacerRedaction'),
EtatFiche::REPONSE_AVIS => __d('pannel', 'pannel.textEtatConsulte'),
EtatFiche::INITIALISATION_TRAITEMENT => __d('pannel', 'pannel.textEtatInitialisationTraitement'),
EtatFiche::REDACTION_TRAITEMENT_INITIALISE => __d('pannel', 'pannel.textEtatRedactionTraitementInitialise')
EtatFiche::TRAITEMENT_INITIALISE_RECU => __d('pannel', 'pannel.textEtatTraitementInitialiseEnAttenteRedaction')
]
];
......
......@@ -133,6 +133,9 @@ msgstr " Se déconnecter"
msgid "default.popupChoisirFormulaire"
msgstr "Choisir un formulaire"
msgid "default.popupChoisirFormulaireInitialisation"
msgstr "Choisir un formulaire pour l'initialisation d'un traitement"
msgid "default.popupTitreTableauNom"
msgstr "Nom"
......
......@@ -93,7 +93,13 @@ msgstr "Replacé en rédaction par"
msgid "element.Initialisation"
msgstr "Initialisation du traitement par le DPO"
msgid "element.RedactionInitialisation"
msgstr "Rédaction du traitement, initialisé par le DPO"
msgid "element.TraitementInitialiseAttenteRedaction"
msgstr "Traitement initialisé par le DPO, en attente de rédaction"
msgid "element.RedactionTraitementInitialisation"
msgstr "Rédaction du traitement initialisé par le DPO"
msgid "element.RedigerPar"
msgstr "Rédigé par"
###############################################################################
......@@ -18,6 +18,9 @@ msgstr ""
msgid "fiche.titreCrationFiche"
msgstr "Création d'un traitement"
msgid "fiche.titreInitialisationFiche"
msgstr "Initialisation d'un traitement"
msgid "fiche.titreApercuFiche"
msgstr "Visualisation du traitement : "
......@@ -657,4 +660,7 @@ msgid "fiche.champRt_dpo_portable"
msgstr "Téléphone portable du DPO au sein de l'entité du responsable de traitement"
msgid "fiche.champRt_dpo_fix"
msgstr "Téléphone fixe du DPO au sein de l'entité du responsable de traitement"
\ No newline at end of file
msgstr "Téléphone fixe du DPO au sein de l'entité du responsable de traitement"
msgid "fiche.champRealisation_pia"
msgstr "Avez-vous réalisé l'analyse d'impact (AIPD) ?"
\ No newline at end of file
......@@ -18,6 +18,9 @@ msgstr ""
msgid "historique.creationTraitement"
msgstr "Création du traitement par"
msgid "historique.redactionTraitementInitialiser"
msgstr "a rédigé le traitement initialisé par le DPO"
msgid "historique.modifierTraitementRegistre"
msgstr "a modifié le traitement enregistré au registre"
......
......@@ -364,8 +364,8 @@ msgstr "Télécharger le traitement"
msgid "pannel.textEtatInitialisationTraitement"
msgstr "Initialisation du traitement"
msgid "pannel.textEtatRedactionTraitementInitialise"
msgstr "Rédaction du traitement initialisé par le DPO"
msgid "pannel.textEtatTraitementInitialiseEnAttenteRedaction"
msgstr "Traitement initialisé par le DPO, en attente de rédaction"