Commit 55eb1bf4 authored by tguillon's avatar tguillon
Browse files

Ajout: des options donc la création et modification et visualisation d'un traitement

parent 19e55331
......@@ -78,31 +78,54 @@ INSERT INTO baselegales (libelle, description, created, modified) VALUES
('L’intérêt public', 'Article 6 1. e) : Le traitement est nécessaire à l''exécution d''une mission d''intérêt public ou relevant de l''exercice de l''autorité publique dont est investi le responsable du traitement.', NOW(), NOW()),
('Les intérêts légitimes', 'Article 6 1. f) : Le traitement est nécessaire aux fins des intérêts légitimes poursuivis par le responsable du traitement ou par un tiers, à moins que ne prévalent les intérêts ou les libertés et droits fondamentaux de la personne concernée qui exigent une protection des données à caractère personnel, notamment lorsque la personne concernée est un enfant.<br /><br />Le point f) du premier alinéa ne s''applique pas au traitement effectué par les autorités publiques dans l''exécution de leurs missions.', NOW(), NOW());
--
-- ALTER TABLE fg_formulaires TO formulaires
--
ALTER TABLE fg_formulaires RENAME TO formulaires;
ALTER SEQUENCE fg_formulaires_id_seq RENAME TO formulaires_id_seq;
ALTER TABLE formulaires
DROP CONSTRAINT fg_formulaires_organisations_id_fkey,
ADD CONSTRAINT formulaires_organisations_id_fkey FOREIGN KEY (organisations_id) REFERENCES organisations (id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE formulaires ADD COLUMN usesousfinalite BOOLEAN DEFAULT FALSE;
ALTER TABLE formulaires ADD COLUMN usebaselegale BOOLEAN DEFAULT FALSE;
ALTER TABLE formulaires ADD COLUMN usedecisionautomatisee BOOLEAN DEFAULT FALSE;
ALTER TABLE formulaires ADD COLUMN usetransferthorsue BOOLEAN DEFAULT FALSE;
ALTER TABLE formulaires ADD COLUMN usedonneessensible BOOLEAN DEFAULT FALSE;
ALTER TABLE formulaires ADD COLUMN useallextensionfiles BOOLEAN DEFAULT FALSE;
ALTER TABLE formulaires ALTER COLUMN soustraitant DROP NOT NULL;
ALTER TABLE formulaires ALTER COLUMN active DROP NOT NULL;
ALTER TABLE formulaires ALTER COLUMN active SET DEFAULT FALSE;
--
-- ALTER TABLE fg_champs TO champs
--
ALTER TABLE fg_champs RENAME TO champs;
ALTER SEQUENCE fg_champs_id_seq RENAME TO champs_id_seq;
ALTER TABLE champs RENAME COLUMN formulaires_id TO formulaire_id;
ALTER TABLE champs
DROP CONSTRAINT fg_champs_formulaires_id_fkey,
ADD CONSTRAINT fg_champs_formulaire_id_fkey FOREIGN KEY (formulaire_id) REFERENCES formulaires (id) ON DELETE CASCADE ON UPDATE CASCADE;
ADD CONSTRAINT champs_formulaire_id_fkey FOREIGN KEY (formulaire_id) REFERENCES formulaires (id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE champs ADD COLUMN champ_coresponsable BOOLEAN DEFAULT FALSE;
ALTER TABLE champs ADD COLUMN champ_soustraitant BOOLEAN DEFAULT FALSE;
--
-- ALTER TABLE fiches
--
ALTER TABLE fiches
DROP CONSTRAINT fiches_form_id_fkey,
ADD CONSTRAINT fiches_form_id_fkey FOREIGN KEY (form_id) REFERENCES formulaires (id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE fiches ADD COLUMN soustraitance BOOL NOT NULL DEFAULT FALSE;
--
-- ALTER TABLE modeles
--
ALTER TABLE modeles
DROP CONSTRAINT modeles_formulaires_id_fkey,
ADD CONSTRAINT modeles_formulaires_id_fkey FOREIGN KEY (formulaires_id) REFERENCES formulaires (id) ON DELETE CASCADE ON UPDATE CASCADE;
......
......@@ -76,10 +76,9 @@ class FichesController extends AppController
]);
}
public function saveFileTmp()
public function saveFileTmp($formulaire_id)
{
if (!empty($this->request->params['form']['fichiers'])) {
if (empty($this->Session->read('Auth.User.uuid'))) {
$this->Session->write('Auth.User.uuid', CakeText::uuid());
}
......@@ -89,6 +88,21 @@ class FichesController extends AppController
// On verifie si le dossier file existe. Si c'est pas le cas on le cree
create_arborescence_files($this->Session->read('Auth.User.id'));
// $allextentionFile = $this->Formulaire->find('first', [
// 'conditions' => [
// 'id' => $formulaire_id
// ],
// 'fields' => [
// 'useallextensionfiles'
// ]
// ]);
// if ($allextentionFile['Formulaire']['useallextensionfiles'] == true) {
// $accepted = Configure::read('allFileAnnexeAcceptedTypes');
// } else {
$accepted = ['application/pdf', 'application/vnd.oasis.opendocument.text'];
// }
$json = [];
foreach ($this->request->params['form']['fichiers']['tmp_name'] as $key => $tmpFile) {
$dir = CHEMIN_PIECE_JOINT_TMP . $this->Session->read('Auth.User.id') . DS . $this->Session->read('Auth.User.uuid');
......@@ -101,7 +115,6 @@ class FichesController extends AppController
$path = $dir . DS . $filename;
$mime = mime_content_type($tmpFile);
$accepted = ['application/pdf', 'application/vnd.oasis.opendocument.text'];
if (in_array($mime, $accepted) === true) {
move_uploaded_file($tmpFile, $path);
......@@ -239,7 +252,9 @@ class FichesController extends AppController
'formulaire_id' => $formulaire_id
],
'fields' => [
'details'
'details',
'champ_coresponsable',
'champ_soustraitant'
]
]);
$success = $this->WebdpoFiche->saveWithVirtualFields($data, $champs);
......@@ -324,6 +339,8 @@ class FichesController extends AppController
// Récupère en BDD les normes. Renvoie les normes et les descriptions
$this->getNormes();
$this->set(compact('formulaire_id'));
}
/**
......@@ -442,16 +459,35 @@ class FichesController extends AppController
}
/**
* Gère l'édition de fiches
* Modification d'un traitement
*
* @param int $id
*
* @access public
*
* @created 17/06/2015
* @version V1.0.0
*
* @modified 27/02/2020
* @version v1.2.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
public function edit($id = null)
public function edit($id)
{
if (!$this->Droits->isEditable($id)) {
$this->Session->setFlash(__d('fiche', 'fiche.flasherrorPasAccesTraitement'), 'flasherror');
$this->redirect($this->Referers->get());
}
if (empty($this->Session->read($this->Session->read('Auth.User.uuid')))) {
$files = array_diff(scandir(CHEMIN_PIECE_JOINT_TMP . $this->Session->read('Auth.User.id') . DS . $this->Session->read('Auth.User.uuid')), array('..', '.'));
$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.");
}
if (!$id && !$this->request->data['Fiche']['id']) {
$this->Session->setFlash(__d('default', 'default.flasherrorTraitementInexistant'), 'flasherror');
$this->redirect($this->Referers->get());
......@@ -469,87 +505,7 @@ class FichesController extends AppController
]);
$this->set('title', __d('fiche', 'fiche.titreEditionFiche') . $nameTraiment['Valeur']['valeur']);
if (empty($this->Session->read($this->Session->read('Auth.User.uuid')))) {
$files = array_diff(scandir(CHEMIN_PIECE_JOINT_TMP . $this->Session->read('Auth.User.id') . DS . $this->Session->read('Auth.User.uuid')), array('..', '.'));
$this->set('files', $files);
}
if (!$this->Droits->isEditable($id)) {
$this->Session->setFlash(__d('fiche', 'fiche.flasherrorPasAccesTraitement'), 'flasherror');
$this->redirect($this->Referers->get());
}
$idForm = $this->Fiche->find('first', [
'conditions' => [
'id' => $id
]
]);
$champs = $this->Champ->find('all', [
'conditions' => [
'formulaires_id' => $idForm['Fiche']['form_id']
],
'order' => [
'colonne ASC',
'ligne ASC'
]
]);
$this->set(compact('champs'));
$this->set('id', $id);
$query = [
'conditions' => [
'abroger' => false
],
'fields' => ['id', 'norme', 'numero', 'libelle', 'description'],
'order' => ['norme', 'numero']
];
$normes = $this->Norme->find('all', $query);
$options_normes = Hash::combine(
$normes,
'{n}.Norme.id',
[
'%s-%s : %s',
'{n}.Norme.norme',
'{n}.Norme.numero',
'{n}.Norme.libelle'
]
);
$this->set(compact('options_normes'));
$descriptions_normes = Hash::combine(
$normes,
'{n}.Norme.id',
'{n}.Norme.description'
);
$this->set(compact('descriptions_normes'));
$this->set('norme_id', $idForm['Fiche']['norme_id']);
$this->getBaseLegales();
$soustraitance = $this->Formulaire->find('first', [
'conditions' => [
'id' => $idForm['Fiche']['form_id']
],
'fields' => [
'soustraitant'
]
]);
$this->set(compact('soustraitance'));
$soustraitants = $this->_soustraitants();
$this->set(compact('soustraitants'));
$this->set('soustraitantid', $idForm['Fiche']['soustraitantid']);
$responsables = $this->_responsables();
$this->set(compact('responsables'));
$this->set('coresponsable', $idForm['Fiche']['coresponsable']);
$this->set('coresponsableid', $idForm['Fiche']['coresponsableid']);
// Si on sauvegarde
if ($this->request->is(['post', 'put'])) {
if ($this->request->is(['POST', 'PUT'])) {
if ('Cancel' === Hash::get($this->request->data, 'submit')) {
if (!empty($this->Session->read('Auth.User.uuid'))) {
$this->Session->delete('Auth.User.uuid');
......@@ -565,46 +521,47 @@ class FichesController extends AppController
$data = $this->request->data;
unset($data['Fiche']['declarantpersonnenom']);
unset($data['Fiche']['declarantservice']);
unset($data['Fiche']['declarantpersonneportable']);
unset($data['Fiche']['declarantpersonneemail']);
unset($data['Fiche']['declarantpersonnefix']);
unset($data['Fiche']['raisonsociale']);
unset($data['Fiche']['telephone']);
unset($data['Fiche']['fax']);
unset($data['Fiche']['adresse']);
unset($data['Fiche']['email']);
unset($data['Fiche']['sigle']);
unset($data['Fiche']['siret']);
unset($data['Fiche']['ape']);
unset($data['Fiche']['civiliteresponsable']);
unset($data['Fiche']['nomresponsable']);
unset($data['Fiche']['prenomresponsable']);
unset($data['Fiche']['fonctionresponsable']);
unset($data['Fiche']['emailresponsable']);
unset($data['Fiche']['telephoneresponsable']);
unset($data['Fiche']['dpo']);
unset($data['Fiche']['numerodpo']);
unset($data['Fiche']['fixDpo']);
unset($data['Fiche']['emailDpo']);
unset($data['Fiche']['portableDpo']);
unset($data['Fiche']['declarantpersonnenom'],
$data['Fiche']['declarantservice'],
$data['Fiche']['declarantpersonneportable'],
$data['Fiche']['declarantpersonneemail'],
$data['Fiche']['declarantpersonnefix']
);
if (Hash::check($this->request->data, 'Fiche.formulaire_id')) {
$data['Fiche']['form_id'] = Hash::get($this->request->data, 'Fiche.formulaire_id');
}
$data['Fiche']['id'] = $id;
$data['Fiche']['organisation_id'] = $this->Session->read('Organisation.id');
$data['Fiche']['norme_id'] = $this->request->data['Fiche']['norme'];
unset($data['Fiche']['norme'], $data['Fiche']['descriptionNorme']);
$form_id = $this->Fiche->find('first', [
'conditions' => [
'id' => $id
],
'fields' => [
'form_id'
]
]);
$champs = $this->Champ->find('all', [
'conditions' => [
'formulaire_id' => $form_id['Fiche']['form_id']
],
'fields' => [
'details',
'champ_coresponsable',
'champ_soustraitant'
]
]);
$success = $this->WebdpoFiche->saveWithVirtualFields($data, $champs);
if ($success == true) {
if ($success == true) {
$etatTraitement = $this->EtatFiche->find('first', [
'conditions' => [
'fiche_id' => $this->request->data['Fiche']['id'],
'fiche_id' => $data['Fiche']['id'],
'actif' => true
],
'fields' => [
......@@ -649,47 +606,43 @@ class FichesController extends AppController
$this->Valeur->rollback();
$this->Session->setFlash(__d('fiche', 'Une erreur inattendue est survenue...'), 'flasherror');
}
} else {
$fiche = $this->Fiche->find('first', ['conditions' => ['Fiche.id' => $id]]);
if (empty($fiche)) {
throw new NotFoundException();
}
$valeurs = $this->Valeur->find('all', [
$fiche = $this->Fiche->find('first', [
'conditions' => [
'fiche_id' => $id
'id' => $id
],
'fields' => [
'form_id',
'norme_id',
'coresponsable',
'soustraitance',
]
]);
foreach ($valeurs as $value) {
if ($this->Fiche->isJson($value['Valeur']['valeur'])) {
$valueDecode = json_decode($value['Valeur']['valeur']);
// On récupère en BDD les champs tous les champs du formulaire
$this->getFormulaireFields($fiche['Fiche']['form_id']);
if (is_object($valueDecode)) {
$valueDecode = json_decode(json_encode($valueDecode), true);
}
// 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'][$value['Valeur']['champ_name']] = $valueDecode;
} else {
$this->request->data['Fiche'][$value['Valeur']['champ_name']] = $value['Valeur']['valeur'];
}
}
$this->set(compact('valeurs'));
// Récupère en BDD les normes. Renvoie les normes et les descriptions
$this->getNormes();
$this->request->data['Fiche'] = array_merge($this->request->data['Fiche'], $fiche['Fiche']);
}
// Récupère les valeurs des champs du traitement
$this->getValueFields($id);
$filesSave = $this->Fichier->find('all', [
'conditions' => [
'fiche_id' => $id
]
]);
$this->set(compact('filesSave'));
$this->set('id', $id);
$this->getFilesSave($id);
$this->request->data['Fiche']['norme_id'] = $fiche['Fiche']['norme_id'];
$this->request->data['Fiche']['coresponsable'] = $fiche['Fiche']['coresponsable'];
$this->request->data['Fiche']['soustraitance'] = $fiche['Fiche']['soustraitance'];
$this->view = 'add';
}
/**
* Gère l'affichage des fiches
* Gère l'affichage d'une traitement
*
* @param int $id
*
......@@ -698,92 +651,90 @@ class FichesController extends AppController
* @created 17/06/2015
* @version V1.0.0
*
* @author Théo GUILLON <theo.guillon@libriciel.coop>
* @edit 25/02/2019
* @edit 26/02/2019
* @version v1.0.2
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*
* @edit 26/02/2020
* @version v1.2.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
public function show($id, $showRegistre = false)
{
if (!$id) {
$findTraitement = $this->Fiche->find('count',[
'conditions' => [
'id' => $id
]
]);
if (!$id || $findTraitement != 1) {
$this->Session->setFlash(__d('default', 'default.flasherrorTraitementInexistant'), 'flasherror');
$this->redirect($this->Referers->get());
}
$nameTraiment = $this->Valeur->find('first', [
$this->requestAction([
'controller' => 'pannel',
'action' => 'supprimerLaNotif',
$id
]);
$nameTraitement = $this->Valeur->find('first', [
'conditions' => [
'fiche_id' => $id,
'champ_name' => 'outilnom'
],
'fields' => [
'valeur'
]
]);
$this->set('title', __d('fiche', 'fiche.titreApercuFiche') . $nameTraitement['Valeur']['valeur']);
$this->set('title', __d('fiche', 'fiche.titreApercuFiche') . $nameTraiment['Valeur']['valeur']);
$idForm = $this->Fiche->find('first', ['conditions' => ['id' => $id]]);
$champs = $this->Champ->find('all', [
'conditions' => ['formulaires_id' => $idForm['Fiche']['form_id']],
'order' => [
'colonne ASC',
'ligne ASC'
$fiche = $this->Fiche->find('first', [
'conditions' => [
'id' => $id
]
]);
if (isset($idForm['Fiche']['norme_id'])) {
if (isset($fiche['Fiche']['norme_id'])) {
$normeTraitement = $this->Norme->find('first', [
'conditions' => [
'id' => $idForm['Fiche']['norme_id']
'id' => $fiche['Fiche']['norme_id']
]
]);
$this->set(compact('normeTraitement'));
}
$valeurs = $this->Valeur->find('all', [
'conditions' => [
'fiche_id' => $id
]
]);
foreach ($valeurs as $key => $value) {
if ($this->Fiche->isJson($value['Valeur']['valeur'])) {
$valueDecode = json_decode($value['Valeur']['valeur']);
if (is_object($valueDecode)) {
$valueDecode = json_decode(json_encode($valueDecode), true);
}
// Récupère les valeurs des champs du traitement
$this->getValueFields($id);
$this->request->data['Fiche'][$value['Valeur']['champ_name']] = $valueDecode;
} else {
$this->request->data['Fiche'][$value['Valeur']['champ_name']] = $value['Valeur']['valeur'];
}
}
$this->getFormulaireFields($fiche['Fiche']['form_id']);
$soustraitance = $this->Formulaire->find('first', [
'conditions' => [
'id' => $idForm['Fiche']['form_id']
],
'fields' => [
'soustraitant'
]
]);
// 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->requestAction([
'controller' => 'pannel',
'action' => 'supprimerLaNotif',
$id
]);
// Récupère en BDD les normes. Renvoie les normes et les descriptions
$this->getNormes();
$filesSave = $this->Fichier->find('all', [
'conditions' => [
'fiche_id' => $id
]
]);
// On récupère les fichiers en annexe
$this->getFilesSave($id);
$this->set('coresponsable', $idForm['Fiche']['coresponsable']);
$this->request->data['Fiche']['coresponsable'] = $fiche['Fiche']['coresponsable'];
$this->request->data['Fiche']['soustraitance'] = $fiche['Fiche']['soustraitance'];
$responsables = $this->_responsables();
$this->getBaseLegales();
// $etatTraitement = $this->EtatFiche->find('first', [
// 'conditions' => [
// 'fiche_id' => $id
// ],
// 'fields' => [
// 'etat_id'
// ]
// ]);
//
// if (in_array($etatTraitement['EtatFiche']['etat_id'], [EtatFiche::VALIDER_DPO, EtatFiche::ARCHIVER, EtatFiche::MODIFICATION_TRAITEMENT_REGISTRE])) {
// $showRegistre = true;
// }
$this->set(compact('soustraitance', 'valeurs', 'champs', 'id', 'filesSave', 'responsables', 'showRegistre'));
$this->set(compact('valeurs', 'showRegistre'));
}
/**
......@@ -1766,7 +1717,17 @@ class FichesController extends AppController
]
]);
$this->set(compact('useFieldsFormulaire'));
$useAllExtensionFiles = $this->Formulaire->find('first', [
'conditions' => [
'id' => $formulaire_id,
'active' => true
],
'fields' => [
'useallextensionfiles'
]
]);
$this->set(compact('useFieldsFormulaire', 'useAllExtensionFiles'));
}
/**
......@@ -1860,4 +1821,67 @@ class FichesController extends AppController
$this->set(compact('fields'));
}
/**
* Récupére en BDD les fichiers associés au traitement
*
* @param int $fiche_id ID du traitement
*
* @access private
*
* @created 27/02/2020
* @version V1.2.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
private function getFilesSave($fiche_id)
{
$filesSave = $this->Fichier->find('all', [
'conditions' => [
'fiche_id' => $fiche_id
]
]);
$this->set(compact('filesSave'));
}
/**
* Récupére en BDD les valeurs des champs du traitement
*
* @param int $fiche_id ID du traitement
*
* @access private
*
* @created 27/02/2020
* @version V1.2.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
private function getValueFields($fiche_id)
{
$valeurs = $this->Valeur->find('all', [
'conditions' => [
'fiche_id' => $fiche_id
],