""" Author: Michel Peltriaux Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany Contact: michel.peltriaux@sgdnord.rlp.de Created on: 04.12.20 """ from django import forms from django.db import transaction from django.utils.translation import gettext_lazy as _ from compensation.models import Payment, CompensationState from konova.enums import UserActionLogEntryEnum from konova.forms import BaseForm, BaseModalForm from konova.models import Deadline, DeadlineType from user.models import UserActionLogEntry class NewCompensationForm(BaseForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) class NewPaymentForm(BaseModalForm): amount = forms.DecimalField( min_value=0.00, decimal_places=2, label=_("Amount"), label_suffix=_(""), help_text=_("Amount in Euro"), ) due = forms.DateField( label=_("Due on"), label_suffix=_(""), help_text=_("Due on which date"), widget=forms.DateInput( attrs={ "type": "date", "data-provide": "datepicker", }, format="%d.%m.%Y" ) ) transfer_note = forms.CharField( max_length=1000, required=False, label_suffix=_(""), label=_("Transfer note"), help_text=_("Note for money transfer") ) def __init__(self, *args, **kwargs): self.template = "modal/modal_form.html" 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 save(self): with transaction.atomic(): action = UserActionLogEntry.objects.create( user=self.user, action=UserActionLogEntryEnum.CREATED.value, ) pay = Payment.objects.create( created=action, amount=self.cleaned_data.get("amount", -1), due_on=self.cleaned_data.get("due", None), comment=self.cleaned_data.get("transfer_note", None), intervention=self.intervention, ) return pay class NewStateModalForm(BaseModalForm): biotope_type = forms.CharField( label=_("Biotope Type"), label_suffix="", required=True, help_text=_("Select the biotope type") ) surface = forms.DecimalField( min_value=0.00, decimal_places=2, label=_("Surface"), label_suffix="", required=True, help_text=_("in m²") ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.form_title = _("New state") self.form_caption = _("Insert data for the new state") def save(self, is_before_state: bool = False): with transaction.atomic(): state = CompensationState.objects.create( biotope_type=self.cleaned_data["biotope_type"], surface=self.cleaned_data["surface"], ) if is_before_state: self.instance.before_states.add(state) else: self.instance.after_states.add(state) return state class NewDeadlineModalForm(BaseModalForm): type = forms.ChoiceField( label=_("Deadline Type"), label_suffix="", required=True, help_text=_("Select the deadline type"), choices=DeadlineType.choices ) date = forms.DateField( label=_("Date"), label_suffix="", required=True, help_text=_("Select date"), widget=forms.DateInput( attrs={ "type": "date", "data-provide": "datepicker", }, format="%d.%m.%Y" ) ) comment = forms.CharField( required=False, label=_("Comment"), label_suffix=_(""), help_text=_("Additional comment"), widget=forms.Textarea( attrs={ "cols": 30, "rows": 5, } ) ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.form_title = _("New deadline") self.form_caption = _("Insert data for the new deadline") def save(self): with transaction.atomic(): action = UserActionLogEntry.objects.create( user=self.user, action=UserActionLogEntryEnum.CREATED.value ) deadline = Deadline.objects.create( type=self.cleaned_data["type"], date=self.cleaned_data["date"], comment=self.cleaned_data["comment"], created=action, ) self.instance.deadlines.add(deadline) return deadline