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] def form_valid(self, form): if self.object.predefined: return redirect(self.object) return super().form_valid(form)
[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_form_kwargs(self): return super().get_form_kwargs() | { "initial": { "chain": self.parent_object, } }
[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_form_kwargs(self): return super().get_form_kwargs() | { "initial": { "treatment": self.parent_object, } }
[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, )