2022-08-18 09:54:49 +02:00
|
|
|
"""
|
|
|
|
Author: Michel Peltriaux
|
|
|
|
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
|
|
|
|
Contact: ksp-servicestelle@sgdnord.rlp.de
|
|
|
|
Created on: 18.08.22
|
|
|
|
|
|
|
|
"""
|
|
|
|
from django import forms
|
|
|
|
from django.utils.translation import pgettext_lazy as _con, gettext_lazy as _
|
|
|
|
|
|
|
|
from konova.forms.modals import RemoveModalForm, BaseModalForm
|
2023-05-17 14:08:57 +02:00
|
|
|
from konova.utils import validators
|
2022-08-18 09:54:49 +02:00
|
|
|
from konova.utils.message_templates import PAYMENT_EDITED
|
|
|
|
|
|
|
|
|
|
|
|
class NewPaymentForm(BaseModalForm):
|
|
|
|
""" Form handling payment related input
|
|
|
|
|
|
|
|
"""
|
|
|
|
amount = forms.DecimalField(
|
|
|
|
min_value=0.00,
|
|
|
|
decimal_places=2,
|
|
|
|
label=_con("money", "Amount"), # contextual translation
|
|
|
|
label_suffix=_(""),
|
|
|
|
help_text=_("in Euro"),
|
|
|
|
widget=forms.NumberInput(
|
|
|
|
attrs={
|
|
|
|
"class": "form-control",
|
|
|
|
"placeholder": "0,00",
|
|
|
|
}
|
|
|
|
)
|
|
|
|
)
|
|
|
|
due = forms.DateField(
|
|
|
|
label=_("Due on"),
|
|
|
|
label_suffix=_(""),
|
|
|
|
required=False,
|
2023-05-17 14:08:57 +02:00
|
|
|
validators=[validators.reasonable_date],
|
2022-08-18 09:54:49 +02:00
|
|
|
help_text=_("Due on which date"),
|
|
|
|
widget=forms.DateInput(
|
|
|
|
attrs={
|
|
|
|
"type": "date",
|
|
|
|
"data-provide": "datepicker",
|
|
|
|
"class": "form-control",
|
|
|
|
},
|
|
|
|
format="%d.%m.%Y"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
comment = forms.CharField(
|
|
|
|
max_length=200,
|
|
|
|
required=False,
|
|
|
|
label=_("Comment"),
|
|
|
|
label_suffix=_(""),
|
|
|
|
help_text=_("Additional comment, maximum {} letters").format(200),
|
|
|
|
widget=forms.Textarea(
|
|
|
|
attrs={
|
|
|
|
"rows": 5,
|
|
|
|
"class": "form-control"
|
|
|
|
}
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
self.intervention = self.instance
|
|
|
|
self.form_title = _("Payment")
|
|
|
|
self.form_caption = _("Add a payment for intervention '{}'").format(self.intervention.title)
|
|
|
|
|
|
|
|
def is_valid(self):
|
|
|
|
"""
|
|
|
|
Checks on form validity.
|
|
|
|
|
|
|
|
For this form we need to make sure that a date or a comment is set.
|
|
|
|
If both are missing, the user needs to enter at least an explanation why
|
|
|
|
there is no date to be entered.
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
is_valid (bool): True if valid, False otherwise
|
|
|
|
"""
|
|
|
|
super_valid = super().is_valid()
|
2023-09-13 14:40:22 +02:00
|
|
|
if not super_valid:
|
|
|
|
return super_valid
|
|
|
|
|
|
|
|
date = self.cleaned_data.get("due", None)
|
|
|
|
comment = self.cleaned_data.get("comment", None)
|
2022-08-18 09:54:49 +02:00
|
|
|
if not date and not comment:
|
|
|
|
# At least one needs to be set!
|
|
|
|
self.add_error(
|
|
|
|
"comment",
|
|
|
|
_("If there is no date you can enter, please explain why.")
|
|
|
|
)
|
|
|
|
return False
|
|
|
|
return super_valid
|
|
|
|
|
|
|
|
def save(self):
|
|
|
|
pay = self.instance.add_payment(self)
|
|
|
|
return pay
|
|
|
|
|
|
|
|
|
|
|
|
class EditPaymentModalForm(NewPaymentForm):
|
|
|
|
""" Form handling edit for Payment
|
|
|
|
|
|
|
|
"""
|
|
|
|
payment = None
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
self.payment = kwargs.pop("payment", None)
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
self.form_title = _("Edit payment")
|
|
|
|
form_date = {
|
|
|
|
"amount": self.payment.amount,
|
|
|
|
"due": str(self.payment.due_on),
|
|
|
|
"comment": self.payment.comment,
|
|
|
|
}
|
|
|
|
self.load_initial_data(form_date, disabled_fields=[])
|
|
|
|
|
|
|
|
def save(self):
|
|
|
|
payment = self.payment
|
|
|
|
payment.amount = self.cleaned_data.get("amount", None)
|
|
|
|
payment.due_on = self.cleaned_data.get("due", None)
|
|
|
|
payment.comment = self.cleaned_data.get("comment", None)
|
|
|
|
payment.save()
|
|
|
|
self.instance.mark_as_edited(self.user, self.request, edit_comment=PAYMENT_EDITED)
|
|
|
|
self.instance.send_data_to_egon()
|
|
|
|
return payment
|
|
|
|
|
|
|
|
|
|
|
|
class RemovePaymentModalForm(RemoveModalForm):
|
|
|
|
""" Removing modal form for Payment
|
|
|
|
|
|
|
|
Can be used for anything, where removing shall be confirmed by the user a second time.
|
|
|
|
|
|
|
|
"""
|
|
|
|
payment = None
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
payment = kwargs.pop("payment", None)
|
|
|
|
self.payment = payment
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
|
|
def save(self):
|
|
|
|
self.instance.remove_payment(self)
|