From 9dd54a99a5b9fba1970d1b69008763d7062a7468 Mon Sep 17 00:00:00 2001 From: Delphine SALVY Date: Mon, 23 Jul 2018 00:13:25 +0200 Subject: [PATCH] Fix 141 : envoi des factures par mail --- .../templates/cotisations/email_invoice | 14 +++++ cotisations/utils.py | 63 +++++++++++++++++++ cotisations/views.py | 51 ++------------- 3 files changed, 83 insertions(+), 45 deletions(-) diff --git a/cotisations/templates/cotisations/email_invoice b/cotisations/templates/cotisations/email_invoice index 71459733..8d6b2cc2 100644 --- a/cotisations/templates/cotisations/email_invoice +++ b/cotisations/templates/cotisations/email_invoice @@ -1,3 +1,17 @@ +=== English version below === + +Bonjour {{name}}, + +Nous vous remercions pour votre achat auprès de {{asso_name}} et nous vous en joignons la facture. + +En cas de question, n’hésitez pas à nous contacter par mail à {{contact_mail}}. + +Cordialement, +L’équipe de {{asso_name}} + + +=== English version === + Dear {{name}}, Thank you for your purchase. Here is your invoice. diff --git a/cotisations/utils.py b/cotisations/utils.py index f36b376f..0211dd40 100644 --- a/cotisations/utils.py +++ b/cotisations/utils.py @@ -19,6 +19,16 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +import os + +from django.template.loader import get_template +from django.core.mail import EmailMessage + +from .tex import create_pdf +from preferences.models import AssoOption, GeneralOption +from re2o.settings import LOGO_PATH +from re2o import settings + def find_payment_method(payment): """Finds the payment method associated to the payment if it exists.""" @@ -30,3 +40,56 @@ def find_payment_method(payment): except method.PaymentMethod.DoesNotExist: pass return None + + +def send_mail_invoice(invoice): + """Creates the pdf of the invoice and sends it by email to the client""" + purchases_info = [] + for purchase in invoice.vente_set.all(): + purchases_info.append({ + 'name': purchase.name, + 'price': purchase.prix, + 'quantity': purchase.number, + 'total_price': purchase.prix_total + }) + + ctx = { + 'paid': True, + 'fid': invoice.id, + 'DATE': invoice.date, + 'recipient_name': "{} {}".format( + invoice.user.name, + invoice.user.surname + ), + 'address': invoice.user.room, + 'article': purchases_info, + 'total': invoice.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') + + ctx = { + 'name': "{} {}".format( + invoice.user.name, + invoice.user.surname + ), + 'contact_mail': AssoOption.get_cached_value('contact'), + 'asso_name': AssoOption.get_cached_value('name') + } + + mail = EmailMessage( + 'Votre facture / Your invoice', + template.render(ctx), + GeneralOption.get_cached_value('email_from'), + [invoice.user.email], + attachments=[('invoice.pdf', pdf, 'application/pdf')] + ) + mail.send() diff --git a/cotisations/views.py b/cotisations/views.py index 5ac55324..66eb66f5 100644 --- a/cotisations/views.py +++ b/cotisations/views.py @@ -40,8 +40,6 @@ 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 @@ -74,9 +72,9 @@ from .forms import ( SelectClubArticleForm, RechargeForm ) -from .tex import create_pdf, render_invoice +from .tex import render_invoice from .payment_methods.forms import payment_method_factory -from .utils import find_payment_method +from .utils import find_payment_method, send_mail_invoice @login_required @@ -149,47 +147,7 @@ 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() + send_mail_invoice(new_invoice_instance) return new_invoice_instance.paiement.end_payment( new_invoice_instance, @@ -791,6 +749,9 @@ def credit_solde(request, user, **_kwargs): prix=refill_form.cleaned_data['value'], number=1 ) + + send_mail_invoice(invoice) + return invoice.paiement.end_payment(invoice, request) p = get_object_or_404(Paiement, is_balance=True) return form({