diff --git a/application/controllers/CommissionController.php b/application/controllers/CommissionController.php index 2f890cf3..251f5967 100755 --- a/application/controllers/CommissionController.php +++ b/application/controllers/CommissionController.php @@ -215,39 +215,58 @@ public function applyReglesAction() try { $this->_helper->viewRenderer->setNoRender(); - // Modèles - $model_etablissement = new Model_DbTable_Etablissement; + // Modèles et services $model_etablissementInformation = new Model_DbTable_EtablissementInformations; - $model_etablissementAdressse = new Model_DbTable_EtablissementAdresse; - - // On récup tout les établissements - $rowset_ets = $model_etablissement->fetchAll(); - + $model_commission = new Model_DbTable_Commission; + + if (!isset($_POST['ID_COMMISSION']) && !$_POST['ID_COMMISSION']) { + throw new Exception('Aucun ID de commission fournit dans la requête'); + } + + $id_commission = $_POST['ID_COMMISSION']; + $regles = $model_commission->getRegles($id_commission); + + $search = new Model_DbTable_Search; + $search->setItem("etablissement"); + $search->setCriteria("etablissementinformations.ID_GENRE", array(2, 5)); + $search->setCriteria("etablissementadresse.NUMINSEE_COMMUNE IS NOT NULL"); + $rowset_ets = $search->run(false, null, false)->toArray(); + + $ets_to_update = array(); + // Pour tout les ets, on récup leur commission par défaut - foreach ($rowset_ets as $row) { - - // Adresses - $rowset_adresse = $model_etablissementAdressse->get($row["ID_ETABLISSEMENT"]); - - // Si il y a une adresse - if (count($rowset_adresse) > 0) { - - // On récupère les infos - $info = $model_etablissement->getInformations($row["ID_ETABLISSEMENT"])->toArray(); - - // On merge l'adresse - $info["NUMINSEE_COMMUNE"][0] = $rowset_adresse[0]["NUMINSEE_COMMUNE"]; - - // On récupère la commission - $commission = $model_etablissement->getDefaultCommission($info); - - // Si elle n'est pas nulle on l'applique - if ($commission != null) { - $row_ets = $model_etablissementInformation->find($info["ID_ETABLISSEMENTINFORMATIONS"])->current(); - $row_ets->ID_COMMISSION = $commission[0]["ID_COMMISSION"]; - $row_ets->save(); + foreach ($rowset_ets as $key => $row) { + + // On récupère la commission + foreach($regles as $regle) { + + if ($row['ID_GENRE'] == 2 + && in_array($row['NUMINSEE_COMMUNE'], $regle['NUMINSEE_COMMUNE']) + && $row['LOCALSOMMEIL_ETABLISSEMENTINFORMATIONS'] == $regle['LOCALSOMMEIL'] + && $row['ID_TYPE'] == $regle['ID_TYPE'] + && $row['ID_CATEGORIE'] == $regle['ID_CATEGORIE']) + { + $ets_to_update[] = $row['ID_ETABLISSEMENTINFORMATIONS']; + break; + } + else if ($row['ID_GENRE'] == 5 + && in_array($row['NUMINSEE_COMMUNE'], $regle['NUMINSEE_COMMUNE']) + && $row['ID_CLASSE'] == $regle['ID_CLASSE']) + { + $ets_to_update[] = $row['ID_ETABLISSEMENTINFORMATIONS']; + break; } } + + // save memory + unset($rowset_ets[$key]); + } + + if ($ets_to_update) { + $model_etablissementInformation->update(array('ID_COMMISSION' => $id_commission), 'ID_ETABLISSEMENTINFORMATIONS IN ('.implode(',', $ets_to_update).')'); + + // removes cache if any changes + Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('cache')->clean(Zend_Cache::CLEANING_MODE_ALL); } } catch (Exception $e) { $this->_helper->flashMessenger(array( diff --git a/application/models/DbTable/Commission.php b/application/models/DbTable/Commission.php index d09bb7ed..4cb7554f 100755 --- a/application/models/DbTable/Commission.php +++ b/application/models/DbTable/Commission.php @@ -200,5 +200,60 @@ public function getCommissionIGH( $commune, $classe, $localsommeil) } } + + public function getRegles($id_commission) + { + + $model_groupementCommune = new Model_DbTable_GroupementCommune; + + $regles = array(); + + $select = $this->select() + ->setIntegrityCheck(false) + ->from("commissionregle", array("ID_GROUPEMENT", "NUMINSEE_COMMUNE") ) + ->joinLeft("commission", "commission.ID_COMMISSION = commissionregle.ID_COMMISSION", null) + ->joinLeft("commissionregletype", "commissionregle.ID_REGLE = commissionregletype.ID_REGLE", array("ID_TYPE")) + ->joinLeft("commissionreglecategorie", "commissionregle.ID_REGLE = commissionreglecategorie.ID_REGLE", array("ID_CATEGORIE")) + ->joinLeft("commissionregleclasse", "commissionregle.ID_REGLE = commissionregleclasse.ID_REGLE", array("ID_CLASSE")) + ->joinLeft("commissionreglelocalsommeil", "commissionregle.ID_REGLE = commissionreglelocalsommeil.ID_REGLE", array("LOCALSOMMEIL")) + ->joinLeft("adressecommune", "adressecommune.NUMINSEE_COMMUNE = commissionregle.NUMINSEE_COMMUNE", null) + ->where("commission.ID_COMMISSION = ?", $id_commission); + + $results = $this->fetchAll($select); + + if ($results == null) { + return $regles; + } + + $groupement_cache = array(); + foreach($results as $result) { + + $communes = array(); + if ($result->NUMINSEE_COMMUNE != null) { + $communes = array($result->NUMINSEE_COMMUNE); + } elseif ($result->ID_GROUPEMENT != null) { + + if (!isset($groupement_cache[$result->ID_GROUPEMENT])) { + $groupement_cache[$result->ID_GROUPEMENT] = array(); + $row_groupement = $model_groupementCommune->fetchAll("ID_GROUPEMENT = '" . $result->ID_GROUPEMENT . "'"); + foreach($row_groupement as $row) { + $groupement_cache[$result->ID_GROUPEMENT][] = $row['NUMINSEE_COMMUNE']; + } + } + $communes = $groupement_cache[$result->ID_GROUPEMENT]; + } + + $regles[] = array( + 'NUMINSEE_COMMUNE' => $communes, + 'LOCALSOMMEIL' => $result->LOCALSOMMEIL, + 'ID_TYPE' => $result->ID_TYPE , + 'ID_CLASSE' => $result->ID_CLASSE, + 'ID_CATEGORIE' => $result->ID_CATEGORIE, + ); + + } + + return $regles; + } } diff --git a/application/models/DbTable/Etablissement.php b/application/models/DbTable/Etablissement.php index 55f1ce1a..b9508eee 100755 --- a/application/models/DbTable/Etablissement.php +++ b/application/models/DbTable/Etablissement.php @@ -344,9 +344,4 @@ public function getDossierDonnantAvis($id_etablissement) return $this->fetchRow($select); } - - - - - } diff --git a/application/views/scripts/commission/competences.phtml b/application/views/scripts/commission/competences.phtml index 0a7c1aaf..aee09507 100755 --- a/application/views/scripts/commission/competences.phtml +++ b/application/views/scripts/commission/competences.phtml @@ -8,7 +8,7 @@

Ajouter une règle

- + " />