(string) libellé de l'événement, * "action" => (string) action à effectuer après l'ajout de l'événement, optionnel * "delai" => (string) delai à effectuer après l'ajout de l'événement, optionnel * "etats_depuis_lequel_l_evenement_est_disponible" => (list) liste des états depuis lesquels l'événement est disponible, optionnel * "dossier_instruction_type" => (list) liste des types de dossier d'instruction, optionnel * "lettretype" => (string) libelle de la lettre-type, optionnel * "redirection_ajout" => (string) redirection à effectuer après l'ajout de l'événement, optionnel * "accord_tacite" => (string) accord tacite, optionnel * "delete" => false, optionnel * ) * @return string Le résultat du traitement */ public function update_or_create($request_data) { // Check DATA if ( isset($request_data["libelle"]) === false || empty($request_data["libelle"]) === true ) { return $this->BAD_DATA; } $evenement = $this->get_evenement($request_data["libelle"]); $valEvenement = array(); $listColonnesDirectes = array("libelle", "delai", "delai_notification", "restriction", "action", "type"); $delete = false; if (isset($request_data["delete"]) === true) { $delete = $this->f->get_boolean_from_string($request_data["delete"]); } else { // Si un élément doit etre utilisé tel quel listColonnesDirectes existe dans request_data, on l'ajoute à valEvenement foreach ($listColonnesDirectes as $colonne) { if (isset($request_data[$colonne]) === true) { $valEvenement[$colonne] = $request_data[$colonne]; } } // Convertir redirection_ajout default listing if (empty($request_data["redirection_ajout"]) === true) { // default listing $valEvenement["redirection_ajout"] = 'listing'; } else { if ($request_data["redirection_ajout"] == "Modification de l'instruction") { $valEvenement["redirection_ajout"] = 'modification'; } else { $valEvenement["redirection_ajout"] = 'listing'; } } // Convertir accord_tacite default Non if (empty($request_data["accord_tacite"]) === true) { // default Non $valEvenement["accord_tacite"] = 'Non'; } else { if ($request_data["accord_tacite"] == "Oui") { $valEvenement["accord_tacite"] = 'Oui'; } else { $valEvenement["accord_tacite"] = 'Non'; } } // Convertir etat default null if (empty($request_data["etat"]) === false) { $etat = $this->get_etat_id($request_data["etat"]); if ($etat !== false) $valEvenement["etat"] = $etat; } // Convertir lettretype default null if (empty($request_data["lettretype"]) === false) { $lettretype = $this->get_lettretype_id($request_data["lettretype"]); if ($lettretype !== false) $valEvenement["lettretype"] = $lettretype; } // Convertir avis_decision default null if (empty($request_data["avis_decision"]) === false) { $avis_decision = $this->get_avis_decision_id($request_data["avis_decision"]); if ($avis_decision !== false) $valEvenement["avis_decision"] = $avis_decision; } // Convertir evenement_liee default null // On récupère l'identifiant de l'événement evenement_retour_ar if (empty($request_data["evenement_retour_ar"]) === false) { $evenement_retour_ar = $this->get_evenement_liee_id($request_data["evenement_retour_ar"]); if ($evenement_retour_ar !== false) $valEvenement["evenement_retour_ar"] = $evenement_retour_ar; } // Convertir evenement_liee default null // On récupère l'identifiant de l'événement evenement_retour_ar if (empty($request_data["evenement_suivant_tacite"]) === false) { $evenement_suivant_tacite = $this->get_evenement_liee_id($request_data["evenement_suivant_tacite"]); if ($evenement_suivant_tacite !== false) $valEvenement["evenement_suivant_tacite"] = $evenement_suivant_tacite; } // Convertir pec_metier default null if (empty($request_data["pec_metier"]) === false) { $pec_metier = $this->get_pec_metier_id($request_data["pec_metier"]); if ($pec_metier !== false) $valEvenement["pec_metier"] = $pec_metier; } // Convertir notification default null $valEvenement["notification"] = ''; if (empty($request_data["notification"]) === false) { if ( $request_data["notification"] == "Notification manuelle") { $valEvenement["notification"] = 'notification_manuelle'; } if ( $request_data["notification"] == "Notification automatique") { $valEvenement["notification"] = 'notification_automatique'; } if ( $request_data["notification"] == "Notification automatique avec signature requise") { $valEvenement["notification"] = 'notification_auto_signature_requise'; } if ( $request_data["notification"] == "Notification manuelle avec signature requise") { $valEvenement["notification"] = 'notification_manuelle_signature_requise'; } if ( $request_data["notification"] == "Notification manuelle avec annexe") { $valEvenement["notification"] = 'notification_manuelle_annexe'; } if ( $request_data["notification"] == "Notification manuelle avec annexe et avec signature requise") { $valEvenement["notification"] = 'notification_manuelle_annexe_signature_requise'; } } // Convertir notification_tiers default null if (empty($request_data["notification_tiers"]) === false) { if ( $request_data["notification_tiers"] == "Notification manuelle") { $valEvenement["notification_tiers"] = 'notification_manuelle'; } if ( $request_data["notification_tiers"] == "Notification automatique") { $valEvenement["notification_tiers"] = 'notification_automatique'; } } //Convertir tiers_destinataire dafault aucun if (empty($request_data["tiers_destinataire"]) === true) { // default aucun $valEvenement["tiers_destinataire"] = 'aucun'; } else { if ( $request_data["tiers_destinataire"] == "Acteur") { $valEvenement["tiers_destinataire"] = 'acteur'; } if ( $request_data["tiers_destinataire"] == "Acteur avec service consultant") { $valEvenement["tiers_destinataire"] = 'acteur_service_consultant'; } if ( $request_data["tiers_destinataire"] == "Aucun") { $valEvenement["tiers_destinataire"] = 'aucun'; } } // Convertir Boolean retour default null if (empty($request_data["finaliser_automatiquement"]) === false) { $valEvenement["finaliser_automatiquement"] = $this->f->get_boolean_from_string($request_data["finaliser_automatiquement"]); } if (empty($request_data["signataire_obligatoire"]) === false) { $valEvenement["signataire_obligatoire"] = $this->f->get_boolean_from_string($request_data["signataire_obligatoire"]); } if (empty($request_data["designation_operateur"]) === false) { $valEvenement["designation_operateur"] = $this->f->get_boolean_from_string($request_data["designation_operateur"]); } if (empty($request_data["retour"]) === false) { $valEvenement["retour"] = $this->f->get_boolean_from_string($request_data["retour"]); } if (empty($request_data["commentaire"]) === false) { $valEvenement["commentaire"] = $this->f->get_boolean_from_string($request_data["commentaire"]); } } // If Exists Update or delete evenement if ($evenement == true ){ if ($delete){ $sql = sprintf( 'DELETE FROM %1$sevenement WHERE evenement = %2$s;', DB_PREFIXE, $evenement ); $qres = $this->f->db->query($sql); $this->f->isDatabaseError($qres); }else{ $inst_ev = $this->f->get_inst__om_dbform(array( "obj" => "evenement", "idx" => $evenement, )); $inst_ev->setParameter("maj",1); // Valeurs de l'enregistrment $value_evenement = array(); foreach($inst_ev->champs as $key => $champ) { $value_evenement[$champ] = $inst_ev->val[$key]; } foreach ($valEvenement as $colonne => $valeur) { $value_evenement[$colonne] = $valeur; } if ($inst_ev->modifier($value_evenement) === false) { return $this->BAD_DATA; } if (isset($request_data["etats_depuis_lequel_l_evenement_est_disponible"]) === true) if ($this->update_evenement_transitions($evenement, $request_data["etats_depuis_lequel_l_evenement_est_disponible"]) === false) return $this->BAD_DATA; if (isset($request_data["dossier_instruction_type"]) === true) if ($this->update_lien_dossier_instruction_type_evenement($evenement, $request_data["dossier_instruction_type"]) === false) return $this->BAD_DATA; } } else { if ( !$delete ){ $sucess = $this->creation_evenement($valEvenement); if (!$sucess) return $this->BAD_DATA; if (isset($request_data["etats_depuis_lequel_l_evenement_est_disponible"]) === true) if ($this->update_evenement_transitions($sucess, $request_data["etats_depuis_lequel_l_evenement_est_disponible"]) === false) return $this->BAD_DATA; if (isset($request_data["dossier_instruction_type"]) === true) if ($this->update_lien_dossier_instruction_type_evenement($sucess, $request_data["dossier_instruction_type"]) === false) return $this->BAD_DATA; } else { return $this->BAD_DATA; } } return $this->OK; } /** * Cette methode prend les valeurs d'un om_parametre pour le créer * et renvoit l'identifiant du om_parametre créer ou false * * @param array $om_parametre_valeur Les champs renseignés du om_parametre. * @return int L'identifiant de om_parametre. */ private function creation_evenement($evenement_valeur) { $evenement = $this->f->get_inst__om_dbform(array( "obj" => "evenement", "idx" => "]", )); $valAuto = array(); foreach($evenement->champs as $value) { $valAuto[$value] = null; } foreach ($evenement_valeur as $colonne => $valeur) { $valAuto[$colonne] = $valeur; } if ($evenement->ajouter($valAuto) === false) { $this->setMessage(__("L'evenement n'a pas été créé.")); return false; } $this->evenement[$evenement_valeur["libelle"]] = $evenement->valF['evenement']; $this->setMessage(__("L'evenement a été créé avec succès.")); return $evenement->valF['evenement']; } /** * Cette méthode prend le libellé d'un evenement et le transforme en * son identifiant en le trouvant dans la base de données et en le * sauvegardant pour réutilisation * * @param string $libelle Les paramètres de l'evenement. * @return int L'identifiant de l'evenement. */ private function get_evenement($libelle) { if (array_key_exists($libelle, $this->evenement) === false) { $qres = $this->f->get_one_result_from_db_query( sprintf( 'SELECT evenement FROM %1$sevenement WHERE evenement.libelle = \'%2$s\'', DB_PREFIXE, $this->f->db->escapeSimple($libelle) ), array( "origin" => __METHOD__, ) ); if ($qres["result"] === null) { $this->setMessage(__("L'evenement dont le libelle est passé en paramètre n'existe pas.")); return false; } $this->evenement[$libelle] = $qres["result"]; } return $this->evenement[$libelle]; } /** * Update or create the evenement transitions (etats_depuis_lequel_l_evenement_est_disponible) * * @param int $evenement_id L'identifiant de l'evenement. * @param array $etats_depuis_lequel_l_evenement_est_disponible Les états depuis lesquels l'événement est disponible. * @return bool True si la mise à jour ou la création a réussi, false sinon. */ private function update_evenement_transitions($evenement_id, $etats_depuis_lequel_l_evenement_est_disponible) { $sql = sprintf( 'DELETE FROM %1$stransition WHERE evenement = %2$s;', DB_PREFIXE, $evenement_id ); if ($this->f->db->query($sql) === false) { $this->setMessage(__("La suppression des transitions de l'evenement a échoué.")); return false; } foreach ($etats_depuis_lequel_l_evenement_est_disponible as $etat) { $sql = sprintf( 'INSERT INTO %1$stransition (evenement, etat) VALUES (%2$s, (SELECT etat FROM %1$setat WHERE libelle = \'%3$s\'));', DB_PREFIXE, $evenement_id, $this->f->db->escapeSimple($etat) ); if ($this->f->db->query($sql) === false) { $this->setMessage(__("La création de la transition de l'evenement a échoué.")); return false; } $this->setMessage(__("La transition de l'evenement a été créée avec succès.")); } return true; } /** * Update or create the lien_dossier_instruction_type_evenement (dossier_instruction_type) * * @param int $evenement_id L'identifiant de l'evenement. * @param array $etats_depuis_lequel_l_evenement_est_disponible Les états depuis lesquels l'événement est disponible. * @return bool True si la mise à jour ou la création a réussi, false sinon. */ private function update_lien_dossier_instruction_type_evenement($evenement_id, $dossier_instruction_types) { $sql = sprintf( 'DELETE FROM %1$slien_dossier_instruction_type_evenement WHERE evenement = %2$s;', DB_PREFIXE, $evenement_id ); if ($this->f->db->query($sql) === false) { $this->setMessage(__("La suppression des liaisons dossier instruction type événement a échoué.")); return false; } foreach ($dossier_instruction_types as $dossier_instruction_type) { $sql = sprintf( 'INSERT INTO %1$slien_dossier_instruction_type_evenement (lien_dossier_instruction_type_evenement, evenement, dossier_instruction_type) VALUES ( nextval(\'%1$slien_dossier_instruction_type_evenement_seq\'), %2$s, ( SELECT dossier_instruction_type FROM %1$sdossier_instruction_type AS dit LEFT JOIN %1$sdossier_autorisation_type_detaille AS datd ON datd.dossier_autorisation_type_detaille = dit.dossier_autorisation_type_detaille WHERE (datd.dossier_autorisation_type_detaille IS NOT NULL AND (datd.code||\' - \'||dit.code||\' - \'||dit.libelle) = \'%3$s\') OR (datd.dossier_autorisation_type_detaille IS NULL AND (\'- \'||dit.code||\' - \'||dit.libelle) = \'%3$s\') LIMIT 1 ) );', DB_PREFIXE, $evenement_id, $this->f->db->escapeSimple($dossier_instruction_type) ); if ($this->f->db->query($sql) === false) { $this->setMessage(__("La création de la liaison dossier instruction type événement a échoué.")); return false; } $this->setMessage(__("La liaison dossier instruction type événement a été créée avec succès.")); } return true; } /** * Get the id of a lettretype by its libelle * * @param string $libelle The libelle of the lettretype. * @return int The id of the lettretype. */ private function get_lettretype_id($libelle) { $qres = $this->f->get_one_result_from_db_query( sprintf( 'SELECT id FROM %1$som_lettretype WHERE (id||\' \'||libelle) = \'%2$s\';', DB_PREFIXE, $this->f->db->escapeSimple($libelle) ), ); if ($qres["result"] === null) { $this->setMessage(__("La lettre-type dont le libelle est passé en paramère n'existe pas.")); return false; } return $qres["result"]; } /** * Get the id of an etat by its libelle * * @param string $libelle The libelle of the etat. * @return int The id of the etat. */ private function get_etat_id($libelle) { $qres = $this->f->get_one_result_from_db_query( sprintf( 'SELECT etat FROM %1$setat WHERE libelle = \'%2$s\';', DB_PREFIXE, $this->f->db->escapeSimple($libelle) ), ); if ($qres["result"] === null) { $this->setMessage(__("L'état dont le libelle est passé en paramère n'existe pas.")); return false; } return $qres["result"]; } /** * Get the id of an avis_decision by its libelle * * @param string $libelle The libelle of the avis_decision. * @return int The id of the avis_decision. */ private function get_avis_decision_id($libelle) { $qres = $this->f->get_one_result_from_db_query( sprintf( 'SELECT avis_decision FROM %1$savis_decision WHERE libelle = \'%2$s\';', DB_PREFIXE, $this->f->db->escapeSimple($libelle) ), ); if ($qres["result"] === null) { $this->setMessage(__("L'avis de decision dont le libelle est passé en paramère n'existe pas.")); return false; } return $qres["result"]; } /** * Get the id of an evenement by its libelle * * @param string $libelle The libelle of the evenement. * @return int The id of the evenement. */ private function get_evenement_liee_id($libelle) { $qres = $this->f->get_one_result_from_db_query( sprintf( 'SELECT evenement FROM %1$sevenement WHERE libelle = \'%2$s\';', DB_PREFIXE, $this->f->db->escapeSimple($libelle) ), ); if ($qres["result"] === null) { $this->setMessage(__("L'evenement dont le libelle est passé en paramère n'existe pas.")); return false; } return $qres["result"]; } /** * Get the id of a pec_metier by its libelle * * @param string $libelle The libelle of the pec_metier. * @return int The id of the pec_metier. */ private function get_pec_metier_id($libelle) { $qres = $this->f->get_one_result_from_db_query( sprintf( 'SELECT pec_metier FROM %1$spec_metier WHERE libelle = \'%2$s\';', DB_PREFIXE, $this->f->db->escapeSimple($libelle) ), ); if ($qres["result"] === null) { $this->setMessage(__("La prise en compte métier dont le libelle est passé en paramère n'existe pas.")); return false; } return $qres["result"]; } } ?>