Browse Source

Correction tests pbo/zapbo et meilleure prise en compte des prises

omassot 6 years ago
parent
commit
828a023411
3 changed files with 16 additions and 17 deletions
  1. 1 1
      core/constants.py
  2. 7 8
      schemas/mn1_rec.py
  3. 8 8
      schemas/mn2_rec.py

+ 1 - 1
core/constants.py

@@ -6,7 +6,7 @@
 '''
 from path import Path
 
-VERSION = "0.7.7"
+VERSION = "0.7.9"
 
 MAIN = Path(__file__).parent.parent.abspath()
 

+ 7 - 8
schemas/mn1_rec.py

@@ -188,6 +188,7 @@ models = [Artere, Cable, Equipement, Noeud, Tranchee, Zapbo]
 
 class Prise(QgsModel):
     layername = "FTTH_SITES_GEO_VALIDE"
+    layername_bis = "SITE_GEO"
 
 
 ####### Validateur
@@ -224,13 +225,13 @@ class Mn1Checker(BaseChecker):
         
         self.prises = []
         Prise.layer = next((l for l in QgsProject.instance().mapLayers().values() \
-                          if l.name().lower() == Prise.layername.lower()), None)
+                          if l.name().lower() in [Prise.layername.lower(), Prise.layername_bis.lower()]), None)
         
     def _load_prises(self):
         """ on charge la couche des prises si elle existe """
         self.prises = []
         if Prise.layer:
-            self.prises = [Prise(f) for f in Prise.layer.getFeatures()]
+            self.prises = [Prise(f) for f in Prise.layer.getFeatures() if f.attribute("T_ETAT").lower() != "obsolete"]
         
     def test_load_layers(self):
         """ Chargement des données
@@ -582,7 +583,7 @@ class Mn1Checker(BaseChecker):
                 continue
             
             #zapbos englobant l'equipement
-            candidates = [z for z in self.zapbos if z.geom.contains(equipement.geom)]
+            candidates = [z for z in self.zapbos if z.geom.contains(equipement.noeud.geom)]
 
             # le pbo doit être contenu dans une zapbo
             if not candidates:
@@ -590,11 +591,9 @@ class Mn1Checker(BaseChecker):
                 continue
              
             # On se base sur le nom pour trouver la zapbo correspondante
-            try:
-                equipement.zapbo = next((z for z in candidates if equipement.EQ_NOM in z.ID_ZAPBO))
-            except StopIteration:
+            equipement.zapbo = next((z for z in candidates if equipement.EQ_NOM in z.ID_ZAPBO), None)
+            if not equipement.zapbo:
                 self.log_error("Le nom du PBO ne coincide avec le nom d'aucune des ZAPBO qui le contiennent", item=equipement)
-                break
     
     def test_zapbos_prises(self):
         """ Topologie: Zapbos / Prises 
@@ -623,7 +622,7 @@ class Mn1Checker(BaseChecker):
                 continue
             
             zapbo = self._za_for_pbo(equipement)
-            zapbo.nb_prises = len([prise for prise in self.prises if zapbo.geom.contains(prise.geom)])
+            zapbo.nb_prises = sum([int(prise.NB_PRISE) for prise in self.prises if zapbo.geom.contains(prise.geom) and prise.NB_PRISE])
             
             # Controle du dimensionnement des PBO
             if equipement.EQ_TYPE_PH == 'PBO 6' and not zapbo.nb_prises < 6:

+ 8 - 8
schemas/mn2_rec.py

@@ -209,6 +209,7 @@ models = [Artere, Cable, Equipement, Noeud, Tranchee, Zapbo]
 
 class Prise(QgsModel):
     layername = "FTTH_SITES_GEO_VALIDE"
+    layername_bis = "SITE_GEO"
     
 ####### Validateur
 
@@ -245,13 +246,14 @@ class Mn2Checker(BaseChecker):
         
         self.prises = []
         Prise.layer = next((l for l in QgsProject.instance().mapLayers().values() \
-                          if l.name().lower() == Prise.layername.lower()), None)
+                          if l.name().lower() in [Prise.layername.lower(), Prise.layername_bis.lower()]), None)
         
     def _load_prises(self):
         """ on charge la couche des prises si elle existe """
         self.prises = []
         if Prise.layer:
-            self.prises = [QgsModel(f) for f in Prise.layer.getFeatures()]
+            self.prises = [Prise(f) for f in Prise.layer.getFeatures() if f.attribute("T_ETAT").lower() != "obsolete"]
+            
         
     def test_load_layers(self):
         """ Chargement des données
@@ -704,7 +706,7 @@ class Mn2Checker(BaseChecker):
                 continue
             
             #zapbos englobant l'equipement
-            candidates = [z for z in self.zapbos if z.geom.contains(equipement.geom)]
+            candidates = [z for z in self.zapbos if z.geom.contains(equipement.noeud.geom)]
 
             # le pbo doit être contenu dans une zapbo
             if not candidates:
@@ -712,11 +714,9 @@ class Mn2Checker(BaseChecker):
                 continue
              
             # On se base sur le nom pour trouver la zapbo correspondante
-            try:
-                equipement.zapbo = next((z for z in candidates if equipement.EQ_CODE in z.ID_ZAPBO))
-            except StopIteration:
+            equipement.zapbo = next((z for z in candidates if equipement.EQ_CODE in z.ID_ZAPBO), None)
+            if not equipement.zapbo:
                 self.log_error("Le nom du PBO ne coincide avec le nom d'aucune des ZAPBO qui le contiennent", item=equipement)
-                break
     
     def test_zapbos_prises(self):
         """ Topologie: Zapbos / Prises 
@@ -745,7 +745,7 @@ class Mn2Checker(BaseChecker):
                 continue
             
             zapbo = self._za_for_pbo(equipement)
-            zapbo.nb_prises = len([prise for prise in self.prises if zapbo.geom.contains(prise.geom)])
+            zapbo.nb_prises = sum([int(prise.NB_PRISE) for prise in self.prises if zapbo.geom.contains(prise.geom) and prise.NB_PRISE])
             
             # Controle du dimensionnement des PBO
             if equipement.EQ_TYPE_PH == 'PBO 6' and not zapbo.nb_prises < 6: