diff --git a/apps/member/models.py b/apps/member/models.py index 883f9b49..35b7027c 100644 --- a/apps/member/models.py +++ b/apps/member/models.py @@ -118,6 +118,9 @@ class Role(models.Model): verbose_name = _('role') verbose_name_plural = _('roles') + def __str__(self): + return str(self.name) + class Membership(models.Model): """ diff --git a/apps/note/admin.py b/apps/note/admin.py index 298b91c0..0b2461d0 100644 --- a/apps/note/admin.py +++ b/apps/note/admin.py @@ -8,7 +8,7 @@ from polymorphic.admin import PolymorphicChildModelAdmin, \ PolymorphicChildModelFilter, PolymorphicParentModelAdmin from .models.notes import Alias, Note, NoteClub, NoteSpecial, NoteUser -from .models.transactions import Transaction, TransactionTemplate +from .models.transactions import Transaction, TransactionCategory, TransactionTemplate class AliasInlines(admin.TabularInline): @@ -146,3 +146,12 @@ class TransactionTemplateAdmin(admin.ModelAdmin): return str(obj.destination) poly_destination.short_description = _('destination') + + +@admin.register(TransactionCategory) +class TransactionCategoryAdmin(admin.ModelAdmin): + """ + Admin customisation for TransactionTemplate + """ + list_display = ('name',) + list_filter = ('name',) diff --git a/apps/note/forms.py b/apps/note/forms.py index 247c6215..5c27d95b 100644 --- a/apps/note/forms.py +++ b/apps/note/forms.py @@ -46,3 +46,16 @@ class TransactionForm(forms.ModelForm): 'data-minimum-input-length': 1, },), } + +class ConsoForm(forms.ModelForm): + def save(self, commit=True): + button: TransactionTemplate = TransactionTemplate.objects.filter(name=self.data['button']).get() + self.instance.destination = button.destination + self.instance.amount = button.amount + self.instance.transaction_type = 'bouton' + self.instance.reason = button.name + super().save(commit) + + class Meta: + model = Transaction + fields = ('source',) diff --git a/apps/note/models/__init__.py b/apps/note/models/__init__.py index b00572ce..ee290bb5 100644 --- a/apps/note/models/__init__.py +++ b/apps/note/models/__init__.py @@ -4,11 +4,11 @@ from .notes import Alias, Note, NoteClub, NoteSpecial, NoteUser from .transactions import MembershipTransaction, Transaction, \ - TransactionTemplate + TransactionCategory, TransactionTemplate __all__ = [ # Notes 'Alias', 'Note', 'NoteClub', 'NoteSpecial', 'NoteUser', # Transactions - 'MembershipTransaction', 'Transaction', 'TransactionTemplate', + 'MembershipTransaction', 'Transaction', 'TransactionCategory', 'TransactionTemplate', ] diff --git a/apps/note/models/transactions.py b/apps/note/models/transactions.py index 4ce23311..5c242255 100644 --- a/apps/note/models/transactions.py +++ b/apps/note/models/transactions.py @@ -13,10 +13,28 @@ from .notes import Note,NoteClub Defines transactions """ +class TransactionCategory(models.Model): + """ + Defined a recurrent transaction category + + Example: food, softs, ... + """ + name = models.CharField( + verbose_name=_("name"), + max_length=31, + unique=True, + ) + + class Meta: + verbose_name = _("transaction category") + verbose_name_plural = _("transaction categories") + + def __str__(self): + return str(self.name) class TransactionTemplate(models.Model): """ - Defined a reccurent transaction + Defined a recurrent transaction associated to selling something (a burger, a beer, ...) """ @@ -35,7 +53,9 @@ class TransactionTemplate(models.Model): verbose_name=_('amount'), help_text=_('in centimes'), ) - template_type = models.CharField( + template_type = models.ForeignKey( + TransactionCategory, + on_delete=models.PROTECT, verbose_name=_('type'), max_length=31 ) diff --git a/apps/note/urls.py b/apps/note/urls.py index 91829901..7c19c425 100644 --- a/apps/note/urls.py +++ b/apps/note/urls.py @@ -13,6 +13,8 @@ urlpatterns = [ path('buttons/create/',views.TransactionTemplateCreateView.as_view(),name='template_create'), path('buttons/update//',views.TransactionTemplateUpdateView.as_view(),name='template_update'), path('buttons/',views.TransactionTemplateListView.as_view(),name='template_list'), + path('consos//',views.ConsoView.as_view(),name='consos'), + path('consos/',views.ConsoView.as_view(),name='consos'), # API for the note autocompleter path('note-autocomplete/', views.NoteAutocomplete.as_view(model=Note),name='note_autocomplete'), diff --git a/apps/note/views.py b/apps/note/views.py index 9239c394..eebc3a53 100644 --- a/apps/note/views.py +++ b/apps/note/views.py @@ -5,11 +5,12 @@ from dal import autocomplete from django.contrib.auth.mixins import LoginRequiredMixin from django.db.models import Q +from django.urls import reverse_lazy, reverse from django.utils.translation import gettext_lazy as _ from django.views.generic import CreateView, ListView, DetailView, UpdateView -from .models import Transaction, TransactionTemplate, Note -from .forms import TransactionForm, TransactionTemplateForm +from .models import Note, Transaction, TransactionCategory, TransactionTemplate +from .forms import TransactionForm, TransactionTemplateForm, ConsoForm class TransactionCreate(LoginRequiredMixin, CreateView): """ @@ -105,4 +106,31 @@ class TransactionTemplateUpdateView(LoginRequiredMixin,UpdateView): """ """ model = TransactionTemplate - form_class=TransactionTemplateForm + form_class = TransactionTemplateForm + +class ConsoView(LoginRequiredMixin,CreateView): + """ + Consume + """ + model = Transaction + template_name = "note/conso_form.html" + form_class = ConsoForm + + def get_context_data(self, **kwargs): + """ + Add some context variables in template such as page title + """ + context = super().get_context_data(**kwargs) + context['template_types'] = TransactionCategory.objects.all() + + if 'template_type' not in self.kwargs.keys(): + return context + + template_type = TransactionCategory.objects.filter(name=self.kwargs.get('template_type')).get() + context['buttons'] = TransactionTemplate.objects.filter(template_type=template_type) + context['title'] = template_type + + return context + + def get_success_url(self): + return reverse('note:consos',args=(self.kwargs.get('template_type'),)) diff --git a/templates/base.html b/templates/base.html index 294da4e0..12b4cf79 100644 --- a/templates/base.html +++ b/templates/base.html @@ -52,7 +52,7 @@ SPDX-License-Identifier: GPL-3.0-or-later