@@ -213,6 +213,37 @@ def chasse_get_infos():
213213 )
214214 )
215215
216+ #################################################################################################
217+ # Calcul de la superficie totale (en hectares) selon la même priorité que l'échelle :
218+ # zone indicative > zone cynégétique > secteur > Cœur (= tout le périmètre).
219+ if args ["id_zone_indicative" ]:
220+ select_superficie = select (
221+ func .coalesce (func .sum (TZoneIndicatives .superficie ), 0 )
222+ ).where (TZoneIndicatives .id_zone_indicative .in_ (args ["id_zone_indicative" ]))
223+ elif args ["id_zone_cynegetique" ]:
224+ select_superficie = select (
225+ func .coalesce (func .sum (TZoneIndicatives .superficie ), 0 )
226+ ).where (TZoneIndicatives .id_zone_cynegetique .in_ (args ["id_zone_cynegetique" ]))
227+ elif args ["id_secteur" ]:
228+ # ZI -> ZC -> Secteur (pas de FK directe ZI -> Secteur)
229+ select_superficie = (
230+ select (func .coalesce (func .sum (TZoneIndicatives .superficie ), 0 ))
231+ .select_from (TZoneIndicatives )
232+ .join (
233+ TZoneCynegetiques ,
234+ TZoneCynegetiques .id_zone_cynegetique
235+ == TZoneIndicatives .id_zone_cynegetique ,
236+ )
237+ .where (TZoneCynegetiques .id_secteur .in_ (args ["id_secteur" ]))
238+ )
239+ else :
240+ # Cœur : aucune zone sélectionnée -> superficie totale du périmètre OEASC
241+ select_superficie = select (
242+ func .coalesce (func .sum (TZoneIndicatives .superficie ), 0 )
243+ )
244+
245+ superficie = round (DB .session .scalar (select_superficie ), 2 )
246+
216247 # Récupération du nom de la saison à partir de son id
217248 select_saison = select (TSaisons .nom_saison ).where (
218249 TSaisons .id_saison == args ["id_saison" ]
@@ -235,6 +266,7 @@ def chasse_get_infos():
235266 "nom_saison" : nom_saison , # Nom de la saison sélectionnée
236267 "nom_espece" : nom_espece , # Nom de l'espèce sélectionnée
237268 "echelle" : echelle , # Texte décrivant l'échelle de la zone
269+ "superficie" : superficie , # Superficie en hectares de la zone sélectionnée (ou totale)
238270 "last_5_id_saison" : last_5_id_saisons , # Liste des 5 dernières saisons (id)
239271 "nom_saison" : nom_saison , # (doublon, peut être nettoyé)
240272 ** get_attribution_result (args ), # Statistiques d'attribution/réalisation
0 commit comments