From caf0e6cf454a6d2fe712d1ec2f95d0ee37a463fe Mon Sep 17 00:00:00 2001 From: David Taylor Date: Fri, 22 May 2015 15:20:43 +0100 Subject: [PATCH] Added invoice paperwork functionality --- RIGS/finance.py | 34 ++++ RIGS/templates/RIGS/event_print.xml | 12 +- RIGS/templates/RIGS/event_print_page.xml | 235 +++++++++++++++-------- RIGS/templates/RIGS/invoice_detail.html | 8 +- RIGS/urls.py | 3 + 5 files changed, 204 insertions(+), 88 deletions(-) diff --git a/RIGS/finance.py b/RIGS/finance.py index 46e4a6eb..a6be584c 100644 --- a/RIGS/finance.py +++ b/RIGS/finance.py @@ -1,10 +1,16 @@ +import cStringIO as StringIO + from django.core.urlresolvers import reverse_lazy from django.db import connection from django.http import Http404, HttpResponseRedirect from django.views import generic +from django.template import RequestContext +from django.template.loader import get_template +from django.http import HttpResponse from django.shortcuts import get_object_or_404 from django.contrib import messages import datetime +from z3c.rml import rml2pdf from RIGS import models @@ -33,6 +39,34 @@ class InvoiceIndex(generic.ListView): class InvoiceDetail(generic.DetailView): model = models.Invoice +class InvoicePrint(generic.View): + def get(self, request, pk): + invoice = get_object_or_404(models.Invoice, pk=pk) + object = invoice.event + template = get_template('RIGS/event_print.xml') + copies = ('TEC', 'Client') + context = RequestContext(request, { + 'object': object, + 'fonts': { + 'opensans': { + 'regular': 'RIGS/static/fonts/OPENSANS-REGULAR.TTF', + 'bold': 'RIGS/static/fonts/OPENSANS-BOLD.TTF', + } + }, + 'invoice':invoice, + }) + + rml = template.render(context) + buffer = StringIO.StringIO() + + buffer = rml2pdf.parseString(rml) + + pdfData = buffer.read() + + response = HttpResponse(content_type='application/pdf') + response['Content-Disposition'] = "filename=Invoice %05d | %s.pdf" % (invoice.pk, object.name) + response.write(pdfData) + return response class InvoiceVoid(generic.View): def get(self, *args, **kwargs): diff --git a/RIGS/templates/RIGS/event_print.xml b/RIGS/templates/RIGS/event_print.xml index 03790b13..bf5f798f 100644 --- a/RIGS/templates/RIGS/event_print.xml +++ b/RIGS/templates/RIGS/event_print.xml @@ -22,17 +22,25 @@ + + + + + + + + @@ -91,7 +99,7 @@ - [{{ copy }} Copy] + {% if not invoice %}[{{ copy }} Copy]{% endif %} [Page of ] @@ -101,7 +109,7 @@ - [{{ copy }} Copy] + {% if not invoice %}[{{ copy }} Copy]{% endif %} [Page of ] diff --git a/RIGS/templates/RIGS/event_print_page.xml b/RIGS/templates/RIGS/event_print_page.xml index 7529b113..0668da63 100644 --- a/RIGS/templates/RIGS/event_print_page.xml +++ b/RIGS/templates/RIGS/event_print_page.xml @@ -1,16 +1,59 @@ +{% if invoice %} + + + + + {% endif %} +

N{{ object.pk|stringformat:"05d" }}: '{{ object.name }}'

{{object.start_date|date:"D jS N Y"}} + - -{{ object.description|default_if_none:""|linebreaks }} - + + {{ object.description|default_if_none:""|linebreaks }} + + +{% if invoice %} + + + + INVOICE + + + + Invoice Number + + {{ invoice.pk|stringformat:"05d" }} + + + + Invoice Date + + {{ invoice.invoice_date|date:"d/m/Y" }} + + + + PO Number + + {{ object.purchase_order|default_if_none:"" }}hello + + + + + + +
+ + +{% endif %} + @@ -18,7 +61,15 @@

Hirer

{{ object.person.name }}

{{ object.organisation.name|default_if_none:"" }}

- + {% if invoice %} + + {% if object.organisation.address %} + {{ object.organisation.address|default_if_none:""|linebreaksbr }} + {% elif object.person.address %} + {{ object.person.address|default_if_none:""|linebreaksbr }} + {% endif %} + + {% endif %} {% if object.person.phone %} {{ object.person.phone }} @@ -27,19 +78,29 @@ {% endif %} - {% if object.person.email %} - {{ object.person.email }} - {% elif object.organisation.email %} - {{ object.organisation.email }} + {% if invoice %} + {% if object.organisation.email %} + {{ object.organisation.email }} + {% elif object.person.email %} + {{ object.person.email }} + {% endif %} + {% else %} + {% if object.person.email %} + {{ object.person.email }} + {% elif object.organisation.email %} + {{ object.organisation.email }} + {% endif %} {% endif %}

Venue

{{ object.venue.name }}

+ {% if not invoice %} {{ object.venue.address|default_if_none:""|linebreaks }} + {% endif %} @@ -61,7 +122,7 @@ - {% if object.access_at %} + {% if object.access_at and not invoice%}

Access

@@ -139,9 +200,11 @@ + The full hire fee is payable at least 10 days before the event. + @@ -156,88 +219,90 @@
- - - - - Bookings will - not - be confirmed until payment is received and the contract is signed. - - - - - 24 Hour Emergency Contacts: 07825 065681 or 07825 065678 - - - - - - - -To be signed on booking: - -{% if object.organisation.union_account %} - - - I agree that am authorised to sign this invoice. I agree that I am the President/Treasurer of the hirer, or - that I have provided written permission from either the President or Treasurer of the hirer stating that I can - sign for this invoice. - - - - - I have read, understood and fully accepted the current conditions of hire. I agree to return any dry hire - items to TEC PA & Lighting in the same condition at the end of the hire period. - - - - - - Conditions of hire available on request or on the TEC PA & Lighting website. E&OE - - - - - Please return this form directly to TEC PA & Lighting and not the Students' Union Finance Department. - - - +{% if not invoice %} + + - Account Code - - + + Bookings will + not + be confirmed until payment is received and the contract is signed. + + + + + 24 Hour Emergency Contacts: 07825 065681 or 07825 065678 - -{% else %} - - - I, the hirer, have read, understand and fully accept the current conditions of hire. This document forms a - binding contract between TEC PA & Lighting and the hirer, the aforementioned conditions of hire forming - an integral part of it. - - + + + - - Conditions of hire available on request or on the TEC PA & Lighting website. E&OE - + To be signed on booking: + {% if object.organisation.union_account %} + + + I agree that am authorised to sign this invoice. I agree that I am the President/Treasurer of the hirer, or + that I have provided written permission from either the President or Treasurer of the hirer stating that I can + sign for this invoice. + + + + + I have read, understood and fully accepted the current conditions of hire. I agree to return any dry hire + items to TEC PA & Lighting in the same condition at the end of the hire period. + + + + + + Conditions of hire available on request or on the TEC PA & Lighting website. E&OE + + + + + Please return this form directly to TEC PA & Lighting and not the Students' Union Finance Department. + + + + + Account Code + + + + + + {% else %} + + + I, the hirer, have read, understand and fully accept the current conditions of hire. This document forms a + binding contract between TEC PA & Lighting and the hirer, the aforementioned conditions of hire forming + an integral part of it. + + + + + + Conditions of hire available on request or on the TEC PA & Lighting website. E&OE + + + + {% include "RIGS/event_print_signature.xml" %} + + + To be signed on the day of the event/hire: + + + + I, the hirer, have received the goods/services as requested and in good order. I agree to return any dry hire + items to TEC PA & Lighting in a similar condition at the end of the hire period. + + + {% endif %} {% include "RIGS/event_print_signature.xml" %} - - - To be signed on the day of the event/hire: - - - - I, the hirer, have received the goods/services as requested and in good order. I agree to return any dry hire - items to TEC PA & Lighting in a similar condition at the end of the hire period. - - -{% endif %} - -{% include "RIGS/event_print_signature.xml" %} - + + {% endif %} \ No newline at end of file diff --git a/RIGS/templates/RIGS/invoice_detail.html b/RIGS/templates/RIGS/invoice_detail.html index 8d7a950c..a3be5320 100644 --- a/RIGS/templates/RIGS/invoice_detail.html +++ b/RIGS/templates/RIGS/invoice_detail.html @@ -10,9 +10,15 @@ diff --git a/RIGS/urls.py b/RIGS/urls.py index cab2532c..012e3e81 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -99,6 +99,9 @@ urlpatterns = patterns('', url(r'^invoice/(?P\d+)/$', permission_required_with_403('RIGS.view_invoice')(finance.InvoiceDetail.as_view()), name='invoice_detail'), + url(r'^invoice/(?P\d+)/print/$', + permission_required_with_403('RIGS.view_invoice')(finance.InvoicePrint.as_view()), + name='invoice_print'), url(r'^invoice/(?P\d+)/void/$', permission_required_with_403('RIGS.change_invoice')(finance.InvoiceVoid.as_view()), name='invoice_void'),