diff --git a/apps/note/api/serializers.py b/apps/note/api/serializers.py index 2d85cc41..85f500ed 100644 --- a/apps/note/api/serializers.py +++ b/apps/note/api/serializers.py @@ -6,7 +6,7 @@ from rest_polymorphic.serializers import PolymorphicSerializer from ..models.notes import Note, NoteClub, NoteSpecial, NoteUser, Alias from ..models.transactions import TransactionTemplate, Transaction, MembershipTransaction, TemplateCategory, \ - TemplateTransaction + TemplateTransaction, SpecialTransaction class NoteSerializer(serializers.ModelSerializer): @@ -144,9 +144,21 @@ class MembershipTransactionSerializer(serializers.ModelSerializer): fields = '__all__' +class SpecialTransactionSerializer(serializers.ModelSerializer): + """ + REST API Serializer for Special transactions. + The djangorestframework plugin will analyse the model `SpecialTransaction` and parse all fields in the API. + """ + + class Meta: + model = SpecialTransaction + fields = '__all__' + + class TransactionPolymorphicSerializer(PolymorphicSerializer): model_serializer_mapping = { Transaction: TransactionSerializer, TemplateTransaction: TemplateTransactionSerializer, MembershipTransaction: MembershipTransactionSerializer, + SpecialTransaction: SpecialTransactionSerializer, } diff --git a/apps/note/models/transactions.py b/apps/note/models/transactions.py index 2fdca76e..8997411a 100644 --- a/apps/note/models/transactions.py +++ b/apps/note/models/transactions.py @@ -165,7 +165,6 @@ class Transaction(PolymorphicModel): class TemplateTransaction(Transaction): """ Special type of :model:`note.Transaction` associated to a :model:`note.TransactionTemplate`. - """ template = models.ForeignKey( @@ -183,6 +182,27 @@ class TemplateTransaction(Transaction): return _('template') +class SpecialTransaction(Transaction): + """ + Special type of :model:`note.Transaction` associated to transactions with special notes + """ + + last_name = models.CharField( + max_length=255, + verbose_name=_("name"), + ) + + first_name = models.CharField( + max_length=255, + verbose_name=_("first_name"), + ) + + bank = models.CharField( + max_length=255, + verbose_name=_("bank") + ) + + class MembershipTransaction(Transaction): """ Special type of :model:`note.Transaction` associated to a :model:`member.Membership`. diff --git a/apps/note/tables.py b/apps/note/tables.py index ceb710df..4db13871 100644 --- a/apps/note/tables.py +++ b/apps/note/tables.py @@ -37,20 +37,16 @@ class HistoryTable(tables.Table): .order_by(('-' if is_descending else '') + 'total') return queryset, True - def render_amount(self, value): return pretty_money(value) - def render_total(self, value): return pretty_money(value) - # Django-tables escape strings. That's a wrong thing. def render_reason(self, value): return html.unescape(value) - def render_valid(self, value): return "✔" if value else "✖" diff --git a/apps/note/views.py b/apps/note/views.py index 74da6497..07fd03f8 100644 --- a/apps/note/views.py +++ b/apps/note/views.py @@ -10,7 +10,8 @@ from django.views.generic import CreateView, ListView, UpdateView, TemplateView from django_tables2 import SingleTableView from .forms import TransactionTemplateForm -from .models import Transaction, TransactionTemplate, Alias, TemplateTransaction +from .models import Transaction, TransactionTemplate, Alias, TemplateTransaction, NoteSpecial +from .models.transactions import SpecialTransaction from .tables import HistoryTable @@ -30,6 +31,8 @@ class TransactionCreate(LoginRequiredMixin, TemplateView): context['title'] = _('Transfer money from your account ' 'to one or others') context['polymorphic_ctype'] = ContentType.objects.get_for_model(Transaction).pk + context['special_polymorphic_ctype'] = ContentType.objects.get_for_model(SpecialTransaction).pk + context['special_types'] = NoteSpecial.objects.order_by("special_type").all() return context diff --git a/templates/note/transaction_form.html b/templates/note/transaction_form.html index dc83c171..0543f2d6 100644 --- a/templates/note/transaction_form.html +++ b/templates/note/transaction_form.html @@ -9,7 +9,24 @@ SPDX-License-Identifier: GPL-2.0-or-later