From 779ab7e6a52f13b96f77b7e3a90c77ab129bdbf6 Mon Sep 17 00:00:00 2001 From: Nicolas Oudard Date: Mon, 3 Feb 2025 12:35:43 +0100 Subject: [PATCH] manage lots --- siap/siap_client/utils.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/siap/siap_client/utils.py b/siap/siap_client/utils.py index 0104be195..59804ede9 100644 --- a/siap/siap_client/utils.py +++ b/siap/siap_client/utils.py @@ -367,19 +367,26 @@ def get_or_create_lots_and_conventions( return (lots, conventions) -def _create_convention(programme: Programme, user: User): - (convention, _) = Convention.objects.exclude( - statut=ConventionStatut.ANNULEE.label, - ).get_or_create( - programme=programme, - # When comes from SIAP through API, the user doesn't exist in DB - defaults={ - "cree_par": (user if user.id else None), - }, +def _create_convention(programme: Programme, financement: str, user: User): + + conventions = Convention.objects.filter( + programme=programme, lots__financement=financement ) + convention = None + if conventions.count() == 0: + convention = Convention.objects.create( + programme=programme, + financement=financement, + ) + elif conventions.count() == 1: + convention = conventions.first() + else: + raise Exception( + "More than one convention found for the same programme/financement" + ) # When convention was created by SIAP through API and the user doesn't exist - # the forst user how access it will be the creator + # the first user how access it will be the creator if convention.cree_par is None and user.id is not None: convention.cree_par = user convention.save()