From 15228732ae31834a0a699b452b5d4a0fc6b1858e Mon Sep 17 00:00:00 2001 From: Guilouf Date: Fri, 14 Feb 2025 10:08:26 +0100 Subject: [PATCH 01/37] Add group admin view --- lemarche/users/admin.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lemarche/users/admin.py b/lemarche/users/admin.py index 46e263059..f57d2c76d 100644 --- a/lemarche/users/admin.py +++ b/lemarche/users/admin.py @@ -3,7 +3,8 @@ from ckeditor.widgets import CKEditorWidget from django import forms from django.contrib import admin -from django.contrib.auth.admin import UserAdmin +from django.contrib.auth.admin import GroupAdmin, UserAdmin +from django.contrib.auth.models import Group from django.contrib.contenttypes.admin import GenericTabularInline from django.core.exceptions import ValidationError from django.db import models @@ -22,6 +23,11 @@ from lemarche.utils.fields import pretty_print_readonly_jsonfield +@admin.register(Group, site=admin_site) +class GroupAdmin(GroupAdmin): + pass + + class HasCompanyFilter(admin.SimpleListFilter): """Custom admin filter to target users who are linked to a Company.""" From 440e42d58a311f2fbdfc82a59935b6803de73598 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Fri, 14 Feb 2025 10:30:14 +0100 Subject: [PATCH 02/37] Add is onboarded field user field --- lemarche/users/admin.py | 2 +- .../users/migrations/0045_user_is_onboarded.py | 18 ++++++++++++++++++ lemarche/users/models.py | 1 + lemarche/www/auth/views.py | 3 ++- 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 lemarche/users/migrations/0045_user_is_onboarded.py diff --git a/lemarche/users/admin.py b/lemarche/users/admin.py index f57d2c76d..a1c2f7416 100644 --- a/lemarche/users/admin.py +++ b/lemarche/users/admin.py @@ -314,7 +314,7 @@ class UserAdmin(FieldsetsInlineMixin, UserAdmin): ("API", {"fields": ("api_key", "api_key_last_updated")}), ( "Permissions", - {"classes": ["collapse"], "fields": ("is_active", "is_staff", "is_superuser", "groups")}, + {"classes": ["collapse"], "fields": ("is_onboarded", "is_active", "is_staff", "is_superuser", "groups")}, ), ( "Stats", diff --git a/lemarche/users/migrations/0045_user_is_onboarded.py b/lemarche/users/migrations/0045_user_is_onboarded.py new file mode 100644 index 000000000..800cd797e --- /dev/null +++ b/lemarche/users/migrations/0045_user_is_onboarded.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.6 on 2025-02-14 09:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("users", "0044_alter_user_api_key"), + ] + + operations = [ + migrations.AddField( + model_name="user", + name="is_onboarded", + field=models.BooleanField(default=True, verbose_name="L'utilisateur à suivi la prodédure d'onboarding"), + ), + ] diff --git a/lemarche/users/models.py b/lemarche/users/models.py index ca0888da5..8ec45428b 100644 --- a/lemarche/users/models.py +++ b/lemarche/users/models.py @@ -301,6 +301,7 @@ class User(AbstractUser): # is_active, is_staff, is_superuser is_anonymized = models.BooleanField(verbose_name="L'utilisateur à été anonymisé", default=False) + is_onboarded = models.BooleanField(verbose_name="L'utilisateur à suivi la prodédure d'onboarding", default=True) # date_joined, last_login created_at = models.DateTimeField(verbose_name="Date de création", default=timezone.now) diff --git a/lemarche/www/auth/views.py b/lemarche/www/auth/views.py index aeff247e5..eef3544da 100644 --- a/lemarche/www/auth/views.py +++ b/lemarche/www/auth/views.py @@ -70,7 +70,6 @@ def get_success_url(self): class SignupView(SuccessMessageMixin, CreateView): template_name = "auth/signup.html" form_class = SignupForm - # success_url = reverse_lazy("wagtail_serve", args=("",)) # # doesn't work + see get_success_url() below success_message = "Inscription validée !" # see get_success_message() below def form_valid(self, form): @@ -80,6 +79,8 @@ def form_valid(self, form): - login the user automatically - track signup """ + # User will be considered as onboarded when an admin will manually set it as onboarded + form.instance.is_onboarded = False user = form.save() # add to Brevo list (to send welcome email + automation) add_to_contact_list(user, "signup") From fa1e01e7c17188fcdd40194b1d938ee6f28ef3bc Mon Sep 17 00:00:00 2001 From: Guilouf Date: Fri, 14 Feb 2025 15:44:49 +0100 Subject: [PATCH 03/37] Template view to book meeting --- lemarche/templates/auth/meeting_calendar.html | 24 +++++++++++++++++++ lemarche/www/auth/urls.py | 3 ++- lemarche/www/auth/views.py | 12 +++++----- 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 lemarche/templates/auth/meeting_calendar.html diff --git a/lemarche/templates/auth/meeting_calendar.html b/lemarche/templates/auth/meeting_calendar.html new file mode 100644 index 000000000..2b347f36b --- /dev/null +++ b/lemarche/templates/auth/meeting_calendar.html @@ -0,0 +1,24 @@ +{% extends BASE_TEMPLATE %} +{% load dsfr_tags process_dict static humanize wagtailcore_tags advert_cms %} +{% block page_title %} + Prise de rendez-vous +{% endblock page_title %} + +{% block breadcrumb %} + {% process_dict root_dir=HOME_PAGE_PATH current="Prise de rendez-vous" as breadcrumb_data %} + {% dsfr_breadcrumb breadcrumb_data %} +{% endblock breadcrumb %} +{% block content %} +
+
+
+
+

Prenez rendez-vous pour activer votre compte

+ + Veuillez sélectionner un créneau + +
+
+
+
+{% endblock content %} diff --git a/lemarche/www/auth/urls.py b/lemarche/www/auth/urls.py index 4aab4a685..1ae88d571 100644 --- a/lemarche/www/auth/urls.py +++ b/lemarche/www/auth/urls.py @@ -1,7 +1,7 @@ from django.contrib.auth import views as auth_views from django.urls import path, reverse_lazy -from lemarche.www.auth.views import LoginView, PasswordResetView, SignupView +from lemarche.www.auth.views import LoginView, MeetingCalendarView, PasswordResetView, SignupView # https://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces-and-included-urlconfs @@ -11,6 +11,7 @@ path("login/", LoginView.as_view(), name="login"), path("logout/", auth_views.LogoutView.as_view(template_name="auth/logged_out.html"), name="logout"), path("signup/", SignupView.as_view(), name="signup"), + path("rendez-vous/", MeetingCalendarView.as_view(), name="booking-meeting-view"), path("password-reset/", PasswordResetView.as_view(), name="password_reset"), path( "password-reset/sent/", diff --git a/lemarche/www/auth/views.py b/lemarche/www/auth/views.py index eef3544da..6bdb4df19 100644 --- a/lemarche/www/auth/views.py +++ b/lemarche/www/auth/views.py @@ -4,7 +4,7 @@ from django.http import HttpResponseRedirect from django.urls import reverse_lazy from django.utils.safestring import mark_safe -from django.views.generic import CreateView +from django.views.generic import CreateView, TemplateView from lemarche.users.models import User from lemarche.utils.emails import add_to_contact_list @@ -99,17 +99,13 @@ def get_success_url(self): - next_url if there is a next param - or dashboard if SIAE """ - success_url = reverse_lazy("wagtail_serve", args=("",)) + success_url = reverse_lazy("auth:booking-meeting-view") next_url = self.request.GET.get("next", None) # sanitize next_url if next_url: safe_url = get_safe_url(self.request, param_name="next") if safe_url: return safe_url - elif self.request.POST.get("kind") == User.KIND_SIAE: - return reverse_lazy("dashboard:home") - elif self.request.POST.get("kind") == User.KIND_BUYER: - return reverse_lazy("siae:search_results") return success_url def get_success_message(self, cleaned_data): @@ -134,3 +130,7 @@ def get_success_url(self): success_url = super().get_success_url() user_email = self.request.POST.get("email") return f"{success_url}?email={user_email}" + + +class MeetingCalendarView(TemplateView): + template_name = "auth/meeting_calendar.html" From b9a71f2be72fba2c9fa628d7b5f4cccb01055232 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Fri, 14 Feb 2025 16:21:34 +0100 Subject: [PATCH 04/37] Fix tests --- lemarche/www/auth/tests.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lemarche/www/auth/tests.py b/lemarche/www/auth/tests.py index 59af6bcc3..06d0323b1 100644 --- a/lemarche/www/auth/tests.py +++ b/lemarche/www/auth/tests.py @@ -163,9 +163,7 @@ def test_siae_submits_signup_form_success(self): self._complete_form(user_profile=self.SIAE, with_submit=True) # should redirect SIAE to dashboard - messages = self._assert_signup_success(redirect_url=reverse("dashboard:home"), user_kind=User.KIND_SIAE) - - self.assertTrue("Vous pouvez maintenant ajouter votre structure" in messages.text) + self._assert_signup_success(redirect_url=reverse("auth:booking-meeting-view")) def test_siae_submits_signup_form_error(self): user_profile = self.SIAE @@ -198,7 +196,7 @@ def test_buyer_submits_signup_form_success(self): scroll_to_and_click_element(self.driver, submit_element) # should redirect BUYER to search - self._assert_signup_success(redirect_url=reverse("siae:search_results"), user_kind=User.KIND_BUYER) + self._assert_signup_success(redirect_url=reverse("auth:booking-meeting-view")) def test_buyer_submits_signup_form_success_extra_data(self): self._complete_form(user_profile=self.BUYER, with_submit=False) @@ -243,7 +241,7 @@ def test_partner_submits_signup_form_success(self): submit_element = self.driver.find_element(By.CSS_SELECTOR, "form button[type='submit']") scroll_to_and_click_element(self.driver, submit_element) - self._assert_signup_success(redirect_url=reverse("wagtail_serve", args=("",))) + self._assert_signup_success(redirect_url=reverse("auth:booking-meeting-view")) def test_partner_submits_signup_form_error(self): user_profile = self.PARTNER From 3d601f4542959dcec6b7f69216980dd00192f7a7 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Fri, 14 Feb 2025 16:26:22 +0100 Subject: [PATCH 05/37] Remove useless file --- lemarche/templates/layouts/_header_dsfr.html | 1 - 1 file changed, 1 deletion(-) delete mode 100644 lemarche/templates/layouts/_header_dsfr.html diff --git a/lemarche/templates/layouts/_header_dsfr.html b/lemarche/templates/layouts/_header_dsfr.html deleted file mode 100644 index 4d0bcb2e9..000000000 --- a/lemarche/templates/layouts/_header_dsfr.html +++ /dev/null @@ -1 +0,0 @@ -{% extends "dsfr/header.html" %} From 1f9a6b41d351b55d3d6da460eaadb80fa1cb5aa5 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Fri, 14 Feb 2025 16:29:46 +0100 Subject: [PATCH 06/37] Prevent access to dashboard --- .../layouts/_header_nav_primary_items.html | 23 ++++++++++++++++++- lemarche/www/dashboard/views.py | 8 ++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/lemarche/templates/layouts/_header_nav_primary_items.html b/lemarche/templates/layouts/_header_nav_primary_items.html index 98d0e9188..4fe0fd7f4 100644 --- a/lemarche/templates/layouts/_header_nav_primary_items.html +++ b/lemarche/templates/layouts/_header_nav_primary_items.html @@ -13,7 +13,28 @@ {% endif %} + {% if user.is_onboarded %}
  • + + Tableau de bord + +
  • + {% endif %} +
  • + + Favoris {{ user.favorite_list_count }} + +
  • +
  • + + Mon profil + +
  • +
  • +
    + {% csrf_token %} + +
    {% include "includes/_dropdown_menu.html" %}
  • {% else %} @@ -46,4 +67,4 @@ {% endif %} {% endif %} - \ No newline at end of file + diff --git a/lemarche/www/dashboard/views.py b/lemarche/www/dashboard/views.py index e47451646..daafbc41d 100644 --- a/lemarche/www/dashboard/views.py +++ b/lemarche/www/dashboard/views.py @@ -1,4 +1,4 @@ -from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.messages.views import SuccessMessageMixin from django.urls import reverse_lazy from django.utils import timezone @@ -16,10 +16,12 @@ SLUG_RESSOURCES_CAT_BUYERS = "acheteurs" -class DashboardHomeView(LoginRequiredMixin, DetailView): - # template_name = "dashboard/home.html" +class DashboardHomeView(UserPassesTestMixin, LoginRequiredMixin, DetailView): context_object_name = "user" + def test_func(self): + return self.request.user.is_onboarded + def get_object(self): return self.request.user From 13af0438d5f7889cae3cc65ddc68b48181b35e53 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Fri, 14 Feb 2025 16:33:50 +0100 Subject: [PATCH 07/37] Prevent access to favorites --- lemarche/templates/layouts/_header_nav_primary_items.html | 2 +- lemarche/www/dashboard_favorites/views.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lemarche/templates/layouts/_header_nav_primary_items.html b/lemarche/templates/layouts/_header_nav_primary_items.html index 4fe0fd7f4..b001da749 100644 --- a/lemarche/templates/layouts/_header_nav_primary_items.html +++ b/lemarche/templates/layouts/_header_nav_primary_items.html @@ -19,12 +19,12 @@ Tableau de bord - {% endif %}
  • Favoris {{ user.favorite_list_count }}
  • + {% endif %}
  • Mon profil diff --git a/lemarche/www/dashboard_favorites/views.py b/lemarche/www/dashboard_favorites/views.py index 294571be8..b6d868fc5 100644 --- a/lemarche/www/dashboard_favorites/views.py +++ b/lemarche/www/dashboard_favorites/views.py @@ -1,6 +1,6 @@ from django.conf import settings from django.contrib import messages -from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.messages.views import SuccessMessageMixin from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 @@ -16,12 +16,14 @@ from lemarche.www.dashboard_favorites.forms import FavoriteListEditForm -class DashboardFavoriteListView(LoginRequiredMixin, ListView): - # form_class = FavoriteListEditForm +class DashboardFavoriteListView(UserPassesTestMixin, LoginRequiredMixin, ListView): template_name = "favorites/dashboard_favorite_list.html" queryset = FavoriteList.objects.all() context_object_name = "favorite_lists" + def test_func(self): + return self.request.user.is_onboarded + def get_queryset(self): qs = super().get_queryset() qs = qs.by_user(user=self.request.user) From 755458d5d106df19368b18ffc930f4fcf801fb24 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Fri, 14 Feb 2025 17:26:58 +0100 Subject: [PATCH 08/37] User is onboard if it creates a Tender --- lemarche/www/tenders/views.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lemarche/www/tenders/views.py b/lemarche/www/tenders/views.py index c0d1f5898..8ebdf414c 100644 --- a/lemarche/www/tenders/views.py +++ b/lemarche/www/tenders/views.py @@ -228,6 +228,9 @@ def done(self, _, form_dict, **kwargs): user = get_or_create_user( self.request.user, tender_dict=cleaned_data, source=user_constants.SOURCE_TENDER_FORM ) + # User is considered as onboarded if it completes a Tender creation + user.is_onboarded = True + user.save(update_fields=["is_onboarded"]) # when it's done we save the tender tender_dict = cleaned_data | {"author": user, "source": tender_constants.SOURCE_FORM} is_draft: bool = self.request.POST.get("is_draft", False) From cc54d1fafe24204b0d4bd11015414e18c3affcc2 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Mon, 17 Feb 2025 16:05:42 +0100 Subject: [PATCH 09/37] Try google agenda --- lemarche/templates/auth/meeting_calendar.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lemarche/templates/auth/meeting_calendar.html b/lemarche/templates/auth/meeting_calendar.html index 2b347f36b..179e8f9c4 100644 --- a/lemarche/templates/auth/meeting_calendar.html +++ b/lemarche/templates/auth/meeting_calendar.html @@ -15,8 +15,11 @@

    Prenez rendez-vous pour activer votre compte

    - Veuillez sélectionner un créneau + Veuillez sélectionner un créneau : + + +
    From d565e4a87a04828f3a28ae270e26ad5248e59142 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Mon, 17 Feb 2025 16:32:34 +0100 Subject: [PATCH 10/37] Fix anonymous user case --- lemarche/www/dashboard/views.py | 3 ++- lemarche/www/dashboard_favorites/views.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lemarche/www/dashboard/views.py b/lemarche/www/dashboard/views.py index daafbc41d..136dfc682 100644 --- a/lemarche/www/dashboard/views.py +++ b/lemarche/www/dashboard/views.py @@ -20,7 +20,8 @@ class DashboardHomeView(UserPassesTestMixin, LoginRequiredMixin, DetailView): context_object_name = "user" def test_func(self): - return self.request.user.is_onboarded + if self.request.user.is_authenticated: + return self.request.user.is_onboarded def get_object(self): return self.request.user diff --git a/lemarche/www/dashboard_favorites/views.py b/lemarche/www/dashboard_favorites/views.py index b6d868fc5..b910314e4 100644 --- a/lemarche/www/dashboard_favorites/views.py +++ b/lemarche/www/dashboard_favorites/views.py @@ -22,7 +22,8 @@ class DashboardFavoriteListView(UserPassesTestMixin, LoginRequiredMixin, ListVie context_object_name = "favorite_lists" def test_func(self): - return self.request.user.is_onboarded + if self.request.user.is_authenticated: + return self.request.user.is_onboarded def get_queryset(self): qs = super().get_queryset() From 1da6b28e9bcbf2ffc3a17a711b27accdeba65801 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Tue, 18 Feb 2025 10:47:14 +0100 Subject: [PATCH 11/37] Add wagtail paragraph --- lemarche/cms/migrations/0015_paragraph.py | 38 +++++++++++++++++++ lemarche/cms/snippets.py | 30 +++++++++++++++ lemarche/templates/auth/meeting_calendar.html | 3 ++ lemarche/www/auth/views.py | 6 +++ 4 files changed, 77 insertions(+) create mode 100644 lemarche/cms/migrations/0015_paragraph.py diff --git a/lemarche/cms/migrations/0015_paragraph.py b/lemarche/cms/migrations/0015_paragraph.py new file mode 100644 index 000000000..28813b30c --- /dev/null +++ b/lemarche/cms/migrations/0015_paragraph.py @@ -0,0 +1,38 @@ +# Generated by Django 5.1.6 on 2025-02-18 09:33 + +import wagtail.fields +from django.db import migrations, models + + +def paragraph_migration(apps, schema_editor): + Paragraph = apps.get_model("cms", "Paragraph") + Paragraph.objects.create( + title="Prise de rendez vous", slug="rdv-signup", content="Prenez un rendez vous s'il vous plaît" + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0014_homepage_sub_header_custom_message"), + ] + + operations = [ + migrations.CreateModel( + name="Paragraph", + fields=[ + ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("title", models.CharField(max_length=255, verbose_name="Titre de l'encart")), + ( + "slug", + models.SlugField(unique=True, help_text="Identifiant", max_length=255, verbose_name="slug"), + ), + ("content", wagtail.fields.RichTextField(blank=True, verbose_name="Contenu")), + ], + options={ + "verbose_name": "Paragraphe", + "verbose_name_plural": "Paragraphes", + }, + ), + migrations.RunPython(paragraph_migration, migrations.RunPython.noop), + ] diff --git a/lemarche/cms/snippets.py b/lemarche/cms/snippets.py index bf8ebf8a1..2db3042b8 100644 --- a/lemarche/cms/snippets.py +++ b/lemarche/cms/snippets.py @@ -1,5 +1,6 @@ from django.db import models from wagtail.admin.panels import FieldPanel +from wagtail.fields import RichTextField from wagtail.snippets.models import register_snippet @@ -88,3 +89,32 @@ class Meta: def __str__(self): return self.title + + +@register_snippet +class Paragraph(models.Model): + title = models.CharField(max_length=255, verbose_name="Titre de l'encart") + slug = models.SlugField( + verbose_name="slug", + unique=True, + max_length=255, + help_text="Identifiant", + ) + + content = RichTextField( + blank=True, + verbose_name="Contenu", + ) + + panels = [ + FieldPanel("title"), + FieldPanel("slug"), + FieldPanel("content"), + ] + + class Meta: + verbose_name = "Paragraphe" + verbose_name_plural = "Paragraphes" + + def __str__(self): + return self.title diff --git a/lemarche/templates/auth/meeting_calendar.html b/lemarche/templates/auth/meeting_calendar.html index 179e8f9c4..42ae99086 100644 --- a/lemarche/templates/auth/meeting_calendar.html +++ b/lemarche/templates/auth/meeting_calendar.html @@ -22,6 +22,9 @@

    Prenez rendez-vous pour activer votre compte

    +
    + {{ wagtail_paragraph.content |safe }} +
    {% endblock content %} diff --git a/lemarche/www/auth/views.py b/lemarche/www/auth/views.py index 6bdb4df19..4bc218e40 100644 --- a/lemarche/www/auth/views.py +++ b/lemarche/www/auth/views.py @@ -6,6 +6,7 @@ from django.utils.safestring import mark_safe from django.views.generic import CreateView, TemplateView +from lemarche.cms.snippets import Paragraph from lemarche.users.models import User from lemarche.utils.emails import add_to_contact_list from lemarche.utils.urls import get_safe_url @@ -134,3 +135,8 @@ def get_success_url(self): class MeetingCalendarView(TemplateView): template_name = "auth/meeting_calendar.html" + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx["wagtail_paragraph"] = Paragraph.objects.get(slug="rdv-signup") + return ctx From d78b3580e49234233ecbcb70c7ee587c34087f15 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Tue, 18 Feb 2025 11:07:17 +0100 Subject: [PATCH 12/37] Add wagtail paragraph --- lemarche/templates/auth/meeting_calendar.html | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/lemarche/templates/auth/meeting_calendar.html b/lemarche/templates/auth/meeting_calendar.html index 42ae99086..b6b4c6d1f 100644 --- a/lemarche/templates/auth/meeting_calendar.html +++ b/lemarche/templates/auth/meeting_calendar.html @@ -9,22 +9,17 @@ {% dsfr_breadcrumb breadcrumb_data %} {% endblock breadcrumb %} {% block content %} -
    -
    +
    + {{ wagtail_paragraph.content |safe }} +
    +

    Prenez rendez-vous pour activer votre compte

    - - Veuillez sélectionner un créneau : - - +
    -
    - {{ wagtail_paragraph.content |safe }} -
    -
    {% endblock content %} From 9a3e0306f5fbbb04ae5f98bc675b55745ff3a571 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Tue, 18 Feb 2025 11:17:20 +0100 Subject: [PATCH 13/37] Iframe as varenv --- config/settings/base.py | 2 +- lemarche/templates/auth/meeting_calendar.html | 2 +- lemarche/www/auth/views.py | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/config/settings/base.py b/config/settings/base.py index 72ac80a60..cadf85afe 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -787,7 +787,7 @@ TALLY_BUYER_NPS_FORM_ID = env.str("TALLY_BUYER_NPS_FORM_ID", "") TALLY_SIAE_NPS_FORM_ID = env.str("TALLY_SIAE_NPS_FORM_ID", "") PARTNER_APPROCH_USER_ID = env.int("PARTNER_APPROCH_USER_ID", 0) - +GOOGLE_AGENDA_IFRAME_URL = env.str("GOOGLE_AGENDA_IFRAME_URL", "") # Misc # ------------------------------------------------------------------------------ diff --git a/lemarche/templates/auth/meeting_calendar.html b/lemarche/templates/auth/meeting_calendar.html index b6b4c6d1f..5e9673647 100644 --- a/lemarche/templates/auth/meeting_calendar.html +++ b/lemarche/templates/auth/meeting_calendar.html @@ -17,7 +17,7 @@

    Prenez rendez-vous pour activer votre compte

    - +
    diff --git a/lemarche/www/auth/views.py b/lemarche/www/auth/views.py index 4bc218e40..278bb7927 100644 --- a/lemarche/www/auth/views.py +++ b/lemarche/www/auth/views.py @@ -1,3 +1,4 @@ +from django.conf import settings from django.contrib import messages from django.contrib.auth import authenticate, login, views as auth_views from django.contrib.messages.views import SuccessMessageMixin @@ -139,4 +140,5 @@ class MeetingCalendarView(TemplateView): def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) ctx["wagtail_paragraph"] = Paragraph.objects.get(slug="rdv-signup") + ctx["agenda_iframe_url"] = settings.GOOGLE_AGENDA_IFRAME_URL return ctx From 24caf1912d8e04082f01651c0e8de9bc30dfc7a7 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Tue, 18 Feb 2025 14:47:41 +0100 Subject: [PATCH 14/37] test tests --- lemarche/www/auth/tests.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lemarche/www/auth/tests.py b/lemarche/www/auth/tests.py index 06d0323b1..c842969e2 100644 --- a/lemarche/www/auth/tests.py +++ b/lemarche/www/auth/tests.py @@ -5,6 +5,7 @@ from selenium.webdriver.firefox.options import Options from selenium.webdriver.support.select import Select +from lemarche.cms.snippets import Paragraph from lemarche.users.factories import DEFAULT_PASSWORD, UserFactory from lemarche.users.models import User @@ -43,6 +44,11 @@ def setUpClass(cls): def setUp(self): EXAMPLE_PASSWORD = "c*[gkp`0=" + # Static server tests cases erases data from migrations + Paragraph.objects.get_or_create( + slug="rdv-signup", + defaults={"title": "Prise de rendez vous"}, + ) self.SIAE = { "id_kind": 0, # required From 7f6fe330ea9c6d9bd175498b86489297408ef390 Mon Sep 17 00:00:00 2001 From: Guilouf Date: Thu, 27 Feb 2025 11:02:44 +0100 Subject: [PATCH 15/37] rebase changes --- .../templates/includes/_dropdown_menu.html | 10 ++++++---- .../layouts/_header_nav_primary_items.html | 20 ------------------- 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/lemarche/templates/includes/_dropdown_menu.html b/lemarche/templates/includes/_dropdown_menu.html index 01eaad76a..44bf34e6f 100644 --- a/lemarche/templates/includes/_dropdown_menu.html +++ b/lemarche/templates/includes/_dropdown_menu.html @@ -2,19 +2,21 @@