8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-23 11:53:12 +00:00
re2o/cotisations/utils.py

132 lines
4.9 KiB
Python

# -*- mode: python; coding: utf-8 -*-
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2018 Hugo Levy-Falk
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# 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 re2o.mail_utils import send_mail_object
from .tex import create_pdf
from preferences.models import AssoOption, GeneralOption, CotisationsOption, Mandate
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."""
from cotisations.payment_methods import PAYMENT_METHODS
for method in PAYMENT_METHODS:
try:
o = method.PaymentMethod.objects.get(payment=payment)
return o
except method.PaymentMethod.DoesNotExist:
pass
return None
def send_mail_invoice(invoice, request=None):
"""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),
}
template = CotisationsOption.get_cached_value("invoice_template").template.name.split("/")[-1]
pdf = create_pdf(template, 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.get_mail],
attachments=[("invoice.pdf", pdf, "application/pdf")],
)
send_mail_object(mail, request)
def send_mail_voucher(invoice, request=None):
"""Creates a voucher from an invoice and sends it by email to the client"""
president = Mandate.get_mandate(invoice.date).president
ctx = {
"asso_name": AssoOption.get_cached_value("name"),
"pres_name": " ".join([president.name, president.surname]),
"firstname": invoice.user.name,
"lastname": invoice.user.surname,
"email": invoice.user.email,
"phone": invoice.user.telephone,
"date_end": invoice.get_subscription().latest("date_end_memb").date_end_memb,
"date_begin": invoice.get_subscription().earliest("date_start_memb").date_start_memb,
}
templatename = CotisationsOption.get_cached_value(
"voucher_template"
).template.name.split("/")[-1]
pdf = create_pdf(templatename, ctx)
template = get_template("cotisations/email_subscription_accepted")
ctx = {
"name": "{} {}".format(invoice.user.name, invoice.user.surname),
"asso_email": AssoOption.get_cached_value("contact"),
"asso_name": AssoOption.get_cached_value("name"),
"date_end": invoice.get_subscription().latest("date_end_memb").date_end_memb,
}
mail = EmailMessage(
"Votre reçu / Your voucher",
template.render(ctx),
GeneralOption.get_cached_value("email_from"),
[invoice.user.get_mail],
attachments=[("voucher.pdf", pdf, "application/pdf")],
)
send_mail_object(mail, request)