diff --git a/apps/treasury/forms.py b/apps/treasury/forms.py index ad7e2c5c..3189694d 100644 --- a/apps/treasury/forms.py +++ b/apps/treasury/forms.py @@ -4,9 +4,11 @@ import datetime from crispy_forms.helper import FormHelper +from crispy_forms.layout import Submit from django import forms +from django.utils.translation import gettext_lazy as _ -from .models import Invoice, Product +from .models import Invoice, Product, Remittance class InvoiceForm(forms.ModelForm): @@ -38,3 +40,14 @@ class ProductFormSetHelper(FormHelper): self.form_method = 'POST' self.form_class = 'form-inline' self.template = 'bootstrap4/table_inline_formset.html' + + +class RemittanceForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.helper = FormHelper() + self.helper.add_input(Submit('submit', _("Submit"), attr={'class': 'btn btn-block btn-primary'})) + + class Meta: + model = Remittance + fields = ('type', 'comment', ) diff --git a/apps/treasury/models.py b/apps/treasury/models.py index 7c634fdd..52b25157 100644 --- a/apps/treasury/models.py +++ b/apps/treasury/models.py @@ -1,5 +1,6 @@ # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later + from django.core.exceptions import ValidationError from django.db import models from django.db.models import Q @@ -88,7 +89,7 @@ class Product(models.Model): class Remittance(models.Model): - date = models.DateField( + date = models.DateTimeField( auto_now_add=True, verbose_name=_("Date"), ) @@ -104,6 +105,11 @@ class Remittance(models.Model): verbose_name=_("Comment"), ) + closed = models.BooleanField( + default=False, + verbose_name=_("Closed"), + ) + @property def size(self): return self.specialtransaction_set.count() diff --git a/apps/treasury/tables.py b/apps/treasury/tables.py index 5dcfbcd6..ebc642c7 100644 --- a/apps/treasury/tables.py +++ b/apps/treasury/tables.py @@ -5,7 +5,7 @@ import django_tables2 as tables from django.utils.translation import gettext_lazy as _ from django_tables2 import A -from .models import Invoice +from .models import Invoice, Remittance class InvoiceTable(tables.Table): @@ -30,3 +30,13 @@ class InvoiceTable(tables.Table): model = Invoice template_name = 'django_tables2/bootstrap4.html' fields = ('id', 'name', 'object', 'acquitted', 'invoice',) + + +class RemittanceTable(tables.Table): + class Meta: + attrs = { + 'class': 'table table-condensed table-striped table-hover' + } + model = Remittance + template_name = 'django_tables2/bootstrap4.html' + fields = ('id', 'date', 'type', 'comment', 'size', 'amount', 'edit',) diff --git a/apps/treasury/urls.py b/apps/treasury/urls.py index 1afccabb..029466e0 100644 --- a/apps/treasury/urls.py +++ b/apps/treasury/urls.py @@ -3,12 +3,17 @@ from django.urls import path -from .views import InvoiceCreateView, InvoiceListView, InvoiceUpdateView, InvoiceRenderView +from .views import InvoiceCreateView, InvoiceListView, InvoiceUpdateView, InvoiceRenderView, RemittanceListView,\ + RemittanceCreateView, RemittanceUpdateView app_name = 'treasury' urlpatterns = [ - path('invoice/', InvoiceListView.as_view(), name='invoice'), + path('invoice/', InvoiceListView.as_view(), name='invoice_list'), path('invoice/create/', InvoiceCreateView.as_view(), name='invoice_create'), path('invoice//', InvoiceUpdateView.as_view(), name='invoice_update'), path('invoice/render//', InvoiceRenderView.as_view(), name='invoice_render'), + + path('remittance/', RemittanceListView.as_view(), name='remittance_list'), + path('remittance/create/', RemittanceCreateView.as_view(), name='remittance_create'), + path('remittance//', RemittanceUpdateView.as_view(), name='remittance_update'), ] diff --git a/apps/treasury/views.py b/apps/treasury/views.py index 8b5446d6..6f6c256c 100644 --- a/apps/treasury/views.py +++ b/apps/treasury/views.py @@ -17,9 +17,9 @@ from django.views.generic.base import View from django_tables2 import SingleTableView from note_kfet.settings.base import BASE_DIR -from .forms import InvoiceForm, ProductFormSet, ProductFormSetHelper -from .models import Invoice, Product -from .tables import InvoiceTable +from .forms import InvoiceForm, ProductFormSet, ProductFormSetHelper, RemittanceForm +from .models import Invoice, Product, Remittance +from .tables import InvoiceTable, RemittanceTable class InvoiceCreateView(LoginRequiredMixin, CreateView): @@ -64,7 +64,7 @@ class InvoiceCreateView(LoginRequiredMixin, CreateView): return ret def get_success_url(self): - return reverse_lazy('treasury:invoice') + return reverse_lazy('treasury:invoice_list') class InvoiceListView(LoginRequiredMixin, SingleTableView): @@ -121,7 +121,7 @@ class InvoiceUpdateView(LoginRequiredMixin, UpdateView): return ret def get_success_url(self): - return reverse_lazy('treasury:invoice') + return reverse_lazy('treasury:invoice_list') class InvoiceRenderView(LoginRequiredMixin, View): @@ -176,3 +176,33 @@ class InvoiceRenderView(LoginRequiredMixin, View): shutil.rmtree(tmp_dir) return response + + +class RemittanceCreateView(LoginRequiredMixin, CreateView): + """ + Create Remittance + """ + model = Remittance + form_class = RemittanceForm + + def get_success_url(self): + return reverse_lazy('treasury:remittance_list') + + +class RemittanceListView(LoginRequiredMixin, SingleTableView): + """ + List existing Remittances + """ + model = Remittance + table_class = RemittanceTable + + +class RemittanceUpdateView(LoginRequiredMixin, UpdateView): + """ + Update Remittance + """ + model = Remittance + form_class = RemittanceForm + + def get_success_url(self): + return reverse_lazy('treasury:remittance_list') diff --git a/templates/base.html b/templates/base.html index c6bb88b3..384535b2 100644 --- a/templates/base.html +++ b/templates/base.html @@ -99,7 +99,7 @@ SPDX-License-Identifier: GPL-3.0-or-later {% if "treasury.invoice"|not_empty_model_change_list %} {% endif %} diff --git a/templates/treasury/invoice_form.html b/templates/treasury/invoice_form.html index 2177d0f7..f6e2a106 100644 --- a/templates/treasury/invoice_form.html +++ b/templates/treasury/invoice_form.html @@ -3,7 +3,7 @@ {% load i18n %} {% load crispy_forms_tags pretty_money %} {% block content %} -

{% trans "Invoices list" %}

+

{% trans "Invoices list" %}

{% csrf_token %} {% crispy form %} diff --git a/templates/treasury/remittance_form.html b/templates/treasury/remittance_form.html new file mode 100644 index 00000000..50071136 --- /dev/null +++ b/templates/treasury/remittance_form.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} +{% load static %} +{% load i18n %} +{% load crispy_forms_tags pretty_money %} +{% block content %} +

{% trans "Remittances list" %}

+ {% crispy form %} +{% endblock %} diff --git a/templates/treasury/remittance_list.html b/templates/treasury/remittance_list.html new file mode 100644 index 00000000..e775fbaa --- /dev/null +++ b/templates/treasury/remittance_list.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} +{% load render_table from django_tables2 %} +{% load i18n %} +{% block content %} + +{% render_table table %} + +{% trans "New remittance" %} + +{% endblock %}