This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
synchro-orleans/synchro_orleans/data/management/commands/email_new_invoices.py

72 lines
3.1 KiB
Python

from datetime import datetime, timedelta
import json
import shutil
import os
import requests
import logging
from django.core.management.base import BaseCommand, CommandError
from django.conf import settings
from django.utils.timezone import make_aware, get_current_timezone
from django.db.models import Q
from django.template.loader import get_template
from django.template import Context
from django.core.mail import EmailMultiAlternatives
from django.contrib.sites.models import Site
from synchro_orleans.data.models import Facture, InvoiceNotificationEmail
from synchro_orleans import signature
notification_timeout = settings.INVOICES_NOTIFICATION_TIMEOUT
invoice_view_url_base = settings.INVOICE_VIEW_URL_BASE
logger = logging.getLogger(__name__)
class Command(BaseCommand):
help = """
Sends email notifications about the invoices
"""
email_subject = 'Nouvelle facture'
email_template = 'invoice_mail.txt'
email_from = settings.DEFAULT_FROM_EMAIL
def handle(self, *args, **options):
for invoice in Facture.objects.filter(Q(paye=False) | Q(montant_regle=0),
active=True, date_limite_paie__gte=datetime.now(),
famille__liaisonnameidfamille__isnull=False):
try:
notification = InvoiceNotificationEmail.objects.filter(invoice_number=invoice.id).latest()
if notification.date_sent > make_aware(datetime.now(), get_current_timezone()) - timedelta(days=notification_timeout):
continue
except InvoiceNotificationEmail.DoesNotExist:
InvoiceNotificationEmail.objects.create(invoice_number=invoice.id)
nameid = invoice.famille.liaisonnameidfamille_set.all()[0]
signed_query = signature.sign_query('orig=synchro-orleans')
url = '{url}/{nameid}?{query}'.format(url=settings.AUTHENTIC2_USER_INFO_URL,
nameid=nameid.name_id,
query=signed_query)
logger.debug('requesting: %s' % url)
response = requests.get(url)
data = response.json()
attachment = os.path.join(settings.INVOICES_DIR, 'facture_%s.pdf' % invoice.id)
context = Context({'invoice': invoice,
'site': Site.objects.get_current(),
'invoice_view_url_base': invoice_view_url_base},)
context.update(data)
text_body = get_template(self.email_template).render(context)
message = EmailMultiAlternatives(self.email_subject, text_body, self.email_from, [result.email])
message.attach_file(os.path.join(settings.INVOICES_DIR, 'facture_%s.pdf'% invoice.id))
message.send()
logger.debug('email for invoice nr. %s sent' % invoice.id)
invoice.date_envoi_dernier_mail = make_aware(datetime.now(), get_current_timezone())
InvoiceNotificationEmail.objects.create(invoice_number=invoice.id)
invoice.save()