Skip to content

Commit 3fe8571

Browse files
committed
refactor(Cantines): Nouvelle queryset pour récupérer les satellites à partir d'un siret
1 parent c1aad7b commit 3fe8571

File tree

3 files changed

+38
-12
lines changed

3 files changed

+38
-12
lines changed

api/views/canteen.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,10 +1020,7 @@ def annotate_actions(queryset, year):
10201020
# prep add satellites action
10211021
# https://docs.djangoproject.com/en/4.1/ref/models/expressions/#using-aggregates-within-a-subquery-expression
10221022
satellites = (
1023-
Canteen.objects.filter(
1024-
central_producer_siret=OuterRef("siret"),
1025-
production_type=Canteen.ProductionType.ON_SITE_CENTRAL,
1026-
)
1023+
Canteen.objects.get_satellites(OuterRef("siret"))
10271024
.order_by()
10281025
.values("central_producer_siret") # sets the groupBy for the aggregation
10291026
)

data/models/canteen.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ def publicly_hidden(self):
9595
else self.exclude(publication_status=Canteen.PublicationStatus.PUBLISHED)
9696
)
9797

98+
def get_satellites(self, central_producer_siret):
99+
return self.filter(is_satellite_query(), central_producer_siret=central_producer_siret)
100+
98101
def annotate_with_requires_line_ministry(self):
99102
canteen_sector_relation = apps.get_model(app_label="data", model_name="Canteen_sectors")
100103
has_sector_requiring_line_ministry = canteen_sector_relation.objects.filter(
@@ -169,6 +172,38 @@ class Actions(models.TextChoices):
169172
PUBLISH = "50_publish", "Publier"
170173
NOTHING = "95_nothing", "Rien à faire !"
171174

175+
class Sectors(models.TextChoices):
176+
"""
177+
Restaurants des prisons administration True
178+
Restaurants administratifs d’Etat (RA) administration True
179+
Restaurants des armées / police / gendarmerie administration True
180+
Etablissements publics d’Etat (EPA ou EPIC) administration True
181+
Supérieur et Universitaire education True
182+
Autres structures d’enseignement education True
183+
Etablissements de la PJJ social True
184+
Hôpitaux health False
185+
Autres établissements de soins health False
186+
Restaurants inter-administratifs d’État (RIA) administration True
187+
Etablissements d’enseignement agricole education False
188+
Autres établissements sociaux et médico-sociaux social False
189+
Autres établissements de loisirs leisure False
190+
Restaurants d’entreprises enterprise False
191+
Restaurants inter-entreprises enterprise False
192+
Restaurants administratifs des collectivités territoriales administration False
193+
Secondaire collège education False
194+
Ecole primaire (maternelle et élémentaire) education False
195+
Cliniques health False
196+
Secondaire lycée (hors agricole) education False
197+
Crèche social False
198+
Autres établissements non listés autres False
199+
EHPAD / maisons de retraite / foyers de personnes âgées social False
200+
IME / ITEP social False
201+
ESAT / Etablissements spécialisés social False
202+
Centre de vacances / sportif leisure False
203+
"""
204+
205+
ADMINISTRATION_PRISONS = "administration", "Restaurants des prisons"
206+
172207
class Ministries(models.TextChoices):
173208
AFFAIRES_ETRANGERES = "affaires_etrangeres", "Affaires étrangères"
174209
AGRICULTURE = "agriculture", "Agriculture, Alimentation et Forêts"
@@ -380,10 +415,7 @@ def is_serving(self):
380415
@property
381416
def satellites(self):
382417
if self.siret:
383-
return Canteen.objects.filter(
384-
central_producer_siret=self.siret,
385-
production_type=Canteen.ProductionType.ON_SITE_CENTRAL,
386-
)
418+
return Canteen.objects.get_satellites(self.siret)
387419
return Canteen.objects.none()
388420

389421
@property

data/signals.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,7 @@ def update_satellites_siret(sender, instance, raw, using, update_fields, **kwarg
3232
logger.info(
3333
f"SIRET change. Central kitchen {instance.id} ({instance.name}) changed its SIRET from {obj.siret} to {instance.siret}"
3434
)
35-
satellites = Canteen.objects.filter(
36-
central_producer_siret=obj.siret,
37-
production_type=Canteen.ProductionType.ON_SITE_CENTRAL,
38-
).only("id")
35+
satellites = Canteen.objects.get_satellites(obj.siret).only("id")
3936
for satellite in satellites:
4037
logger.info(
4138
f"SIRET change. Satellite cantine {satellite.id} had its central_producer_siret changed automatically from {obj.siret} to {instance.siret}"

0 commit comments

Comments
 (0)