From 904c7b279baea4bcf418af15c3c14033a7795ed3 Mon Sep 17 00:00:00 2001 From: Delphine SALVY Date: Wed, 18 Jul 2018 02:08:03 +0200 Subject: [PATCH] POC de l'envoi de facture par mail. --- .../templates/cotisations/email_invoice | 8 ++++ cotisations/tex.py | 17 +++++-- cotisations/views.py | 47 ++++++++++++++++++- 3 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 cotisations/templates/cotisations/email_invoice diff --git a/cotisations/templates/cotisations/email_invoice b/cotisations/templates/cotisations/email_invoice new file mode 100644 index 00000000..71459733 --- /dev/null +++ b/cotisations/templates/cotisations/email_invoice @@ -0,0 +1,8 @@ +Dear {{name}}, + +Thank you for your purchase. Here is your invoice. + +Should you need extra information, you can email us at {{contact_mail}}. + +Best regards, + {{ asso_name }}'s team diff --git a/cotisations/tex.py b/cotisations/tex.py index f456fe8a..4487d5b8 100644 --- a/cotisations/tex.py +++ b/cotisations/tex.py @@ -61,11 +61,9 @@ def render_invoice(_request, ctx={}): return r -def render_tex(_request, template, ctx={}): +def create_pdf(template, ctx={}): """ - Creates a PDF from a LaTex templates using pdflatex. - Writes it in a temporary directory and send back an HTTP response for - accessing this file. + Creates and returns a PDF from a LaTeX template using pdflatex. """ context = Context(ctx) template = get_template(template) @@ -81,6 +79,17 @@ def render_tex(_request, template, ctx={}): process.communicate(rendered_tpl) with open(os.path.join(tempdir, 'texput.pdf'), 'rb') as f: pdf = f.read() + + return pdf + + +def render_tex(_request, template, ctx={}): + """ + Creates a PDF from a LaTex templates using pdflatex. + Writes it in a temporary directory and send back an HTTP response for + accessing this file. + """ + pdf = create_pdf(template, ctx={}) r = HttpResponse(content_type='application/pdf') r.write(pdf) return r diff --git a/cotisations/views.py b/cotisations/views.py index 8b9fe79e..5ac55324 100644 --- a/cotisations/views.py +++ b/cotisations/views.py @@ -40,6 +40,8 @@ from django.db.models import Q from django.forms import modelformset_factory, formset_factory from django.utils import timezone from django.utils.translation import ugettext as _ +from django.core.mail import EmailMessage +from django.template.loader import get_template # Import des models, forms et fonctions re2o from reversion import revisions as reversion @@ -72,7 +74,7 @@ from .forms import ( SelectClubArticleForm, RechargeForm ) -from .tex import render_invoice +from .tex import create_pdf, render_invoice from .payment_methods.forms import payment_method_factory from .utils import find_payment_method @@ -147,6 +149,48 @@ def new_facture(request, user, userid): p.facture = new_invoice_instance p.save() + facture = new_invoice_instance # BErk + purchases_info = [] + for purchase in facture.vente_set.all(): + purchases_info.append({ + 'name': purchase.name, + 'price': purchase.prix, + 'quantity': purchase.number, + 'total_price': purchase.prix_total + }) + ctx = { + 'paid': True, + 'fid': facture.id, + 'DATE': facture.date, + 'recipient_name': "{} {}".format( + facture.user.name, + facture.user.surname + ), + 'address': facture.user.room, + 'article': purchases_info, + 'total': facture.prix_total(), + 'asso_name': AssoOption.get_cached_value('name'), + 'line1': AssoOption.get_cached_value('adresse1'), + 'line2': AssoOption.get_cached_value('adresse2'), + 'siret': AssoOption.get_cached_value('siret'), + 'email': AssoOption.get_cached_value('contact'), + 'phone': AssoOption.get_cached_value('telephone'), + 'tpl_path': os.path.join(settings.BASE_DIR, LOGO_PATH) + } + + pdf = create_pdf('cotisations/factures.tex', ctx) + + template = get_template('cotisations/email_invoice') + + mail = EmailMessage( + _('Your invoice'), + template.render(ctx), + GeneralOption.get_cached_value('email_from'), + [new_invoice_instance.user.email], + attachments = [('invoice.pdf', pdf, 'application/pdf')] + ) + mail.send() + return new_invoice_instance.paiement.end_payment( new_invoice_instance, request @@ -161,6 +205,7 @@ def new_facture(request, user, userid): balance = user.solde else: balance = None + return form( { 'factureform': invoice_form,