Fix #141 -- Caching improvements for ticket outputs

This commit is contained in:
Raphael Michel
2016-11-29 15:52:16 +01:00
parent a8be2d5f24
commit fdbe71ff63
5 changed files with 22 additions and 4 deletions

View File

@@ -8,6 +8,8 @@ import pytz
from django.conf import settings
from django.db import models
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.timezone import make_aware, now
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)
cachedfile = models.ForeignKey(CachedFile, on_delete=models.CASCADE, null=True)
provider = models.CharField(max_length=255)
@receiver(post_delete, sender=CachedTicket)
def cached_file_delete(sender, instance, **kwargs):
if instance.cachedfile:
instance.cachedfile.delete()

View File

@@ -21,7 +21,7 @@ from pretix.base.models import (
CartPosition, Event, Item, ItemVariation, Order, OrderPosition, Quota,
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.services.async import ProfiledTask
from pretix.base.services.invoices import (
@@ -579,9 +579,13 @@ class OrderChangeManager:
self._perform_operations()
self._recalculate_total_and_payment_fee()
self._reissue_invoice()
self._clear_tickets_cache()
self._check_paid_to_free()
self._notify_user()
def _clear_tickets_cache(self):
CachedTicket.objects.filter(order_position__order=self.order).delete()
def _get_payment_provider(self):
responses = register_payment_providers.send(self.order.event)
pprov = None

View File

@@ -16,7 +16,7 @@ from django.views.generic.detail import SingleObjectMixin
from pretix.base.forms import I18nModelForm
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.invoices import build_preview_invoice_pdf
@@ -450,6 +450,9 @@ class TicketSettings(EventPermissionRequiredMixin, FormView):
for k in provider.form.changed_data
}
)
CachedTicket.objects.filter(
order_position__order__event=self.request.event, provider=provider.identifier
).delete()
else:
success = False
form = self.get_form(self.get_form_class())

View File

@@ -18,8 +18,8 @@ from django.views.generic.edit import DeleteView
from pretix.base.forms import I18nFormSet
from pretix.base.models import (
Item, ItemCategory, ItemVariation, Order, Question, QuestionAnswer,
QuestionOption, Quota,
CachedTicket, Item, ItemCategory, ItemVariation, Order, Question,
QuestionAnswer, QuestionOption, Quota,
)
from pretix.control.forms.item import (
CategoryForm, ItemCreateForm, ItemUpdateForm, ItemVariationForm,
@@ -787,6 +787,7 @@ class ItemUpdateGeneral(ItemDetailMixin, EventPermissionRequiredMixin, UpdateVie
for k in form.changed_data
}
)
CachedTicket.objects.filter(order_position__item=self.item).delete()
return super().form_valid(form)

View File

@@ -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 '
'to regenerate your invoice.')
messages.success(self.request, _(success_message))
CachedTicket.objects.filter(order_position__order=self.order).delete()
return redirect(self.get_order_url())
def get(self, request, *args, **kwargs):