sof...@adullact.net
unread,Nov 19, 2018, 12:23:52 PM11/19/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-11-19 18:23:49 +0100 (Mon, 19 Nov 2018)
New Revision: 8343
Modified:
branches/4.9.0-dossiers-parallele/obj/demande_type.class.php
branches/4.9.0-dossiers-parallele/obj/om_dbform.class.php
branches/4.9.0-dossiers-parallele/sql/pgsql/demande_type.form.inc.php
Log:
* Nouvelles gestion des enregistrements des tables de liaison
Modified: branches/4.9.0-dossiers-parallele/obj/demande_type.class.php
===================================================================
--- branches/4.9.0-dossiers-parallele/obj/demande_type.class.php 2018-11-19 15:47:00 UTC (rev 8342)
+++ branches/4.9.0-dossiers-parallele/obj/demande_type.class.php 2018-11-19 17:23:49 UTC (rev 8343)
@@ -136,7 +136,12 @@
//Initialisation de la liste des états des dossiers d'instruction
$this->init_select($form, $db, $maj, $debug, "etats_autorises",
$sql_etats_autorises, $sql_etats_autorises_by_id, false, true);
-
+
+ //
+ if ($this->getParameter('maj') == 3 || $this->getParameter('maj') == 2) {
+ $this->init_select($form, $db, $maj, $debug, "dossier_instruction_type_compatible", $sql_dossier_instruction_type_compatible, $sql_dossier_instruction_type_compatible_by_id, false, true);
+ }
+
// Si en ajout ou en modification
if ($maj < 2) {
// Initialise les select en fonction de la valeur d'un autre champ
@@ -167,138 +172,64 @@
//
parent::triggerajouterapres($id,$db,$val,$DEBUG);
- // Ajoute autant de lien_demande_type_etat que d'états séléctionnés
-
- // Récupération des données du select multiple
- $etats_autorises = $this->getPostedValues('etats_autorises');
-
- // Ne traite les données que s'il y en a et qu'elles sont correctes
- if (is_array($etats_autorises)
- && count($etats_autorises) > 0 ){
- // Initialisation
- $nb_liens_etat = 0;
- // Boucle sur la liste des états sélectionnés
- foreach ($etats_autorises as $value) {
- // Test si la valeur par défaut est sélectionnée
- if ($value != "") {
- //
- $donnees = array(
- 'demande_type' => $this->valF['demande_type'],
- 'etat' => $value
- );
- // On ajoute l'enregistrement
- $this->ajouter_etats_autorises($donnees);
- // On compte le nombre d'éléments ajoutés
- $nb_liens_etat++;
- }
+ // Ajoute les liaisons dans lien_demande_type_etat
+ $lien_demande_type_etat = $this->handle_link_table('lien_demande_type_etat', 'etat', 'etats_autorises');
+ if ($lien_demande_type_etat > 0) {
+ if ($lien_demande_type_etat == 1 ) {
+ $this->addToMessage(_("Creation de ").$lien_demande_type_etat._(" nouvelle liaison realisee avec succes."));
+ } else {
+ $this->addToMessage(_("Creation de ").$lien_demande_type_etat._(" nouvelles liaisons realisees avec succes."));
}
- // Message de confirmation
- if ($nb_liens_etat > 0) {
- if ($nb_liens_etat == 1 ){
- $this->addToMessage(_("Creation de ").$nb_liens_etat._(" nouvelle liaison realisee avec succes."));
- } else{
- $this->addToMessage(_("Creation de ").$nb_liens_etat._(" nouvelles liaisons realisees avec succes."));
- }
- }
}
-
- }
-
- //Fonction générique permettant de récupérer les données d'un champ postées
- function getPostedValues($champ) {
-
- // Récupération des demandeurs dans POST
- if ($this->f->get_submitted_post_value($champ) !== null) {
-
- return $this->f->get_submitted_post_value($champ);
+
+ // Ajoute les liaisons dans lien_demande_type_dossier_instruction_type
+ $lien_demande_type_dossier_instruction_type = $this->handle_link_table('lien_demande_type_dossier_instruction_type', 'dossier_instruction_type', 'dossier_instruction_type_compatible');
+ if ($lien_demande_type_dossier_instruction_type > 0) {
+ $message = sprintf(_('Nombre de liaison mise à jour : %s'), $lien_demande_type_dossier_instruction_type);
+ $this->addToMessage($message);
}
+
+ //
+ return true;
}
-
+
function triggermodifierapres($id, &$db = null, $val = array(), $DEBUG = null) {
//
parent::triggermodifierapres($id, $db, $val, $DEBUG);
- // Suppression de tous les liens de la table lien_demande_type_etat
- $this->supprimer_etats_autorises($this->valF['demande_type']);
+ // Ajoute les liaisons dans lien_demande_type_etat
+ $lien_demande_type_etat = $this->handle_link_table('lien_demande_type_etat', 'etat', 'etats_autorises', true);
+ if ($lien_demande_type_etat > 0) {
+ $this->addToMessage(_("Mise a jour des liaisons realisee avec succes."));
+ }
- // Récupération des données du select multiple
- $etats_autorises = $this->getPostedValues('etats_autorises');
-
- // Ne traite les données que s'il y en a et qu'elles sont correctes
- if (is_array($etats_autorises)
- && count($etats_autorises) > 0 ){
- // Initialisation
- $nb_liens_etat = 0;
- // Boucle sur la liste des états sélectionnés
- foreach ($etats_autorises as $value) {
- // Test si la valeur par défaut est sélectionnée
- if ($value != "") {
- //
- $donnees = array(
- 'demande_type' => $this->valF['demande_type'],
- 'etat' => $value
- );
- // On ajoute l'enregistrement
- $this->ajouter_etats_autorises($donnees);
- // On compte le nombre d'éléments ajoutés
- $nb_liens_etat++;
- }
- }
- // Message de confirmation
- if ($nb_liens_etat > 0) {
- $this->addToMessage(_("Mise a jour des liaisons realisee avec succes."));
- }
+ // Ajoute les liaisons dans lien_demande_type_dossier_instruction_type
+ $lien_demande_type_dossier_instruction_type = $this->handle_link_table('lien_demande_type_dossier_instruction_type', 'dossier_instruction_type', 'dossier_instruction_type_compatible', true);
+ if ($lien_demande_type_dossier_instruction_type > 0) {
+ $message = sprintf(_('Nombre de liaison mise à jour : %s'), $lien_demande_type_dossier_instruction_type);
+ $this->addToMessage($message);
}
- }
- /**
- * Ajout d'un lien entre la demande_type et les états de dossiers d'autorisation
- * séléctionné
- * @param mixed[] $data couples demande_type/etat à ajouter
- */
- function ajouter_etats_autorises($data) {
//
- $lien_demande_type_etat = $this->f->get_inst__om_dbform(array(
- "obj" => "lien_demande_type_etat",
- "idx" => "]",
- ));
- // initialisation de la clé primaire
- $val['lien_demande_type_etat'] = "";
- //
- if (is_array($data)) {
- foreach ($data as $key => $value) {
- $val[$key]=$value;
- }
- }
- //
- $lien_demande_type_etat->ajouter($val, $this->db, false);
+ return true;
}
/**
- * Suppression de tous les liens entre la demande_type et les états
- * @param integer $id Identifiant du type de la demande
- */
- function supprimer_etats_autorises($id) {
- // Suppression de tous les enregistrements correspondants à l'id de
- // la demande_type
- $sql = "DELETE
- FROM ".DB_PREFIXE."lien_demande_type_etat
- WHERE demande_type=".$id;
- $res = $this->db->query($sql);
- $this->f->addToLog("supprimer_etats_autorises(): db->query(\"".$sql."\");", VERBOSE_MODE);
- if ( database::isError($res)){
- die();
- }
- }
-
- /**
* Suppression des liens entre demande_type et etat lors de la suppression
* d'un type de demande
*/
function triggersupprimer($id, &$db = null, $val = array(), $DEBUG = null) {
+ //
+ parent::triggersupprimer($id, $db, $val, $DEBUG);
- //Supression des liens entre le type de la demande et les états
- $this->supprimer_etats_autorises($id);
+ //
+ $lien_demande_type_etat = $this->delete_all_links_in_link_table('lien_demande_type_etat');
+
+ //
+ $lien_demande_type_dossier_instruction_type = $this->delete_all_links_in_link_table('lien_demande_type_dossier_instruction_type');
+
+ //
+ return true;
}
/**
Modified: branches/4.9.0-dossiers-parallele/obj/om_dbform.class.php
===================================================================
--- branches/4.9.0-dossiers-parallele/obj/om_dbform.class.php 2018-11-19 15:47:00 UTC (rev 8342)
+++ branches/4.9.0-dossiers-parallele/obj/om_dbform.class.php 2018-11-19 17:23:49 UTC (rev 8343)
@@ -901,7 +901,120 @@
return false;
}
+ /**
+ * [add_all_links_in_link_table description]
+ *
+ * @param [type] $link_table [description]
+ * @param [type] $table_linked [description]
+ * @param array $datas [description]
+ */
+ public function add_all_links_in_link_table($link_table, $table_linked, array $datas) {
+ //
+ $cpt = 0;
+ foreach ($datas as $data) {
+ //
+ if ($data !== "" || $data !== null) {
+ //
+ $val = array(
+ $this->clePrimaire => $this->valF[$this->clePrimaire],
+ $table_linked => $data
+ );
+ //
+ $add = $this->add_in_link_table($link_table, $val);
+ // En cours d'erreur, le traitement est stoppé
+ if ($add === false) {
+ return false;
+ }
+ //
+ $cpt++;
+ }
+ }
+ //
+ return $cpt;
+ }
-}
+ /**
+ * [add_in_link_table description]
+ *
+ * @param [type] $link_table [description]
+ * @param array $data [description]
+ */
+ public function add_in_link_table($link_table, array $data) {
+ //
+ $inst = $this->f->get_inst__om_dbform(array(
+ "obj" => $link_table,
+ "idx" => "]",
+ ));
+ //
+ $val = array();
+ $val[$link_table] = "";
+ if (is_array($data) === true) {
+ foreach ($data as $key => $value) {
+ $val[$key] = $value;
+ }
+ }
+ //
+ $add = $inst->ajouter($val);
+ //
+ return $add;
+ }
+ /**
+ * [delete_all_links_in_link_table description]
+ *
+ * @param [type] $link_table [description]
+ *
+ * @return [type] [description]
+ */
+ public function delete_all_links_in_link_table($link_table) {
+ //
+ $sql = sprintf("DELETE FROM %s%s WHERE %s = %s",
+ DB_PREFIXE,
+ $link_table,
+ $this->clePrimaire,
+ $this->valF[$this->clePrimaire]
+ );
+ $res = $this->db->query($sql);
+ $this->addToLog(__METHODE__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
+ //
+ $this->f->isDatabaseError($res);
+ //
+ return true;
+ }
+ /**
+ * [handle_link_table description]
+ *
+ * @param [type] $link_table [description]
+ * @param [type] $table_linked [description]
+ * @param [type] $link_field [description]
+ * @param boolean $with_delete [description]
+ *
+ * @return [type] [description]
+ */
+ public function handle_link_table($link_table, $table_linked, $link_field, $with_delete = false) {
+ //
+ $this->begin_treatment(__METHOD__);
+
+ // Suppression de toutes les liaisons
+ if ($with_delete !== false) {
+ //
+ $delete = $this->delete_all_links_in_link_table($link_table);
+ }
+
+ // Récupère la valeur postée du champ fictif
+ $datas = $this->f->get_submitted_post_value($link_field);
+
+ //
+ if (is_array($datas) !== true || count($datas) === 0) {
+ //
+ return $this->end_treatment(__METHOD__, false);
+ }
+
+ // Ajout de toutes les liaisons
+ $cpt = $this->add_all_links_in_link_table($link_table, $table_linked, $datas);
+
+ // Retourne le nombre de liaison mise à jour ou ajoutée
+ return $this->end_treatment(__METHOD__, $cpt);
+ }
+}
Modified: branches/4.9.0-dossiers-parallele/sql/pgsql/demande_type.form.inc.php
===================================================================
--- branches/4.9.0-dossiers-parallele/sql/pgsql/demande_type.form.inc.php 2018-11-19 15:47:00 UTC (rev 8342)
+++ branches/4.9.0-dossiers-parallele/sql/pgsql/demande_type.form.inc.php 2018-11-19 17:23:49 UTC (rev 8343)
@@ -103,6 +103,25 @@
WHERE etat.etat IN (<idx>)
ORDER BY lib";
+// Liaison NaN - demande_type/dossier_instruction_type
+$sql_dossier_instruction_type_compatible = "
+SELECT
+ dossier_instruction_type.dossier_instruction_type,
+ CONCAT_WS(' - ', dossier_autorisation_type_detaille.code, dossier_instruction_type.libelle) as lib
+FROM ".DB_PREFIXE."dossier_instruction_type
+LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
+ ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
+ORDER BY lib";
+//
+$sql_dossier_instruction_type_compatible_by_id = "
+SELECT
+ dossier_instruction_type.dossier_instruction_type,
+ CONCAT_WS(' - ', dossier_autorisation_type_detaille.code, dossier_instruction_type.libelle) as lib
+FROM ".DB_PREFIXE."dossier_instruction_type
+LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
+ ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
+ORDER BY lib";
+
// Requête permettant de récupérer les types de dossier d'instruction par rapport
// au type détaillé de dossier d'autorisation
$sql_dossier_instruction_type_by_dossier_autorisation_type_detaille = "