[openads-Commits] r9723 - branches/4.14.0-develop_ws_crea_di/services/metier

0 views
Skip to first unread message

mbi...@hephaestos.ovh.adullact.org

unread,
Nov 30, 2020, 10:44:52 AM11/30/20
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é

Reply all
Reply to author
Forward
0 new messages