Skip to content

Commit

Permalink
S1196 Inversion lien Convention - Lot (#1703)
Browse files Browse the repository at this point in the history
---------

Co-authored-by: Nicolas Oudard <[email protected]>
  • Loading branch information
etchegom and kolok authored Jan 21, 2025
1 parent a23d787 commit 8e0672b
Show file tree
Hide file tree
Showing 63 changed files with 623 additions and 332 deletions.
43 changes: 25 additions & 18 deletions conventions/admin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from django import forms
from django.contrib import admin
from django.contrib.admin import ChoicesFieldListFilter
from django.core.exceptions import ValidationError

from admin.admin import ApilosModelAdmin
from admin.filters import IsCloneFilter
Expand All @@ -12,6 +11,7 @@

@admin.display(description="Programme")
def view_programme(convention):

return (
f"{convention.programme.ville} - {convention.lot} - "
+ f"{convention.lot.nb_logements} lgts - "
Expand Down Expand Up @@ -52,21 +52,21 @@ def _post_clean(self) -> None:

self.instance.statut = ConventionStatut[self.instance.statut].label

try:
self.instance.validate_constraints()
except ValidationError as err:
if "unique_display_name" in str(err):
self.add_error(
None,
(
"Problème d'unicité, une convention existe déjà pour ces critères. "
f"Vérifiez les conventions existantes sur le programme {self.instance.programme.id}, "
"le lot {self.instance.lot.id}, "
f"avec un financement {self.instance.financement}."
),
)
else:
self.add_error(None, err)
# try:
# self.instance.validate_constraints()
# except ValidationError as err:
# if "unique_display_name" in str(err):
# self.add_error(
# None,
# (
# "Problème d'unicité, une convention existe déjà pour ces critères. "
# f"Vérifiez les conventions existantes sur le programme {self.instance.programme.id}, "
# "le lot {self.instance.lot.id}, "
# f"avec un financement {self.instance.financement}."
# ),
# )
# else:
# self.add_error(None, err)

class Meta:
model = Convention
Expand Down Expand Up @@ -130,7 +130,6 @@ class ConventionAdmin(ApilosModelAdmin):
list_select_related = (
"programme__bailleur",
"programme__administration",
"lot__programme",
)
readonly_fields = (
"uuid",
Expand All @@ -139,8 +138,12 @@ class ConventionAdmin(ApilosModelAdmin):
"numero_pour_recherche",
"cree_par",
"cree_le",
"lot",
)
autocomplete_fields = (
"programme",
"parent",
)
autocomplete_fields = ("programme", "lot", "parent")
list_filter = (
IsAvenantFilter,
("statut", StatutFilter),
Expand All @@ -149,6 +152,10 @@ class ConventionAdmin(ApilosModelAdmin):

form = ConventionModelForm

@admin.display(description="Lot")
def lot(self, obj):
return obj.lot


@admin.register(Pret)
class PretAdmin(ApilosModelAdmin):
Expand Down
4 changes: 0 additions & 4 deletions conventions/fixtures/conventions_for_tests.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
"parent": null,
"numero": "0001",
"programme": 1,
"lot": 2,
"date_fin_conventionnement": null,
"financement": "PLUS",
"fond_propre": null,
Expand Down Expand Up @@ -119,7 +118,6 @@
"parent": null,
"numero": "0002",
"programme": 1,
"lot": 1,
"date_fin_conventionnement": null,
"financement": "PLAI",
"fond_propre": null,
Expand Down Expand Up @@ -202,7 +200,6 @@
"parent": null,
"numero": "0003",
"programme": 2,
"lot": 4,
"date_fin_conventionnement": null,
"financement": "PLUS",
"fond_propre": null,
Expand Down Expand Up @@ -285,7 +282,6 @@
"parent": null,
"numero": "0004",
"programme": 2,
"lot": 3,
"date_fin_conventionnement": null,
"financement": "PLAI",
"fond_propre": null,
Expand Down
1 change: 1 addition & 0 deletions conventions/management/commands/deduplicate_programme.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ def handle(self, *args, **options):
programmes[0].anru = bool(programmes[0].anru)
programmes[0].save()
for p in programmes[1:]:
# FIXME : A supprimer quand lots n'a plus programme_id
for lot in p.lots.all():
lot.programme = programmes[0]
lot.save()
Expand Down
6 changes: 3 additions & 3 deletions conventions/management/commands/export_conventions.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ def handle(self, *args, **options):
"programme",
"programme__bailleur",
"programme__administration",
"lot",
"lot__logements__annexes",
"lot__prets",
"lots",
"lots__logements__annexes",
"lots__prets",
)
.order_by("numero", "-cree_le")
.distinct("numero")
Expand Down
9 changes: 1 addition & 8 deletions conventions/management/commands/programme_update_bailleur.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,7 @@ class Command(BaseCommand):
def handle(self, *args, **options):

programme_uuid = input("Quel est l'identifiant UUID du programme à modifier ? ")
programme = (
Programme.objects.prefetch_related("lots__logements__annexes")
.prefetch_related("lots__type_stationnements")
.prefetch_related("logementedds")
.prefetch_related("conventions__prets")
.prefetch_related("referencecadastrales")
.get(uuid=programme_uuid)
)
programme = Programme.objects.get(uuid=programme_uuid)
self.stdout.write(
f"le programme `{programme_uuid}` : `{programme}` va être modifié"
)
Expand Down
12 changes: 7 additions & 5 deletions conventions/management/commands/update_financement.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,10 @@ def financement_update(self, numero, new_financement):
)

for convention in qs:
lot_convention = convention.lot
if (
convention.financement == new_financement
and convention.lot.financement == new_financement
and lot_convention.financement == new_financement
):
self.stdout.write(
self.style.WARNING(
Expand All @@ -52,14 +53,15 @@ def financement_update(self, numero, new_financement):
)
return
convention.financement = new_financement
convention.lot.financement = new_financement
lot_convention.financement = new_financement
convention.save()
convention.lot.save()
lot_convention.save()
for avenant in convention.avenants.all():
avenant.financement = new_financement
avenant.lot.financement = new_financement
lot_avenant = avenant.lot
lot_avenant.financement = new_financement
avenant.save()
avenant.lot.save()
lot_avenant.save()

self.counter_success += 1
self.stdout.write(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 5.1.3 on 2024-12-13 08:20

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("conventions", "0098_alter_convention_financement"),
("programmes", "0119_fill_lot_convention"),
]

operations = [
migrations.RemoveConstraint(
model_name="convention",
name="unique_display_name",
),
migrations.RemoveField(
model_name="convention",
name="lot",
),
]
14 changes: 14 additions & 0 deletions conventions/migrations/0100_auto_20241213_1554.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 5.1.3 on 2024-12-13 14:54

from django.db import migrations


class Migration(migrations.Migration):
dependencies = [
("conventions", "0099_remove_convention_unique_display_name_and_more"),
]

operations = [
# TODO : migration pour cloner les lots quand ils ont plusieurs conventions
# migrations.RunPython()
]
Loading

0 comments on commit 8e0672b

Please sign in to comment.