[openaria-Commits] r2272 - in branches/1.4.0-develop: . obj sql/pgsql tests

0 views
Skip to first unread message

sof...@adullact.net

unread,
Feb 15, 2018, 4:35:08 AM2/15/18
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)

Reply all
Reply to author
Forward
0 new messages