Source code for ferrosoft.apps.emiflow.forms.catalog

#  Copyright (c) 2025 Ferrosoft GmbH. All rights reserved.
from django.core.exceptions import ValidationError
from django import forms
from django.forms.models import ModelForm
from django.utils.translation import gettext_lazy as _

from ferrosoft.apps.emiflow.models import (
    Emitter,
    Settings,
    EnergyCarrier,
    EmissionFactor,
)
from ferrosoft.apps.ferrobase.forms import UnitChoiceField
from ferrosoft.apps.ferrobase.models import UnitCollection, UnitCursor


[docs] class CatalogEntryForm(ModelForm): """Sets catalog field on model instance with Settings.user_catalog value.""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.settings = Settings.get_instance()
[docs] def clean(self): fields = super().clean() if self.settings.user_catalog is None: raise ValidationError( _("System configuration error. Please contact system administrator."), code="INVALID_SETTINGS", ) return fields
[docs] def save(self, commit=True): instance = super().save(commit=False) if instance.catalog_id is None: instance.catalog = self.settings.user_catalog if commit: instance.save() return instance
[docs] class EmissionFactorForm(ModelForm):
[docs] class Meta: model = EmissionFactor fields = [ "energy_carrier", "category", "value", "unit", ] widgets = { "energy_carrier": forms.HiddenInput(), }
unit = UnitChoiceField( units=UnitCollection.EMISSION_FACTOR, initial=UnitCursor("kgCO2e/kg"), )
[docs] class EmitterForm(CatalogEntryForm):
[docs] class Meta: model = Emitter fields = [ "name", "epitype", "vehicle_type", "energy_carrier", ]
[docs] class EnergyCarrierForm(CatalogEntryForm):
[docs] class Meta: model = EnergyCarrier fields = [ "name", "density", "composition", "application", "lower_heating", ]