forked from CGM_Public/pretix_original
Fix #141 -- Caching improvements for ticket outputs
This commit is contained in:
@@ -8,6 +8,8 @@ import pytz
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
|
from django.db.models.signals import post_delete
|
||||||
|
from django.dispatch import receiver
|
||||||
from django.utils.crypto import get_random_string
|
from django.utils.crypto import get_random_string
|
||||||
from django.utils.timezone import make_aware, now
|
from django.utils.timezone import make_aware, now
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
@@ -563,3 +565,9 @@ class CachedTicket(models.Model):
|
|||||||
order_position = models.ForeignKey(OrderPosition, on_delete=models.CASCADE)
|
order_position = models.ForeignKey(OrderPosition, on_delete=models.CASCADE)
|
||||||
cachedfile = models.ForeignKey(CachedFile, on_delete=models.CASCADE, null=True)
|
cachedfile = models.ForeignKey(CachedFile, on_delete=models.CASCADE, null=True)
|
||||||
provider = models.CharField(max_length=255)
|
provider = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(post_delete, sender=CachedTicket)
|
||||||
|
def cached_file_delete(sender, instance, **kwargs):
|
||||||
|
if instance.cachedfile:
|
||||||
|
instance.cachedfile.delete()
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from pretix.base.models import (
|
|||||||
CartPosition, Event, Item, ItemVariation, Order, OrderPosition, Quota,
|
CartPosition, Event, Item, ItemVariation, Order, OrderPosition, Quota,
|
||||||
User, Voucher,
|
User, Voucher,
|
||||||
)
|
)
|
||||||
from pretix.base.models.orders import InvoiceAddress
|
from pretix.base.models.orders import CachedTicket, InvoiceAddress
|
||||||
from pretix.base.payment import BasePaymentProvider
|
from pretix.base.payment import BasePaymentProvider
|
||||||
from pretix.base.services.async import ProfiledTask
|
from pretix.base.services.async import ProfiledTask
|
||||||
from pretix.base.services.invoices import (
|
from pretix.base.services.invoices import (
|
||||||
@@ -579,9 +579,13 @@ class OrderChangeManager:
|
|||||||
self._perform_operations()
|
self._perform_operations()
|
||||||
self._recalculate_total_and_payment_fee()
|
self._recalculate_total_and_payment_fee()
|
||||||
self._reissue_invoice()
|
self._reissue_invoice()
|
||||||
|
self._clear_tickets_cache()
|
||||||
self._check_paid_to_free()
|
self._check_paid_to_free()
|
||||||
self._notify_user()
|
self._notify_user()
|
||||||
|
|
||||||
|
def _clear_tickets_cache(self):
|
||||||
|
CachedTicket.objects.filter(order_position__order=self.order).delete()
|
||||||
|
|
||||||
def _get_payment_provider(self):
|
def _get_payment_provider(self):
|
||||||
responses = register_payment_providers.send(self.order.event)
|
responses = register_payment_providers.send(self.order.event)
|
||||||
pprov = None
|
pprov = None
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from django.views.generic.detail import SingleObjectMixin
|
|||||||
|
|
||||||
from pretix.base.forms import I18nModelForm
|
from pretix.base.forms import I18nModelForm
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
Event, EventPermission, Item, ItemVariation, User,
|
CachedTicket, Event, EventPermission, Item, ItemVariation, User,
|
||||||
)
|
)
|
||||||
from pretix.base.services import tickets
|
from pretix.base.services import tickets
|
||||||
from pretix.base.services.invoices import build_preview_invoice_pdf
|
from pretix.base.services.invoices import build_preview_invoice_pdf
|
||||||
@@ -450,6 +450,9 @@ class TicketSettings(EventPermissionRequiredMixin, FormView):
|
|||||||
for k in provider.form.changed_data
|
for k in provider.form.changed_data
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
CachedTicket.objects.filter(
|
||||||
|
order_position__order__event=self.request.event, provider=provider.identifier
|
||||||
|
).delete()
|
||||||
else:
|
else:
|
||||||
success = False
|
success = False
|
||||||
form = self.get_form(self.get_form_class())
|
form = self.get_form(self.get_form_class())
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ from django.views.generic.edit import DeleteView
|
|||||||
|
|
||||||
from pretix.base.forms import I18nFormSet
|
from pretix.base.forms import I18nFormSet
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
Item, ItemCategory, ItemVariation, Order, Question, QuestionAnswer,
|
CachedTicket, Item, ItemCategory, ItemVariation, Order, Question,
|
||||||
QuestionOption, Quota,
|
QuestionAnswer, QuestionOption, Quota,
|
||||||
)
|
)
|
||||||
from pretix.control.forms.item import (
|
from pretix.control.forms.item import (
|
||||||
CategoryForm, ItemCreateForm, ItemUpdateForm, ItemVariationForm,
|
CategoryForm, ItemCreateForm, ItemUpdateForm, ItemVariationForm,
|
||||||
@@ -787,6 +787,7 @@ class ItemUpdateGeneral(ItemDetailMixin, EventPermissionRequiredMixin, UpdateVie
|
|||||||
for k in form.changed_data
|
for k in form.changed_data
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
CachedTicket.objects.filter(order_position__item=self.item).delete()
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -401,6 +401,8 @@ class OrderModify(EventViewMixin, OrderDetailMixin, QuestionsViewMixin, Template
|
|||||||
success_message = ('Your invoice address has been updated. Please contact us if you need us '
|
success_message = ('Your invoice address has been updated. Please contact us if you need us '
|
||||||
'to regenerate your invoice.')
|
'to regenerate your invoice.')
|
||||||
messages.success(self.request, _(success_message))
|
messages.success(self.request, _(success_message))
|
||||||
|
|
||||||
|
CachedTicket.objects.filter(order_position__order=self.order).delete()
|
||||||
return redirect(self.get_order_url())
|
return redirect(self.get_order_url())
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
|
|||||||
Reference in New Issue
Block a user