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

Correction : génération documentaire

Ajout : des variables sur la coresponsabilites la soustraitance, le typage des annexes
parent 39578233
......@@ -380,4 +380,26 @@ ALTER TABLE commentaires DROP CONSTRAINT "commentaires_destinataire_id_fkey";
ALTER TABLE commentaires ALTER COLUMN destinataire_id DROP NOT NULL;
ALTER TABLE commentaires ADD FOREIGN KEY (destinataire_id) REFERENCES users(id) ON DELETE SET NULL ON UPDATE CASCADE;
UPDATE valeurs SET champ_name = 'entite_raisonsociale' WHERE champ_name='raisonsociale';
UPDATE valeurs SET champ_name = 'entite_telephone' WHERE champ_name='telephone';
UPDATE valeurs SET champ_name = 'entite_fax' WHERE champ_name='fax';
UPDATE valeurs SET champ_name = 'entite_adresse' WHERE champ_name='adresse';
UPDATE valeurs SET champ_name = 'entite_email' WHERE champ_name='email';
UPDATE valeurs SET champ_name = 'entite_sigle' WHERE champ_name='sigle';
UPDATE valeurs SET champ_name = 'entite_siret' WHERE champ_name='siret';
UPDATE valeurs SET champ_name = 'entite_ape' WHERE champ_name='ape';
UPDATE valeurs SET champ_name = 'entite_civiliteresponsable' WHERE champ_name='civiliteresponsable';
UPDATE valeurs SET champ_name = 'entite_nomresponsable' WHERE champ_name='nomresponsable';
UPDATE valeurs SET champ_name = 'entite_prenomresponsable' WHERE champ_name='prenomresponsable';
UPDATE valeurs SET champ_name = 'entite_fonctionresponsable' WHERE champ_name='fonctionresponsable';
UPDATE valeurs SET champ_name = 'entite_emailresponsable' WHERE champ_name='emailresponsable';
UPDATE valeurs SET champ_name = 'entite_telephoneresponsable' WHERE champ_name='telephoneresponsable';
UPDATE valeurs SET champ_name = 'entite_dpo' WHERE champ_name='dpo';
UPDATE valeurs SET champ_name = 'entite_numerodpo' WHERE champ_name='numerodpo';
UPDATE valeurs SET champ_name = 'entite_fixDpo' WHERE champ_name='fixDpo';
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';
COMMIT;
......@@ -1142,7 +1142,7 @@ class EtatFichesController extends AppController
$this->Valeur->create([
'fiche_id' => $fiche_id,
'valeur' => $entite[$val],
'champ_name'=> $val
'champ_name'=> 'entite_'.$val
]);
$success = $success && false !== $this->Valeur->save();
}
......@@ -1183,7 +1183,7 @@ class EtatFichesController extends AppController
$this->Valeur->create([
'fiche_id' => $fiche_id,
'valeur' => $userDPO[$val],
'champ_name'=> $val
'champ_name'=> 'entite_'.$val
]);
$success = $success && false !== $this->Valeur->save();
}
......
......@@ -863,37 +863,12 @@ class FichesController extends AppController
'id' => $fiche['Fiche']['form_id']
],
'fields' => [
'oldformulaire',
'soustraitant'
'oldformulaire'
]
]);
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->set('coresponsableid', $fiche['Fiche']['coresponsableid']);
// Reprise des données de la version v1.1.0 pour la soustraitance
if ($formulaireOLD['Formulaire']['soustraitant'] === 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']);
}
// Récupére en BDD les options des champs défini lors de la création du formulaire
$this->getOptionsFields($fiche['Fiche']['form_id']);
$etatTraitement = $this->EtatFiche->find('first', [
'conditions' => [
......@@ -918,9 +893,11 @@ class FichesController extends AppController
// On récupère les responsable
$responsables = $this->_responsables();
$this->set(compact('responsables'));
// On récupère les soustraitant
$soustraitants = $this->_soustraitants();
$this->set(compact('soustraitants'));
// On récupère les coresponsables associés au traitement
$this->_coresponsables($id);
......@@ -929,7 +906,7 @@ class FichesController extends AppController
$this->_soustraitances($id);
$this->set('formulaire_id', $fiche['Fiche']['form_id']); //@TODO
$this->set(compact('valeurs', 'showRegistre', 'formulaireOLD', 'responsables', 'soustraitants'));
$this->set(compact('showRegistre', 'formulaireOLD'));
}
/**
......@@ -2044,25 +2021,25 @@ class FichesController extends AppController
'declarantpersonneemail',
'declarantpersonnefix',
'declarantpersonneportable',
'raisonsociale',
'telephone',
'fax',
'adresse',
'email',
'sigle',
'siret',
'ape',
'civiliteresponsable',
'nomresponsable',
'prenomresponsable',
'fonctionresponsable',
'emailresponsable',
'telephoneresponsable',
'dpo',
'numerodpo',
'fixDpo',
'portableDpo',
'emailDpo'
'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'
];
$valeurs = $this->Valeur->find('all', [
......@@ -2077,7 +2054,7 @@ class FichesController extends AppController
]);
foreach ($valeurs as $key => $value) {
if ($this->Fiche->isJson($value['Valeur']['valeur'])) {
if ($this->Fiche->isJson($value['Valeur']['valeur']) === true) {
$valueDecode = json_decode($value['Valeur']['valeur'], true);
// if (is_object($valueDecode)) {
......
......@@ -29,11 +29,13 @@ class ModelesController extends AppController {
public $uses = [
'Modele',
'Formulaire',
'FormGenerator.Champ',
'Champ',
'Fiche',
'Valeur',
'Organisation',
'User'
'User',
'Coresponsable',
'Soustraitance'
];
/**
......@@ -296,27 +298,12 @@ class ModelesController extends AppController {
];
if ($idFormulaire != null) {
$valeurPropreTraitement += [
'coresponsable' => [
'nomcoresponsable',
'prenomcoresponsable',
'fonctioncoresponsable',
'emailcoresponsable',
'telephonecoresponsable',
'raisonsocialestructure',
'siretstructure',
'apestructure',
'telephonestructure',
'faxstructure',
'adressestructure',
'emailstructure'
]
];
//information sur les champs du formulaire
$variables = $this->Champ->find('all', [
'conditions' => [
'formulaires_id' => $idFormulaire,
'formulaire_id' => $idFormulaire,
'champ_coresponsable' => false,
'champ_soustraitant' => false,
],
'fields' => [
'type',
......@@ -324,34 +311,90 @@ class ModelesController extends AppController {
]
]);
$variables = Hash::extract($variables, '{n}.Champ');
$this->set(compact('variables'));
$soustraitant = $this->Formulaire->find('first', [
$this->_getCoresponsables($idFormulaire);
$this->_getSoustraitances($idFormulaire);
$optionsUseFormulaire = $this->Formulaire->find('first', [
'conditions' => [
'id' => $idFormulaire
],
'fields' => [
'soustraitant'
'usesousfinalite',
'usebaselegale',
'usedecisionautomatisee',
'usetransferthorsue',
'usedonneessensible',
'usepia'
]
]);
if ($soustraitant['Formulaire']['soustraitant'] === true) {
$valeurPropreTraitement += [
'soustraitant' => [
'soustraitantraisonsociale',
'soustraitantsiret',
'soustraitantape',
'soustraitanttelephone',
'soustraitantfax',
'soustraitantadresse',
'soustraitantemail'
]
];
}
$this->set(compact('variables', 'optionsUseFormulaire'));
}
$this->set(compact('valeurPropreTraitement'));
}
private function _getCoresponsables($formulaire_id)
{
$coresponsables = array_filter(array_keys($this->Coresponsable->schema()), function($name) {
return in_array($name, ['id', 'created', 'modified']) === false && preg_match('/_id$/', $name) !== 1;
});
foreach ($coresponsables as $key => $coresponsable) {
$coresponsables[__d('fiche', 'fiche.champ' . ucfirst($coresponsable))] = 'valeur_'.$coresponsable;
unset($coresponsables[$key]);
}
$coresponsableFields = $this->Champ->find('all', [
'conditions' => [
'formulaire_id' => $formulaire_id,
'champ_coresponsable' => true,
'champ_soustraitant' => false,
],
'fields' => [
'type',
'details'
]
]);
foreach ($coresponsableFields as $coresponsableField) {
$details = json_decode($coresponsableField['Champ']['details'], true);
$coresponsables[$details['label']] = $details['name'];
}
$this->set(compact('coresponsables'));
}
private function _getSoustraitances($formulaire_id)
{
$soustraitances = array_filter(array_keys($this->Soustraitance->schema()), function($name) {
return in_array($name, ['id', 'created', 'modified']) === false && preg_match('/_id$/', $name) !== 1;
});
foreach ($soustraitances as $key => $soustraitance) {
$soustraitances[__d('fiche', 'fiche.champ' . ucfirst($soustraitance))] = 'valeur_'.$soustraitance;
unset($soustraitances[$key]);
}
$soustraitanceFields = $this->Champ->find('all', [
'conditions' => [
'formulaire_id' => $formulaire_id,
'champ_coresponsable' => false,
'champ_soustraitant' => true,
],
'fields' => [
'type',
'details'
]
]);
foreach ($soustraitanceFields as $soustraitanceField) {
$details = json_decode($soustraitanceField['Champ']['details'], true);
$soustraitances[$details['label']] = $details['name'];
}
$this->set(compact('soustraitances'));
}
}
......@@ -178,6 +178,7 @@ class RegistresController extends AppController {
'created',
'numero',
'coresponsable',
'soustraitance',
'User' => [
'nom',
'prenom'
......
......@@ -24,6 +24,8 @@ App::uses('AppModel', 'Model');
class Champ extends AppModel {
public $name = 'Champ';
/**
* validate associations
*
......
......@@ -500,8 +500,12 @@ class Fiche extends AppModel {
* @version V1.0.0
*/
public function isJson($string) {
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
if (is_string($string) && is_object(json_decode($string)) || is_array(json_decode($string)) ) {
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
return false;
}
/**
......@@ -526,7 +530,7 @@ class Fiche extends AppModel {
* l'organisation + champ propre au formulaire + informations du DPO +
* information sur le déclarant au moment de la création du traitement
*/
foreach ((array)json_decode($tabId) as $key => $id) {
foreach (json_decode($tabId, true) as $key => $id) {
$donnees['traitement'][$key] = $this->_preparationGenerationValeurTraitement($id, $donnees['traitement'][$key], $historique);
}
......@@ -712,75 +716,30 @@ class Fiche extends AppModel {
* @version V1.0.0
* @author Théo GUILLON <theo.guillon@libriciel.coop>
*/
private function _preparationGenerationValeurTraitement($id, $donnees, $historique) {
//@TODO à revoir suite au modification des traitemenss
debug("A REVOIR"); die;
private function _preparationGenerationValeurTraitement($fiche_id, $donnees, $historique)
{
$data = $this->Valeur->find('all', [
'conditions' => [
'fiche_id' => $id
'fiche_id' => $fiche_id,
'champ_name !=' => [
'coresponsabilitefields',
'soustraitancefields'
]
],
'fields' => [
'valeur',
'champ_name'
]
]);
$traitement = $this->find('first', [
'conditions' => [
'id' => $id
],
'fields' => [
'created',
'modified',
'norme_id'
]
]);
$norme = $this->Norme->find('first', [
'conditions' => [
'id' => $traitement['Fiche']['norme_id']
],
]);
$data[] = [
'Valeur' => [
'valeur' => $norme['Norme']['norme']. "-" . $norme['Norme']['numero'],
'champ_name' => 'norme'
]
];
$data[] = [
'Valeur' => [
'valeur' => $norme['Norme']['libelle'],
'champ_name' => 'normelibelle'
]
];
$data[] = [
'Valeur' => [
'valeur' => $norme['Norme']['description'],
'champ_name' => 'normedescription'
]
];
$data[] = [
'Valeur' => [
'valeur' => $traitement['Fiche']['created'],
'champ_name' => 'fichecreated'
]
];
$data[] = [
'Valeur' => [
'valeur' => $traitement['Fiche']['modified'],
'champ_name' => 'fichemodified'
]
];
$data = $this->_addInfoTraitement($fiche_id, $data);
/**
* On recupere les champs 'deroulant', 'checkboxes', 'radios' qui
* sont dans le formulaire associer a la fiche
*/
$idForm = $this->find('first', [
'conditions' => ['id' => $id]
'conditions' => ['id' => $fiche_id]
]);
$typeChamps = ['deroulant', 'checkboxes', 'multi-select'];
......@@ -798,9 +757,9 @@ class Fiche extends AppModel {
$choixChampMultiple = [];
$checkBoxField = [];
foreach ($champs as $value) {
$options = json_decode($value['FgChamp']['details'], true);
$options = json_decode($value['Champ']['details'], true);
if (in_array($value['FgChamp']['type'], ['checkboxes', 'multi-select'])) {
if (in_array($value['Champ']['type'], ['checkboxes', 'multi-select'])) {
$checkBoxField[$options['name']] = $options['options'];
} else {
$choixChampMultiple[$options['name']] = $options['options'];
......@@ -809,7 +768,15 @@ class Fiche extends AppModel {
$champsInformationComplementaire = [
'sousFinalite',
'baselegale'
'baselegale',
'criteres',
];
$sections = [
'horsue',
'donneessensibles',
'coresponsables',
'soustraitances',
];
/**
......@@ -833,39 +800,24 @@ class Fiche extends AppModel {
];
}
} elseif (in_array($value['Valeur']['champ_name'], $champsInformationComplementaire)) {
if ($value['Valeur']['champ_name'] === 'sousFinalite') {
foreach (json_decode($value['Valeur']['valeur']) as $key => $val) {
$donnees[$value['Valeur']['champ_name']][$key]['valeur_' . $value['Valeur']['champ_name']] = [
foreach (json_decode($value['Valeur']['valeur']) as $key => $val) {
$donnees[$value['Valeur']['champ_name']][$key]['valeur_' . $value['Valeur']['champ_name']] = [
'value' => $val,
'type' => 'text'
];
}
} elseif (in_array($value['Valeur']['champ_name'], $sections)) {
$jsons = json_decode($value['Valeur']['valeur'], true);
foreach ($jsons as $key => $json) {
foreach ($json as $variable => $val) {
$donnees[$value['Valeur']['champ_name']][$key]['valeur_' . $variable] = [
'value' => $val,
'type' => 'text'
];
}
}
// if ($value['Valeur']['champ_name'] === 'baselegale') {
// $baseLegales = $this->Baselegale->find('all', [
// 'conditions' => [
// 'id' => json_decode($value['Valeur']['valeur'])
// ],
// 'fields' => [
// 'id',
// 'libelle',
// 'description'
// ]
// ]);
//
// foreach ($baseLegales as $key => $val) {
// $donnees[$value['Valeur']['champ_name']][$key]['valeur_' . $value['Valeur']['champ_name']] = [
// 'value' => $val['Baselegale']['libelle'],
// 'type' => 'text'
// ];
//
// $donnees[$value['Valeur']['champ_name'].'description'][$key]['valeur_' . $value['Valeur']['champ_name'].'description'] = [
// 'value' => $val['Baselegale']['description'],
// 'type' => 'text'
// ];
// }
// }
} else {
$donnees['valeur_' . $value['Valeur']['champ_name']] = [
'value' => $value['Valeur']['valeur'],
......@@ -876,19 +828,253 @@ class Fiche extends AppModel {
// unset($donnees['valeur_fichiers']);
if ($historique == true) {
$donnees = $this->_preparationAnnexe($id, $donnees);
$donnees = $this->_preparationAnnexe($fiche_id, $donnees);
}
return ($donnees);
}
private function _addInfoTraitement($fiche_id, $data)
{
$traitement = $this->find('first', [
'conditions' => [
'id' => $fiche_id
],
'fields' => [
'norme_id',
'coresponsable',
'soustraitance',
'obligation_pia',
'realisation_pia',
'depot_pia',
'created',
'modified'
]
]);
foreach ($traitement as $fiche) {
foreach ($fiche as $key => $value) {
switch ($key) {
case 'norme_id':
if (!empty($value)) {
$data = $this->_addNorme($data, $value);
}
break;
case 'coresponsable':
if ($value === true) {
$data = $this->_addValueData($data, 'Oui', $key);
$data = $this->_addCoresponsable($data, $fiche_id);
} else {
$data = $this->_addValueData($data, 'Non', $key);
}
break;
case 'soustraitance':
if ($value === true) {
$data = $this->_addValueData($data, 'Oui', $key);
$data = $this->_addSoustraitance($data, $fiche_id);
} else {
$data = $this->_addValueData($data, 'Non', $key);
}
break;
case 'obligation_pia':
case 'realisation_pia':
case 'depot_pia':
if (!empty($value)) {
if ($value === true) {
$data = $this->_addValueData($data, 'Oui', $key);
} else {
$data = $this->_addValueData($data, 'Non', $key);
}
}
break;
case 'created':
case 'modified':
$data = $this->_addValueData($data, $value, 'fiche'.$key);
break;
default:
break;
}
}
}
return $data;
}
private function _addNorme($data, $norme_id)
{
$norme = $this->Norme->find('first', [