mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-25 00:13:45 +00:00
Fix 141 : envoi des factures par mail
This commit is contained in:
parent
904c7b279b
commit
9dd54a99a5
3 changed files with 83 additions and 45 deletions
|
@ -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}},
|
Dear {{name}},
|
||||||
|
|
||||||
Thank you for your purchase. Here is your invoice.
|
Thank you for your purchase. Here is your invoice.
|
||||||
|
|
|
@ -19,6 +19,16 @@
|
||||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 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):
|
def find_payment_method(payment):
|
||||||
"""Finds the payment method associated to the payment if it exists."""
|
"""Finds the payment method associated to the payment if it exists."""
|
||||||
|
@ -30,3 +40,56 @@ def find_payment_method(payment):
|
||||||
except method.PaymentMethod.DoesNotExist:
|
except method.PaymentMethod.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
return None
|
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()
|
||||||
|
|
|
@ -40,8 +40,6 @@ from django.db.models import Q
|
||||||
from django.forms import modelformset_factory, formset_factory
|
from django.forms import modelformset_factory, formset_factory
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.translation import ugettext as _
|
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
|
# Import des models, forms et fonctions re2o
|
||||||
from reversion import revisions as reversion
|
from reversion import revisions as reversion
|
||||||
|
@ -74,9 +72,9 @@ from .forms import (
|
||||||
SelectClubArticleForm,
|
SelectClubArticleForm,
|
||||||
RechargeForm
|
RechargeForm
|
||||||
)
|
)
|
||||||
from .tex import create_pdf, render_invoice
|
from .tex import render_invoice
|
||||||
from .payment_methods.forms import payment_method_factory
|
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
|
@login_required
|
||||||
|
@ -149,47 +147,7 @@ def new_facture(request, user, userid):
|
||||||
p.facture = new_invoice_instance
|
p.facture = new_invoice_instance
|
||||||
p.save()
|
p.save()
|
||||||
|
|
||||||
facture = new_invoice_instance # BErk
|
send_mail_invoice(new_invoice_instance)
|
||||||
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(
|
return new_invoice_instance.paiement.end_payment(
|
||||||
new_invoice_instance,
|
new_invoice_instance,
|
||||||
|
@ -791,6 +749,9 @@ def credit_solde(request, user, **_kwargs):
|
||||||
prix=refill_form.cleaned_data['value'],
|
prix=refill_form.cleaned_data['value'],
|
||||||
number=1
|
number=1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
send_mail_invoice(invoice)
|
||||||
|
|
||||||
return invoice.paiement.end_payment(invoice, request)
|
return invoice.paiement.end_payment(invoice, request)
|
||||||
p = get_object_or_404(Paiement, is_balance=True)
|
p = get_object_or_404(Paiement, is_balance=True)
|
||||||
return form({
|
return form({
|
||||||
|
|
Loading…
Reference in a new issue