mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 01:12:08 +01:00 
			
		
		
		
	Better transfers
This commit is contained in:
		@@ -50,52 +50,3 @@ class TransactionTemplateForm(forms.ModelForm):
 | 
			
		||||
                    },
 | 
			
		||||
                ),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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 "source" not 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 = (
 | 
			
		||||
            'source',
 | 
			
		||||
            'destination',
 | 
			
		||||
            'reason',
 | 
			
		||||
            'amount',
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # Voir ci-dessus
 | 
			
		||||
        widgets = {
 | 
			
		||||
            'source':
 | 
			
		||||
                autocomplete.ModelSelect2(
 | 
			
		||||
                    url='note:note_autocomplete',
 | 
			
		||||
                    attrs={
 | 
			
		||||
                        'data-placeholder': 'Note ...',
 | 
			
		||||
                        'data-minimum-input-length': 1,
 | 
			
		||||
                    },
 | 
			
		||||
                ),
 | 
			
		||||
            'destination':
 | 
			
		||||
                autocomplete.ModelSelect2(
 | 
			
		||||
                    url='note:note_autocomplete',
 | 
			
		||||
                    attrs={
 | 
			
		||||
                        'data-placeholder': 'Note ...',
 | 
			
		||||
                        'data-minimum-input-length': 1,
 | 
			
		||||
                    },
 | 
			
		||||
                ),
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -5,24 +5,22 @@ from dal import autocomplete
 | 
			
		||||
from django.contrib.auth.mixins import LoginRequiredMixin
 | 
			
		||||
from django.contrib.contenttypes.models import ContentType
 | 
			
		||||
from django.db.models import Q
 | 
			
		||||
from django.urls import reverse
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from django.views.generic import CreateView, ListView, UpdateView
 | 
			
		||||
from django.views.generic import CreateView, ListView, UpdateView, TemplateView
 | 
			
		||||
from django_tables2 import SingleTableView
 | 
			
		||||
 | 
			
		||||
from .forms import TransactionForm, TransactionTemplateForm
 | 
			
		||||
from .forms import TransactionTemplateForm
 | 
			
		||||
from .models import Transaction, TransactionTemplate, Alias, TemplateTransaction
 | 
			
		||||
from .tables import HistoryTable
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TransactionCreate(LoginRequiredMixin, CreateView):
 | 
			
		||||
class TransactionCreate(LoginRequiredMixin, TemplateView):
 | 
			
		||||
    """
 | 
			
		||||
    Show transfer page
 | 
			
		||||
 | 
			
		||||
    TODO: If user have sufficient rights, they can transfer from an other note
 | 
			
		||||
    """
 | 
			
		||||
    model = Transaction
 | 
			
		||||
    form_class = TransactionForm
 | 
			
		||||
    template_name = "note/transaction_form.html"
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self, **kwargs):
 | 
			
		||||
        """
 | 
			
		||||
@@ -31,26 +29,10 @@ class TransactionCreate(LoginRequiredMixin, CreateView):
 | 
			
		||||
        context = super().get_context_data(**kwargs)
 | 
			
		||||
        context['title'] = _('Transfer money from your account '
 | 
			
		||||
                             'to one or others')
 | 
			
		||||
 | 
			
		||||
        context['no_cache'] = True
 | 
			
		||||
        context['polymorphic_ctype'] = ContentType.objects.get_for_model(Transaction).pk
 | 
			
		||||
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
    def get_form(self, form_class=None):
 | 
			
		||||
        """
 | 
			
		||||
        If the user has no right to transfer funds, then it won't have the choice of the source of the transfer.
 | 
			
		||||
        """
 | 
			
		||||
        form = super().get_form(form_class)
 | 
			
		||||
 | 
			
		||||
        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 get_success_url(self):
 | 
			
		||||
        return reverse('note:transfer')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class NoteAutocomplete(autocomplete.Select2QuerySetView):
 | 
			
		||||
    """
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user