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
133 changes: 1 addition & 132 deletions mesads/app/tests/views/test_ads_manager_admin.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from datetime import date, datetime
from datetime import datetime
from http import HTTPStatus

from django.conf import settings
Expand All @@ -11,9 +11,7 @@
ADSManagerRequest,
DemandeGestionPrefecture,
)
from mesads.fradm.models import Prefecture
from mesads.unittest import ClientTestCase
from mesads.vehicules_relais.models import Proprietaire, Vehicule


class TestADSManagerAdminRequestsView(ClientTestCase):
Expand Down Expand Up @@ -282,135 +280,6 @@ def test_post_to_become_gestionnaire(self):
)


class TestRepertoireVehiculeRelaisView(ClientTestCase):
def setUp(self):
"""Create a proprietaire object, and register vehicules to it."""
super().setUp()

self.proprietaire_client, self.proprietaire_user = self.create_client()

self.proprietaire = Proprietaire.objects.create(nom="Propriétaire")
self.proprietaire.users.set([self.proprietaire_user])

prefecture_1 = self.ads_manager_administrator_35.prefecture
prefecture_2 = Prefecture.objects.filter(numero="33").get()

# Assign three vehicules to the proprietaire in Ille-et-Vilaine.
self.vehicule_1 = Vehicule.objects.create(
proprietaire=self.proprietaire,
departement=prefecture_1,
immatriculation="123-456-789",
modele="Peugeot 308",
motorisation="essence",
date_mise_circulation=date(2019, 1, 1),
nombre_places=4,
pmr=False,
commune_localisation=None,
)
self.vehicule_2 = Vehicule.objects.create(
proprietaire=self.proprietaire,
departement=prefecture_1,
immatriculation="IMMAT12",
modele="Peugeot 207",
motorisation="essence",
date_mise_circulation=date(2019, 2, 2),
nombre_places=3,
pmr=False,
commune_localisation=None,
)
self.vehicule_3 = Vehicule.objects.create(
proprietaire=self.proprietaire,
departement=prefecture_2,
immatriculation="BBBB-BBBB",
modele="Renault Clio",
motorisation="hybride",
date_mise_circulation=date(2023, 5, 1),
nombre_places=4,
pmr=False,
commune_localisation=None,
)

def test_get_context(self):
response = self.ads_manager_administrator_35_client.get(
reverse(
"app.ads-manager-admin.vehicules_relais",
kwargs={
"prefecture_id": self.ads_manager_administrator_35.prefecture.id
},
)
)
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertEqual(
response.context["ads_manager_administrator"],
self.ads_manager_administrator_35,
)
self.assertEqual(response.context["vehicule_list"].count(), 2)
self.assertQuerySetEqual(
response.context["vehicule_list"], [self.vehicule_1, self.vehicule_2]
)

def test_get_filtered_context(self):
response = self.ads_manager_administrator_35_client.get(
reverse(
"app.ads-manager-admin.vehicules_relais",
kwargs={
"prefecture_id": self.ads_manager_administrator_35.prefecture.id
},
)
+ f"?immatriculation={self.vehicule_1.immatriculation}"
)
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertEqual(
response.context["ads_manager_administrator"],
self.ads_manager_administrator_35,
)
self.assertEqual(response.context["vehicule_list"].count(), 1)
self.assertQuerySetEqual(response.context["vehicule_list"], [self.vehicule_1])


class TestVehiculeView(ClientTestCase):
def setUp(self):
"""Create a proprietaire object, and register vehicules to it."""
super().setUp()

self.proprietaire_client, self.proprietaire_user = self.create_client()

self.proprietaire = Proprietaire.objects.create(nom="Propriétaire")
self.proprietaire.users.set([self.proprietaire_user])

prefecture_1 = self.ads_manager_administrator_35.prefecture

# Assign three vehicules to the proprietaire in Ille-et-Vilaine.
self.vehicule = Vehicule.objects.create(
proprietaire=self.proprietaire,
departement=prefecture_1,
immatriculation="123-456-789",
modele="Peugeot 308",
motorisation="essence",
date_mise_circulation=date(2019, 1, 1),
nombre_places=4,
pmr=False,
commune_localisation=None,
)

def test_get_context(self):
response = self.ads_manager_administrator_35_client.get(
reverse(
"app.ads-manager-admin.vehicule_relais_detail",
kwargs={
"prefecture_id": self.ads_manager_administrator_35.prefecture.id,
"numero": self.vehicule.numero,
},
)
)
self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertEqual(
response.context["ads_manager_administrator"],
self.ads_manager_administrator_35,
)
self.assertEqual(response.context["vehicule"], self.vehicule)


class TestDemandeGestionPrefecture(ClientTestCase):
def setUp(self):
super().setUp()
Expand Down
14 changes: 0 additions & 14 deletions mesads/app/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,6 @@
name="app.ads-manager-admin.updates",
# A GARDER
),
path(
"espace-prefecture/<int:prefecture_id>/vehicules-relais/",
ads_manager_administrator_required(
views.RepertoireVehiculeRelaisView.as_view()
),
name="app.ads-manager-admin.vehicules_relais",
# A GARDER
),
path(
"espace-prefecture/<int:prefecture_id>/vehicules-relais/<str:numero>/",
ads_manager_administrator_required(views.VehiculeView.as_view()),
name="app.ads-manager-admin.vehicule_relais_detail",
# A GARDER
),
path(
"registre_ads/prefectures/<int:prefecture_id>/export",
ads_manager_administrator_required(views.PrefectureExportView.as_view()),
Expand Down
2 changes: 0 additions & 2 deletions mesads/app/views/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@
ADSManagerExportView,
DemandeGestionPrefectureView,
PrefectureExportView,
RepertoireVehiculeRelaisView,
VehiculeView,
)
from .ads_manager_request import ( # noqa: F401
DemandeGestionADSView,
Expand Down
70 changes: 2 additions & 68 deletions mesads/app/views/ads_manager_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
from django.db.models import (
BooleanField,
Case,
CharField,
Count,
DateTimeField,
ExpressionWrapper,
Expand All @@ -21,7 +20,7 @@
Value,
When,
)
from django.db.models.functions import Cast, Coalesce, Now, Replace, Round
from django.db.models.functions import Cast, Coalesce, Now, Round
from django.shortcuts import get_object_or_404, redirect
from django.template.loader import render_to_string
from django.urls import reverse
Expand All @@ -30,10 +29,8 @@
from django.views.generic import FormView, ListView, TemplateView, View
from reversion.views import RevisionMixin

from mesads.app.forms import DemandeGestionPrefectureForm, SearchVehiculeForm
from mesads.app.forms import DemandeGestionPrefectureForm
from mesads.fradm.models import EPCI, Aeroport, Commune, Prefecture
from mesads.utils_psql import SplitPart
from mesads.vehicules_relais.models import Vehicule

from ..models import (
ADS,
Expand Down Expand Up @@ -500,69 +497,6 @@ def get_context_data(self, *args, **kwargs):
return ctx


class RepertoireVehiculeRelaisView(ListView):
template_name = "pages/ads_register/prefecture_vehicules_relais.html"
paginate_by = 100

def get_form(self):
return SearchVehiculeForm(self.request.GET)

def get_queryset(self):
# .order_by("numero") doesn't work because with a string ordering,
# 75-2 is higher than 75-100.
# Instead we split the numero field and order by the first and second part.
# Note the first part has to be cast to a string and not to an integer
# because Corsica's departement number is 2A or 2B.
qs = (
Vehicule.objects.filter(
departement__id=self.kwargs.get(
"ads_manager_administrator"
).prefecture.id
)
.annotate(
part1=Cast(SplitPart("numero", Value("-"), Value(1)), CharField()),
part2=Cast(SplitPart("numero", Value("-"), Value(2)), IntegerField()),
immatriculation_clean=Replace(
F("immatriculation"), Value("-"), Value("")
),
)
.order_by("part1", "part2")
.select_related("proprietaire")
)

form = self.get_form()
if form.is_valid():
immatriculation = form.cleaned_data["immatriculation"]
if immatriculation:
qs = qs.filter(
immatriculation_clean__icontains=immatriculation.replace("-", "")
)
return qs

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
form = self.get_form()

context["form"] = form
context["ads_manager_administrator"] = self.kwargs.get(
"ads_manager_administrator"
)

return context


class VehiculeView(TemplateView):
template_name = "pages/ads_register/prefecture_vehicule_relais_detail.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["vehicule"] = get_object_or_404(Vehicule, numero=kwargs["numero"])
context["ads_manager_administrator"] = self.kwargs.get(
"ads_manager_administrator"
)
return context


class DemandeGestionPrefectureView(FormView):
form_class = DemandeGestionPrefectureForm
template_name = "pages/ads_register/demande_gestion_prefecture.html"
Expand Down
2 changes: 1 addition & 1 deletion mesads/app/views/public.py
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ def get_context_data(self, **kwargs):
"des taxis relais de votre préfecture"
),
"url": reverse(
"app.ads-manager-admin.vehicules_relais",
"vehicules-relais.vehicules_relais_departement",
kwargs={
"prefecture_id": administrator.prefecture.id
},
Expand Down
9 changes: 7 additions & 2 deletions mesads/context_processors.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.conf import settings

from mesads.app.models import ADSManagerRequest
from mesads.app.models import ADSManagerRequest, DemandeAccesLectureSeule


def mesads_settings(request):
Expand All @@ -13,15 +13,20 @@ def mesads_settings(request):


def user_roles(request):
context = {}
context = {"user": request.user}

if request.user.is_authenticated:
ads_manager_administrators = request.user.adsmanageradministrator_set.all()
ads_manager_requests = request.user.adsmanagerrequest_set.all()
proprietaire_vehicule_relais = request.user.proprietaire_set.all()
inspecteurs = request.user.demandes_acces_lecture_seule.filter(
statut=DemandeAccesLectureSeule.ACCEPTE
)
if len(ads_manager_administrators):
context["administrateur_ads"] = True
context["ads_manager_administrator"] = ads_manager_administrators.first()
elif len(inspecteurs):
context["inspecteur"] = True
elif len(ads_manager_requests):
context["manager_ads"] = True
context["requetes_gestionnaires"] = ADSManagerRequest.objects.filter(
Expand Down
28 changes: 16 additions & 12 deletions mesads/html_metadata.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,14 +149,6 @@ urls:
description: "Consultez le journal des modifications apportées à l'ADS {{ ads.number }} de {{ ads_manager.content_object.display_fulltext }}."


app.ads-manager-admin.vehicules_relais:
title: "MesADS - Taxis relais de {{ads_manager_administrator.prefecture.display_fulltext }}"
description: "Taxis relais de {{ads_manager_administrator.prefecture.display_fulltext }}"

app.ads-manager-admin.vehicule_relais_detail:
title: "MesADS - Détail du taxis relais n°{{vehicule.numero}}"
description: "MesADS - Détail du taxis relais n°{{vehicule.numero}}"

###
### Vehicules relais
###
Expand Down Expand Up @@ -209,13 +201,25 @@ urls:
title: "Confirmer la suppression du taxi relais n°{{ vehicule.numero }}"
description: "Supprimez définitivement le taxi relais n°{{ vehicule.numero }} de votre espace propriétaire {{ proprietaire.nom }}."

vehicules-relais.proprietaire.vehicule.history:
title: "Historique du taxi relais n°{{ vehicule.numero }}"
description: "Consultez l'historique des modifications apportées au taxi relais n°{{ vehicule.numero }} de {{ proprietaire.nom }}."

vehicules-relais.proprietaire.vehicule.recepisse:
missing: true # Not HTML view

vehicules-relais.vehicules_relais_departement:
title: "Répertoire des véhicules relais de {{prefecture.display_fulltext}} - MesADS"
description: "Répertoire des véhicules relais de {{prefecture.display_fulltext}} - MesADS"

vehicules-relais.vehicules_relais_history:
title: "Historique des modifications des véhicules relais - MesADS"
description: "Historique des modifications des véhicules relais - MesADS"

vehicules-relais.vehicule_relais_departement_detail:
title: "Détail du taxis relais n°{{vehicule.numero}} - MesADS"
description: "MDétail du taxis relais n°{{vehicule.numero}} - MesADS"

vehicules-relais.vehicule_relais_departement_detail_history:
title: "Historique du taxi relais n°{{ vehicule.numero }} - MesADS"
description: "Consultez l'historique des modifications apportées au taxi relais n°{{ vehicule.numero }} de {{ vehicule.proprietaire.nom }}."

# Liste attente

app.liste_attente:
Expand Down
2 changes: 1 addition & 1 deletion mesads/templates/django/header_prefecture.html
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
<li>
<a
class="fr-nav__link"
href="{% url 'app.ads-manager-admin.vehicules_relais' prefecture_id=ads_manager_administrator.prefecture.id %}"
href="{% url 'vehicules-relais.vehicules_relais_departement' prefecture_id=ads_manager_administrator.prefecture.id %}"
>
Consulter le répertoire de votre département
</a>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
<div class="fr-collapse" id="breadcrumb-1">
<ol class="fr-breadcrumb__list">
<li>
<a class="fr-breadcrumb__link" href="{% url 'app.homepage' %}">Accueil {{ ads_manager_administrator.prefecture.display_text|capfirst }}</a>
<a class="fr-breadcrumb__link" href="{% url 'app.homepage' %}">Accueil</a>
</li>
<li>
<a class="fr-breadcrumb__link"
href="{% url 'app.ads-manager-admin.vehicules_relais' prefecture_id=ads_manager_administrator.prefecture.id %}">Répertoire des taxis relais</a>
href="{% url 'vehicules-relais.vehicules_relais_departement' prefecture_id=prefecture.id %}">Répertoire des taxis relais</a>
</li>
<li>
<a class="fr-breadcrumb__link" aria-current="page">Véhicule {{ vehicule.numero }}</a>
Expand Down
Loading
Loading