#86 Log detail enhancements
* restructures removing of related data into separate sub-delete forms for easier logic handling
This commit is contained in:
@@ -18,7 +18,7 @@ from codelist.settings import CODELIST_BIOTOPES_ID, CODELIST_COMPENSATION_ACTION
|
||||
CODELIST_COMPENSATION_ACTION_DETAIL_ID
|
||||
from compensation.models import CompensationDocument, EcoAccountDocument
|
||||
from konova.contexts import BaseContext
|
||||
from konova.forms import BaseModalForm, NewDocumentForm
|
||||
from konova.forms import BaseModalForm, NewDocumentForm, RemoveModalForm
|
||||
from konova.models import DeadlineType
|
||||
from konova.utils.message_templates import FORM_INVALID, ADDED_COMPENSATION_STATE, ADDED_DEADLINE, \
|
||||
ADDED_COMPENSATION_ACTION, PAYMENT_ADDED
|
||||
@@ -100,10 +100,26 @@ class NewPaymentForm(BaseModalForm):
|
||||
|
||||
def save(self):
|
||||
pay = self.instance.add_payment(self)
|
||||
self.instance.mark_as_edited(self.user, self.request, edit_comment=PAYMENT_ADDED)
|
||||
return pay
|
||||
|
||||
|
||||
class PaymentRemoveModalForm(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)
|
||||
|
||||
|
||||
class NewStateModalForm(BaseModalForm):
|
||||
""" Form handling state related input
|
||||
|
||||
@@ -219,6 +235,40 @@ class NewStateModalForm(BaseModalForm):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class CompensationStateRemoveModalForm(RemoveModalForm):
|
||||
""" Removing modal form for CompensationState
|
||||
|
||||
Can be used for anything, where removing shall be confirmed by the user a second time.
|
||||
|
||||
"""
|
||||
state = None
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
state = kwargs.pop("state", None)
|
||||
self.state = state
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def save(self):
|
||||
self.instance.remove_state(self)
|
||||
|
||||
|
||||
class CompensationActionRemoveModalForm(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)
|
||||
|
||||
|
||||
class NewDeadlineModalForm(BaseModalForm):
|
||||
""" Form handling deadline related input
|
||||
|
||||
|
||||
@@ -76,13 +76,3 @@ class CompensationAction(BaseResource):
|
||||
if choice[0] == self.unit:
|
||||
return choice[1]
|
||||
return None
|
||||
|
||||
def delete(self, user=None, *args, **kwargs):
|
||||
from compensation.models import Compensation
|
||||
if user:
|
||||
comps = Compensation.objects.filter(
|
||||
actions__id__in=[self.id]
|
||||
).distinct()
|
||||
for comp in comps:
|
||||
comp.mark_as_edited(user, edit_comment=COMPENSATION_ACTION_REMOVED)
|
||||
super().delete(*args, **kwargs)
|
||||
@@ -21,7 +21,8 @@ from konova.models import BaseObject, AbstractDocument, Deadline, generate_docum
|
||||
GeoReferencedMixin
|
||||
from konova.settings import DEFAULT_SRID_RLP, LANIS_LINK_TEMPLATE
|
||||
from konova.utils.message_templates import DATA_UNSHARED_EXPLANATION, COMPENSATION_REMOVED_TEMPLATE, \
|
||||
DOCUMENT_REMOVED_TEMPLATE, COMPENSATION_EDITED_TEMPLATE, DEADLINE_REMOVED, ADDED_DEADLINE
|
||||
DOCUMENT_REMOVED_TEMPLATE, COMPENSATION_EDITED_TEMPLATE, DEADLINE_REMOVED, ADDED_DEADLINE, \
|
||||
COMPENSATION_ACTION_REMOVED, COMPENSATION_STATE_REMOVED
|
||||
from user.models import UserActionLogEntry
|
||||
|
||||
|
||||
@@ -114,6 +115,21 @@ class AbstractCompensation(BaseObject, GeoReferencedMixin):
|
||||
self.actions.add(comp_action)
|
||||
return comp_action
|
||||
|
||||
def remove_action(self, form):
|
||||
""" Removes a CompensationAction from the abstract compensation
|
||||
|
||||
Args:
|
||||
form (CompensationActionRemoveModalForm): The form holding all relevant data
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
action = form.action
|
||||
user = form.user
|
||||
with transaction.atomic():
|
||||
action.delete()
|
||||
self.mark_as_edited(user, edit_comment=COMPENSATION_ACTION_REMOVED)
|
||||
|
||||
def add_state(self, form, is_before_state: bool) -> CompensationState:
|
||||
""" Adds a new compensation state to the compensation
|
||||
|
||||
@@ -138,6 +154,21 @@ class AbstractCompensation(BaseObject, GeoReferencedMixin):
|
||||
self.after_states.add(state)
|
||||
return state
|
||||
|
||||
def remove_state(self, form):
|
||||
""" Removes a CompensationState from the abstract compensation
|
||||
|
||||
Args:
|
||||
form (CompensationStateRemoveModalForm): The form holding all relevant data
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
state = form.state
|
||||
user = form.user
|
||||
with transaction.atomic():
|
||||
state.delete()
|
||||
self.mark_as_edited(user, edit_comment=COMPENSATION_STATE_REMOVED)
|
||||
|
||||
def get_surface_after_states(self) -> float:
|
||||
""" Calculates the compensation's/account's surface
|
||||
|
||||
@@ -346,7 +377,7 @@ class Compensation(AbstractCompensation, CEFMixin, CoherenceMixin):
|
||||
|
||||
"""
|
||||
self.intervention.unrecord(user, request)
|
||||
action = super().mark_as_edited(user, edit_comment)
|
||||
action = super().mark_as_edited(user, edit_comment=edit_comment)
|
||||
return action
|
||||
|
||||
def is_ready_for_publish(self) -> bool:
|
||||
|
||||
@@ -37,8 +37,3 @@ class Payment(BaseResource):
|
||||
ordering = [
|
||||
"-amount",
|
||||
]
|
||||
|
||||
def delete(self, user=None, *args, **kwargs):
|
||||
if user is not None:
|
||||
self.intervention.mark_as_edited(user, edit_comment=PAYMENT_REMOVED)
|
||||
super().delete(*args, **kwargs)
|
||||
|
||||
@@ -47,14 +47,3 @@ class CompensationState(UuidModel):
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.biotope_type} | {self.surface} m²"
|
||||
|
||||
def delete(self, user=None, *args, **kwargs):
|
||||
from compensation.models import Compensation
|
||||
if user:
|
||||
comps = Compensation.objects.filter(
|
||||
Q(before_states__id__in=[self.id]) |
|
||||
Q(after_states__id__in=[self.id])
|
||||
).distinct()
|
||||
for comp in comps:
|
||||
comp.mark_as_edited(user, edit_comment=COMPENSATION_STATE_REMOVED)
|
||||
super().delete(*args, **kwargs)
|
||||
|
||||
@@ -10,6 +10,6 @@ from compensation.views.payment import *
|
||||
|
||||
app_name = "pay"
|
||||
urlpatterns = [
|
||||
path('<intervention_id>/new', new_payment_view, name='new'),
|
||||
path('<id>/remove', payment_remove_view, name='remove'),
|
||||
path('<id>/new', new_payment_view, name='new'),
|
||||
path('<id>/remove/<payment_id>', payment_remove_view, name='remove'),
|
||||
]
|
||||
|
||||
@@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from compensation.forms.forms import NewCompensationForm, EditCompensationForm
|
||||
from compensation.forms.modalForms import NewStateModalForm, NewDeadlineModalForm, NewActionModalForm, \
|
||||
NewCompensationDocumentForm
|
||||
NewCompensationDocumentForm, CompensationActionRemoveModalForm, CompensationStateRemoveModalForm
|
||||
from compensation.models import Compensation, CompensationState, CompensationAction, CompensationDocument
|
||||
from compensation.tables import CompensationTable
|
||||
from intervention.models import Intervention
|
||||
@@ -436,8 +436,9 @@ def state_remove_view(request: HttpRequest, id: str, state_id: str):
|
||||
Returns:
|
||||
|
||||
"""
|
||||
comp = get_object_or_404(Compensation, id=id)
|
||||
state = get_object_or_404(CompensationState, id=state_id)
|
||||
form = RemoveModalForm(request.POST or None, instance=state, request=request)
|
||||
form = CompensationStateRemoveModalForm(request.POST or None, instance=comp, state=state, request=request)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=COMPENSATION_STATE_REMOVED,
|
||||
@@ -459,8 +460,9 @@ def action_remove_view(request: HttpRequest, id: str, action_id: str):
|
||||
Returns:
|
||||
|
||||
"""
|
||||
comp = get_object_or_404(Compensation, id=id)
|
||||
action = get_object_or_404(CompensationAction, id=action_id)
|
||||
form = RemoveModalForm(request.POST or None, instance=action, request=request)
|
||||
form = CompensationActionRemoveModalForm(request.POST or None, instance=comp, action=action, request=request)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=COMPENSATION_ACTION_REMOVED,
|
||||
|
||||
@@ -16,10 +16,10 @@ from django.shortcuts import render, get_object_or_404, redirect
|
||||
|
||||
from compensation.forms.forms import NewEcoAccountForm, EditEcoAccountForm
|
||||
from compensation.forms.modalForms import NewStateModalForm, NewActionModalForm, NewDeadlineModalForm, \
|
||||
NewEcoAccountDocumentForm
|
||||
NewEcoAccountDocumentForm, CompensationActionRemoveModalForm, CompensationStateRemoveModalForm
|
||||
from compensation.models import EcoAccount, EcoAccountDocument, CompensationState, CompensationAction
|
||||
from compensation.tables import EcoAccountTable
|
||||
from intervention.forms.modalForms import NewDeductionModalForm, ShareModalForm
|
||||
from intervention.forms.modalForms import NewDeductionModalForm, ShareModalForm, DeductionRemoveModalForm
|
||||
from konova.contexts import BaseContext
|
||||
from konova.decorators import any_group_check, default_group_required, conservation_office_group_required, \
|
||||
shared_access_required
|
||||
@@ -286,7 +286,7 @@ def deduction_remove_view(request: HttpRequest, id: str, deduction_id: str):
|
||||
except ObjectDoesNotExist:
|
||||
raise Http404("Unknown deduction")
|
||||
|
||||
form = RemoveModalForm(request.POST or None, instance=eco_deduction, request=request)
|
||||
form = DeductionRemoveModalForm(request.POST or None, instance=acc, deduction=eco_deduction, request=request)
|
||||
return form.process_request(
|
||||
request=request,
|
||||
msg_success=DEDUCTION_REMOVED,
|
||||
@@ -401,8 +401,9 @@ def state_remove_view(request: HttpRequest, id: str, state_id: str):
|
||||
Returns:
|
||||
|
||||
"""
|
||||
acc = get_object_or_404(EcoAccount, id=id)
|
||||
state = get_object_or_404(CompensationState, id=state_id)
|
||||
form = RemoveModalForm(request.POST or None, instance=state, request=request)
|
||||
form = CompensationStateRemoveModalForm(request.POST or None, instance=acc, state=state, request=request)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=COMPENSATION_STATE_REMOVED,
|
||||
@@ -424,8 +425,9 @@ def action_remove_view(request: HttpRequest, id: str, action_id: str):
|
||||
Returns:
|
||||
|
||||
"""
|
||||
acc = get_object_or_404(EcoAccount, id=id)
|
||||
action = get_object_or_404(CompensationAction, id=action_id)
|
||||
form = RemoveModalForm(request.POST or None, instance=action, request=request)
|
||||
form = CompensationActionRemoveModalForm(request.POST or None, instance=acc, action=action, request=request)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=COMPENSATION_ACTION_REMOVED,
|
||||
|
||||
@@ -11,7 +11,7 @@ from django.contrib.auth.decorators import login_required
|
||||
from django.http import HttpRequest
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from compensation.forms.modalForms import NewPaymentForm
|
||||
from compensation.forms.modalForms import NewPaymentForm, PaymentRemoveModalForm
|
||||
from compensation.models import Payment
|
||||
from intervention.models import Intervention
|
||||
from konova.decorators import default_group_required
|
||||
@@ -21,39 +21,41 @@ from konova.utils.message_templates import PAYMENT_ADDED, PAYMENT_REMOVED
|
||||
|
||||
@login_required
|
||||
@default_group_required
|
||||
def new_payment_view(request: HttpRequest, intervention_id: str):
|
||||
def new_payment_view(request: HttpRequest, id: str):
|
||||
""" Renders a modal view for adding new payments
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
intervention_id (str): The intervention's id for which a new payment shall be added
|
||||
id (str): The intervention's id for which a new payment shall be added
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
intervention = get_object_or_404(Intervention, id=intervention_id)
|
||||
intervention = get_object_or_404(Intervention, id=id)
|
||||
form = NewPaymentForm(request.POST or None, instance=intervention, request=request)
|
||||
return form.process_request(
|
||||
request,
|
||||
msg_success=PAYMENT_ADDED,
|
||||
redirect_url=reverse("intervention:detail", args=(intervention_id,)) + "#related_data"
|
||||
redirect_url=reverse("intervention:detail", args=(id,)) + "#related_data"
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
@default_group_required
|
||||
def payment_remove_view(request: HttpRequest, id: str):
|
||||
def payment_remove_view(request: HttpRequest, id: str, payment_id: str):
|
||||
""" Renders a modal view for removing payments
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
id (str): The payment's id
|
||||
id (str): The intervention's id
|
||||
payment_id (str): The payment's id
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
payment = get_object_or_404(Payment, id=id)
|
||||
form = RemoveModalForm(request.POST or None, instance=payment, request=request)
|
||||
intervention = get_object_or_404(Intervention, id=id)
|
||||
payment = get_object_or_404(Payment, id=payment_id)
|
||||
form = PaymentRemoveModalForm(request.POST or None, instance=intervention, payment=payment, request=request)
|
||||
return form.process_request(
|
||||
request=request,
|
||||
msg_success=PAYMENT_REMOVED,
|
||||
|
||||
Reference in New Issue
Block a user