From 5836d6e6ed7926cc8bfb93d7866d7e2b097d42d3 Mon Sep 17 00:00:00 2001 From: Santiago Lamora Date: Tue, 30 Jan 2024 11:31:24 +0100 Subject: [PATCH] Allow search mailboxes by name or domain --- orchestra/contrib/musician/forms.py | 4 +++ .../templates/musician/mailbox_list.html | 18 ++++++++++- orchestra/contrib/musician/views.py | 32 +++++++++++++++++-- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/orchestra/contrib/musician/forms.py b/orchestra/contrib/musician/forms.py index 28e70086..67dec100 100644 --- a/orchestra/contrib/musician/forms.py +++ b/orchestra/contrib/musician/forms.py @@ -138,6 +138,10 @@ class MailboxUpdateForm(forms.ModelForm): model = Mailbox +class MailboxSearchForm(forms.Form): + name = forms.CharField(required=False) + address = forms.CharField(required=False) + class RecordCreateForm(ValidateZoneMixin, forms.ModelForm): class Meta: diff --git a/orchestra/contrib/musician/templates/musician/mailbox_list.html b/orchestra/contrib/musician/templates/musician/mailbox_list.html index 9fdc6b79..6ffcd657 100644 --- a/orchestra/contrib/musician/templates/musician/mailbox_list.html +++ b/orchestra/contrib/musician/templates/musician/mailbox_list.html @@ -1,8 +1,24 @@ {% extends "musician/mail_base.html" %} -{% load i18n %} +{% load bootstrap4 i18n %} {% block tabcontent %}
+ +
+
+
+ + +
+
+ + +
+ +
+
+ + diff --git a/orchestra/contrib/musician/views.py b/orchestra/contrib/musician/views.py index b7f0d3fa..e9bd2f7b 100644 --- a/orchestra/contrib/musician/views.py +++ b/orchestra/contrib/musician/views.py @@ -5,6 +5,8 @@ from typing import Any from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.core.mail import mail_managers +from django.db.models import Value +from django.db.models.functions import Concat from django.http import (HttpResponse, HttpResponseNotFound, HttpResponseRedirect) from django.shortcuts import get_object_or_404 @@ -30,11 +32,10 @@ from orchestra.contrib.mailboxes.models import Address, Mailbox from orchestra.contrib.saas.models import SaaS from orchestra.utils.html import html_to_pdf -# from .auth import login as auth_login from .auth import logout as auth_logout from .forms import (LoginForm, MailboxChangePasswordForm, MailboxCreateForm, - MailboxUpdateForm, MailForm, RecordCreateForm, - RecordUpdateForm) + MailboxSearchForm, MailboxUpdateForm, MailForm, + RecordCreateForm, RecordUpdateForm) from .mixins import (CustomContextMixin, ExtendedPaginationMixin, UserTokenRequiredMixin) from .models import Address as AddressService @@ -346,6 +347,31 @@ class MailboxListView(ServiceListView): # Translators: This message appears on the page title 'title': _('Mailboxes'), } + search_form_class = MailboxSearchForm + + def get_queryset(self): + qs = super().get_queryset() + + search_form = self.search_form_class(self.request.GET) + cleaned_data = search_form.cleaned_data if search_form.is_valid() else {} + + if "address" in cleaned_data: + qs = qs.annotate( + full_address=Concat("addresses__name", Value("@"), "addresses__domain__name") + ).filter( + full_address__icontains=cleaned_data["address"] + ) + + if "name" in cleaned_data: + qs = qs.filter(name__icontains=cleaned_data["name"]) + + return qs + + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['form'] = self.search_form_class()#self.request.GET) + return context class MailboxCreateView(CustomContextMixin, UserTokenRequiredMixin, CreateView):