From 2dd410fedfb7b3d7bac1ad7e3c63825369ddf68c Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Fri, 31 Aug 2018 15:53:45 +0200 Subject: [PATCH 1/2] Fix l'envoie de mail, en postsave maintenant (plus propre) --- .../migrations/0034_auto_20180831_1532.py | 20 +++++++++++++++++++ cotisations/models.py | 18 ++++++++++++----- cotisations/payment_methods/balance/models.py | 2 -- cotisations/payment_methods/cheque/models.py | 2 -- cotisations/payment_methods/comnpay/models.py | 2 -- cotisations/views.py | 6 +----- 6 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 cotisations/migrations/0034_auto_20180831_1532.py diff --git a/cotisations/migrations/0034_auto_20180831_1532.py b/cotisations/migrations/0034_auto_20180831_1532.py new file mode 100644 index 00000000..ea698374 --- /dev/null +++ b/cotisations/migrations/0034_auto_20180831_1532.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2018-08-31 13:32 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cotisations', '0033_auto_20180818_1319'), + ] + + operations = [ + migrations.AlterField( + model_name='facture', + name='valid', + field=models.BooleanField(default=False, verbose_name='validated'), + ), + ] diff --git a/cotisations/models.py b/cotisations/models.py index 8734c17c..15d2e39d 100644 --- a/cotisations/models.py +++ b/cotisations/models.py @@ -50,7 +50,7 @@ from machines.models import regen from re2o.field_permissions import FieldPermissionModelMixin from re2o.mixins import AclMixin, RevMixin -from cotisations.utils import find_payment_method +from cotisations.utils import find_payment_method, send_mail_invoice from cotisations.validators import check_no_balance @@ -137,7 +137,7 @@ class Facture(BaseInvoice): ) # TODO : change name to validity for clarity valid = models.BooleanField( - default=True, + default=False, verbose_name=_("validated") ) # TODO : changed name to controlled for clarity @@ -231,6 +231,7 @@ class Facture(BaseInvoice): self.field_permissions = { 'control': self.can_change_control, } + self.__original_valid = self.valid def __str__(self): return str(self.user) + ' ' + str(self.date) @@ -242,9 +243,12 @@ def facture_post_save(**kwargs): Synchronise the LDAP user after an invoice has been saved. """ facture = kwargs['instance'] - user = facture.user - user.set_active() - user.ldap_sync(base=True, access_refresh=True, mac_refresh=False) + if facture.valid: + user = facture.user + if not facture.__original_valid: + user.set_active() + send_mail_invoice(facture) + user.ldap_sync(base=False, access_refresh=True, mac_refresh=False) @receiver(post_delete, sender=Facture) @@ -702,6 +706,10 @@ class Paiement(RevMixin, AclMixin, models.Model): if payment_method is not None and use_payment_method: return payment_method.end_payment(invoice, request) + ## So make this invoice valid, trigger send mail + invoice.valid = True + invoice.save() + # In case a cotisation was bought, inform the user, the # cotisation time has been extended too if any(sell.type_cotisation for sell in invoice.vente_set.all()): diff --git a/cotisations/payment_methods/balance/models.py b/cotisations/payment_methods/balance/models.py index 250e6949..b4c82556 100644 --- a/cotisations/payment_methods/balance/models.py +++ b/cotisations/payment_methods/balance/models.py @@ -74,8 +74,6 @@ class BalancePayment(PaymentMethodMixin, models.Model): user = invoice.user total_price = invoice.prix_total() if float(user.solde) - float(total_price) < self.minimum_balance: - invoice.valid = False - invoice.save() messages.error( request, _("Your balance is too low for this operation.") diff --git a/cotisations/payment_methods/cheque/models.py b/cotisations/payment_methods/cheque/models.py index cd6d2920..8f00ff46 100644 --- a/cotisations/payment_methods/cheque/models.py +++ b/cotisations/payment_methods/cheque/models.py @@ -46,8 +46,6 @@ class ChequePayment(PaymentMethodMixin, models.Model): """Invalidates the invoice then redirect the user towards a view asking for informations to add to the invoice before validating it. """ - invoice.valid = False - invoice.save() return redirect(reverse( 'cotisations:cheque:validate', kwargs={'invoice_pk': invoice.pk} diff --git a/cotisations/payment_methods/comnpay/models.py b/cotisations/payment_methods/comnpay/models.py index af389cf8..7fac089a 100644 --- a/cotisations/payment_methods/comnpay/models.py +++ b/cotisations/payment_methods/comnpay/models.py @@ -81,8 +81,6 @@ class ComnpayPayment(PaymentMethodMixin, models.Model): a facture id, the price and the secret transaction data stored in the preferences. """ - invoice.valid = False - invoice.save() host = request.get_host() p = Transaction( str(self.payment_credential), diff --git a/cotisations/views.py b/cotisations/views.py index a4a35825..e28a7bf0 100644 --- a/cotisations/views.py +++ b/cotisations/views.py @@ -81,7 +81,7 @@ from .forms import ( ) from .tex import render_invoice from .payment_methods.forms import payment_method_factory -from .utils import find_payment_method, send_mail_invoice +from .utils import find_payment_method @login_required @@ -148,8 +148,6 @@ def new_facture(request, user, userid): p.facture = new_invoice_instance p.save() - send_mail_invoice(new_invoice_instance) - return new_invoice_instance.paiement.end_payment( new_invoice_instance, request @@ -848,8 +846,6 @@ def credit_solde(request, user, **_kwargs): number=1 ) - send_mail_invoice(invoice) - return invoice.paiement.end_payment(invoice, request) p = get_object_or_404(Paiement, is_balance=True) return form({ From d609bb6493fed362d1b267b14a799811357d2fbd Mon Sep 17 00:00:00 2001 From: detraz Date: Sat, 1 Sep 2018 02:12:19 +0200 Subject: [PATCH 2/2] Post save custom dans la fonction save, pour __original_valid --- cotisations/models.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cotisations/models.py b/cotisations/models.py index 15d2e39d..0c9ef171 100644 --- a/cotisations/models.py +++ b/cotisations/models.py @@ -233,10 +233,14 @@ class Facture(BaseInvoice): } self.__original_valid = self.valid + def save(self, *args, **kwargs): + super(Facture, self).save(*args, **kwargs) + if not self.__original_valid and self.valid: + send_mail_invoice(self) + def __str__(self): return str(self.user) + ' ' + str(self.date) - @receiver(post_save, sender=Facture) def facture_post_save(**kwargs): """ @@ -245,10 +249,8 @@ def facture_post_save(**kwargs): facture = kwargs['instance'] if facture.valid: user = facture.user - if not facture.__original_valid: - user.set_active() - send_mail_invoice(facture) - user.ldap_sync(base=False, access_refresh=True, mac_refresh=False) + user.set_active() + user.ldap_sync(base=False, access_refresh=True, mac_refresh=False) @receiver(post_delete, sender=Facture)