Allow to create new customers in backend (#2367)

This commit is contained in:
Raphael Michel
2021-12-06 12:27:21 +01:00
committed by GitHub
parent bfd37af467
commit 5c55219d45
6 changed files with 61 additions and 8 deletions

View File

@@ -565,6 +565,13 @@ class CustomerUpdateForm(forms.ModelForm):
return self.cleaned_data
class CustomerCreateForm(CustomerUpdateForm):
class Meta:
model = Customer
fields = ['identifier', 'is_active', 'name_parts', 'email', 'is_verified', 'locale']
class MembershipUpdateForm(forms.ModelForm):
class Meta:

View File

@@ -2,15 +2,23 @@
{% load i18n %}
{% load bootstrap3 %}
{% block title %}
{% blocktrans trimmed with id=customer.identifier %}
Customer #{{ id }}
{% endblocktrans %}
{% endblock %}
{% block inner %}
<h1>
{% if not customer.id %}
{% trans "New customer" %}
{% else %}
{% blocktrans trimmed with id=customer.identifier %}
Customer #{{ id }}
{% endblocktrans %}
{% endif %}
{% endblock %}
{% block inner %}
<h1>
{% if not customer.id %}
{% trans "New customer" %}
{% else %}
{% blocktrans trimmed with id=customer.identifier %}
Customer #{{ id }}
{% endblocktrans %}
{% endif %}
</h1>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}

View File

@@ -15,6 +15,8 @@
No customer accounts have been created yet.
{% endblocktrans %}
</p>
<a href="{% url "control:organizer.customer.create" organizer=request.organizer.slug %}"
class="btn btn-primary btn-lg"><i class="fa fa-plus"></i> {% trans "Create a new customer" %}</a>
</div>
{% else %}
<div class="panel panel-default">
@@ -41,6 +43,10 @@
</div>
</form>
</div>
<p>
<a href="{% url "control:organizer.customer.create" organizer=request.organizer.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new customer" %}</a>
</p>
<div class="table-responsive">
<table class="table table-condensed table-hover">
<thead>

View File

@@ -133,6 +133,8 @@ urlpatterns = [
name='organizer.membershiptype.delete'),
re_path(r'^organizer/(?P<organizer>[^/]+)/customers$', organizer.CustomerListView.as_view(), name='organizer.customers'),
re_path(r'^organizer/(?P<organizer>[^/]+)/customers/select2$', typeahead.customer_select2, name='organizer.customers.select2'),
re_path(r'^organizer/(?P<organizer>[^/]+)/customer/add$',
organizer.CustomerCreateView.as_view(), name='organizer.customer.create'),
re_path(r'^organizer/(?P<organizer>[^/]+)/customer/(?P<customer>[^/]+)/$',
organizer.CustomerDetailView.as_view(), name='organizer.customer'),
re_path(r'^organizer/(?P<organizer>[^/]+)/customer/(?P<customer>[^/]+)/edit$',

View File

@@ -89,8 +89,8 @@ from pretix.control.forms.filter import (
)
from pretix.control.forms.orders import ExporterForm
from pretix.control.forms.organizer import (
CustomerUpdateForm, DeviceForm, EventMetaPropertyForm, GateForm,
GiftCardCreateForm, GiftCardUpdateForm, MailSettingsForm,
CustomerCreateForm, CustomerUpdateForm, DeviceForm, EventMetaPropertyForm,
GateForm, GiftCardCreateForm, GiftCardUpdateForm, MailSettingsForm,
MembershipTypeForm, MembershipUpdateForm, OrganizerDeleteForm,
OrganizerForm, OrganizerSettingsForm, OrganizerUpdateForm, TeamForm,
WebHookForm,
@@ -1863,6 +1863,35 @@ class CustomerDetailView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMi
return ctx
class CustomerCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, CreateView):
template_name = 'pretixcontrol/organizers/customer_edit.html'
permission = 'can_manage_customers'
context_object_name = 'customer'
form_class = CustomerCreateForm
def get_form_kwargs(self):
ctx = super().get_form_kwargs()
c = Customer(organizer=self.request.organizer)
c.assign_identifier()
ctx['instance'] = c
return ctx
def form_valid(self, form):
r = super().form_valid(form)
form.instance.log_action('pretix.customer.created', user=self.request.user, data={
k: getattr(form.instance, k)
for k in form.changed_data
})
messages.success(self.request, _('Your changes have been saved.'))
return r
def get_success_url(self):
return reverse('control:organizer.customer', kwargs={
'organizer': self.request.organizer.slug,
'customer': self.object.identifier,
})
class CustomerUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin, UpdateView):
template_name = 'pretixcontrol/organizers/customer_edit.html'
permission = 'can_manage_customers'

View File

@@ -194,6 +194,7 @@ organizer_urls = [
'organizer/abc/webhook/1/edit',
'organizer/abc/webhook/1/logs',
'organizer/abc/customers',
'organizer/abc/customer/add',
'organizer/abc/customer/1/',
'organizer/abc/giftcards',
'organizer/abc/giftcard/add',