Allow search mailboxes by name or domain

This commit is contained in:
Santiago L 2024-01-30 11:31:24 +01:00
parent b21bc1363d
commit 5836d6e6ed
3 changed files with 50 additions and 4 deletions

View File

@ -138,6 +138,10 @@ class MailboxUpdateForm(forms.ModelForm):
model = Mailbox model = Mailbox
class MailboxSearchForm(forms.Form):
name = forms.CharField(required=False)
address = forms.CharField(required=False)
class RecordCreateForm(ValidateZoneMixin, forms.ModelForm): class RecordCreateForm(ValidateZoneMixin, forms.ModelForm):
class Meta: class Meta:

View File

@ -1,8 +1,24 @@
{% extends "musician/mail_base.html" %} {% extends "musician/mail_base.html" %}
{% load i18n %} {% load bootstrap4 i18n %}
{% block tabcontent %} {% block tabcontent %}
<div class="tab-pane fade show active" id="mailboxes" role="tabpanel" aria-labelledby="mailboxes-tab"> <div class="tab-pane fade show active" id="mailboxes" role="tabpanel" aria-labelledby="mailboxes-tab">
<div class="mt-4 search-form">
<form method="get" class="form-inline">
<div class="form-group mr-sm-2">
<label class="sr-only" for="id_name">Name</label>
<input type="text" name="name" class="form-control" placeholder="Name" title="" id="id_name">
</div>
<div class="form-group mr-sm-2">
<label class="sr-only" for="id_address">Address</label>
<input type="text" name="address" class="form-control" placeholder="Address" title="" id="id_address">
</div>
<button type="submit" class="btn btn-secondary">Search</button>
</form>
</div>
<table class="table service-list"> <table class="table service-list">
<colgroup> <colgroup>
<col span="1" style="width: 25%;"> <col span="1" style="width: 25%;">

View File

@ -5,6 +5,8 @@ from typing import Any
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.core.mail import mail_managers 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, from django.http import (HttpResponse, HttpResponseNotFound,
HttpResponseRedirect) HttpResponseRedirect)
from django.shortcuts import get_object_or_404 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.contrib.saas.models import SaaS
from orchestra.utils.html import html_to_pdf from orchestra.utils.html import html_to_pdf
# from .auth import login as auth_login
from .auth import logout as auth_logout from .auth import logout as auth_logout
from .forms import (LoginForm, MailboxChangePasswordForm, MailboxCreateForm, from .forms import (LoginForm, MailboxChangePasswordForm, MailboxCreateForm,
MailboxUpdateForm, MailForm, RecordCreateForm, MailboxSearchForm, MailboxUpdateForm, MailForm,
RecordUpdateForm) RecordCreateForm, RecordUpdateForm)
from .mixins import (CustomContextMixin, ExtendedPaginationMixin, from .mixins import (CustomContextMixin, ExtendedPaginationMixin,
UserTokenRequiredMixin) UserTokenRequiredMixin)
from .models import Address as AddressService from .models import Address as AddressService
@ -346,6 +347,31 @@ class MailboxListView(ServiceListView):
# Translators: This message appears on the page title # Translators: This message appears on the page title
'title': _('Mailboxes'), '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): class MailboxCreateView(CustomContextMixin, UserTokenRequiredMixin, CreateView):