mbi...@hephaestos.ovh.adullact.org
unread,Nov 30, 2020, 10:44:52 AM11/30/20Sign 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: mbideau
Date: 2020-11-30 16:44:50 +0100 (Mon, 30 Nov 2020)
New Revision: 9723
Modified:
branches/4.14.0-develop_ws_crea_di/services/metier/taskmanager.php
Log:
WebService 'tache': ajotu de la gestion du code 'acteur' et de la 'commune'
Modified: branches/4.14.0-develop_ws_crea_di/services/metier/taskmanager.php
===================================================================
--- branches/4.14.0-develop_ws_crea_di/services/metier/taskmanager.php 2020-11-30 15:41:48 UTC (rev 9722)
+++ branches/4.14.0-develop_ws_crea_di/services/metier/taskmanager.php 2020-11-30 15:44:50 UTC (rev 9723)
@@ -227,18 +227,6 @@
// TODO gérer l'ajout de demande sur existant
// (on ne connait pas le format des données arrivant)
- // Si le DA existe déjà on traite ça comme une anomalie
- /*if (isset($request_data['dossier']['dossier_autorisation']) &&
- ! empty($request_data['dossier']['dossier_autorisation']) &&
- $this->DAexiste($request_data['dossier']['dossier_autorisation'])) {
- throw new InvalidArgumentException(sprintf(__(
- "Le dossier d'autorisation '%s' existe déjà"),
- $request_data['dossier']['dossier_autorisation']));
- }
- else {
- $this->_debug("DA inexistant: '".$request_data['dossier']['dossier_autorisation']."'");
- }*/
-
// ajout d'une nouvelle demande
// retraitement spécifique des données de la nouvelle demande
@@ -245,6 +233,10 @@
$this->_debug("Prépare les données de la nouvelle demande");
$demande_values = $this->prepare_new_demande_data($request_data);
+ // retraitement commun des données de la demande
+ $this->_debug("Prépare les données de la demande");
+ $demande_values = $this->prepare_demande_data($request_data, $demande_values);
+
// utilisation d'un faux $_POST pour stocker les demandeurs de la demande
$_POST = array();
@@ -254,7 +246,8 @@
throw new InvalidArgumentException("Aucune valeur pour 'demandeur'");
}
foreach ($request_data["demandeur"] as $demandeur_type => $demandeur_valeur) {
- $demandeur_id = $this->creation_demandeur($demandeur_type, $demandeur_valeur);
+ $demandeur_id = $this->creation_demandeur(
+ $demandeur_type, $demandeur_valeur, $demande_values['om_collectivite']);
if (isset($_POST[$demandeur_type])) {
$_POST[$demandeur_type] = array();
}
@@ -261,10 +254,6 @@
$_POST[$demandeur_type][] = $demandeur_id;
}
- // retraitement commun des données de la demande
- $this->_debug("Prépare les données de la demande");
- $demande_values = $this->prepare_demande_data($request_data, $demande_values);
-
// création de l'objet demande
$demande = $this->f->get_inst__om_dbform(array(
"obj" => "demande",
@@ -276,6 +265,7 @@
$demande->getPostedValues();
$this->_debug("Ajoute la demande");
+ $this->_debug(" commune: ".$demande_values['commune']);
if ($demande->ajouter($demande_values) === false) {
throw new RuntimeException(__("Erreur lors de la création de la demande."));
}
@@ -387,15 +377,54 @@
}
// collectivité
- if (! isset($request_data['dossier']['om_collectivite']) ||
- empty($request_data['dossier']['om_collectivite'])) {
+ $collectiviteId = null;
+ if (isset($request_data['dossier']['acteur']) &&
+ ! empty($request_data['dossier']['acteur'])) {
+ $acteurId = $request_data['dossier']['acteur'];
+ $collectiviteId = $this->get_collectivite_from_acteur(intval($acteurId));
+ if (empty($collectiviteId)) {
+ throw new InvalidArgumentException(__(
+ "Impossible de trouver le service correspondant à l'acteur '$acteurId'"));
+ }
+ }
+ elseif (isset($request_data['dossier']['om_collectivite']) &&
+ ! empty($request_data['dossier']['om_collectivite'])) {
+ $collectiviteId = $this->get_collectivite(intval($demande_values["om_collectivite"]));
+ }
+ if (empty($collectiviteId)) {
throw new InvalidArgumentException(__(
- "Le paramètre om_collectivite est obligatoire ".
+ "Le paramètre 'acteur' (ou 'om_collectivite') est obligatoire ".
"pour la création d'un nouveau dossier."));
}
- $collectiviteId = $demande_values["om_collectivite"];
- $demande_values['om_collectivite'] = $this->get_collectivite(intval($collectiviteId));
+ $demande_values['om_collectivite'] = $collectiviteId;
+ // commune
+ if ($this->f->is_option_dossier_commune_enabled()) {
+
+ // récupère le code insee s'il est fourni dans les données
+ if (isset($request_data['dossier']['insee']) &&
+ ! empty($request_data['dossier']['insee'])) {
+ $insee = $request_data['dossier']['insee'];
+ }
+
+ // sinon récupère le code insee de la collectivité
+ else {
+ $insee = $this->get_code_insee_for_collectivite($collectiviteId);
+ if (empty($insee)) {
+ throw new InvalidArgumentException(__(
+ "Impossible de trouver le code insee pour la commune '$collectiviteId'"));
+ }
+ }
+
+ // récupère la commune à partir du code insee
+ $commune = $this->get_commune_from_insee($insee);
+ if (empty($commune)) {
+ throw new InvalidArgumentException(__(
+ "Impossible de trouver la commune pour le code INSEE '$insee'"));
+ }
+ $demande_values['commune'] = $commune;
+ }
+
// demande type
$demande_values['demande_type'] = $this->get_demande_type(
intval($demande_values['dossier_autorisation_type_detaille']));
@@ -402,7 +431,7 @@
// version
$demande_values['version'] = '0';
- if (isset($request_data['dossier']['version']) &&
+ if (isset($request_data['dossier']['version']) &&
! empty($request_data['dossier']['version'])) {
$demande_values['version'] = $request_data['dossier']['version'];
}
@@ -424,8 +453,9 @@
* Cette methode prend le type de demandeur et ces valeurs pour le créer
* et renvoie l'identifiant du demandeur créé ou false en cas d'erreur
*
- * @param string $demandeur_type Le type de demandeur
- * @param array $demandeur_valeur Les valeurs renseignés du demandeur
+ * @param string $demandeur_type Le type de demandeur
+ * @param array $demandeur_valeur Les valeurs renseignés du demandeur
+ * @param int $collectiviteId L'identifiant de la collectivité
*
* @return int L'identifiant du demandeur
*
@@ -432,7 +462,8 @@
* @throw InvalidArgumentException Lorsque 'om_collectivite' est manquant
* @throw RuntimeException En cas d'échec lors de l'ajout du demandeur
*/
- protected function creation_demandeur(string $demandeur_type, array $demandeur_valeur) {
+ protected function creation_demandeur(string $demandeur_type, array $demandeur_valeur,
+ int $collectiviteId) {
// récupère une instance "vide"
$demandeur = $this->f->get_inst__om_dbform(array(
@@ -464,13 +495,13 @@
$valAuto['personne_morale_civilite'] = $this->get_civilite($demandeur_valeur['personne_morale_civilite']);
}
- // vérification de la présence de 'om_collectivite'
- if (! isset($demandeur_valeur['om_collectivite']) ||
- empty($demandeur_valeur['om_collectivite'])) {
- throw new InvalidArgumentException(
- __("Le paramètre om_collectivite est obligatoire dans les données du demandeur."));
+ // collectivité
+ if (empty($collectiviteId)) {
+ throw new InvalidArgumentException(__(
+ "Le paramètre 'acteur' (ou 'om_collectivite') est obligatoire ".
+ "dans les données du demandeur."));
}
- $valAuto['om_collectivite'] = $this->get_collectivite($demandeur_valeur['om_collectivite']);
+ $valAuto['om_collectivite'] = $collectiviteId;
// traitement spécifique pour la fréquence
if (isset($demandeur_valeur['frequent']) && ! empty($demandeur_valeur['frequent'])) {
@@ -513,6 +544,89 @@
}
/**
+ * Renvoi l'identifiant d'une collectivité à partir de la valeur de l'acteur (om_parametre).
+ *
+ * @param $acteurId int L'identifiant de l'acteur (valeur de om_parametre)
+ *
+ * @return int|null L'identifiant de la collectivité correspondante, ou null si non trouvée
+ */
+ protected function get_collectivite_from_acteur(int $acteurId) {
+ $om_collectivite = $this->f->db->getOne(sprintf("
+ SELECT
+ om_collectivite
+ FROM
+ ".DB_PREFIXE."om_parametre
+ WHERE
+ libelle = '%s'
+ AND valeur = '%d'
+ ",
+ 'acteur', $acteurId));
+ if ($this->f->isDatabaseError($om_collectivite, true)) {
+ throw new RuntimeException(
+ "Échec à l'exécution de la requête SQL de sélection ".
+ "d'un service pour l'acteur '$acteurId'");
+ }
+ return $om_collectivite;
+ }
+
+ /**
+ * Renvoi le code INSEE d'une collectivité.
+ *
+ * @param $collectiviteId int L'identifiant de la collectivite
+ *
+ * @return int|null Le code INSEE de la collectivité, ou null si non trouvé
+ */
+ protected function get_code_insee_for_collectivite(int $collectiviteId) {
+ $code_insee = $this->f->db->getOne(sprintf("
+ SELECT
+ valeur
+ FROM
+ ".DB_PREFIXE."om_parametre
+ WHERE
+ libelle = '%s'
+ AND om_collectivie = '%d'
+ ",
+ 'insee', $collectiviteId));
+ if ($this->f->isDatabaseError($code_insee, true)) {
+ throw new RuntimeException(
+ "Échec à l'exécution de la requête SQL de sélection ".
+ "du code INSEE de la collectivité '$collectiviteId'");
+ }
+ return $code_insee;
+ }
+
+ protected function get_commune_from_insee(int $insee) {
+ $today = (new Datetime())->format('Y-m-d');
+ $communeId = $this->f->db->getOne(sprintf("
+ SELECT
+ commune
+ FROM
+ ".DB_PREFIXE."commune
+ WHERE
+ com = '%d'
+ AND (
+ om_validite_debut IS NULL
+ OR om_validite_debut <= TO_DATE('%s', 'YYYY-MM-DD')
+ )
+ AND (
+ commune.om_validite_fin IS NULL
+ OR om_validite_fin > TO_DATE('%s', 'YYYY-MM-DD')
+ )
+ ORDER BY
+ om_validite_fin DESC NULLS FIRST,
+ om_validite_debut DESC NULLS FIRST
+ LIMIT 1
+ ",
+ $insee, $today, $today));
+ if ($this->f->isDatabaseError($communeId, true)) {
+ throw new RuntimeException(
+ "Échec à l'exécution de la requête SQL de sélection ".
+ "d'idenfiant commune à partir du code INSEE '$insee'");
+ }
+ return $communeId;
+ }
+
+ /**
* Renvoie l'identifiant en BDD d'une civilité à partir de son libellé ou de son ID.
*
* @param string|int $civilite Libellé ou ID de la civilité