sof...@adullact.net
unread,Feb 15, 2018, 4:35:08 AM2/15/18Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to openmairi...@googlegroups.com
Author: softime
Date: 2018-02-15 10:35:04 +0100 (Thu, 15 Feb 2018)
New Revision: 2272
Modified:
branches/1.4.0-develop/
branches/1.4.0-develop/HISTORY.txt
branches/1.4.0-develop/obj/etablissement.class.php
branches/1.4.0-develop/obj/etablissement_tous.class.php
branches/1.4.0-develop/obj/lien_etablissement_e_type.class.php
branches/1.4.0-develop/sql/pgsql/etablissement.form.inc.php
branches/1.4.0-develop/tests/010_etablissements.robot
Log:
* Merge avec la branche 1.4.0-develop-typesecondaire
Index: branches/1.4.0-develop
===================================================================
--- branches/1.4.0-develop 2018-02-14 18:04:34 UTC (rev 2271)
+++ branches/1.4.0-develop 2018-02-15 09:35:04 UTC (rev 2272)
Property changes on: branches/1.4.0-develop
___________________________________________________________________
Modified: svn:mergeinfo
## -1,3 +1,4 ##
+/branches/1.4.0-develop-typesecondaire:2248-2271
/branches/bug_identifiant_sig_voie:2160-2166
/branches/bug_test_annee:2034-2039
/branches/contraintes_merge_fields:1801-1822
Modified: branches/1.4.0-develop/HISTORY.txt
===================================================================
--- branches/1.4.0-develop/HISTORY.txt 2018-02-14 18:04:34 UTC (rev 2271)
+++ branches/1.4.0-develop/HISTORY.txt 2018-02-15 09:35:04 UTC (rev 2272)
@@ -4,6 +4,8 @@
1.4.0 (unreleased)
------------------
+* Évolution : Ajout de la possibilité de renseigner les types secondaires pour un établissement lors de son ajout ou de sa modification. Ticket #8982.
+
* Évolution : Ajout des filtres "prochaines dates de visite périodique" pour la recherche avancée dans la liste des établissements. Ticket #8981.
Modified: branches/1.4.0-develop/obj/etablissement.class.php
===================================================================
--- branches/1.4.0-develop/obj/etablissement.class.php 2018-02-14 18:04:34 UTC (rev 2271)
+++ branches/1.4.0-develop/obj/etablissement.class.php 2018-02-15 09:35:04 UTC (rev 2272)
@@ -645,6 +645,7 @@
// Champ en autocomplete
$form->setType('adresse_voie', 'autocomplete');
$form->setType('geolocalise', 'hidden');
+ $form->setType("etablissement_type_secondaire", "select_multiple");
}
if ($maj == 0) {
$form->setType('code', 'hidden');
@@ -656,7 +657,10 @@
$form->setType('si_type_ssi','select');
$form->setType('si_type_alarme','select');
}
-
+ // En mode "supprimer" et "consulter"
+ if ($maj == 2 || $maj == 3) {
+ $form->setType("etablissement_type_secondaire", "select_multiple_static");
+ }
//
$form->setType('geom_point', 'hidden');
$form->setType('geom_emprise', 'hidden');
@@ -691,6 +695,13 @@
//
parent::setSelect($form, $maj, $dnu1, $dnu2);
+ // Inclusion du fichier de requêtes
+ if (file_exists("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php")) {
+ include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php";
+ } elseif (file_exists("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc")) {
+ include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc";
+ }
+
// En mode "ajouter" et "modifier"
if ($maj == 0 || $maj == 1) {
// Initialise les paramétres
@@ -794,9 +805,34 @@
//
$form->setSelect('references_cadastrales', $params);
}
+
+ // Types secondaires
+ $etablissement_id = 0;
+ if (isset($form->val['etablissement']) === true
+ && $form->val['etablissement'] != null
+ && $form->val['etablissement'] != ''
+ && $form->val['etablissement'] != ']') {
+ //
+ $etablissement_id = $form->val['etablissement'];
+ }
+ //
+ $sql_etablissement_type_secondaire_by_id = str_replace('<idx>', $etablissement_id, $sql_etablissement_type_secondaire_by_id);
+ $this->init_select($form, $this->f->db, $maj, null, "etablissement_type_secondaire", $sql_etablissement_type_secondaire, $sql_etablissement_type_secondaire_by_id, true, true);
}
/**
+ * Permet de définir le libellé des champs.
+ *
+ *
+ * @param object &$form Instance du formulaire
+ * @param integer $maj Mode du formulaire
+ */
+ function setLib(&$form,$maj) {
+ parent::setLib($form,$maj);
+ $form->setLib('etablissement_type_secondaire', _('type(s) secondaire(s)'));
+ }
+
+ /**
* TRIGGER - triggerajouter.
*
* - ...
@@ -809,8 +845,145 @@
$this->valF["etablissement"];
}
+ /**
+ * TRIGGER - triggerajouterapres.
+ *
+ * - ...
+ *
+ * @return boolean
+ */
+ function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
+ // Ajout des types secondaires
+ $add_type_secondaire = $this->add_lien_etablissement_e_type_in_trigger();
+ if ($add_type_secondaire === false) {
+ //
+ return false;
+ }
+ //
+ return true;
+ }
+
/**
+ * TRIGGER - triggermodifierapres.
+ *
+ * - ...
+ *
+ * @return boolean
+ */
+ function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
+ // Suppression de tous les liens de la table de liaison etab/type sec
+ $delete_type_secondaire = $this->delete_lien_etablissement_e_type_in_trigger();
+ if ($delete_type_secondaire === false) {
+ //
+ return false;
+ }
+
+ // Ajout des types secondaires
+ $add_type_secondaire = $this->add_lien_etablissement_e_type_in_trigger();
+ if ($add_type_secondaire === false) {
+ //
+ return false;
+ }
+
+ //
+ return true;
+ }
+
+ /**
+ * TRIGGER - triggersupprimerapres.
+ *
+ * - ...
+ *
+ * @return boolean
+ */
+ function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
+ // Suppression de tous les liens de la table de liaison etab/type sec
+ $delete_type_secondaire = $this->delete_lien_etablissement_e_type_in_trigger();
+ if ($delete_type_secondaire === false) {
+ //
+ return false;
+ }
+
+ //
+ return true;
+ }
+
+ /**
+ * Permet d'ajouter les types secondaires de l'établissement dans les
+ * méthodes TRIGGER de la classe.
+ *
+ * @return boolean
+ */
+ function add_lien_etablissement_e_type_in_trigger() {
+ // Récupération des données du select multiple
+ $types_secondaires = $this->getPostedValues('etablissement_type_secondaire');
+ $type_principal = $this->valF['etablissement_type'];
+
+ //
+ $inst_lien_etablissement_e_type = $this->get_inst_lien_etablissement_e_type(']');
+
+ // Ne traite les données que s'il y en a et qu'elles sont correctes
+ if (is_array($types_secondaires) === true && count($types_secondaires) > 0) {
+ // Boucle sur la liste des types sélectionnés
+ foreach ($types_secondaires as $value) {
+ // Pas d'ajout si valeur nulle ou type principal sélectionné
+ if ($value != "" && $value != null && $value != $type_principal) {
+ //
+ $data = array(
+ 'lien_etablissement_e_type' => "",
+ 'etablissement' => $this->valF[$this->clePrimaire],
+ 'etablissement_type' => $value
+ );
+ // Stop le traitement si un ajout échoue
+ $add_type_secondaire = $inst_lien_etablissement_e_type->ajouter($data);
+ if ($add_type_secondaire === false) {
+ //
+ return false;
+ }
+ }
+ }
+ }
+
+ //
+ return true;
+ }
+
+ /**
+ * Permet de supprimer les types secondaires de l'établissement dans les
+ * méthodes TRIGGER de la classe.
+ *
+ * @return boolean
+ */
+ function delete_lien_etablissement_e_type_in_trigger() {
+ //
+ $inst_lien_etablissement_e_type = $this->get_inst_lien_etablissement_e_type(0);
+ $delete_type_secondaire = $inst_lien_etablissement_e_type->delete_by_etablissement($this->valF[$this->clePrimaire]);
+ if ($delete_type_secondaire === false) {
+ //
+ return false;
+ }
+
+ //
+ return true;
+ }
+
+ /**
+ * Fonction générique permettant de récupérer les données d'un champ postées.
+ *
+ * @param string $champ Nom du champ
+ *
+ * @return mixed Valeur posté
+ */
+ function getPostedValues($champ) {
+ // Récupération des demandeurs dans POST
+ if (isset($_POST[$champ]) ) {
+ //
+ return $_POST[$champ];
+ }
+ }
+
+ /**
* Charge le select du champ "adresse_arrondissement" par rapport au
* champ "adresse_voie".
*
@@ -2930,6 +3103,18 @@
);
}
+ /**
+ * Récupère l'instance de la classe lien_etablissement_e_type.
+ *
+ * @param integer $lien_etablissement_e_type Identifiant de l'objet
+ *
+ * @return object Instance de classe
+ */
+ function get_inst_lien_etablissement_e_type($lien_etablissement_e_type) {
+ //
+ return $this->get_inst_common('lien_etablissement_e_type', $lien_etablissement_e_type);
+ }
+
// }}} END - GET INST
Modified: branches/1.4.0-develop/obj/etablissement_tous.class.php
===================================================================
--- branches/1.4.0-develop/obj/etablissement_tous.class.php 2018-02-14 18:04:34 UTC (rev 2271)
+++ branches/1.4.0-develop/obj/etablissement_tous.class.php 2018-02-15 09:35:04 UTC (rev 2272)
@@ -684,6 +684,8 @@
* @return boolean
*/
function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
+ parent::triggerajouterapres($id, $dnu1, $val, $dnu2);
+
// Ajout des parcelles dans la table etablissement_parcelle
$this->ajouter_etablissement_parcelle($this->valF[$this->clePrimaire],
$val['references_cadastrales']);
@@ -710,6 +712,8 @@
* @return boolean
*/
function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
+ parent::triggermodifierapres($id, $dnu1, $val, $dnu2);
+
// On supprime toutes les lignes de la table etablissement_parcelle
// qui font référence à l'établissement en cours de modification
$this->supprimer_etablissement_parcelle($val['etablissement']);
@@ -748,6 +752,7 @@
*
*/
function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
+ parent::triggersupprimerapres($id, $dnu1, $val, $dnu2);
// On supprime toutes les lignes de la table etablissement_parcelle
// qui font référence à l'établissement en cours de suppression
Modified: branches/1.4.0-develop/obj/lien_etablissement_e_type.class.php
===================================================================
--- branches/1.4.0-develop/obj/lien_etablissement_e_type.class.php 2018-02-14 18:04:34 UTC (rev 2271)
+++ branches/1.4.0-develop/obj/lien_etablissement_e_type.class.php 2018-02-15 09:35:04 UTC (rev 2272)
@@ -10,6 +10,70 @@
$this->constructeur($id);
}
+ /**
+ * Supprime tous les enregistrements liés à un etablissement
+ *
+ * @param integer $etab Identifiant du etab
+ *
+ * @return boolean
+ */
+ function delete_by_etablissement($etab) {
+ // Récupère la liste des enregistrements
+ $liens = $this->get_liens_by_etablissement($etab);
+ // S'il y a des liens
+ if (is_array($liens) && count($liens) > 0) {
+ // Pour chaque enregistrement
+ foreach ($liens as $lien) {
+ // Instancie l'enregistrment
+ $obj = new lien_etablissement_e_type(
+ $lien['lien_etablissement_e_type']
+ );
+ // initialisation de la clé primaire
+ $val= array(
+ 'lien_etablissement_e_type' => $lien['lien_etablissement_e_type'],
+ );
+ // Supprime l'enregistrement
+ if ($obj->supprimer($val) == false) {
+ return false;
+ }
+ }
+ }
+ //
+ return true;
+ }
+
+ /**
+ * Récupère la liste des liens par l'identifiant du dossier de coordination.
+ *
+ * @param integer $etab Identifiant du etab
+ *
+ * @return boolean
+ */
+ function get_liens_by_etablissement($etab) {
+ // Initialisation de la variable de résultat
+ $result = array();
+ // Si l'autorité de police est renseigné
+ if (!empty($etab)) {
+ // Requête SQL
+ $sql = sprintf(
+ 'SELECT *
+ FROM %slien_etablissement_e_type
+ WHERE etablissement = %s',
+ DB_PREFIXE,
+ intval($etab)
+ );
+ $res = $this->f->db->query($sql);
+ $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
+ $this->f->isDatabaseError($res);
+ // Stockage du résultat dans un tableau
+ while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
+ $result[] = $row;
+ }
+ }
+ // Retourne le résultat
+ return $result;
+ }
+
}
?>
Modified: branches/1.4.0-develop/sql/pgsql/etablissement.form.inc.php
===================================================================
--- branches/1.4.0-develop/sql/pgsql/etablissement.form.inc.php 2018-02-14 18:04:34 UTC (rev 2271)
+++ branches/1.4.0-develop/sql/pgsql/etablissement.form.inc.php 2018-02-15 09:35:04 UTC (rev 2272)
@@ -17,6 +17,7 @@
if ($obj == "etablissement_tous"
|| $obj == "etablissement_referentiel_erp") {
+ // SELECT
$champs = array(
//
// Détails sécurité et accessibilité
@@ -50,9 +51,9 @@
//
// COL 1
// Fieldset établissement
- "etablissement",
- "code",
- "libelle",
+ "etablissement.etablissement",
+ "etablissement.code",
+ "etablissement.libelle",
"adresse_numero",
"adresse_numero2",
"adresse_voie",
@@ -101,13 +102,18 @@
"geolocalise",
// COL 2
// Fieldset statut
- "etablissement_type",
+ "etablissement.etablissement_type",
+ "array_to_string(
+ array_agg(
+ lien_etablissement_e_type.etablissement_type
+ ORDER BY etablissement_type.libelle),
+ ';') as etablissement_type_secondaire",
"etablissement_categorie",
"etablissement_etat",
"date_arrete_ouverture",
"autorite_police_encours",
- "om_validite_debut",
- "om_validite_fin",
+ "etablissement.om_validite_debut",
+ "etablissement.om_validite_fin",
// Fieldset détail technique
"si_effectif_public",
"si_effectif_personnel",
@@ -130,6 +136,17 @@
"acc_derniere_visite_technicien",
);
+ // FROM
+ $tableSelect .= "
+ LEFT JOIN ".DB_PREFIXE."lien_etablissement_e_type
+ ON lien_etablissement_e_type.etablissement = etablissement.etablissement
+ LEFT JOIN ".DB_PREFIXE."etablissement_type
+ ON etablissement_type.etablissement_type = lien_etablissement_e_type.etablissement_type
+ ";
+
+ // GROUP BY
+ $selection = " GROUP BY etablissement.etablissement ";
+
// Ajout des tableaux des données pour les select
// On transforme les checkbox en select pour la gestion du null
$booleens = array();
@@ -204,4 +221,20 @@
$sql_adresse_arrondissement="SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement WHERE ((arrondissement.om_validite_debut IS NULL AND (arrondissement.om_validite_fin IS NULL OR arrondissement.om_validite_fin > CURRENT_DATE)) OR (arrondissement.om_validite_debut <= CURRENT_DATE AND (arrondissement.om_validite_fin IS NULL OR arrondissement.om_validite_fin > CURRENT_DATE)))
ORDER BY arrondissement.code::int ASC";
+// Liaison NaN - etablissement / types secondaires d'établissement
+$sql_etablissement_type_secondaire = "
+ SELECT etablissement_type.etablissement_type,
+ concat('[',etablissement_type.libelle, '] ', etablissement_type.description)
+ FROM ".DB_PREFIXE."etablissement_type
+ ORDER BY etablissement_type.libelle";
+
+$sql_etablissement_type_secondaire_by_id = "
+ SELECT lien_etablissement_e_type.etablissement_type,
+ concat('[',etablissement_type.libelle, '] ', etablissement_type.description)
+ FROM ".DB_PREFIXE."lien_etablissement_e_type
+ LEFT JOIN ".DB_PREFIXE."etablissement_type
+ ON etablissement_type.etablissement_type = lien_etablissement_e_type.etablissement_type
+ WHERE lien_etablissement_e_type.etablissement = <idx>
+ ORDER BY etablissement_type.libelle";
+
?>
Modified: branches/1.4.0-develop/tests/010_etablissements.robot
===================================================================
--- branches/1.4.0-develop/tests/010_etablissements.robot 2018-02-14 18:04:34 UTC (rev 2271)
+++ branches/1.4.0-develop/tests/010_etablissements.robot 2018-02-15 09:35:04 UTC (rev 2272)
@@ -770,3 +770,41 @@
Click On Search Button
Page Should Contain ${etab05.libelle}
Page Should Contain ${etab04.libelle}
+
+
+Processus type secondaire
+
+ [Documentation] Test sur les processus liés a l'ajout des types secondaires
+ Depuis la page d'accueil cadre-si cadre-si
+
+ #On vérifie lors d'une Création
+ Go To ${PROJECT_URL}${OM_ROUTE_FORM}&obj=etablissement_tous&action=0&retour=form
+ Input Text css=#libelle MAGASIN TYPE SECONDAIRE
+ Select From List By Label css=#etablissement_nature ERP Référentiel
+ Select From List By Label css=#etablissement_type Y
+ Select From List By Label css=#etablissement_categorie 1
+ # On sélectionne des types secondaires
+ Select From List By Label css=#etablissement_type_secondaire [CTS] Chapiteaux, Tentes et Structures toile [EF] Établissements flottants (eaux intérieures)
+ # On valide le formulaire
+ Click On Submit Button
+ # On vérifie le message affiché à l'utilisateur
+ Valid Message Should Be Vos modifications ont bien été enregistrées.
+ # On vérifie que les types secondaires sélectionnés sont bien ceux saisis
+ Element Should Contain css=#etablissement_type_secondaire [CTS] Chapiteaux, Tentes et Structures toile
+ Element Should Contain css=#etablissement_type_secondaire [EF] Établissements flottants (eaux intérieures)
+
+ #On vérifie lors d'une modification
+ Click link css=#action-form-etablissement_tous-modifier
+ # On sélectionne des types secondaires
+ Select From List By Label css=#etablissement_type_secondaire [X] Etablissements sportifs couverts [W] Administrations, banques, bureaux
+ # On déselectionne les anciens types secondaires
+ Unselect From List By Label css=#etablissement_type_secondaire [CTS] Chapiteaux, Tentes et Structures toile [EF] Établissements flottants (eaux intérieures)
+ # On valide le formulaire
+ Click On Submit Button
+ # On vérifie le message affiché à l'utilisateur
+ Valid Message Should Be Vos modifications ont bien été enregistrées.
+ # On vérifie que les types secondaires sélectionnés sont bien ceux saisis
+ Element Should Contain css=#etablissement_type_secondaire [X] Etablissements sportifs couverts
+ Element Should Contain css=#etablissement_type_secondaire [W] Administrations, banques, bureaux
+ Element Should Not Contain css=#etablissement_type_secondaire [CTS] Chapiteaux, Tentes et Structures toile
+ Element Should Not Contain css=#etablissement_type_secondaire [EF] Établissements flottants (eaux intérieures)