mirror of
https://github.com/pretix/pretix.git
synced 2026-05-07 15:34:02 +00:00
Option to notify users when questions have been changed in backend
This commit is contained in:
@@ -979,6 +979,35 @@ def send_download_reminders(sender, **kwargs):
|
|||||||
logger.exception('Reminder email could not be sent to attendee')
|
logger.exception('Reminder email could not be sent to attendee')
|
||||||
|
|
||||||
|
|
||||||
|
def notify_user_changed_order(order, user=None, auth=None):
|
||||||
|
with language(order.locale):
|
||||||
|
try:
|
||||||
|
invoice_name = order.invoice_address.name
|
||||||
|
invoice_company = order.invoice_address.company
|
||||||
|
except InvoiceAddress.DoesNotExist:
|
||||||
|
invoice_name = ""
|
||||||
|
invoice_company = ""
|
||||||
|
email_template = order.event.settings.mail_text_order_changed
|
||||||
|
email_context = {
|
||||||
|
'event': order.event.name,
|
||||||
|
'url': build_absolute_uri(order.event, 'presale:event.order.open', kwargs={
|
||||||
|
'order': order.code,
|
||||||
|
'secret': order.secret,
|
||||||
|
'hash': order.email_confirm_hash()
|
||||||
|
}),
|
||||||
|
'invoice_name': invoice_name,
|
||||||
|
'invoice_company': invoice_company,
|
||||||
|
}
|
||||||
|
email_subject = _('Your order has been changed: %(code)s') % {'code': order.code}
|
||||||
|
try:
|
||||||
|
order.send_mail(
|
||||||
|
email_subject, email_template, email_context,
|
||||||
|
'pretix.event.order.email.order_changed', user, auth=auth
|
||||||
|
)
|
||||||
|
except SendMailException:
|
||||||
|
logger.exception('Order changed email could not be sent')
|
||||||
|
|
||||||
|
|
||||||
class OrderChangeManager:
|
class OrderChangeManager:
|
||||||
error_messages = {
|
error_messages = {
|
||||||
'product_without_variation': _('You need to select a variation of the product.'),
|
'product_without_variation': _('You need to select a variation of the product.'),
|
||||||
@@ -1509,34 +1538,6 @@ class OrderChangeManager:
|
|||||||
except InvoiceAddress.DoesNotExist:
|
except InvoiceAddress.DoesNotExist:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def _notify_user(self, order):
|
|
||||||
with language(order.locale):
|
|
||||||
try:
|
|
||||||
invoice_name = order.invoice_address.name
|
|
||||||
invoice_company = order.invoice_address.company
|
|
||||||
except InvoiceAddress.DoesNotExist:
|
|
||||||
invoice_name = ""
|
|
||||||
invoice_company = ""
|
|
||||||
email_template = order.event.settings.mail_text_order_changed
|
|
||||||
email_context = {
|
|
||||||
'event': order.event.name,
|
|
||||||
'url': build_absolute_uri(self.order.event, 'presale:event.order.open', kwargs={
|
|
||||||
'order': order.code,
|
|
||||||
'secret': order.secret,
|
|
||||||
'hash': order.email_confirm_hash()
|
|
||||||
}),
|
|
||||||
'invoice_name': invoice_name,
|
|
||||||
'invoice_company': invoice_company,
|
|
||||||
}
|
|
||||||
email_subject = _('Your order has been changed: %(code)s') % {'code': order.code}
|
|
||||||
try:
|
|
||||||
order.send_mail(
|
|
||||||
email_subject, email_template, email_context,
|
|
||||||
'pretix.event.order.email.order_changed', self.user, auth=self.auth
|
|
||||||
)
|
|
||||||
except SendMailException:
|
|
||||||
logger.exception('Order changed email could not be sent')
|
|
||||||
|
|
||||||
def commit(self, check_quotas=True):
|
def commit(self, check_quotas=True):
|
||||||
if self._committed:
|
if self._committed:
|
||||||
# an order change can only be committed once
|
# an order change can only be committed once
|
||||||
@@ -1567,9 +1568,9 @@ class OrderChangeManager:
|
|||||||
self._check_paid_to_free()
|
self._check_paid_to_free()
|
||||||
|
|
||||||
if self.notify:
|
if self.notify:
|
||||||
self._notify_user(self.order)
|
notify_user_changed_order(self.order, self.user, self.auth)
|
||||||
if self.split_order:
|
if self.split_order:
|
||||||
self._notify_user(self.split_order)
|
notify_user_changed_order(self.split_order, self.user, self.auth)
|
||||||
|
|
||||||
order_changed.send(self.order.event, order=self.order)
|
order_changed.send(self.order.event, order=self.order)
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,24 @@
|
|||||||
</details>
|
</details>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="panel panel-default items">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">
|
||||||
|
{% trans "Other operations" %}
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="form-horizontal">
|
||||||
|
{% bootstrap_form_errors other_form %}
|
||||||
|
{% if other_form.custom_error %}
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
{{ other_form.custom_error }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% bootstrap_field other_form.notify layout="control" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="form-group submit-group">
|
<div class="form-group submit-group">
|
||||||
<a class="btn btn-default btn-lg"
|
<a class="btn btn-default btn-lg"
|
||||||
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
|
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ from pretix.base.services.mail import SendMailException, render_mail
|
|||||||
from pretix.base.services.orders import (
|
from pretix.base.services.orders import (
|
||||||
OrderChangeManager, OrderError, approve_order, cancel_order, deny_order,
|
OrderChangeManager, OrderError, approve_order, cancel_order, deny_order,
|
||||||
extend_order, mark_order_expired, mark_order_refunded,
|
extend_order, mark_order_expired, mark_order_refunded,
|
||||||
|
notify_user_changed_order,
|
||||||
)
|
)
|
||||||
from pretix.base.services.stats import order_overview
|
from pretix.base.services.stats import order_overview
|
||||||
from pretix.base.services.tickets import generate
|
from pretix.base.services.tickets import generate
|
||||||
@@ -1319,12 +1320,27 @@ class OrderModifyInformation(OrderQuestionsViewMixin, OrderView):
|
|||||||
only_user_visible = False
|
only_user_visible = False
|
||||||
all_optional = True
|
all_optional = True
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
ctx = super().get_context_data(**kwargs)
|
||||||
|
ctx['other_form'] = self.other_form
|
||||||
|
return ctx
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def other_form(self):
|
||||||
|
return OtherOperationsForm(prefix='other', order=self.order,
|
||||||
|
data=self.request.POST if self.request.method == "POST" else None)
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
failed = not self.save() or not self.invoice_form.is_valid()
|
failed = not self.save() or not self.invoice_form.is_valid() or not self.other_form.is_valid()
|
||||||
|
notify = self.other_form.cleaned_data['notify'] if self.other_form.is_valid() else True
|
||||||
if failed:
|
if failed:
|
||||||
messages.error(self.request,
|
messages.error(self.request,
|
||||||
_("We had difficulties processing your input. Please review the errors below."))
|
_("We had difficulties processing your input. Please review the errors below."))
|
||||||
return self.get(request, *args, **kwargs)
|
return self.get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
if notify:
|
||||||
|
notify_user_changed_order(self.order)
|
||||||
|
|
||||||
if hasattr(self.invoice_form, 'save'):
|
if hasattr(self.invoice_form, 'save'):
|
||||||
self.invoice_form.save()
|
self.invoice_form.save()
|
||||||
self.order.log_action('pretix.event.order.modified', {
|
self.order.log_action('pretix.event.order.modified', {
|
||||||
|
|||||||
Reference in New Issue
Block a user