diff --git a/src/open_inwoner/accounts/tests/test_profile_views.py b/src/open_inwoner/accounts/tests/test_profile_views.py index 153a3260e1..ee7d2eec97 100644 --- a/src/open_inwoner/accounts/tests/test_profile_views.py +++ b/src/open_inwoner/accounts/tests/test_profile_views.py @@ -1035,7 +1035,12 @@ class NewsletterSubscriptionTests(ClearCachesMixin, WebTest): def setUp(self): super().setUp() - self.profile_url = reverse("profile:newsletters") + self.profile_app = ProfileConfig.objects.create( + namespace=ProfileApphook.app_name, newsletters=True + ) + cms_tools.create_apphook_page(ProfileApphook) + + self.profile_url = reverse("profile:detail") self.user = DigidUserFactory() self.config = LapostaConfig.get_solo() @@ -1054,7 +1059,12 @@ def setUp(self): def setUpMocks(self, m): m.get( "https://laposta.local/api/v2/list", - json={"data": [{"list": self.list1.dict()}, {"list": self.list2.dict()}]}, + json={ + "data": [ + {"list": self.list1.model_dump()}, + {"list": self.list2.model_dump()}, + ] + }, ) def test_do_not_render_form_if_config_is_missing(self, m): @@ -1063,7 +1073,6 @@ def test_do_not_render_form_if_config_is_missing(self, m): response = self.app.get(self.profile_url, user=self.user) - self.assertIn(_("Geen nieuwsbrieven beschikbaar"), response.text) self.assertNotIn("newsletter-form", response.forms) def test_do_not_render_form_if_no_newsletters_are_found(self, m): @@ -1071,7 +1080,6 @@ def test_do_not_render_form_if_no_newsletters_are_found(self, m): response = self.app.get(self.profile_url, user=self.user) - self.assertIn(_("Geen nieuwsbrieven beschikbaar"), response.text) self.assertNotIn("newsletter-form", response.forms) def test_render_form_if_newsletters_are_found(self, m): diff --git a/src/open_inwoner/accounts/views/__init__.py b/src/open_inwoner/accounts/views/__init__.py index 24428ecabd..8517315ec7 100644 --- a/src/open_inwoner/accounts/views/__init__.py +++ b/src/open_inwoner/accounts/views/__init__.py @@ -41,7 +41,6 @@ MyDataView, MyNotificationsView, MyProfileView, - NewsletterSubscribeView, UserAppointmentsView, ) from .registration import CustomRegistrationView, NecessaryFieldsUserView @@ -80,7 +79,6 @@ "MyDataView", "MyNotificationsView", "MyProfileView", - "NewsletterSubscribeView", "UserAppointmentsView", "CustomRegistrationView", "NecessaryFieldsUserView", diff --git a/src/open_inwoner/accounts/views/profile.py b/src/open_inwoner/accounts/views/profile.py index f626243529..b0e9330b19 100644 --- a/src/open_inwoner/accounts/views/profile.py +++ b/src/open_inwoner/accounts/views/profile.py @@ -5,7 +5,6 @@ from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin -from django.forms.forms import Form from django.http import HttpResponseRedirect from django.shortcuts import redirect from django.urls import reverse, reverse_lazy @@ -49,7 +48,31 @@ class MyProfileView( FormView, ): template_name = "pages/profile/me.html" - form_class = Form + form_class = NewsletterSubscriptionForm + + def get_success_url(self) -> str: + return reverse("profile:detail") + + def get_form_kwargs(self) -> dict[str, Any]: + kwargs = super().get_form_kwargs() + kwargs["user"] = self.request.user + return kwargs + + def form_valid(self, form): + form.save(self.request) + + # Display errors raised by Laposta API + if form.errors: + self.log_user_action( + self.request.user, _("failed to modify user newsletter subscription") + ) + return self.form_invalid(form) + + messages.success(self.request, _("Uw wijzigingen zijn opgeslagen")) + self.log_user_action( + self.request.user, _("users newsletter subscriptions were modified") + ) + return HttpResponseRedirect(self.get_success_url()) @cached_property def crumbs(self): @@ -140,6 +163,9 @@ def get_context_data(self, **kwargs): return context def post(self, request, *args, **kwargs): + if "newsletter-submit" in request.POST: + return super().post(request, *args, **kwargs) + if request.user.is_authenticated and not request.user.is_staff: instance = User.objects.get(id=request.user.id) @@ -311,44 +337,6 @@ def form_valid(self, form): return HttpResponseRedirect(self.get_success_url()) -class NewsletterSubscribeView( - LogMixin, LoginRequiredMixin, CommonPageMixin, BaseBreadcrumbMixin, FormView -): - form_class = NewsletterSubscriptionForm - template_name = "pages/profile/newsletters.html" - - def get_success_url(self) -> str: - return reverse("profile:newsletters") - - @cached_property - def crumbs(self): - return [ - (_("Mijn profiel"), reverse("profile:detail")), - (_("Nieuwsbrieven"), reverse("profile:newsletters")), - ] - - def get_form_kwargs(self) -> dict[str, Any]: - kwargs = super().get_form_kwargs() - kwargs["user"] = self.request.user - return kwargs - - def form_valid(self, form): - form.save(self.request) - - # Display errors raised by Laposta API - if form.errors: - self.log_user_action( - self.request.user, _("failed to modify user newsletter subscription") - ) - return self.form_invalid(form) - - messages.success(self.request, _("Uw wijzigingen zijn opgeslagen")) - self.log_user_action( - self.request.user, _("users newsletter subscriptions were modified") - ) - return HttpResponseRedirect(self.get_success_url()) - - class UserAppointmentsView( LogMixin, LoginRequiredMixin, CommonPageMixin, BaseBreadcrumbMixin, TemplateView ): diff --git a/src/open_inwoner/cms/profile/urls.py b/src/open_inwoner/cms/profile/urls.py index 3b98ebc2c3..464b2a5242 100644 --- a/src/open_inwoner/cms/profile/urls.py +++ b/src/open_inwoner/cms/profile/urls.py @@ -22,7 +22,6 @@ MyNotificationsView, MyProfileView, NecessaryFieldsUserView, - NewsletterSubscribeView, UserAppointmentsView, ) from open_inwoner.accounts.views.actions import ActionDeleteView @@ -109,11 +108,6 @@ EmailVerificationUserView.as_view(), name="email_verification_user", ), - path( - "newsletters", - NewsletterSubscribeView.as_view(), - name="newsletters", - ), path("appointments", UserAppointmentsView.as_view(), name="appointments"), path("", MyProfileView.as_view(), name="detail"), ] diff --git a/src/open_inwoner/templates/pages/profile/me.html b/src/open_inwoner/templates/pages/profile/me.html index 9291535dc2..6206c2cab3 100644 --- a/src/open_inwoner/templates/pages/profile/me.html +++ b/src/open_inwoner/templates/pages/profile/me.html @@ -101,7 +101,26 @@

{% trans "Voorkeuren voor meldingen" %} - {% if view.config.selected_categories or view.config.mentors or view.config.my_contacts or view.config.actions or view.config.ssd or view.config.selfdiagnose or view.config.newsletters or view.config.appointments %} + {% if view.config.newsletters and form.fields.newsletters.choices %} +
+
+

{% trans "Nieuwsbrieven" %}

+
+
+ {% csrf_token %} + + {% for field in form.fields %} + {% autorender_field form field %} + {% endfor %} + + {% button_row %} + {% button text=_("Opslaan") type="submit" extra_classes="button--primary" name="newsletter-submit" %} + {% endbutton_row %} +
+
+ {% endif %} + + {% if view.config.selected_categories or view.config.mentors or view.config.my_contacts or view.config.actions or view.config.ssd or view.config.selfdiagnose or view.config.appointments %} {# Overview #}

{% trans "Overzicht" %}

@@ -256,19 +275,6 @@

{% trans "Zelftest" %} {% endif %} - {% if view.config.newsletters %} - -
-

{% trans "Nieuwsbrieven" %} -

- - - {% trans "Bekijk nieuwsbrieven" %} - {% icon icon="arrow_forward" icon_position="after" primary=True outlined=True %} - -
-
- {% endif %} {% if view.config.appointments %}
diff --git a/src/open_inwoner/templates/pages/profile/newsletters.html b/src/open_inwoner/templates/pages/profile/newsletters.html deleted file mode 100644 index f39ab515a9..0000000000 --- a/src/open_inwoner/templates/pages/profile/newsletters.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends 'master.html' %} -{% load i18n form_tags anchor_menu_tags %} - -{% block content %} - -

{% trans "Nieuwsbrieven" %}

-{% if form.fields.newsletters.choices %} -

{% trans "Vink nieuwsbrieven aan en druk om opslaan om je erop te abonneren" %}

-
- {% csrf_token %} - - {% for field in form.fields %} - {% autorender_field form field %} - {% endfor %} - {% form_actions primary_text=_("Opslaan") primary_icon="arrow_forward" %} -
-{% else %} -

{% trans "Geen nieuwsbrieven beschikbaar" %}

-{% endif %} - -{% endblock %}