From 3764bc44ff0a43de9508134a8097362fbecadc7f Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Thu, 27 Feb 2020 17:22:59 +0100 Subject: [PATCH] Fix money creation, closes #25 --- apps/note/forms.py | 18 ++++++++++++++++++ apps/note/models/transactions.py | 7 +++++-- apps/note/views.py | 11 +++-------- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/apps/note/forms.py b/apps/note/forms.py index 15cccf2e..3222acec 100644 --- a/apps/note/forms.py +++ b/apps/note/forms.py @@ -3,6 +3,7 @@ from dal import autocomplete from django import forms +from django.utils.translation import gettext_lazy as _ from .models import Transaction, TransactionTemplate, TemplateTransaction @@ -33,6 +34,23 @@ class TransactionForm(forms.ModelForm): def save(self, commit=True): super().save(commit) + + def clean(self): + """ + If the user has no right to transfer funds, then it will be the source of the transfer by default. + Transactions between a note and the same note are not authorized. + """ + + cleaned_data = super().clean() + if not "source" in cleaned_data: # TODO Replace it with "if %user has no right to transfer funds" + cleaned_data["source"] = self.user.note + + if cleaned_data["source"].pk == cleaned_data["destination"].pk: + self.add_error("destination", _("Source and destination must be different.")) + + return cleaned_data + + class Meta: model = Transaction fields = ( diff --git a/apps/note/models/transactions.py b/apps/note/models/transactions.py index 49fc44b4..598c119b 100644 --- a/apps/note/models/transactions.py +++ b/apps/note/models/transactions.py @@ -84,8 +84,6 @@ class Transaction(PolymorphicModel): amount is store in centimes of currency, making it a positive integer value. (from someone to someone else) - - TODO: Ensure source != destination. """ source = models.ForeignKey( @@ -126,6 +124,11 @@ class Transaction(PolymorphicModel): """ When saving, also transfer money between two notes """ + + if self.source.pk == self.destination.pk: + # When source == destination, no money is transfered + return + created = self.pk is None to_transfer = self.amount * self.quantity if not created: diff --git a/apps/note/views.py b/apps/note/views.py index 75577a2e..5038df16 100644 --- a/apps/note/views.py +++ b/apps/note/views.py @@ -41,17 +41,12 @@ class TransactionCreate(LoginRequiredMixin, CreateView): if False: # TODO: fix it with "if %user has no right to transfer funds" del form.fields['source'] + form.user = self.request.user return form - def form_valid(self, form): - """ - If the user has no right to transfer funds, then it will be the source of the transfer by default. - """ - if False: # TODO: fix it with "if %user has no right to transfer funds" - form.instance.source = self.request.user.note - - return super().form_valid(form) + def get_success_url(self): + return reverse('note:transfer') class NoteAutocomplete(autocomplete.Select2QuerySetView):