Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions mesads/app/tests/views/test_liste_attente.py
Original file line number Diff line number Diff line change
Expand Up @@ -1247,6 +1247,107 @@ def test_post_traitement_demande_view_etape_3_ok(self):
fetch_redirect_response=True,
)

def test_post_traitement_demande_view_etape_3_ok_epci_delegate(self):
today = datetime.date.today()
epci = ADSManagerFactory(for_epci=True)
ads_manager = self.ads_manager
ads_manager.epci_delegate = epci.content_object
epci_fr = epci.content_object
commune = self.ads_manager.content_object
epci_fr.departement = "01"
epci_fr.save()
commune.departement = "01"
commune.save()
ads_manager.save()
ADSManagerRequestFactory(user=self.user, ads_manager=epci)
inscription = InscriptionListeAttenteFactory(
ads_manager=self.ads_manager,
date_depot_inscription=today - relativedelta(years=1),
date_dernier_renouvellement=today,
date_contact=today,
delai_reponse=15,
status=InscriptionListeAttente.REPONSE_OK,
)
self.assertEqual(ADS.objects.count(), 0)
self.assertEqual(ADSUser.objects.count(), 0)
self.assertEqual(ADSLegalFile.objects.count(), 0)
self.assertEqual(ADSUpdateLog.objects.count(), 0)

response = self.client.post(
reverse(
"app.liste_attente_traitement_demande",
kwargs={
"manager_id": self.ads_manager.id,
"inscription_id": inscription.id,
},
),
data={
"action": "attribution_ads",
"numero": "1",
"date_attribution": today,
"arrete": SimpleUploadedFile(
"arrete.pdf", b"Contenu arrete", content_type="application/pdf"
),
},
)
self.assertEqual(ADS.objects.count(), 1)
ads = ADS.objects.last()
self.assertEqual(ads.ads_manager, epci)
self.assertEqual(ads.epci_commune, self.ads_manager.content_object)

self.assertRedirects(
response,
expected_url=reverse(
"app.ads.detail",
kwargs={"manager_id": epci.id, "ads_id": ads.id},
),
status_code=http.HTTPStatus.FOUND,
target_status_code=http.HTTPStatus.OK,
fetch_redirect_response=True,
)

def test_post_traitement_demande_view_etape_3_epci_delegate_not_ok(self):
today = datetime.date.today()
epci = ADSManagerFactory(for_epci=True)
ads_manager = self.ads_manager
ads_manager.epci_delegate = epci.content_object
ads_manager.save()
inscription = InscriptionListeAttenteFactory(
ads_manager=self.ads_manager,
date_depot_inscription=today - relativedelta(years=1),
date_dernier_renouvellement=today,
date_contact=today,
delai_reponse=15,
status=InscriptionListeAttente.REPONSE_OK,
)
self.assertEqual(ADS.objects.count(), 0)
self.assertEqual(ADSUser.objects.count(), 0)
self.assertEqual(ADSLegalFile.objects.count(), 0)
self.assertEqual(ADSUpdateLog.objects.count(), 0)

response = self.client.post(
reverse(
"app.liste_attente_traitement_demande",
kwargs={
"manager_id": self.ads_manager.id,
"inscription_id": inscription.id,
},
),
data={
"action": "attribution_ads",
"numero": "1",
"date_attribution": today,
"arrete": SimpleUploadedFile(
"arrete.pdf", b"Contenu arrete", content_type="application/pdf"
),
},
)
self.assertEqual(response.status_code, http.HTTPStatus.OK)
self.assertEqual(ADS.objects.count(), 0)
self.assertEqual(ADSUser.objects.count(), 0)
self.assertEqual(ADSLegalFile.objects.count(), 0)
self.assertEqual(ADSUpdateLog.objects.count(), 0)


class TestListesAttentePubliquesView(ClientTestCase):
def test_get_listes_attente_publique(self):
Expand Down
33 changes: 31 additions & 2 deletions mesads/app/views/liste_attente.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from django.conf import settings
from django.contrib import messages
from django.contrib.contenttypes.models import ContentType
from django.contrib.staticfiles import finders
from django.db import IntegrityError, transaction
from django.db.models import Case, Count, F, IntegerField, Q, Value, When
Expand Down Expand Up @@ -33,6 +34,7 @@
WAITING_LIST_UNIQUE_ERROR_MESSAGE,
ADSLegalFile,
ADSManager,
ADSManagerRequest,
ADSUpdateLog,
ADSUser,
InscriptionListeAttente,
Expand Down Expand Up @@ -270,15 +272,42 @@ def _handle_attribution(self, inscription, **kwargs):
self.request.POST, self.request.FILES, ads_manager=inscription.ads_manager
)
if form.is_valid():
ads_manager = inscription.ads_manager
epci_commune = None
if ads_manager.epci_delegate:
content_type = ContentType.objects.get_for_model(
ads_manager.epci_delegate
)
req = ADSManagerRequest.objects.filter(
ads_manager__content_type=content_type,
ads_manager__object_id=ads_manager.epci_delegate.pk,
user=self.request.user,
accepted=True,
).first()
if req:
ads_manager = req.ads_manager
epci_commune = inscription.ads_manager.content_object
else:
messages.error(
self.request,
(
"Vous n'avez pas les permissions nécessaires "
"pour créer une ADS pour"
f" {ads_manager.epci_delegate.display_fulltext()}"
),
)
return self._response_invalid_form(form, **kwargs)

data = form.cleaned_data
ads = ADS.objects.create(
number=form.cleaned_data["numero"],
ads_manager=inscription.ads_manager,
ads_manager=ads_manager,
ads_creation_date=data["date_attribution"],
ads_in_use=True,
owner_name=f"{inscription.nom} {inscription.prenom}",
owner_phone=inscription.numero_telephone,
owner_email=inscription.email,
epci_commune=epci_commune,
)
ADSLegalFile.objects.create(
ads=ads,
Expand All @@ -305,7 +334,7 @@ def _handle_attribution(self, inscription, **kwargs):
return HttpResponseRedirect(
redirect_to=reverse(
"app.ads.detail",
kwargs={"manager_id": inscription.ads_manager.id, "ads_id": ads.id},
kwargs={"manager_id": ads_manager.id, "ads_id": ads.id},
)
)
else:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,25 @@ <h2 class="fr-stepper__title"> Attribution de l'ADS<span class="fr-stepper__stat

<hr />

{% if ads_manager.epci_delegate %}
<div class="fr-notice fr-notice--info">
<div class="fr-container">
<div class="fr-notice__body">
<p>
<span class="fr-notice__title">Attribution de l'ADS</span>
<span class="fr-notice__desc">
La demande d'ADS a été faite sur une commune ayant délégué la gestion de ses autorisation de stationnement à
l'EPCI {{ads_manager.epci_delegate}}. Par conséquent, l'ADS sera ajouté à la liste des ADS de l'EPCI,
si vous en êtes également gestionnaire.
Si votre administration gère elle même ses ADS, vous pouvez renseigner l'information sur la page
<a href="{% url 'app.ads-manager.detail' manager_id=ads_manager.id %}">Liste des ADS</a> avant de procéder à l'attribution.</span>
</p>
</div>
</div>
</div>
<hr />
{% endif %}

<form class="mt-2" method="post" enctype="multipart/form-data">

{% csrf_token %}
Expand Down
Loading