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 dal import autocomplete
from django import forms
from django . utils . translation import gettext_lazy as _
from codelist . models import KonovaCode
from codelist . settings import CODELIST_COMPENSATION_ACTION_ID , CODELIST_COMPENSATION_ACTION_DETAIL_ID
from intervention . inputs import CompensationActionTreeCheckboxSelectMultiple
from konova . forms . modals import BaseModalForm , RemoveModalForm
from konova . utils . message_templates import COMPENSATION_ACTION_EDITED , ADDED_COMPENSATION_ACTION
class NewCompensationActionModalForm ( BaseModalForm ) :
""" Form handling action related input
Compensation actions are the actions performed on the area , which shall be compensated . Actions will change the
surface of the area , the biotopes , and have an environmental impact . With actions the before - after states can change
( not in the process logic in Konova , but in the real world ) .
"""
from compensation . models import UnitChoices
action_type = forms . MultipleChoiceField (
label = _ ( " Action Type " ) ,
label_suffix = " " ,
required = True ,
help_text = _ ( " An action can consist of multiple different action types. All the selected action types are expected to be performed according to the amount and unit below on this form. " ) ,
choices = [ ] ,
widget = CompensationActionTreeCheckboxSelectMultiple ( ) ,
)
action_type_details = forms . ModelMultipleChoiceField (
label = _ ( " Action Type detail " ) ,
label_suffix = " " ,
required = False ,
help_text = _ ( " Select the action type detail " ) ,
queryset = KonovaCode . objects . filter (
is_archived = False ,
is_leaf = True ,
code_lists__in = [ CODELIST_COMPENSATION_ACTION_DETAIL_ID ] ,
) ,
widget = autocomplete . ModelSelect2Multiple (
2022-08-18 11:25:06 +02:00
url = " codelist:compensation-action-detail-autocomplete " ,
2022-08-18 09:54:49 +02:00
attrs = {
" data-placeholder " : _ ( " Action Type detail " ) ,
}
) ,
)
unit = forms . ChoiceField (
label = _ ( " Unit " ) ,
label_suffix = " " ,
required = True ,
help_text = _ ( " Select the unit " ) ,
choices = UnitChoices . choices ,
widget = forms . Select (
attrs = {
" class " : " form-control "
}
)
)
amount = forms . DecimalField (
label = _ ( " Amount " ) ,
label_suffix = " " ,
required = True ,
help_text = _ ( " Insert the amount " ) ,
decimal_places = 2 ,
min_value = 0.00 ,
widget = forms . NumberInput (
attrs = {
" class " : " form-control " ,
" placeholder " : " 0,00 " ,
}
)
)
comment = forms . CharField (
required = False ,
label = _ ( " Comment " ) ,
label_suffix = _ ( " " ) ,
help_text = _ ( " Additional comment " ) ,
widget = forms . Textarea (
attrs = {
" rows " : 5 ,
" class " : " form-control " ,
}
)
)
def __init__ ( self , * args , * * kwargs ) :
super ( ) . __init__ ( * args , * * kwargs )
self . form_title = _ ( " New action " )
self . form_caption = _ ( " Insert data for the new action " )
choices = KonovaCode . objects . filter (
code_lists__in = [ CODELIST_COMPENSATION_ACTION_ID ] ,
is_archived = False ,
is_leaf = True ,
) . values_list ( " id " , flat = True )
choices = [
( choice , choice )
for choice in choices
]
self . fields [ " action_type " ] . choices = choices
def save ( self ) :
action = self . instance . add_action ( self )
self . instance . mark_as_edited ( self . user , self . request , ADDED_COMPENSATION_ACTION )
return action
class EditCompensationActionModalForm ( NewCompensationActionModalForm ) :
action = None
def __init__ ( self , * args , * * kwargs ) :
self . action = kwargs . pop ( " action " , None )
super ( ) . __init__ ( * args , * * kwargs )
self . form_title = _ ( " Edit action " )
form_data = {
" action_type " : list ( self . action . action_type . values_list ( " id " , flat = True ) ) ,
" action_type_details " : self . action . action_type_details . all ( ) ,
" amount " : self . action . amount ,
" unit " : self . action . unit ,
" comment " : self . action . comment ,
}
self . load_initial_data ( form_data )
def save ( self ) :
action = self . action
action . action_type . set ( self . cleaned_data . get ( " action_type " , [ ] ) )
action . action_type_details . set ( self . cleaned_data . get ( " action_type_details " , [ ] ) )
action . amount = self . cleaned_data . get ( " amount " , None )
action . unit = self . cleaned_data . get ( " unit " , None )
action . comment = self . cleaned_data . get ( " comment " , None )
action . save ( )
self . instance . mark_as_edited ( self . user , self . request , edit_comment = COMPENSATION_ACTION_EDITED )
return action
class RemoveCompensationActionModalForm ( RemoveModalForm ) :
""" Removing modal form for CompensationAction
Can be used for anything , where removing shall be confirmed by the user a second time .
"""
action = None
def __init__ ( self , * args , * * kwargs ) :
action = kwargs . pop ( " action " , None )
self . action = action
super ( ) . __init__ ( * args , * * kwargs )
def save ( self ) :
self . instance . remove_action ( self )