feat(acheteur): afficher les titulaires sur la carte de la fiche acheteur

This commit is contained in:
Colin Maudry
2026-07-03 16:05:05 +02:00
parent 8b69fee31c
commit d201b7a3c6
+25 -18
View File
@@ -18,10 +18,10 @@ from src.db import aggregate_marches, count_marches, query_marches, schema
from src.figures import ( from src.figures import (
DataTable, DataTable,
get_distance_histogram, get_distance_histogram,
get_org_location_map,
get_top_org_table, get_top_org_table,
make_card, make_card,
make_column_picker, make_column_picker,
point_on_map,
) )
from src.utils.data import DF_ACHETEURS, get_annuaire_data, get_departement_region from src.utils.data import DF_ACHETEURS, get_annuaire_data, get_departement_region
from src.utils.frontend import get_button_properties from src.utils.frontend import get_button_properties
@@ -264,7 +264,6 @@ layout = [
Output(component_id="acheteur_siret", component_property="children"), Output(component_id="acheteur_siret", component_property="children"),
Output(component_id="acheteur_nom", component_property="children"), Output(component_id="acheteur_nom", component_property="children"),
Output(component_id="acheteur_commune", component_property="children"), Output(component_id="acheteur_commune", component_property="children"),
Output(component_id="acheteur_map", component_property="children"),
Output(component_id="acheteur_departement", component_property="children"), Output(component_id="acheteur_departement", component_property="children"),
Output(component_id="acheteur_region", component_property="children"), Output(component_id="acheteur_region", component_property="children"),
Output(component_id="acheteur_lien_annuaire", component_property="href"), Output(component_id="acheteur_lien_annuaire", component_property="href"),
@@ -272,25 +271,11 @@ layout = [
) )
def update_acheteur_infos(url): def update_acheteur_infos(url):
acheteur_siret = url.split("/")[-1] acheteur_siret = url.split("/")[-1]
# if len(acheteur_siret) != 14:
# acheteur_siret = (
# f"Le SIRET renseigné doit faire 14 caractères ({acheteur_siret})"
# )
data = get_annuaire_data(acheteur_siret) data = get_annuaire_data(acheteur_siret)
data_etablissement = data.get("matching_etablissements") if data else None data_etablissement = data.get("matching_etablissements") if data else None
if data_etablissement: if data_etablissement:
data_etablissement = data_etablissement[0] data_etablissement = data_etablissement[0]
# Extraction du code département à partir du code postal
code_postal = data_etablissement.get("code_postal", "")
departement_code = code_postal[:2] if code_postal else None
# Création de la carte avec le code département pour un centrage approprié
acheteur_map = point_on_map(
data_etablissement["latitude"],
data_etablissement["longitude"],
departement_code,
)
code_departement, nom_departement, nom_region = get_departement_region( code_departement, nom_departement, nom_region = get_departement_region(
data_etablissement["code_postal"] data_etablissement["code_postal"]
) )
@@ -302,7 +287,6 @@ def update_acheteur_infos(url):
libelle_commune = data_etablissement["libelle_commune"] libelle_commune = data_etablissement["libelle_commune"]
else: else:
acheteur_map = html.Div()
code_departement, nom_departement, nom_region = "", "", "" code_departement, nom_departement, nom_region = "", "", ""
departement = "" departement = ""
lien_annuaire = "" lien_annuaire = ""
@@ -313,13 +297,36 @@ def update_acheteur_infos(url):
acheteur_siret, acheteur_siret,
raison_sociale, raison_sociale,
libelle_commune, libelle_commune,
acheteur_map,
departement, departement,
nom_region, nom_region,
lien_annuaire, lien_annuaire,
) )
@callback(
Output(component_id="acheteur_map", component_property="children"),
Input(component_id="acheteur_url", component_property="pathname"),
Input(component_id="acheteur_year", component_property="value"),
)
def update_acheteur_map(pathname, ach_year):
where_sql, params = _acheteur_scope(pathname, ach_year)
geo_columns = [
col
for col in [
"uid",
"acheteur_longitude",
"acheteur_latitude",
"acheteur_nom",
"titulaire_longitude",
"titulaire_latitude",
"titulaire_nom",
]
if col in schema.names()
]
dff = query_marches(where_sql, params, columns=geo_columns)
return get_org_location_map(dff, "acheteur", "acheteur_map_leaflet")
@callback( @callback(
Output(component_id="acheteur_marches_attribues", component_property="children"), Output(component_id="acheteur_marches_attribues", component_property="children"),
Output( Output(