Commit 1b3f4697 authored by Hamza Dely's avatar Hamza Dely

[consos] La transaction est effectuée lors de son enregistrement

parent f275f0ab
......@@ -37,11 +37,6 @@ class BoutonConsoForm(forms.Form):
categorie=bouton.categorie,
valide=True,
)
emetteur.solde = F('solde') - self.cleaned_data['quantite']*transaction.montant
emetteur.save()
if bouton.credite:
bouton.credite.solde = F('solde') + self.cleaned_data['quantite']*transaction.montant
bouton.credite.save()
class CreditConsoForm(forms.Form):
"""
......@@ -64,8 +59,6 @@ class CreditConsoForm(forms.Form):
categorie="Opération de gestion",
valide=True,
)
destinataire.solde = F('solde') + transaction.montant
destinataire.save()
class RetraitConsoForm(forms.Form):
"""
......@@ -88,8 +81,6 @@ class RetraitConsoForm(forms.Form):
categorie="Opération de gestion",
valide=True,
)
emetteur.solde = F('solde') + transaction.montant
emetteur.save()
class TransfertConsoForm(forms.Form):
"""
......@@ -113,7 +104,3 @@ class TransfertConsoForm(forms.Form):
categorie="Opération de gestion",
valide=True,
)
emetteur.solde = F('solde') - transaction.montant
emetteur.save()
destinataire.solde = F('solde') + transaction.montant
destinataire.save()
......@@ -71,6 +71,7 @@ def quantite_minimale(value):
class Transaction(models.Model):
"""
Une transaction stockée dans la base de données.
ATTENTION : La transaction est effectuée au moment de l'appel à save()
- date [tstz] : Date de la transaction
- action [varchar(255)] : Action effectuée (Crédit, Débit, ...)
......@@ -153,6 +154,20 @@ class Transaction(models.Model):
"L'émetteur et le destinataire d'une transaction doivent être distincts"
)
@transaction.atomic
def save(self, *args, **kwargs):
"""
Enregistre la transaction et l'effectue si celle-ci est nouvelle
"""
if self.id is None:
if self.emetteur is not None:
self.emetteur.solde = models.F('solde') - self.quantite*self.montant
self.emetteur.save(update_fields=['solde'])
if self.destinataire is not None:
self.destinataire.solde = models.F('solde') + self.quantite*self.montant
self.destinataire.save(update_fields=['solde'])
super().save(*args, **kwargs)
class Bouton(models.Model):
"""
Un bouton permettant de noter des consommations.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment