Skip to content

Commit

Permalink
Ignore tableau logement for residence and foyer
Browse files Browse the repository at this point in the history
  • Loading branch information
syldb committed May 14, 2024
1 parent 22a55db commit 89d0048
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 2 deletions.
14 changes: 13 additions & 1 deletion conventions/forms/convention_form_logements.py
Original file line number Diff line number Diff line change
Expand Up @@ -465,8 +465,17 @@ class BaseFoyerResidenceLogementFormSet(BaseFormSet):
# les champs suivants sont utilisés pour la validation des données
# ils sont initialisés avant la validation
nb_logements: int = None
is_avenant: bool = False
optional_errors: list = []
ignore_optional_errors = False

def is_valid(self):
return super().is_valid() and len(self.optional_errors) == 0

def clean(self):
if self.ignore_optional_errors:
return
self.optional_errors = []
self.loan_should_be_consistent()
self.manage_nb_logement_consistency()

Expand All @@ -480,7 +489,10 @@ def manage_nb_logement_consistency(self):
f"Le nombre de logement à conventionner ({self.nb_logements}) "
+ f"ne correspond pas au nombre de logements déclaré ({self.total_form_count()})"
)
self._non_form_errors.append(error)
if self.is_avenant:
self.optional_errors.append(error)
else:
self._non_form_errors.append(error)

def loan_should_be_consistent(self):
"""
Expand Down
4 changes: 4 additions & 0 deletions conventions/services/logements.py
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,10 @@ def _foyer_residence_logements_atomic_update(self):
self.formset = FoyerResidenceLogementFormSet(initformset)
self.formset.lot_id = self.convention.lot_id
self.formset.nb_logements = int(self.request.POST.get("nb_logements") or 0)
self.formset.ignore_optional_errors = self.request.POST.get(
"ignore_optional_errors", False
)
self.formset.is_avenant = self.convention.is_avenant()
formset_is_valid = self.formset.is_valid()

self.form = LotFoyerResidenceLgtsDetailsForm(
Expand Down
47 changes: 46 additions & 1 deletion conventions/tests/services/test_logements_service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from decimal import Decimal

from django.forms import model_to_dict
from django.forms import ValidationError, model_to_dict
from django.http import HttpRequest
from django.test import TestCase

Expand Down Expand Up @@ -47,6 +47,11 @@ def setUp(self):
convention=convention, request=request
)

avenant = convention.clone(request.user, convention_origin=convention)
self.service_avenant = ConventionLogementsService(
convention=avenant, request=request
)

def test_get(self):
self.service.get()
self.assertEqual(self.service.return_status, utils.ReturnStatus.ERROR)
Expand Down Expand Up @@ -137,6 +142,20 @@ def test_save_fails_on_nb_logements(self):
],
)

def test_save_fails_on_nb_logements_avenants(self):
self.service_avenant.request.POST = {
"uuid": str(self.service_avenant.convention.lot.uuid),
**logement_success_payload,
"nb_logements": "3",
}
self.service_avenant.save()
assert self.service_avenant.formset.optional_errors == [
ValidationError(
"Le nombre de logement à conventionner (3) ne correspond pas au nombre de logements déclaré (2)"
)
]
assert self.service_avenant.formset.non_form_errors() == []


class ConventionFoyerResidenceLogementsServiceTests(TestCase):
fixtures = [
Expand Down Expand Up @@ -165,6 +184,11 @@ def setUp(self):
convention=convention, request=request
)

avenant = convention.clone(request.user, convention_origin=convention)
self.service_avenant = ConventionFoyerResidenceLogementsService(
convention=avenant, request=request
)

def test_get(self):
self.service.get()
self.assertEqual(self.service.return_status, utils.ReturnStatus.ERROR)
Expand Down Expand Up @@ -261,3 +285,24 @@ def test_save_fails_on_surface_habitable_totale(self):
}
self.service.save()
self.assertTrue(self.service.form.has_error("surface_habitable_totale"))

def test_save_fails_on_nb_logements_avenant(self):

self.service_avenant.request.POST = {
**foyer_residence_logements_success_payload,
"form-TOTAL_FORMS": "3",
"form-INITIAL_FORMS": "3",
"form-2-uuid": "",
"form-2-designation": "b2",
"form-2-typologie": "T2",
"form-2-surface_habitable": "16.00",
"form-2-loyer": "160.00",
}
self.service_avenant.save()
self.assertEqual(self.service_avenant.return_status, utils.ReturnStatus.ERROR)
assert self.service_avenant.formset.optional_errors == [
ValidationError(
"Le nombre de logement à conventionner (2) ne correspond pas au nombre de logements déclaré (3)"
)
]
assert self.service_avenant.formset.non_form_errors() == []
1 change: 1 addition & 0 deletions templates/conventions/foyer_residence_logements.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
{% csrf_token %}
{% include "conventions/common/form_foyer_residence_logements.html"%}
{% include "conventions/common/form_footer_button.html" %}
{% include "conventions/common/form_optional_errors_modal.html" %}
</form>
</div>
</div>
Expand Down

0 comments on commit 89d0048

Please sign in to comment.