From 48d6570e375d5ae3c7477b94b64d555f5b56b4eb Mon Sep 17 00:00:00 2001 From: Tom Price Date: Mon, 8 Dec 2014 00:59:08 +0000 Subject: [PATCH] Rig paperwork printing enabled --- .idea/PyRIGS.iml | 2 +- PyRIGS/settings.py | 4 +- RIGS/rigboard.py | 54 +++- RIGS/templates/RIGS/event_detail.html | 2 +- RIGS/templates/RIGS/event_print.xml | 110 ++++++++ RIGS/templates/RIGS/event_print_page.xml | 236 ++++++++++++++++++ RIGS/templates/RIGS/event_print_signature.xml | 10 + RIGS/urls.py | 3 + db.sqlite3 | Bin 25445376 -> 25445376 bytes requirements.txt | 3 +- z3c/rml/tests/expected/tag-selectField.pdf | 0 11 files changed, 419 insertions(+), 5 deletions(-) create mode 100644 RIGS/templates/RIGS/event_print.xml create mode 100644 RIGS/templates/RIGS/event_print_page.xml create mode 100644 RIGS/templates/RIGS/event_print_signature.xml delete mode 100644 z3c/rml/tests/expected/tag-selectField.pdf diff --git a/.idea/PyRIGS.iml b/.idea/PyRIGS.iml index 20d6af48..0952a30f 100644 --- a/.idea/PyRIGS.iml +++ b/.idea/PyRIGS.iml @@ -11,7 +11,7 @@ - + diff --git a/PyRIGS/settings.py b/PyRIGS/settings.py index 3bd31598..1f6bdbfe 100644 --- a/PyRIGS/settings.py +++ b/PyRIGS/settings.py @@ -134,4 +134,6 @@ STATIC_DIRS = ( TEMPLATE_DIRS = ( os.path.join(BASE_DIR, 'templates'), -) \ No newline at end of file +) + +TERMS_OF_HIRE_URL = "http://www.nottinghamtec.co.uk/pdf/terms.pdf" \ No newline at end of file diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 1b28aa54..6c0cea8d 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -1,9 +1,20 @@ +import os +import cStringIO as StringIO +from io import BytesIO +import urllib2 + from django.views import generic from django.core.urlresolvers import reverse_lazy +from django.shortcuts import get_object_or_404 +from django.template import Context, RequestContext +from django.template.loader import get_template +from django.conf import settings +from django.http import HttpResponse +from z3c.rml import rml2pdf +from PyPDF2 import PdfFileMerger, PdfFileReader from RIGS import models, forms - __author__ = 'ghost' @@ -35,6 +46,7 @@ class EventCreate(generic.CreateView): def get_success_url(self): return reverse_lazy('event_detail', kwargs={'pk': self.object.pk}) + class EventUpdate(generic.UpdateView): model = models.Event form_class = forms.EventForm @@ -46,3 +58,43 @@ class EventUpdate(generic.UpdateView): def get_success_url(self): return reverse_lazy('event_detail', kwargs={'pk': self.object.pk}) + + +class EventPrint(generic.View): + def get(self, request, pk): + object = get_object_or_404(models.Event, pk=pk) + 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', + } + }, + }) + + merger = PdfFileMerger() + + for copy in copies: + context['copy'] = copy + rml = template.render(context) + buffer = StringIO.StringIO() + + buffer = rml2pdf.parseString(rml) + + merger.append(PdfFileReader(buffer)) + + buffer.close() + + terms = urllib2.urlopen(settings.TERMS_OF_HIRE_URL) + merger.append(StringIO.StringIO(terms.read())) + + merged = BytesIO() + merger.write(merged) + + response = HttpResponse(content_type='application/pdf') + response['Content-Disposition'] = "filename=N%05d | %s.pdf" % (object.pk, object.name) + response.write(merged.getvalue()) + return response diff --git a/RIGS/templates/RIGS/event_detail.html b/RIGS/templates/RIGS/event_detail.html index 2a731246..fe410f0c 100644 --- a/RIGS/templates/RIGS/event_detail.html +++ b/RIGS/templates/RIGS/event_detail.html @@ -11,7 +11,7 @@
-
diff --git a/RIGS/templates/RIGS/event_print.xml b/RIGS/templates/RIGS/event_print.xml new file mode 100644 index 00000000..1a586705 --- /dev/null +++ b/RIGS/templates/RIGS/event_print.xml @@ -0,0 +1,110 @@ + +{% load multiply from filters %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% include "RIGS/event_print_page.xml" %} + + + \ No newline at end of file diff --git a/RIGS/templates/RIGS/event_print_page.xml b/RIGS/templates/RIGS/event_print_page.xml new file mode 100644 index 00000000..4e58b233 --- /dev/null +++ b/RIGS/templates/RIGS/event_print_page.xml @@ -0,0 +1,236 @@ + + + + + Event Date: + {{ object.start_date }} + JOB NUMBER: + N{{ object.pk|stringformat:"05d" }} + + + + + + +

Hirer

+

{{ object.person.name }}

+

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

+ +{% if object.person.phone %} + Tel: {{ object.person.phone }} +{% elif object.organisation.phone %} + Tel: {{ object.organisation.phone }} +{% endif %} + +{% if object.person.email %} + Email: {{ object.person.email }} +{% elif object.organisation.email %} + Email: {{ object.organisation.email }} +{% endif %} +
+ + + + +

Venue

+

{{ object.venue.name }}

+{{ object.venue.address|default_if_none:""|linebreaks }} +
+ + + +

Event Details

+ + + Start Time + + {{ object.start_time|time:"H:i" }} +
+ {{ object.start_date|date:"(d/m/Y)" }} +
+ + + + End Time + + {{ object.end_time|time:"H:i" }} +
+ {{ object.end_date|date:"(d/m/Y)" }} +
+ + + + Earliest Access + + {{ object.access_at|time:"H:i" }} +
+ {{ object.access_at|date:"d/m/Y" }} +
+ + +
+ + + + + + + + {# Bold tags need to be in a para in order to render in reportlab #} + + + Equipment Details + + + + + Price + + + + + Qty + + + + + Sub-total + + + +{% for item in object.items.all %} + + + {{ item.name }} + {% if item.description %} +
+ {{ item.description|linebreaks }} + {% endif %} +
+ + £ {{ item.cost|floatformat:2 }} + {{ item.quantity }} + £ {{ item.total_cost|floatformat:2 }} + +{% endfor %} +
+ + + VAT may be charged at the current rate date of event ({{ object.vat_rate.as_percent|floatformat:2 }}%) + Sum-total + £ {{ object.sum_total|floatformat:2 }} + + + VAT Registration Number: 116252989 + VAT @ {{ object.vat_rate.as_percent|floatformat:2 }}% + £ {{ object.vat|floatformat:2 }} + + + + + The full hire fee is payable at least 10 days before the event. + + + + + Total + + + + + £ {{ object.total|floatformat:2 }} + + + + + + + + + Bookings will + not + be confirmed until payment is received and the contract is signed. + + + + + 24 Hour Emergency Contacts: 07825 065681 or 07825 065678 + + + + + + + Payment Received: + {{ object.payment_received }} + Payment Method: + {{ object.payment_method }} + + + + + +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" %} \ No newline at end of file diff --git a/RIGS/templates/RIGS/event_print_signature.xml b/RIGS/templates/RIGS/event_print_signature.xml new file mode 100644 index 00000000..991fb8f4 --- /dev/null +++ b/RIGS/templates/RIGS/event_print_signature.xml @@ -0,0 +1,10 @@ + + + Signature + + Print Name + + Date + + + \ No newline at end of file diff --git a/RIGS/urls.py b/RIGS/urls.py index f2a4c312..ab811bb2 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -59,6 +59,9 @@ urlpatterns = patterns('', url(r'^event/(?P\d+)/$', permission_required_with_403('RIGS.view_event')(rigboard.EventDetail.as_view()), name='event_detail'), + url(r'^event/(?P\d+)/print/$', + permission_required_with_403('RIGS.view_event')(rigboard.EventPrint.as_view()), + name='event_print'), url(r'^event/create/$', permission_required_with_403('RIGS.add_event')(rigboard.EventCreate.as_view()), name='event_create'), diff --git a/db.sqlite3 b/db.sqlite3 index 624a04c388b873a90dc484a7dfafe17bd2511229..bec0d22afc1e45f51bcbd592e74563b3cac06237 100644 GIT binary patch delta 12872 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 AOaK4? delta 11554 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 LMr5pm^Pc|${C#!z diff --git a/requirements.txt b/requirements.txt index c7a586a1..8b7a7ba6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,5 @@ sqlparse==0.1.13 simplejson==3.6.5 lxml==3.4.1 pil==1.1.7 -z3c.rlm==2.7.2 \ No newline at end of file +z3c.rlm==2.7.2 +pyPDF2==1.23 \ No newline at end of file diff --git a/z3c/rml/tests/expected/tag-selectField.pdf b/z3c/rml/tests/expected/tag-selectField.pdf deleted file mode 100644 index e69de29b..00000000