Payments add modal form

* adds help texts to add payment form
* adds removing button for payments
* refactors user fetching into BaseForm
* adds generic RemoveModalForm which is intended to be used for every modal form which shall remove something
* adds translations
* removes unused html
* prepares payment amount field to be able to process german inputs like '1.000,50' which is not the international default
This commit is contained in:
mipel
2021-07-26 11:29:05 +02:00
parent 4fb2ef26d0
commit a6c51aede6
12 changed files with 174 additions and 64 deletions

View File

@@ -41,7 +41,9 @@ class PaymentAdmin(admin.ModelAdmin):
list_display = [
"id",
"amount",
"due_on"
"due_on",
"created_by",
"created_on",
]

View File

@@ -20,15 +20,18 @@ class NewCompensationForm(BaseForm):
class NewPaymentForm(BaseModalForm):
amount = forms.FloatField(
min_value=0.01,
amount = forms.DecimalField(
min_value=0.00,
decimal_places=2,
label=_("Amount"),
label_suffix=_(""),
help_text=_("Amount in Euro"),
localize=True,
)
due = forms.DateField(
required=False,
label=_("Due on"),
label_suffix=_(""),
help_text=_("Due on which date"),
widget=forms.DateInput(
attrs={
"type": "date",
@@ -41,14 +44,13 @@ class NewPaymentForm(BaseModalForm):
max_length=1000,
required=False,
label_suffix=_(""),
label=_("Transfer note")
label=_("Transfer note"),
help_text=_("Note for money transfer")
)
def __init__(self, *args, **kwargs):
self.user = kwargs.pop("request", None).user
self.intervention = kwargs.pop("intervention", None)
super().__init__(*args, **kwargs)
self.intervention = self.instance
self.form_title = _("Payment")
self.form_caption = _("Add a payment for intervention '{}'").format(self.intervention.title)

View File

@@ -22,7 +22,7 @@ urlpatterns = [
path('pay/<intervention_id>/new', new_payment_view, name='pay-new'),
path('pay/<id>', open_view, name='pay-open'),
path('pay/<id>/edit', edit_view, name='pay-edit'),
path('pay/<id>/remove', remove_view, name='pay-remove'),
path('pay/<id>/remove', payment_remove_view, name='pay-remove'),
# Eco-account
path("acc/", account_index_view, name="acc-index"),

View File

@@ -4,11 +4,12 @@ from django.shortcuts import render, get_object_or_404
from django.utils.translation import gettext_lazy as _
from compensation.forms import NewPaymentForm
from compensation.models import Compensation, EcoAccount
from compensation.models import Compensation, EcoAccount, Payment
from compensation.tables import CompensationTable, EcoAccountTable
from intervention.models import Intervention
from konova.contexts import BaseContext
from konova.decorators import *
from konova.forms import RemoveModalForm
@login_required
@@ -126,7 +127,7 @@ def new_payment_view(request: HttpRequest, intervention_id: str):
"""
template = "modal/modal_form.html"
intervention = get_object_or_404(Intervention, id=intervention_id)
form = NewPaymentForm(request.POST or None, intervention=intervention, request=request)
form = NewPaymentForm(request.POST or None, instance=intervention, user=request.user)
if request.method == "POST":
if form.is_valid():
payment = form.save()
@@ -149,3 +150,41 @@ def new_payment_view(request: HttpRequest, intervention_id: str):
return render(request, template, context)
else:
raise NotImplementedError
@login_required
def payment_remove_view(request: HttpRequest, id: str):
""" Renders a modal view for adding new payments
Args:
request (HttpRequest): The incoming request
id (str): The payment's id
Returns:
"""
template = "modal/modal_form.html"
payment = get_object_or_404(Payment, id=id)
form = RemoveModalForm(request.POST or None, instance=payment, user=request.user)
if request.method == "POST":
if form.is_valid():
form.save()
messages.success(
request,
_("Payment removed")
)
return redirect(request.META.get("HTTP_REFERER", "home"))
else:
messages.info(
request,
_("There was an error on this form.")
)
return redirect(request.META.get("HTTP_REFERER", "home"))
elif request.method == "GET":
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, template, context)
else:
raise NotImplementedError