Implement address delete
This commit is contained in:
parent
98dfa7a9f4
commit
b0366ff1d0
|
@ -178,6 +178,11 @@ class Orchestra(object):
|
||||||
|
|
||||||
return addresses
|
return addresses
|
||||||
|
|
||||||
|
def delete_mail_address(self, pk):
|
||||||
|
path = API_PATHS.get('address-detail').format_map({'pk': pk})
|
||||||
|
url = urllib.parse.urljoin(self.base_url, path)
|
||||||
|
return self.request("DELETE", url=url, render_as=None)
|
||||||
|
|
||||||
def retrieve_mailbox_list(self):
|
def retrieve_mailbox_list(self):
|
||||||
mailboxes = self.retrieve_service_list(Mailbox.api_name)
|
mailboxes = self.retrieve_service_list(Mailbox.api_name)
|
||||||
return [Mailbox.new_from_json(mailbox_data) for mailbox_data in mailboxes]
|
return [Mailbox.new_from_json(mailbox_data) for mailbox_data in mailboxes]
|
||||||
|
|
|
@ -31,9 +31,9 @@ class MailForm(forms.Form):
|
||||||
forward = forms.EmailField(required=False)
|
forward = forms.EmailField(required=False)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
instance = kwargs.pop('instance', None)
|
self.instance = kwargs.pop('instance', None)
|
||||||
if instance is not None:
|
if self.instance is not None:
|
||||||
kwargs['initial'] = instance.deserialize()
|
kwargs['initial'] = self.instance.deserialize()
|
||||||
|
|
||||||
domains = kwargs.pop('domains')
|
domains = kwargs.pop('domains')
|
||||||
mailboxes = kwargs.pop('mailboxes')
|
mailboxes = kwargs.pop('mailboxes')
|
||||||
|
|
|
@ -233,6 +233,7 @@ class Address(OrchestraModel):
|
||||||
fields = ('mail_address', 'aliases', 'type', 'type_detail')
|
fields = ('mail_address', 'aliases', 'type', 'type_detail')
|
||||||
param_defaults = {
|
param_defaults = {
|
||||||
"id": None,
|
"id": None,
|
||||||
|
"name": None,
|
||||||
"domain": None,
|
"domain": None,
|
||||||
"mailboxes": [],
|
"mailboxes": [],
|
||||||
"forward": None,
|
"forward": None,
|
||||||
|
@ -260,6 +261,10 @@ class Address(OrchestraModel):
|
||||||
name + '@' + self.data['domain']['name'] for name in self.data['names'][1:]
|
name + '@' + self.data['domain']['name'] for name in self.data['names'][1:]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def full_address_name(self):
|
||||||
|
return "{}@{}".format(self.name, self.domain['name'])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def mail_address(self):
|
def mail_address(self):
|
||||||
return self.data['names'][0] + '@' + self.data['domain']['name']
|
return self.data['names'][0] + '@' + self.data['domain']['name']
|
||||||
|
|
12
musician/templates/musician/address_check_delete.html
Normal file
12
musician/templates/musician/address_check_delete.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{% extends "musician/base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<form method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<p>{% blocktrans with address_name=object.full_address_name %}Are you sure that you want remove the address: "{{ address_name }}"?{% endblocktrans %}</p>
|
||||||
|
<p><strong>{% trans 'NOTE: This action cannot be undone.' %}</strong></p>
|
||||||
|
<input class="btn btn-danger" type="submit" value="{% trans 'Delete' %}">
|
||||||
|
<a class="btn btn-secondary" href="{% url 'musician:address-update' view.kwargs.pk %}">{% trans 'Cancel' %}</a>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
|
@ -10,6 +10,11 @@
|
||||||
{% buttons %}
|
{% buttons %}
|
||||||
<a class="btn btn-light mr-2" href="{% url 'musician:address-list' %}">{% trans "Cancel" %}</a>
|
<a class="btn btn-light mr-2" href="{% url 'musician:address-list' %}">{% trans "Cancel" %}</a>
|
||||||
<button type="submit" class="btn btn-secondary">{% trans "Save" %}</button>
|
<button type="submit" class="btn btn-secondary">{% trans "Save" %}</button>
|
||||||
|
{% if form.instance %}
|
||||||
|
<div class="float-right">
|
||||||
|
<a class="btn btn-danger" href="{% url 'musician:address-delete' view.kwargs.pk %}">{% trans "Delete" %}</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
{% endbuttons %}
|
{% endbuttons %}
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -22,6 +22,7 @@ urlpatterns = [
|
||||||
path('address/', views.MailView.as_view(), name='address-list'),
|
path('address/', views.MailView.as_view(), name='address-list'),
|
||||||
path('address/new/', views.MailCreateView.as_view(), name='address-create'),
|
path('address/new/', views.MailCreateView.as_view(), name='address-create'),
|
||||||
path('address/<int:pk>/', views.MailUpdateView.as_view(), name='address-update'),
|
path('address/<int:pk>/', views.MailUpdateView.as_view(), name='address-update'),
|
||||||
|
path('address/<int:pk>/delete/', views.AddressDeleteView.as_view(), name='address-delete'),
|
||||||
path('mailboxes/', views.MailboxesView.as_view(), name='mailbox-list'),
|
path('mailboxes/', views.MailboxesView.as_view(), name='mailbox-list'),
|
||||||
path('mailing-lists/', views.MailingListsView.as_view(), name='mailing-lists'),
|
path('mailing-lists/', views.MailingListsView.as_view(), name='mailing-lists'),
|
||||||
path('databases/', views.DatabasesView.as_view(), name='database-list'),
|
path('databases/', views.DatabasesView.as_view(), name='database-list'),
|
||||||
|
|
|
@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _
|
||||||
from django.views import View
|
from django.views import View
|
||||||
from django.views.generic.base import RedirectView, TemplateView
|
from django.views.generic.base import RedirectView, TemplateView
|
||||||
from django.views.generic.detail import DetailView
|
from django.views.generic.detail import DetailView
|
||||||
from django.views.generic.edit import FormView
|
from django.views.generic.edit import DeleteView, FormView
|
||||||
from django.views.generic.list import ListView
|
from django.views.generic.list import ListView
|
||||||
from requests.exceptions import HTTPError
|
from requests.exceptions import HTTPError
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ class MailView(ServiceListView):
|
||||||
|
|
||||||
class MailCreateView(CustomContextMixin, UserTokenRequiredMixin, FormView):
|
class MailCreateView(CustomContextMixin, UserTokenRequiredMixin, FormView):
|
||||||
service_class = Address
|
service_class = Address
|
||||||
template_name = "musician/mail_form.html"
|
template_name = "musician/address_form.html"
|
||||||
form_class = MailForm
|
form_class = MailForm
|
||||||
success_url = reverse_lazy("musician:address-list")
|
success_url = reverse_lazy("musician:address-list")
|
||||||
extra_context = {'service': service_class}
|
extra_context = {'service': service_class}
|
||||||
|
@ -230,7 +230,7 @@ class MailCreateView(CustomContextMixin, UserTokenRequiredMixin, FormView):
|
||||||
|
|
||||||
class MailUpdateView(CustomContextMixin, UserTokenRequiredMixin, FormView):
|
class MailUpdateView(CustomContextMixin, UserTokenRequiredMixin, FormView):
|
||||||
service_class = Address
|
service_class = Address
|
||||||
template_name = "musician/mail_form.html"
|
template_name = "musician/address_form.html"
|
||||||
form_class = MailForm
|
form_class = MailForm
|
||||||
success_url = reverse_lazy("musician:address-list")
|
success_url = reverse_lazy("musician:address-list")
|
||||||
extra_context = {'service': service_class}
|
extra_context = {'service': service_class}
|
||||||
|
@ -259,6 +259,24 @@ class MailUpdateView(CustomContextMixin, UserTokenRequiredMixin, FormView):
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
class AddressDeleteView(CustomContextMixin, UserTokenRequiredMixin, DeleteView):
|
||||||
|
template_name = "musician/address_check_delete.html"
|
||||||
|
success_url = reverse_lazy("musician:address-list")
|
||||||
|
|
||||||
|
def get_object(self, queryset=None):
|
||||||
|
obj = self.orchestra.retrieve_mail_address(self.kwargs['pk'])
|
||||||
|
return obj
|
||||||
|
|
||||||
|
def delete(self, request, *args, **kwargs):
|
||||||
|
self.object = self.get_object()
|
||||||
|
try:
|
||||||
|
self.orchestra.delete_mail_address(self.object.id)
|
||||||
|
except HTTPError as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
return HttpResponseRedirect(self.success_url)
|
||||||
|
|
||||||
|
|
||||||
class MailingListsView(ServiceListView):
|
class MailingListsView(ServiceListView):
|
||||||
service_class = MailinglistService
|
service_class = MailinglistService
|
||||||
template_name = "musician/mailinglists.html"
|
template_name = "musician/mailinglists.html"
|
||||||
|
|
Loading…
Reference in a new issue