diff --git a/RIGS/finance.py b/RIGS/finance.py index b64b2e71..6f66a6fa 100644 --- a/RIGS/finance.py +++ b/RIGS/finance.py @@ -10,8 +10,9 @@ from django.template import RequestContext from django.template.loader import get_template from django.views import generic from django.db.models import Q +from django.db import transaction from z3c.rml import rml2pdf - +import reversion from RIGS import models from django import forms @@ -101,14 +102,14 @@ class InvoiceDelete(generic.DeleteView): def get(self, request, pk): obj = self.get_object() - if obj.payment_set.all().count() > 0: + if obj.payments.all().count() > 0: messages.info(self.request, 'To delete an invoice, delete the payments first.') return HttpResponseRedirect(reverse_lazy('invoice_detail', kwargs={'pk': obj.pk})) return super(InvoiceDelete, self).get(pk) def post(self, request, pk): obj = self.get_object() - if obj.payment_set.all().count() > 0: + if obj.payments.all().count() > 0: messages.info(self.request, 'To delete an invoice, delete the payments first.') return HttpResponseRedirect(reverse_lazy('invoice_detail', kwargs={'pk': obj.pk})) return super(InvoiceDelete, self).post(pk) @@ -159,7 +160,10 @@ class InvoiceWaiting(generic.ListView): class InvoiceEvent(generic.View): + @transaction.atomic() + @reversion.create_revision() def get(self, *args, **kwargs): + reversion.set_user(self.request.user) epk = kwargs.get('pk') event = models.Event.objects.get(pk=epk) invoice, created = models.Invoice.objects.get_or_create(event=event) @@ -184,6 +188,13 @@ class PaymentCreate(generic.CreateView): initial.update({'invoice': invoice}) return initial + @transaction.atomic() + @reversion.create_revision() + def form_valid(self, form, *args, **kwargs): + reversion.add_to_revision(form.cleaned_data['invoice']) + reversion.set_comment("Payment removed") + return super().form_valid(form, *args, **kwargs) + def get_success_url(self): messages.info(self.request, "location.reload()") return reverse_lazy('closemodal') @@ -192,5 +203,12 @@ class PaymentCreate(generic.CreateView): class PaymentDelete(generic.DeleteView): model = models.Payment + @transaction.atomic() + @reversion.create_revision() + def delete(self, *args, **kwargs): + reversion.add_to_revision(self.get_object().invoice) + reversion.set_comment("Payment removed") + return super().delete(*args, **kwargs) + def get_success_url(self): return self.request.POST.get('next') diff --git a/RIGS/models.py b/RIGS/models.py index 3a10a22f..2648a80b 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -527,7 +527,7 @@ class EventAuthorisation(models.Model, RevisionMixin): return str("N%05d" % self.event.pk + ' (requested by ' + self.sent_by.initials + ')') -@reversion.register(follow=['payment_set']) +@reversion.register(follow=['payments']) @python_2_unicode_compatible class Invoice(models.Model, RevisionMixin): event = models.OneToOneField('Event', on_delete=models.CASCADE) @@ -544,7 +544,7 @@ class Invoice(models.Model, RevisionMixin): @property def payment_total(self): - total = self.payment_set.aggregate(total=models.Sum('amount'))['total'] + total = self.payments.aggregate(total=models.Sum('amount'))['total'] if total: return total return Decimal("0.00") @@ -582,7 +582,7 @@ class Payment(models.Model): (ADJUSTMENT, 'TEC Adjustment'), ) - invoice = models.ForeignKey('Invoice', on_delete=models.CASCADE) + invoice = models.ForeignKey('Invoice', on_delete=models.CASCADE, related_name="payments") date = models.DateField() amount = models.DecimalField(max_digits=10, decimal_places=2, help_text='Please use ex. VAT') method = models.CharField(max_length=2, choices=METHODS, null=True, blank=True) diff --git a/RIGS/templates/RIGS/event_print_page.xml b/RIGS/templates/RIGS/event_print_page.xml index 4b1ddfdf..eb90c705 100644 --- a/RIGS/templates/RIGS/event_print_page.xml +++ b/RIGS/templates/RIGS/event_print_page.xml @@ -264,7 +264,7 @@ - {% for payment in object.invoice.payment_set.all %} + {% for payment in object.invoice.payments.all %}