Source code for ferrosoft.apps.emiflow.views.lifecycle
# Copyright (c) 2025 Ferrosoft GmbH. All rights reserved.
from django.shortcuts import redirect
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from ferrosoft.apps.emiflow.forms.lifecycle import (
TreatmentLCCValueForm,
TransportLCCValueForm,
)
from ferrosoft.apps.emiflow.models import (
LifecycleCategory,
TreatmentLCCValue,
TransportLCCValue,
TransportChain,
Treatment,
)
from ferrosoft.apps.ferrobase.auth.roles import Permissions, Verb
from ferrosoft.apps.ferrobase.views import (
CreateView,
UpdateView,
DeleteView,
ListView,
model_crud_routes,
)
from ferrosoft.apps.ferrobase.views.generic import DependentCreateView
[docs]
class LifecycleCategoryCreate(CreateView):
fields = ["name"]
help_topic = "lifecycle_categories"
model = LifecycleCategory
[docs]
class LifecycleCategoryUpdate(UpdateView):
fields = ["name"]
help_topic = "lifecycle_categories"
model = LifecycleCategory
[docs]
def delete_view(self, *args, **kwargs):
return (
None
if self.object.predefined
else reverse("emiflow:lifecyclecategory_delete", args=[self.object.pk])
)
[docs]
class LifecycleCategoryDelete(DeleteView):
help_topic = "lifecycle_categories"
model = LifecycleCategory
[docs]
def get(self, request, *args, **kwargs):
self.object = self.get_object()
# Predefined LCC's must not be deleted for proper system operation.
if self.object.predefined:
return redirect(self.object)
return super().get(request, *args, **kwargs)
[docs]
class LifecycleCategoryList(ListView):
help_topic = "lifecycle_categories"
model = LifecycleCategory
ordering = ["name"]
lifecycle_category_urls = model_crud_routes(
LifecycleCategory,
create_view=LifecycleCategoryCreate,
read_view=LifecycleCategoryList,
update_view=LifecycleCategoryUpdate,
delete_view=LifecycleCategoryDelete,
)
[docs]
class LCCValueCreate(DependentCreateView):
abstract = True
activity_title = _("Related Emissions")
related_links_default = False
[docs]
def cancel_view(self):
return (
None
if self.parent_object is None
else self.parent_object.get_absolute_url()
)
[docs]
class TransportLCCValueCreate(LCCValueCreate):
form_class = TransportLCCValueForm
help_topic = "transport_related_emissions"
model = TransportLCCValue
parent_model = TransportChain
[docs]
def get_success_url(self):
return self.object.chain.get_absolute_url()
[docs]
class TransportLCCValueUpdate(UpdateView):
activity_title = _("Related Emissions")
form_class = TransportLCCValueForm
help_topic = "transport_related_emissions"
model = TransportLCCValue
related_links_default = False
[docs]
def cancel_view(self):
return self.object.chain.get_absolute_url()
[docs]
def get_success_url(self):
return self.object.chain.get_absolute_url()
[docs]
class TransportLCCValueDelete(DeleteView):
activity_title = _("Related Emissions")
help_topic = "transport_related_emissions"
model = TransportLCCValue
[docs]
def cancel_view(self):
return self.object.chain.get_absolute_url()
[docs]
def get_success_url(self):
return self.object.chain.get_absolute_url()
transport_lcc_value_urls = model_crud_routes(
TransportLCCValue,
create_view=TransportLCCValueCreate,
update_view=TransportLCCValueUpdate,
delete_view=TransportLCCValueDelete,
)
[docs]
class TreatmentLCCValueCreate(LCCValueCreate):
form_class = TreatmentLCCValueForm
help_topic = "treatment_related_emissions"
model = TreatmentLCCValue
parent_model = Treatment
[docs]
def get_success_url(self):
return self.object.treatment.get_absolute_url()
[docs]
class TreatmentLCCValueUpdate(UpdateView):
activity_title = _("Related Emissions")
form_class = TreatmentLCCValueForm
help_topic = "treatment_related_emissions"
model = TreatmentLCCValue
related_links_default = False
[docs]
def cancel_view(self):
return self.object.treatment.get_absolute_url()
[docs]
def get_success_url(self):
return self.object.treatment.get_absolute_url()
[docs]
class TreatmentLCCValueDelete(DeleteView):
activity_title = _("Related Emissions")
help_topic = "treatment_related_emissions"
model = TreatmentLCCValue
[docs]
def cancel_view(self):
return self.object.treatment.get_absolute_url()
[docs]
def get_success_url(self):
return self.object.treatment.get_absolute_url()
treatment_lcc_value_urls = model_crud_routes(
TreatmentLCCValue,
create_view=TreatmentLCCValueCreate,
update_view=TreatmentLCCValueUpdate,
delete_view=TreatmentLCCValueDelete,
)