From 0b4f826594101a589159f1f21445e78d4e0662cb Mon Sep 17 00:00:00 2001 From: Krophil Date: Mon, 7 Nov 2016 01:51:02 +0100 Subject: [PATCH] Add PDF operations generation --- .../accounting/journal_details.jinja | 2 + accounting/urls.py | 1 + accounting/views.py | 125 +++++- core/static/core/img/logo.jpg | Bin 0 -> 30478 bytes locale/fr/LC_MESSAGES/django.po | 409 +++++++++++++++++- 5 files changed, 522 insertions(+), 15 deletions(-) create mode 100644 core/static/core/img/logo.jpg diff --git a/accounting/templates/accounting/journal_details.jinja b/accounting/templates/accounting/journal_details.jinja index 3e499dda..4c5c3bb3 100644 --- a/accounting/templates/accounting/journal_details.jinja +++ b/accounting/templates/accounting/journal_details.jinja @@ -37,6 +37,7 @@ {% trans %}Comment{% endtrans %} {% trans %}File{% endtrans %} {% trans %}Actions{% endtrans %} + {% trans %}PDF{% endtrans %} @@ -70,6 +71,7 @@ {% trans %}Edit{% endtrans %} {% endif %} + {% trans %}Generate{% endtrans %} {% endfor %} diff --git a/accounting/urls.py b/accounting/urls.py index 15626460..fcd4a5f8 100644 --- a/accounting/urls.py +++ b/accounting/urls.py @@ -29,6 +29,7 @@ urlpatterns = [ # Operations url(r'^operation/create/(?P[0-9]+)$', OperationCreateView.as_view(), name='op_new'), url(r'^operation/(?P[0-9]+)$', OperationEditView.as_view(), name='op_edit'), + url(r'^operation/(?P[0-9]+)/pdf$', OperationPDFView.as_view(), name='op_pdf'), # Companies url(r'^company/create$', CompanyCreateView.as_view(), name='co_new'), url(r'^company/(?P[0-9]+)$', CompanyEditView.as_view(), name='co_edit'), diff --git a/accounting/views.py b/accounting/views.py index de424400..10b667fe 100644 --- a/accounting/views.py +++ b/accounting/views.py @@ -5,6 +5,10 @@ from django.core.urlresolvers import reverse_lazy from django.forms.models import modelform_factory from django.forms import HiddenInput from django import forms +from django.http import HttpResponseRedirect, HttpResponse +from django.utils.translation import ugettext as _ +from django.conf import settings + from ajax_select.fields import AutoCompleteSelectField, AutoCompleteSelectMultipleField @@ -190,6 +194,7 @@ class JournalEditView(CanEditMixin, UpdateView): fields = ['name', 'start_date', 'end_date', 'club_account', 'closed'] template_name = 'core/edit.jinja' + # Operation views class OperationForm(forms.ModelForm): @@ -303,6 +308,125 @@ class OperationEditView(CanEditMixin, UpdateView): kwargs['object'] = self.object.journal return kwargs +class OperationPDFView(CanViewMixin, DetailView): + """ + Display the PDF of a given operation + """ + + model = Operation + pk_url_kwarg = "op_id" + + def get(self, request, *args, **kwargs): + from reportlab.pdfgen import canvas + from reportlab.lib.units import cm + from reportlab.platypus import SimpleDocTemplate, Table, TableStyle + from reportlab.lib import colors + from reportlab.lib.pagesizes import letter + from reportlab.lib.utils import ImageReader + from reportlab.graphics.shapes import Drawing + from reportlab.pdfbase.ttfonts import TTFont + from reportlab.pdfbase import pdfmetrics + + pdfmetrics.registerFont(TTFont('DejaVu', 'DejaVuSerif.ttf')) + + + + self.object = self.get_object() + amount = self.object.amount + remark = self.object.remark + nature = self.object.accounting_type.movement_type + num = self.object.number + date = self.object.date + mode = self.object.mode + cheque_number = self.object.cheque_number + club_name = self.object.journal.club_account.name + ti = self.object.journal.name + op_label = self.object.label + club_address = self.object.journal.club_account.club.address + id_op = self.object.id + + if self.object.target_type == "OTHER": + target = self.object.target_label + else: + target = self.object.target.get_display_name() + + + response = HttpResponse(content_type='application/pdf') + response['Content-Disposition'] = 'attachment; filename="op-%d(%s_on_%s).pdf"' %(num, ti, club_name) + p = canvas.Canvas(response) + + p.setFont('DejaVu', 12) + + p.setTitle("%s %d" % (_("Operation"), num)) + width, height = letter + im = ImageReader("core/static/core/img/logo.jpg") + iw, ih = im.getSize() + p.drawImage(im, 40, height - 50, width=iw/2, height=ih/2) + + labelStr = [["%s %s - %s %s" % (_("Journal"), ti, _("Operation"), num)]] + + label = Table(labelStr, colWidths=[150], rowHeights=[20]) + + label.setStyle(TableStyle([ + ('ALIGN',(0,0),(-1,-1),'CENTER'), + ('BOX', (0,0), (-1,-1), 0.25, colors.black), + ])) + w, h = label.wrapOn(label, 0, 0) + label.drawOn(p, width-180, height) + + p.drawString(90, height - 100, _("Financial proof: ") + "OP%010d" % (id_op)) #Justificatif du libellé + p.drawString(90, height - 130, _("Club: %(club_name)s") % ({"club_name": club_name})) + p.drawString(90, height - 160, _("Label: %(op_label)s") % {"op_label": op_label if op_label != None else ""}) + + data = [] + + data += [["%s" % (_("Credit").upper() if nature == 'CREDIT' else _("Debit").upper())]] + + data += [[_("Amount: %(amount).2f €") % {"amount": amount}]] + + payment_mode = "" + for m in settings.SITH_ACCOUNTING_PAYMENT_METHOD: + if m[0] == mode: + payment_mode += "[\u00D7]" + else: + payment_mode += "[ ]" + payment_mode += " %s\n" %(m[1]) + + data += [[payment_mode]] + + data += [["%s : %s" % (_("Debtor") if nature == 'CREDIT' else _("Creditor"), target), ""]] + + data += [["%s \n%s" % (_("Comment:"), remark)]] + + t = Table(data, colWidths=[(width-90*2)/2]*2, rowHeights=[20, 20, 70, 20, 80]) + t.setStyle(TableStyle([ + ('ALIGN',(0,0),(-1,-1),'CENTER'), + ('VALIGN',(-2,-1),(-1,-1),'TOP'), + ('VALIGN',(0,0),(-1,-2),'MIDDLE'), + ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), + ('SPAN', (0, 0), (1, 0)), # line DEBIT/CREDIT + ('SPAN', (0, 1), (1, 1)), # line amount + ('SPAN',(-2, -1), (-1,-1)), # line comment + ('SPAN', (0, -2), (-1, -2)), # line creditor/debtor + ('SPAN', (0, 2), (1, 2)), # line payment_mode + ('ALIGN',(0, 2), (1, 2),'LEFT'), # line payment_mode + ('ALIGN', (-2, -1), (-1, -1), 'LEFT'), + ('BOX', (0,0), (-1,-1), 0.25, colors.black), + ])) + + w, h = t.wrapOn(p, 0, 0) + + t.drawOn(p, 90, 350) + + + + p.drawCentredString(10.5 * cm, 2 * cm, club_name) + p.drawCentredString(10.5 * cm, 1 * cm, club_address) + + p.showPage() + p.save() + return response + # Company views class CompanyCreateView(CanCreateMixin, CreateView): @@ -357,4 +481,3 @@ class LabelDeleteView(CanEditMixin, DeleteView): def get_success_url(self): return self.object.get_absolute_url() - diff --git a/core/static/core/img/logo.jpg b/core/static/core/img/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a273377368e78e9431038625aa54a47845218bf GIT binary patch literal 30478 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 literal 0 HcmV?d00001 diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index f2106df7..6ec2c920 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-11-29 11:25+0100\n" +"POT-Creation-Date: 2016-11-29 12:34+0100\n" "PO-Revision-Date: 2016-07-18\n" "Last-Translator: Skia \n" "Language-Team: AE info \n" @@ -244,11 +244,11 @@ msgstr "Un code comptable ne contient que des numéros" msgid "movement type" msgstr "type de mouvement" -#: accounting/models.py:300 +#: accounting/models.py:300 accounting/views.py:383 msgid "Credit" msgstr "Crédit" -#: accounting/models.py:300 +#: accounting/models.py:300 accounting/views.py:383 msgid "Debit" msgstr "Débit" @@ -337,7 +337,7 @@ msgstr "Nouveau compte club" #: accounting/templates/accounting/bank_account_details.jinja:26 #: accounting/templates/accounting/bank_account_list.jinja:21 #: accounting/templates/accounting/club_account_details.jinja:55 -#: accounting/templates/accounting/journal_details.jinja:70 club/views.py:54 +#: accounting/templates/accounting/journal_details.jinja:71 club/views.py:54 #: core/templates/core/file.jinja:38 core/templates/core/page.jinja:31 #: core/templates/core/user_tools.jinja:36 core/views/user.py:152 #: counter/templates/counter/cash_summary_list.jinja:53 @@ -403,9 +403,11 @@ msgstr "Nom" #: accounting/templates/accounting/club_account_details.jinja:29 msgid "Start" -msgstr "Début" +msgstr "" #: accounting/templates/accounting/club_account_details.jinja:30 +#, fuzzy +#| msgid "End" msgid "End" msgstr "Fin" @@ -431,12 +433,12 @@ msgid "Actions" msgstr "Actions" #: accounting/templates/accounting/club_account_details.jinja:50 -#: accounting/templates/accounting/journal_details.jinja:58 +#: accounting/templates/accounting/journal_details.jinja:59 msgid "Yes" msgstr "Oui" #: accounting/templates/accounting/club_account_details.jinja:52 -#: accounting/templates/accounting/journal_details.jinja:60 +#: accounting/templates/accounting/journal_details.jinja:61 msgid "No" msgstr "Non" @@ -455,7 +457,7 @@ msgstr "Classeur : " #: core/templates/core/user_account_detail.jinja:10 #: counter/templates/counter/counter_click.jinja:32 msgid "Amount: " -msgstr "Montant: " +msgstr "Montant : " #: accounting/templates/accounting/journal_details.jinja:19 msgid "Effective amount: " @@ -521,6 +523,14 @@ msgstr "Commentaire" msgid "File" msgstr "Fichier" +#: accounting/templates/accounting/journal_details.jinja:40 +msgid "PDF" +msgstr "" + +#: accounting/templates/accounting/journal_details.jinja:74 +msgid "Generate" +msgstr "Générer" + #: accounting/templates/accounting/label_list.jinja:14 msgid "Back to club account" msgstr "Retour au compte club" @@ -559,6 +569,45 @@ msgstr "Types simplifiés" msgid "New simplified type" msgstr "Nouveau type simplifié" +#: accounting/views.py:360 accounting/views.py:366 +msgid "Operation" +msgstr "Opération" + +#: accounting/views.py:366 +msgid "Journal" +msgstr "Classeur" + +#: accounting/views.py:377 +msgid "Financial proof: " +msgstr "Justificatif de libellé : " + +#: accounting/views.py:378 +#, python-format +msgid "Club: %(club_name)s" +msgstr "Club : %(club_name)s" + +#: accounting/views.py:379 +#, python-format +msgid "Label: %(op_label)s" +msgstr "Libellé : %(op_label)s" + +#: accounting/views.py:385 +#, python-format +msgid "Amount: %(amount).2f €" +msgstr "Montant : %(amount).2f €" + +#: accounting/views.py:397 +msgid "Debtor" +msgstr "Débiteur" + +#: accounting/views.py:397 +msgid "Creditor" +msgstr "Créditeur" + +#: accounting/views.py:399 +msgid "Comment:" +msgstr "Commentaire :" + #: club/models.py:21 msgid "unix name" msgstr "nom unix" @@ -593,7 +642,7 @@ msgstr "Un club avec ce nom UNIX existe déjà." #: club/models.py:145 counter/models.py:386 counter/models.py:403 #: eboutic/models.py:14 eboutic/models.py:47 launderette/models.py:89 -#: launderette/models.py:126 sas/models.py:96 +#: launderette/models.py:126 sas/models.py:98 msgid "user" msgstr "nom d'utilisateur" @@ -646,8 +695,10 @@ msgstr "Rôle" #: club/templates/club/club_old_members.jinja:10 #: core/templates/core/user_clubs.jinja:17 #: core/templates/core/user_clubs.jinja:43 +#, fuzzy +#| msgid "description" msgid "Description" -msgstr "Description" +msgstr "description" #: club/templates/club/club_members.jinja:11 #: core/templates/core/user_clubs.jinja:18 @@ -1234,6 +1285,8 @@ msgid "page content" msgstr "contenu de la page" #: core/templates/core/403.jinja:5 +#, fuzzy +#| msgid "403, Forbidden" msgid "403, Forbidden" msgstr "403. Non autorisé" @@ -1366,8 +1419,10 @@ msgid "Edit %(obj)s" msgstr "Éditer %(obj)s" #: core/templates/core/file.jinja:7 core/templates/core/file_list.jinja:6 +#, fuzzy +#| msgid "Files" msgid "File list" -msgstr "Liste des fichiers" +msgstr "Fichiers" #: core/templates/core/file.jinja:9 msgid "New file" @@ -1575,8 +1630,10 @@ msgid "History" msgstr "Historique" #: core/templates/core/page.jinja:45 +#, fuzzy +#| msgid "Target does not exists" msgid "Page does not exist" -msgstr "La page n'existe pas." +msgstr "La cible n'existe pas." #: core/templates/core/page.jinja:47 msgid "Create it?" @@ -1725,6 +1782,8 @@ msgid "Year" msgstr "Année" #: core/templates/core/user_account.jinja:9 +#, fuzzy +#| msgid "Month" msgid "Month" msgstr "Mois" @@ -1784,8 +1843,10 @@ msgid "Club(s)" msgstr "Clubs" #: core/templates/core/user_clubs.jinja:10 +#, fuzzy +#| msgid "Current scrub: " msgid "Current club(s) :" -msgstr "Clubs actuels : " +msgstr "Blouse actuelle : " #: core/templates/core/user_clubs.jinja:36 msgid "Old club(s) :" @@ -2428,6 +2489,8 @@ msgid "Choose another month: " msgstr "Choisir un autre mois : " #: counter/templates/counter/invoices_call.jinja:21 +#, fuzzy +#| msgid "Sum" msgid "Sum" msgstr "Somme" @@ -2804,7 +2867,7 @@ msgstr "Utilisateur qui sera conservé" msgid "User that will be deleted" msgstr "Utilisateur qui sera supprimé" -#: sas/models.py:97 +#: sas/models.py:99 msgid "picture" msgstr "photo" @@ -3018,3 +3081,321 @@ msgstr "Un utilisateur avec cette adresse email existe déjà" msgid "You must either choose an existing user or create a new one properly" msgstr "" "Vous devez soit choisir un utilisateur existant, ou en créer un proprement." + +#, fuzzy +#~| msgid "Nature" +#~ msgid "Nature bilan: " +#~ msgstr "Nature" + +#, fuzzy +#~| msgid "linked operation" +#~ msgid "Nature of operation" +#~ msgstr "opération liée" + +#, fuzzy +#~| msgid "location" +#~ msgid "Syndication" +#~ msgstr "lieu" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid value." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid URL." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid integer." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid email address." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "" +#~| "Enter a valid username. This value may contain only letters, numbers " +#~| "and ./+/-/_ characters." +#~ msgid "" +#~ "Enter a valid 'slug' consisting of letters, numbers, underscores or " +#~ "hyphens." +#~ msgstr "" +#~ "Entrez un nom d'utilisateur correct. Uniquement des lettres, numéros, " +#~ "et ./+/-/_" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid IPv4 address." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid IPv6 address." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid IPv4 or IPv6 address." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "A user with that email address already exists" +#~ msgid "%(model_name)s with this %(field_labels)s already exists." +#~ msgstr "Un utilisateur avec cette adresse email existe déjà" + +#, fuzzy +#~| msgid "Token name can not be blank" +#~ msgid "This field cannot be null." +#~ msgstr "Le nom du jeton ne peut pas être vide" + +#, fuzzy +#~| msgid "Token name can not be blank" +#~ msgid "This field cannot be blank." +#~ msgstr "Le nom du jeton ne peut pas être vide" + +#, fuzzy +#~| msgid "A user with that email address already exists" +#~ msgid "%(model_name)s with this %(field_label)s already exists." +#~ msgstr "Un utilisateur avec cette adresse email existe déjà" + +#, fuzzy +#~| msgid "number" +#~ msgid "Decimal number" +#~ msgstr "numéro" + +#, fuzzy +#~| msgid "Description" +#~ msgid "Duration" +#~ msgstr "Description" + +#, fuzzy +#~| msgid "email address" +#~ msgid "Email address" +#~ msgstr "adresse email" + +#, fuzzy +#~| msgid "File list" +#~ msgid "File path" +#~ msgstr "Liste des fichiers" + +#, fuzzy +#~| msgid "account number" +#~ msgid "Floating point number" +#~ msgstr "numero de compte" + +#, fuzzy +#~| msgid "address" +#~ msgid "IPv4 address" +#~ msgstr "Adresse" + +#, fuzzy +#~| msgid "address" +#~ msgid "IP address" +#~ msgstr "Adresse" + +#, fuzzy +#~| msgid "A user with that email address already exists" +#~ msgid "%(model)s instance with %(field)s %(value)r does not exist." +#~ msgstr "Un utilisateur avec cette adresse email existe déjà" + +#, fuzzy +#~| msgid "account number" +#~ msgid "Enter a whole number." +#~ msgstr "numero de compte" + +#, fuzzy +#~| msgid "account number" +#~ msgid "Enter a number." +#~ msgstr "numero de compte" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid date." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid time." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid date/time." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid duration." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a list of values." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "Enter a valid UUID." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "Current club(s) :" +#~ msgid "Currently" +#~ msgstr "Clubs actuels : " + +#, fuzzy +#~| msgid "Unknown event" +#~ msgid "Unknown" +#~ msgstr "Événement inconnu" + +#, fuzzy +#~| msgid "M" +#~ msgid "PM" +#~ msgstr "M" + +#, fuzzy +#~| msgid "M" +#~ msgid "AM" +#~ msgstr "M" + +#, fuzzy +#~| msgid "Month" +#~ msgid "Mon" +#~ msgstr "Mois" + +#, fuzzy +#~| msgid "Start" +#~ msgid "Sat" +#~ msgstr "Début" + +#, fuzzy +#~| msgid "Search" +#~ msgid "March" +#~ msgstr "Recherche" + +#, fuzzy +#~| msgid "Man" +#~ msgid "May" +#~ msgstr "Homme" + +#, fuzzy +#~| msgid "past member" +#~ msgid "September" +#~ msgstr "Anciens membres" + +#, fuzzy +#~| msgid "Members" +#~ msgid "November" +#~ msgstr "Membres" + +#, fuzzy +#~| msgid "Members" +#~ msgid "December" +#~ msgstr "Membres" + +#, fuzzy +#~| msgid "Man" +#~ msgid "jan" +#~ msgstr "Homme" + +#, fuzzy +#~| msgid "Bar" +#~ msgid "mar" +#~ msgstr "Bar" + +#, fuzzy +#~| msgid "Bar" +#~ msgid "apr" +#~ msgstr "Bar" + +#, fuzzy +#~| msgid "company" +#~ msgid "may" +#~ msgstr "entreprise" + +#, fuzzy +#~| msgid "journal" +#~ msgid "jun" +#~ msgstr "classeur" + +#, fuzzy +#~| msgid "journal" +#~ msgid "jul" +#~ msgstr "classeur" + +#, fuzzy +#~| msgid "sex" +#~ msgid "sep" +#~ msgstr "sexe" + +#, fuzzy +#~| msgid "Doctor" +#~ msgid "oct" +#~ msgstr "Doctorant" + +#, fuzzy +#~| msgid "Search" +#~ msgctxt "abbrev. month" +#~ msgid "March" +#~ msgstr "Recherche" + +#, fuzzy +#~| msgid "Man" +#~ msgctxt "abbrev. month" +#~ msgid "May" +#~ msgstr "Homme" + +#, fuzzy +#~| msgid "Search" +#~ msgctxt "alt. month" +#~ msgid "March" +#~ msgstr "Recherche" + +#, fuzzy +#~| msgid "Man" +#~ msgctxt "alt. month" +#~ msgid "May" +#~ msgstr "Homme" + +#, fuzzy +#~| msgid "past member" +#~ msgctxt "alt. month" +#~ msgid "September" +#~ msgstr "Anciens membres" + +#, fuzzy +#~| msgid "Members" +#~ msgctxt "alt. month" +#~ msgid "November" +#~ msgstr "Membres" + +#, fuzzy +#~| msgid "Members" +#~ msgctxt "alt. month" +#~ msgid "December" +#~ msgstr "Membres" + +#, fuzzy +#~| msgid "second email address" +#~ msgid "This is not a valid IPv6 address." +#~ msgstr "adresse email secondaire" + +#, fuzzy +#~| msgid "Page does not exist" +#~ msgid "\"%(path)s\" does not exist" +#~ msgstr "La page n'existe pas." + +#, fuzzy +#~| msgid "Club" +#~ msgid "Club:" +#~ msgstr "Club" + +#, fuzzy +#~| msgid "Debit" +#~ msgid "Debitor" +#~ msgstr "Débiteur"