From 270812f6d6d5e22aba80e035218cce98b72ebf4b Mon Sep 17 00:00:00 2001 From: Johan Le Baut Date: Wed, 30 Nov 2022 19:29:27 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20de=20priorit=C3=A9=20dans=20l'affichage?= =?UTF-8?q?=20des=20immeubles=20selon=20leur=20statut=20de=20d=C3=A9ploiem?= =?UTF-8?q?ent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/ipe_fetcher/arcep.py | 19 ++++++++++++++++++- webapp/ipe_fetcher/axione.py | 20 +++++++++++++++++--- webapp/ipe_fetcher/liazo.py | 4 ++-- webapp/ipe_fetcher/model.py | 1 + webapp/main.py | 13 +++++++------ webapp/templates/app.js | 6 ++++-- 6 files changed, 49 insertions(+), 14 deletions(-) diff --git a/webapp/ipe_fetcher/arcep.py b/webapp/ipe_fetcher/arcep.py index 55d9439..d0ed04d 100644 --- a/webapp/ipe_fetcher/arcep.py +++ b/webapp/ipe_fetcher/arcep.py @@ -1,6 +1,7 @@ +from os.path import exists + from ipe_fetcher.model import AreaCoordinates, Building, FAIEligibilityStatus from ipe_fetcher.sqlite_connector.cursor import getCursorWithSpatialite -from os.path import exists ARCEP_ETAT_DEPLOYE = "deploye" @@ -12,6 +13,18 @@ class Arcep: if not exists(self.db_arcep_ipe_path): raise ValueError(f"File {self.db_arcep_ipe_path} does not exist") + @staticmethod + def _get_etat_priority(etat_imm): + if etat_imm == ARCEP_ETAT_DEPLOYE: + return 0 + elif etat_imm == "en cours de deploiement": + return 1 + elif etat_imm != "abandonne": + return 3 + else: + return 4 + + def getAreaBuildings( self, areaCoordinates: AreaCoordinates, existing_buildings: dict ) -> dict: @@ -73,9 +86,12 @@ class Arcep: ftthStatus=etatImm, reasonNotEligible=None if isEligible else "Pas encore deploye", ) + + etat_priority = self._get_etat_priority(etatImm) if buildings.get(idImm): buildings[idImm]["othersEligStatus"] = othersEligStatus buildings[idImm]["bat_info"] = bat_info + buildings[idImm]['etat_imm_priority'] = etat_priority if buildings[idImm].get('found_in'): buildings[idImm]['found_in'].append("arcep") else: @@ -92,6 +108,7 @@ class Arcep: commune=commune, bat_info=bat_info, found_in = ["arcep"], + etat_imm_priority=etat_priority, aquilenetEligStatus=FAIEligibilityStatus(isEligible=False, reasonNotEligible="", ftthStatus=""), fdnEligStatus=FAIEligibilityStatus(isEligible=False, reasonNotEligible="", ftthStatus=""), othersEligStatus=othersEligStatus, diff --git a/webapp/ipe_fetcher/axione.py b/webapp/ipe_fetcher/axione.py index 5db90bf..e2b1665 100644 --- a/webapp/ipe_fetcher/axione.py +++ b/webapp/ipe_fetcher/axione.py @@ -1,9 +1,7 @@ -import time +from os.path import exists from ipe_fetcher.model import AreaCoordinates, Building, FAIEligibilityStatus from ipe_fetcher.sqlite_connector.cursor import getCursorWithSpatialite, getBasicCursor -from os.path import exists - AXIONE_ETAT_DEPLOYE = "DEPLOYE" AXIONE_ETAT_DEPLOIEMENT = "EN COURS DE DEPLOIEMENT" @@ -33,6 +31,19 @@ class Axione: if cur.fetchone()[0] == 1: self.db_name_refimm = AXIONE_REFIMM_TABLE_NAME + @staticmethod + def _get_etat_priority(etat_imm): + if etat_imm == AXIONE_ETAT_DEPLOYE: + return 0 + elif etat_imm == AXIONE_ETAT_DEPLOIEMENT: + return 1 + elif etat_imm == AXIONE_ETAT_RAD_DEPLOIEMENT: + return 2 + elif etat_imm != AXIONE_ETAT_ABANDONNE: + return 3 + else: + return 4 + def getAreaBuildings( self, areaCoordinates: AreaCoordinates, existing_buildings: dict @@ -89,8 +100,10 @@ class Axione: ftthStatus=etatImm, reasonNotEligible="" if isEligible else "Pas encore deploye", ) + etat_priority = self._get_etat_priority(etatImm) if buildings.get(idImm): buildings[idImm]["aquilenetEligStatus"] = aquilenetEligStatus + buildings[idImm]['etat_imm_priority'] = etat_priority if buildings[idImm].get('found_in'): buildings[idImm]['found_in'].append("axione") else: @@ -108,6 +121,7 @@ class Axione: commune=b[8], bat_info="", found_in = ["axione"], + etat_imm_priority=etat_priority, aquilenetEligStatus=aquilenetEligStatus, fdnEligStatus=FAIEligibilityStatus(isEligible=False, reasonNotEligible="", ftthStatus=""), othersEligStatus=FAIEligibilityStatus(isEligible=False, reasonNotEligible="", ftthStatus=""), diff --git a/webapp/ipe_fetcher/liazo.py b/webapp/ipe_fetcher/liazo.py index 7cfeafb..79f6cca 100644 --- a/webapp/ipe_fetcher/liazo.py +++ b/webapp/ipe_fetcher/liazo.py @@ -17,7 +17,7 @@ class Liazo: r = c.getresponse() if r.status < 200 or r.status >= 300: print("Erreur de serveur chez FDN.") - return + return existing_buildings d = r.read() c.close() v = json.loads(d.decode("utf-8")) @@ -38,7 +38,6 @@ class Liazo: else: buildings[idImm]['found_in'] = ["liazo"] if not buildings.get(idImm): - building = Building( y=building.get('lat'), x=building.get('lon'), @@ -50,6 +49,7 @@ class Liazo: commune="", bat_info="", found_in = ["liazo"], + etat_imm_priority=1, fdnEligStatus=fdnEligStatus, aquilenetEligStatus=FAIEligibilityStatus(isEligible=False, reasonNotEligible="", ftthStatus=""), othersEligStatus=FAIEligibilityStatus(isEligible=False, reasonNotEligible="", ftthStatus=""), diff --git a/webapp/ipe_fetcher/model.py b/webapp/ipe_fetcher/model.py index 8fc1e19..a13c645 100644 --- a/webapp/ipe_fetcher/model.py +++ b/webapp/ipe_fetcher/model.py @@ -18,6 +18,7 @@ class Building(TypedDict): commune: str bat_info: str found_in: list[str] + etat_imm_priority: int = 10 aquilenetEligStatus: FAIEligibilityStatus fdnEligStatus: FAIEligibilityStatus othersEligStatus: FAIEligibilityStatus diff --git a/webapp/main.py b/webapp/main.py index 42fe7a5..90c4f71 100644 --- a/webapp/main.py +++ b/webapp/main.py @@ -1,12 +1,12 @@ +import configparser +import os +from typing import TypedDict + from flask import Flask, request, render_template, redirect -from typing import TypedDict -import configparser -import sqlite3 -import os -from ipe_fetcher import Liazo,Axione,Arcep,AreaCoordinates from eligibility_api.elig_api_exceptions import FlaskExceptions from eligibility_api.elig_api_routes import EligibilityApiRoutes +from ipe_fetcher import Liazo, Axione, Arcep, AreaCoordinates class Config(TypedDict): @@ -81,8 +81,9 @@ def getEligData(): print("Could not get Axione data for this area:", err) buildings = liazo.getAreaBuildings(narrow_coordinates, buildings) + sorted_buildings = sorted(buildings.values(), key=lambda d: d.get('etat_imm_priority', 1), reverse=True) - return {"buildings": buildings} + return {"buildings": list(sorted_buildings)} else: return "Invalid bounding box coordinates", 400 diff --git a/webapp/templates/app.js b/webapp/templates/app.js index 1d9c066..00a6917 100644 --- a/webapp/templates/app.js +++ b/webapp/templates/app.js @@ -138,9 +138,11 @@ function initAddrSearch(map) { } function updateEligData(map, eligData) { - markers.map(marker => map.removeLayer(marker)); + if (markers) { + markers.map(marker => map.removeLayer(marker)); + } let buildings = eligData.buildings; - markers = Object.values(buildings).map(building => { + markers = buildings.forEach(building => { const latlng = new L.latLng(building.y, building.x); let addrImm = `${building.numVoieImm} ${building.typeVoieImm} ${building.nomVoieImm}` if (building.bat_info != "") {