Skip to content
Open
Show file tree
Hide file tree
Changes from 14 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
9 changes: 7 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ init-certs:
init-playwright:
npx playwright install --with-deps

.PHONY: init-db
init-db:
# TODO: executer dans le conteneur docker directement
psql -d "$(DB_URL)" -f scripts/sql/create_databases.sql
psql -d "$(DB_URL)" -f scripts/sql/create_extensions.sql

.PHONY: init-dev
init-dev:
# git
Expand All @@ -45,8 +51,7 @@ init-dev:
cp .env.template .env
cp ./dags/.env.template ./dags/.env
# prepare django
psql -d "$(DB_URL)" -f scripts/sql/create_databases.sql
psql -d "$(DB_URL)" -f scripts/sql/create_extensions.sql
make init-db
make migrate
make createcachetable
make createsuperuser
Expand Down
3 changes: 3 additions & 0 deletions jinja2/qfdmo/carte.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
data-search-form-visible
data-search-solution-form-map-container-id-value="{{ map_container_id }}"
>
<div class=" qf-hidden">
{{ displayed_acteur_form }}
</div>
<input type="hidden" name="map_container_id" value="{{ map_container_id }}">
<section class="map-grid qf-relative">
<header
Expand Down
2 changes: 1 addition & 1 deletion jinja2/qfdmo/carte/results.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
>
{% for acteur in acteurs %}
<script type="application/json" data-map-target="acteur">
{{ acteur.json_acteur_for_display(direction=form.initial.direction, action_list=form.initial.action_list, carte=carte, carte_config=carte_config, sous_categorie_id=form.initial.sc_id) | safe }}
{{ acteur.json_acteur_for_display(direction=form.initial.direction, action_list=form.initial.action_list, carte=carte, carte_config=carte_config, sous_categorie_id=form.initial.sc_id, displayed_acteur_form=displayed_acteur_form) | safe }}
</script>
{% endfor %}
</div>
Expand Down
45 changes: 28 additions & 17 deletions qfdmd/models.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import logging
from urllib.parse import urlencode

import sites_faciles
from django.contrib.gis.db import models
from django.db.models import CheckConstraint, Q
from django.db.models.functions import Now
from django.http import QueryDict
from django.template.loader import render_to_string
from django.urls.base import reverse
from django.utils.functional import cached_property
Expand Down Expand Up @@ -326,18 +326,25 @@ def get_etats_descriptions(self) -> tuple[str, str] | None:

@property
def carte_settings(self):
# TODO : gérer plusieurs catégories ici
sous_categorie = self.sous_categories.filter(afficher_carte=True).first()
if not sous_categorie:
return {}

return {
"direction": "jai",
"first_dir": "jai",
"limit": 25,
"sc_id": sous_categorie.id,
"sous_categorie_objet": sous_categorie.libelle,
}
sous_categories = self.sous_categories.filter(afficher_carte=True).all()
settings_querydict = QueryDict(mutable=True)

if not sous_categories:
return settings_querydict

settings_querydict.update(
{
"direction": "jai",
"first_dir": "jai",
"limit": 25,
}
)

settings_querydict.setlist(
"sous_categories", sous_categories.values_list("id", flat=True)
)

return settings_querydict

@cached_property
def en_savoir_plus(self):
Expand Down Expand Up @@ -450,16 +457,20 @@ def get_url_carte(self, actions=None, map_container_id=None):
carte_settings = self.produit.carte_settings
if actions:
carte_settings.update(
action_list=actions,
action_displayed=actions,
{
"action_list": actions,
"action_displayed": actions,
}
)

if map_container_id:
carte_settings.update(
map_container_id=map_container_id,
{
"map_container_id": map_container_id,
}
)

params = urlencode(carte_settings)
params = carte_settings.urlencode()
url = reverse("qfdmd:carte", args=[self.slug])
return f"{url}?{params}"

Expand Down
19 changes: 13 additions & 6 deletions qfdmo/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from django.template.loader import render_to_string
from django.utils.safestring import mark_safe
from dsfr.forms import DsfrBaseForm
from typing_extensions import deprecated

from qfdmo.fields import GroupeActionChoiceField
from qfdmo.geo_api import epcis_from, formatted_epcis_as_list_of_tuple
Expand All @@ -26,6 +27,16 @@
)


class DisplayedActeursForm(forms.Form):
sous_categories = forms.ModelMultipleChoiceField(
required=False,
initial=SousCategorieObjet.objects.none(),
queryset=SousCategorieObjet.objects.filter(afficher=True),
widget=forms.MultipleHiddenInput,
)


@deprecated("This form will be dropped soon in favor of DisplayedActeursForm")
class AddressesForm(forms.Form):
def load_choices(self, request: HttpRequest, **kwargs) -> None:
if address_placeholder := request.GET.get("address_placeholder"):
Expand Down Expand Up @@ -502,9 +513,7 @@ def load_choices(self):
action_displayed = forms.MultipleChoiceField(
widget=DSFRCheckboxSelectMultiple(
attrs={
"class": (
"fr-checkbox qf-inline-grid qf-grid-cols-4 qf-gap-4" " qf-m-1w"
),
"class": ("fr-checkbox qf-inline-grid qf-grid-cols-4 qf-gap-4 qf-m-1w"),
},
),
choices=[],
Expand All @@ -530,9 +539,7 @@ def load_choices(self):
action_list = forms.MultipleChoiceField(
widget=DSFRCheckboxSelectMultiple(
attrs={
"class": (
"fr-checkbox qf-inline-grid qf-grid-cols-4 qf-gap-4" " qf-m-1w"
),
"class": ("fr-checkbox qf-inline-grid qf-grid-cols-4 qf-gap-4 qf-m-1w"),
},
),
choices=[],
Expand Down
24 changes: 18 additions & 6 deletions qfdmo/models/acteur.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import string
import uuid
from copy import deepcopy
from typing import Any, List, cast
from typing import Any, cast
from urllib.parse import urlencode

import opening_hours
Expand Down Expand Up @@ -1103,16 +1103,17 @@ def get_absolute_url(self):
return reverse("qfdmo:acteur-detail", args=[self.uuid])

def acteur_actions(
self, direction=None, actions_codes=None, sous_categorie_id=None
self, direction=None, actions_codes=None, sous_categorie_ids=None
):
pss = self.proposition_services.all()
# Cast needed because of the cache
cached_action_instances = cast(
List[Action], cache.get_or_set("_action_instances", get_action_instances)
list[Action], cache.get_or_set("_action_instances", get_action_instances)
)

if sous_categorie_id:
pss = pss.filter(sous_categories__id__in=[sous_categorie_id])
if sous_categorie_ids:
print(f"{sous_categorie_ids=}")
pss = pss.filter(sous_categories__id__in=sous_categorie_ids)
if direction:
pss = pss.filter(action__directions__code__in=[direction])
if actions_codes:
Expand Down Expand Up @@ -1166,14 +1167,25 @@ def json_acteur_for_display(
carte: bool = False,
carte_config: CarteConfig = None,
sous_categorie_id: str | None = None,
displayed_acteur_form=None,
) -> str:
# TODO: refacto jinja: once the shared/results.html template
# will be migrated to django template, this method should
# live in a template_tags instead.
sous_categorie_ids = []

if (
sous_categories := displayed_acteur_form
and displayed_acteur_form.cleaned_data.get("sous_categories")
):
sous_categorie_ids = sous_categories.values_list("id", flat=True)
elif sous_categorie_id:
sous_categorie_ids.append(sous_categorie_id)

actions = self.acteur_actions(
direction=direction,
actions_codes=action_list,
sous_categorie_id=sous_categorie_id,
sous_categorie_ids=sous_categorie_ids,
)

def sort_actions_by_action_principale_and_order(a):
Expand Down
Loading