ferrosoft.apps.emiflow package¶
Emiflow — the emission calculation and reporting engine of the platform.
Emiflow turns business activity — freight movements, energy use, waste treatment — into auditable greenhouse-gas figures (gCO2e per tkm for transports, gCO2e per t for treatments), persists those figures in an append-only booking journal, and renders them as compliance-ready documents. It is the application that justifies the platform’s existence: emissions are not estimated here, they are accounted for.
Domain overview¶
The emiflow domain is built around four interlocking concepts:
Transport chains. A
TransportChainis one consignment from consignor to consignee, broken into orderedTransportChainElement(TCE) hops. The consignment’s payload is described once at the chain level as one or moreFreightItemrows — quantified material allocated to the chain and carried unchanged through every TCE. Each TCE then references aTransportOperation, the activity definition that pairs anEmitter(vehicle, machine) with anEnergyCarrier(fuel) and an activity type, so the same operation can be reused across many chains.Treatments. A
Treatmentis a recipe: which materials go in, which come out, which emitter and energy carrier are involved, and how the resulting emissions are allocated to the outputs (by weight or manually). ATreatmentOperationis an instance of that recipe with concrete input and output lines.Emission intensities. An
EmissionIntensityis the calculated per-activity factor (gCO2e per tkm or gCO2e per t) for a transport operation, treatment operation, or emitter. The intensity carries every input variable it was computed from, so results stay reproducible and audit-traceable.Booking records. An
EmissionBookingRecordis an immutable journal entry of calculated emissions, broken down byLifecycleCategory(LCC). The LCC split lets reports present well-to-tank, tank-to-wheel, and well-to-wheel figures side by side without recomputation.
Upstream reference data is published as EmissionsCatalog
bundles (for example the public GLEC extract) and per-tenant catalogs
can override or extend the shipped factors. Per-tenant configuration
lives in a singleton Settings row and the related
TransportChainDefaults and BusinessCentralSettings
records.
Package layout¶
Emiflow follows the platform-wide fat services / thin views convention. The major subpackages are:
models— ORM models grouped one module per bounded sub-domain (booking, catalog, dataimport, intensity, operation, reporting, settings, signals, tegos, transport, treatment).services— business logic: transport-chain and treatment emission calculators, fluentTransportChainbuilders, product carbon footprint (PCF) roll-ups, document generators for reports, per-tenant tonnage accounting for subscription billing, vehicle heuristics, and visitor implementations driven byTransportChain.accept.views— Django class-based views exposing the per-domain CRUD bundles and ad-hoc workflows (file import, treatment-operation allocation, reporting, settings).forms,tables,filter,widgets— Django forms, django-tables2 tables, django-filterFilterSets, and custom widgets that surface the models in the web UI.api— DRF router and viewsets mounted underapi/for machine consumers.dataimport— staging-to-final pipeline that turns rows from bulk spreadsheet imports into real transport chains.catalog— ingest utilities for third-party emission catalog files (distinct fromcatalog, which holds the resulting ORM models).templatetags— Jinja2 template tags used by the emiflow UI templates.management— Django management commands.
Top-level modules cover cross-cutting concerns:
apps— DjangoAppConfigthat contributes the Emissions settings-menu category (Emitters, Transport Defaults, Lifecycle Categories, Energy Carriers) and hooks the emiflow updater into theferrobase_updatemanagement command.urls— URL configuration under theemiflownamespace, registering the dashboard, the per-domain CRUD bundles, the ad-hoc workflow endpoints, and the REST API.metrics— Prometheus metrics for per-tenant tonnage usage and per-organisation tonnage limits, used by subscription billing and overage alerting.
External integrations¶
Emiflow integrates with Microsoft Dynamics 365 Business Central through two distinct apps hosted on that platform:
Built-in emissions app. The connector in
businesscentraltargets the emissions module that ships with Business Central itself, syncing master data with the Microsoft-provided app (through RAPIDSTART files). Per-tenant connection details live inBusinessCentralSettings.TEGOS app. TEGOS is a waste-management extension app for Business Central. Order documents originating in TEGOS are parsed into the in-memory value objects defined in
tegosand converted into transport chains and freight items.
Actually, the apps are not directly targeted, but require Ferrosoft apps acting as an adapter for these apps:
bc-emiflow(needed to consume the RAPIDSTART file)bc-emiflow-for-tegos(providing TEGOS-specific stuff atopbc-emiflow)
Subpackages¶
- ferrosoft.apps.emiflow.api package
- ferrosoft.apps.emiflow.catalog package
- Submodules
- ferrosoft.apps.emiflow.catalog.conversion module
- ferrosoft.apps.emiflow.catalog.database module
- ferrosoft.apps.emiflow.dataimport package
- ferrosoft.apps.emiflow.forms package
- Submodules
- ferrosoft.apps.emiflow.forms.catalog module
- ferrosoft.apps.emiflow.forms.intensity module
- ferrosoft.apps.emiflow.forms.lifecycle module
- ferrosoft.apps.emiflow.forms.mixins module
- ferrosoft.apps.emiflow.forms.partner module
- ferrosoft.apps.emiflow.forms.pcf module
- ferrosoft.apps.emiflow.forms.reporting module
- ferrosoft.apps.emiflow.forms.settings module
- ferrosoft.apps.emiflow.forms.transport module
- ferrosoft.apps.emiflow.forms.treatment module
- ferrosoft.apps.emiflow.management package
- Subpackages
- ferrosoft.apps.emiflow.management.commands package
- Submodules
- ferrosoft.apps.emiflow.management.commands.catalog2fixture module
- ferrosoft.apps.emiflow.management.commands.copy_transport module
- ferrosoft.apps.emiflow.management.commands.emiflow_settings module
- ferrosoft.apps.emiflow.management.commands.gen_rapidstart module
- ferrosoft.apps.emiflow.management.commands.import_catalog module
- ferrosoft.apps.emiflow.management.commands package
- Subpackages
- ferrosoft.apps.emiflow.models package
- Submodules
- ferrosoft.apps.emiflow.models.booking module
EmissionBookingRecordEmissionBookingRecord.DoesNotExistEmissionBookingRecord.MultipleObjectsReturnedEmissionBookingRecord.activity_distanceEmissionBookingRecord.booking_dateEmissionBookingRecord.creation_timeEmissionBookingRecord.emission_intensity_operationEmissionBookingRecord.emission_intensity_totalEmissionBookingRecord.emission_operationEmissionBookingRecord.emission_operation_valueEmissionBookingRecord.emission_totalEmissionBookingRecord.emission_total_valueEmissionBookingRecord.emission_unit_idEmissionBookingRecord.emission_unit_symbolEmissionBookingRecord.entity_idEmissionBookingRecord.entity_referenceEmissionBookingRecord.extraEmissionBookingRecord.get_next_by_booking_date()EmissionBookingRecord.get_next_by_creation_time()EmissionBookingRecord.get_previous_by_booking_date()EmissionBookingRecord.get_previous_by_creation_time()EmissionBookingRecord.idEmissionBookingRecord.incoming_partner_idEmissionBookingRecord.incoming_partner_nameEmissionBookingRecord.lifecycle_categoryEmissionBookingRecord.lifecycle_category_nameEmissionBookingRecord.material_codeEmissionBookingRecord.material_idEmissionBookingRecord.material_nameEmissionBookingRecord.modification_timeEmissionBookingRecord.objectsEmissionBookingRecord.outgoing_partner_idEmissionBookingRecord.outgoing_partner_nameEmissionBookingRecord.save()EmissionBookingRecord.simulationEmissionBookingRecord.transport_distanceEmissionBookingRecord.weightEmissionBookingRecord.weight_unit_idEmissionBookingRecord.weight_unit_symbolEmissionBookingRecord.weight_value
EmissionBookingRecordManagerEmissionBookingRecordQuerySetEmissionTotalLCCValueLCCValueManagerLifecycleCategoryLifecycleCategoryManagerLifecycleResultLifecycleSumPCFTotalPredefinedLCC
- ferrosoft.apps.emiflow.models.catalog module
CatalogDecimalField()DataSourceEmissionCategoryEmissionFactorEmissionFactor.DoesNotExistEmissionFactor.MultipleObjectsReturnedEmissionFactor.categoryEmissionFactor.energy_carrierEmissionFactor.energy_carrier_idEmissionFactor.factorEmissionFactor.get_absolute_url()EmissionFactor.get_category_display()EmissionFactor.idEmissionFactor.objectsEmissionFactor.read_onlyEmissionFactor.unitEmissionFactor.unit_idEmissionFactor.value
EmissionFactorManagerEmissionsCatalogEmissionsCatalog.DoesNotExistEmissionsCatalog.MultipleObjectsReturnedEmissionsCatalog.copyrightEmissionsCatalog.data_sourceEmissionsCatalog.emittersEmissionsCatalog.energy_carriersEmissionsCatalog.get_absolute_url()EmissionsCatalog.get_data_source_display()EmissionsCatalog.get_ordered()EmissionsCatalog.idEmissionsCatalog.license_textEmissionsCatalog.license_uriEmissionsCatalog.nameEmissionsCatalog.objects
EmitterEmitter.DoesNotExistEmitter.MultipleObjectsReturnedEmitter.catalogEmitter.catalog_idEmitter.emission_intensityEmitter.emission_intensity_idEmitter.energy_carrierEmitter.energy_carrier_idEmitter.epitypeEmitter.get_absolute_url()Emitter.get_epitype_display()Emitter.get_ordered()Emitter.get_vehicle_type_display()Emitter.idEmitter.nameEmitter.objectsEmitter.read_onlyEmitter.treatmentoperation_setEmitter.vehicle_type
EmitterEpitypeEmitterManagerEnergyCarrierEnergyCarrier.DoesNotExistEnergyCarrier.MultipleObjectsReturnedEnergyCarrier.applicationEnergyCarrier.catalogEnergyCarrier.catalog_idEnergyCarrier.compositionEnergyCarrier.densityEnergyCarrier.emission_factorsEnergyCarrier.get_absolute_url()EnergyCarrier.get_ordered()EnergyCarrier.idEnergyCarrier.lower_heatingEnergyCarrier.nameEnergyCarrier.objectsEnergyCarrier.read_onlyEnergyCarrier.treatmentoperation_set
LoadCharacteristicsVehicleType
- ferrosoft.apps.emiflow.models.dataimport module
ImportLineImportLine.MetaImportLine.booking_dateImportLine.consigneeImportLine.consignee_idImportLine.consignorImportLine.consignor_idImportLine.destination_address()ImportLine.destination_cityImportLine.destination_countryImportLine.destination_country_idImportLine.destination_house_noImportLine.destination_postal_codeImportLine.destination_streetImportLine.get_incoterms_display()ImportLine.get_transport_type_display()ImportLine.get_vehicle_type_display()ImportLine.idImportLine.incotermsImportLine.materialImportLine.material_idImportLine.referenceImportLine.start_address()ImportLine.start_cityImportLine.start_countryImportLine.start_country_idImportLine.start_house_noImportLine.start_postal_codeImportLine.start_streetImportLine.transport_typeImportLine.vehicle_typeImportLine.weightImportLine.weight_unitImportLine.weight_unit_idImportLine.weight_value
MultiLineBookingRecordMultiLineBookingRecord.DoesNotExistMultiLineBookingRecord.MultipleObjectsReturnedMultiLineBookingRecord.add_transport()MultiLineBookingRecord.clear_transports()MultiLineBookingRecord.get_transports()MultiLineBookingRecord.idMultiLineBookingRecord.jobMultiLineBookingRecord.job_idMultiLineBookingRecord.objectsMultiLineBookingRecord.transportMultiLineBookingRecord.transport_id
MultiLineImportLineMultiLineImportLine.DoesNotExistMultiLineImportLine.MultipleObjectsReturnedMultiLineImportLine.booking_dateMultiLineImportLine.consigneeMultiLineImportLine.consignee_idMultiLineImportLine.consignorMultiLineImportLine.consignor_idMultiLineImportLine.destination_cityMultiLineImportLine.destination_countryMultiLineImportLine.destination_country_idMultiLineImportLine.destination_house_noMultiLineImportLine.destination_postal_codeMultiLineImportLine.destination_streetMultiLineImportLine.get_incoterms_display()MultiLineImportLine.get_transport_type_display()MultiLineImportLine.get_vehicle_type_display()MultiLineImportLine.idMultiLineImportLine.incotermsMultiLineImportLine.materialMultiLineImportLine.material_idMultiLineImportLine.objectsMultiLineImportLine.positionMultiLineImportLine.referenceMultiLineImportLine.start_cityMultiLineImportLine.start_countryMultiLineImportLine.start_country_idMultiLineImportLine.start_house_noMultiLineImportLine.start_postal_codeMultiLineImportLine.start_streetMultiLineImportLine.transport_typeMultiLineImportLine.vehicle_typeMultiLineImportLine.weight_unitMultiLineImportLine.weight_unit_idMultiLineImportLine.weight_value
SimpleImportLineSimpleImportLine.DoesNotExistSimpleImportLine.MultipleObjectsReturnedSimpleImportLine.booking_dateSimpleImportLine.consigneeSimpleImportLine.consignee_idSimpleImportLine.consignorSimpleImportLine.consignor_idSimpleImportLine.destination_citySimpleImportLine.destination_countrySimpleImportLine.destination_country_idSimpleImportLine.destination_house_noSimpleImportLine.destination_postal_codeSimpleImportLine.destination_streetSimpleImportLine.get_incoterms_display()SimpleImportLine.get_transport_type_display()SimpleImportLine.get_vehicle_type_display()SimpleImportLine.idSimpleImportLine.incotermsSimpleImportLine.materialSimpleImportLine.material_idSimpleImportLine.objectsSimpleImportLine.referenceSimpleImportLine.start_citySimpleImportLine.start_countrySimpleImportLine.start_country_idSimpleImportLine.start_house_noSimpleImportLine.start_postal_codeSimpleImportLine.start_streetSimpleImportLine.transport_typeSimpleImportLine.vehicle_typeSimpleImportLine.weight_unitSimpleImportLine.weight_unit_idSimpleImportLine.weight_value
- ferrosoft.apps.emiflow.models.intensity module
EmissionIntensityEmissionIntensity.DoesNotExistEmissionIntensity.MultipleObjectsReturnedEmissionIntensity.copy_with_owner()EmissionIntensity.distanceEmissionIntensity.distance_unitEmissionIntensity.distance_unit_idEmissionIntensity.distance_valueEmissionIntensity.enable_distanceEmissionIntensity.energy_provision_intensityEmissionIntensity.energy_provision_valueEmissionIntensity.factor_energy_provision_valueEmissionIntensity.factor_energy_provision_value_idEmissionIntensity.factor_operation_valueEmissionIntensity.factor_operation_value_idEmissionIntensity.get_absolute_url()EmissionIntensity.get_owner_type_display()EmissionIntensity.gradeEmissionIntensity.idEmissionIntensity.massEmissionIntensity.mass_unitEmissionIntensity.mass_unit_idEmissionIntensity.mass_valueEmissionIntensity.objectsEmissionIntensity.operation_intensityEmissionIntensity.operation_valueEmissionIntensity.ownerEmissionIntensity.owner_idEmissionIntensity.owner_typeEmissionIntensity.quantityEmissionIntensity.quantity_unitEmissionIntensity.quantity_unit_idEmissionIntensity.quantity_valueEmissionIntensity.read_onlyEmissionIntensity.unitEmissionIntensity.unit_idEmissionIntensity.update_foreign_key()
EmissionIntensityManagerIntensityCapableEntity
- ferrosoft.apps.emiflow.models.operation module
OperationEpitypeTransportOperationTransportOperation.DoesNotExistTransportOperation.MultipleObjectsReturnedTransportOperation.activity_typeTransportOperation.emission_intensityTransportOperation.emission_intensity_idTransportOperation.emitterTransportOperation.emitter_idTransportOperation.energy_carrierTransportOperation.energy_carrier_idTransportOperation.get_absolute_url()TransportOperation.get_activity_type_display()TransportOperation.idTransportOperation.nameTransportOperation.objectsTransportOperation.read_onlyTransportOperation.referenceTransportOperation.transport_chain_elements
TransportOperationManager
- ferrosoft.apps.emiflow.models.reporting module
AspectRatioBase64ImagePhotoOrientationProportionalEmissionReportReport.DoesNotExistReport.MultipleObjectsReturnedReport.creation_timeReport.filtersReport.get_absolute_url()Report.get_next_by_creation_time()Report.get_previous_by_creation_time()Report.get_proportional_emissions_display()Report.get_type_display()Report.idReport.nameReport.objectsReport.proportional_emissionsReport.referenceReport.type
ReportTemplateReportTemplate.DoesNotExistReportTemplate.MultipleObjectsReturnedReportTemplate.company_logoReportTemplate.company_logo_aspect_ratioReportTemplate.company_logo_base64ReportTemplate.company_logo_idReportTemplate.company_logo_orientationReportTemplate.company_logo_styleReportTemplate.company_logo_widthReportTemplate.document_epilogueReportTemplate.document_preambleReportTemplate.document_senderReportTemplate.document_sender_idReportTemplate.document_titleReportTemplate.get_absolute_url()ReportTemplate.get_company_logo_aspect_ratio_display()ReportTemplate.get_company_logo_orientation_display()ReportTemplate.idReportTemplate.nameReportTemplate.objects
ReportType
- ferrosoft.apps.emiflow.models.settings module
BusinessCentralSettingsBusinessCentralSettings.DoesNotExistBusinessCentralSettings.MultipleObjectsReturnedBusinessCentralSettings.api_base_urlBusinessCentralSettings.environmentBusinessCentralSettings.get_absolute_url()BusinessCentralSettings.get_instance()BusinessCentralSettings.idBusinessCentralSettings.oauth_auth_urlBusinessCentralSettings.oauth_client_idBusinessCentralSettings.oauth_client_secretBusinessCentralSettings.oauth_scopeBusinessCentralSettings.objectsBusinessCentralSettings.tenant_id
SettingsSettings.DoesNotExistSettings.MultipleObjectsReturnedSettings.company_logo_directorySettings.company_logo_directory_idSettings.get_company_logo_directory()Settings.get_instance()Settings.get_transport_chain_defaults()Settings.idSettings.objectsSettings.report_directorySettings.report_directory_idSettings.transport_chain_defaultsSettings.user_catalogSettings.user_catalog_id
TransportChainDefaultsTransportChainDefaults.DoesNotExistTransportChainDefaults.MultipleObjectsReturnedTransportChainDefaults.are_defaults_setTransportChainDefaults.distance_typeTransportChainDefaults.get_distance_type_display()TransportChainDefaults.get_vehicle_type_display()TransportChainDefaults.idTransportChainDefaults.objectsTransportChainDefaults.settingsTransportChainDefaults.settings_idTransportChainDefaults.transport_operationTransportChainDefaults.transport_operation_idTransportChainDefaults.vehicle_type
- ferrosoft.apps.emiflow.models.signals module
- ferrosoft.apps.emiflow.models.tegos module
- ferrosoft.apps.emiflow.models.transport module
ActivityDistanceParametersBookingErrorBookingStatusDistanceTypeFreightItemFreightItem.DoesNotExistFreightItem.MultipleObjectsReturnedFreightItem.chainFreightItem.chain_idFreightItem.get_absolute_url()FreightItem.idFreightItem.materialFreightItem.material_idFreightItem.objectsFreightItem.weightFreightItem.weight_unitFreightItem.weight_unit_idFreightItem.weight_value
FreightItemManagerIncotermTCEGeoDestinationTCEGeoDestination.DoesNotExistTCEGeoDestination.MultipleObjectsReturnedTCEGeoDestination.additional_linesTCEGeoDestination.cityTCEGeoDestination.companyTCEGeoDestination.countryTCEGeoDestination.country_idTCEGeoDestination.first_nameTCEGeoDestination.house_noTCEGeoDestination.idTCEGeoDestination.last_nameTCEGeoDestination.latitudeTCEGeoDestination.longitudeTCEGeoDestination.objectsTCEGeoDestination.postal_codeTCEGeoDestination.salutationTCEGeoDestination.salutation_idTCEGeoDestination.streetTCEGeoDestination.tceTCEGeoDestination.tce_id
TCEGeoOriginTCEGeoOrigin.DoesNotExistTCEGeoOrigin.MultipleObjectsReturnedTCEGeoOrigin.additional_linesTCEGeoOrigin.cityTCEGeoOrigin.companyTCEGeoOrigin.countryTCEGeoOrigin.country_idTCEGeoOrigin.first_nameTCEGeoOrigin.house_noTCEGeoOrigin.idTCEGeoOrigin.last_nameTCEGeoOrigin.latitudeTCEGeoOrigin.longitudeTCEGeoOrigin.objectsTCEGeoOrigin.postal_codeTCEGeoOrigin.salutationTCEGeoOrigin.salutation_idTCEGeoOrigin.streetTCEGeoOrigin.tceTCEGeoOrigin.tce_id
TCEGeoPointTCEGeoPoint.MetaTCEGeoPoint.additional_linesTCEGeoPoint.cityTCEGeoPoint.companyTCEGeoPoint.countryTCEGeoPoint.country_idTCEGeoPoint.first_nameTCEGeoPoint.house_noTCEGeoPoint.idTCEGeoPoint.last_nameTCEGeoPoint.latitudeTCEGeoPoint.longitudeTCEGeoPoint.postal_codeTCEGeoPoint.salutationTCEGeoPoint.salutation_idTCEGeoPoint.street
TCEGeoPointManagerTCEManagerTCEManagerPrefetchedTransportChainTransportChain.DoesNotExistTransportChain.EXPIRE_DOCUMENT_ONTransportChain.MultipleObjectsReturnedTransportChain.accept()TransportChain.booking_dateTransportChain.consigneeTransportChain.consignee_idTransportChain.consignorTransportChain.consignor_idTransportChain.copy()TransportChain.default_document_expiry()TransportChain.delete()TransportChain.documentsTransportChain.elementsTransportChain.elements_ordered()TransportChain.freight_itemsTransportChain.freight_items_ordered()TransportChain.get_absolute_url()TransportChain.get_incoterms_display()TransportChain.get_next_by_booking_date()TransportChain.get_previous_by_booking_date()TransportChain.get_status_display()TransportChain.get_transport_type_display()TransportChain.idTransportChain.incotermsTransportChain.is_status()TransportChain.lcc_valuesTransportChain.next_element_position()TransportChain.objectsTransportChain.post_emission()TransportChain.prefetched_objectsTransportChain.referenceTransportChain.simulationTransportChain.statusTransportChain.sum_weight()TransportChain.transport_type
TransportChainElementTransportChainElement.activity_distance_typeTransportChainElement.DoesNotExistTransportChainElement.MultipleObjectsReturnedTransportChainElement.activity_distanceTransportChainElement.activity_distance_parametersTransportChainElement.activity_distance_typeTransportChainElement.activity_distance_unitTransportChainElement.activity_distance_unit_idTransportChainElement.activity_distance_valueTransportChainElement.chainTransportChainElement.chain_idTransportChainElement.distance_adjustment_factorTransportChainElement.epitypeTransportChainElement.geo_destinationTransportChainElement.geo_originTransportChainElement.get_absolute_url()TransportChainElement.get_activity_distance_type_display()TransportChainElement.get_epitype_display()TransportChainElement.idTransportChainElement.objectsTransportChainElement.operationTransportChainElement.operation_idTransportChainElement.positionTransportChainElement.prefetched_objectsTransportChainElement.show_distance_adjustment_factorTransportChainElement.show_geo_points
TransportChainManagerTransportChainManagerPrefetchedTransportChainTypeTransportChainVisitorTransportLCCValueTransportLCCValue.DoesNotExistTransportLCCValue.MultipleObjectsReturnedTransportLCCValue.chainTransportLCCValue.chain_idTransportLCCValue.emission_unitTransportLCCValue.emission_unit_idTransportLCCValue.get_absolute_url()TransportLCCValue.idTransportLCCValue.lifecycle_categoryTransportLCCValue.lifecycle_category_idTransportLCCValue.operation_emission_valueTransportLCCValue.total_emission_value
- ferrosoft.apps.emiflow.models.treatment module
AllocationAllocationMethodMaterialAllocationTreatmentTreatment.DoesNotExistTreatment.MultipleObjectsReturnedTreatment.booking_dateTreatment.copy_lines_from_operation()Treatment.get_absolute_url()Treatment.get_next_by_booking_date()Treatment.get_previous_by_booking_date()Treatment.get_status_display()Treatment.idTreatment.inputsTreatment.is_status()Treatment.lcc_valuesTreatment.objectsTreatment.operationTreatment.operation_idTreatment.outputsTreatment.post_emission()Treatment.referenceTreatment.status
TreatmentInputLineTreatmentInputLine.DoesNotExistTreatmentInputLine.MultipleObjectsReturnedTreatmentInputLine.get_absolute_url()TreatmentInputLine.idTreatmentInputLine.materialTreatmentInputLine.material_idTreatmentInputLine.objectsTreatmentInputLine.treatmentTreatmentInputLine.treatment_idTreatmentInputLine.weight_unitTreatmentInputLine.weight_unit_idTreatmentInputLine.weight_value
TreatmentInputLineManagerTreatmentLCCValueTreatmentLCCValue.DoesNotExistTreatmentLCCValue.MultipleObjectsReturnedTreatmentLCCValue.emission_unitTreatmentLCCValue.emission_unit_idTreatmentLCCValue.get_absolute_url()TreatmentLCCValue.idTreatmentLCCValue.lifecycle_categoryTreatmentLCCValue.lifecycle_category_idTreatmentLCCValue.operation_emission_valueTreatmentLCCValue.total_emission_valueTreatmentLCCValue.treatmentTreatmentLCCValue.treatment_id
TreatmentLineTreatmentLineManagerTreatmentLineQuerySetTreatmentManagerTreatmentOperationTreatmentOperation.DoesNotExistTreatmentOperation.MultipleObjectsReturnedTreatmentOperation.allocation_methodTreatmentOperation.certification_errors()TreatmentOperation.certify()TreatmentOperation.emission_intensityTreatmentOperation.emission_intensity_idTreatmentOperation.emitterTreatmentOperation.emitter_idTreatmentOperation.energy_carrierTreatmentOperation.energy_carrier_idTreatmentOperation.get_absolute_url()TreatmentOperation.get_allocation_method_display()TreatmentOperation.get_output_allocation()TreatmentOperation.get_status_display()TreatmentOperation.idTreatmentOperation.inputsTreatmentOperation.is_status()TreatmentOperation.nameTreatmentOperation.objectsTreatmentOperation.outputsTreatmentOperation.referenceTreatmentOperation.reopen()TreatmentOperation.statusTreatmentOperation.treatment_setTreatmentOperation.trigger_allocation()
TreatmentOperationInputLineTreatmentOperationInputLine.DoesNotExistTreatmentOperationInputLine.MultipleObjectsReturnedTreatmentOperationInputLine.get_absolute_url()TreatmentOperationInputLine.idTreatmentOperationInputLine.materialTreatmentOperationInputLine.material_idTreatmentOperationInputLine.objectsTreatmentOperationInputLine.operationTreatmentOperationInputLine.operation_idTreatmentOperationInputLine.weight_unitTreatmentOperationInputLine.weight_unit_idTreatmentOperationInputLine.weight_value
TreatmentOperationInputLineManagerTreatmentOperationManagerTreatmentOperationOutputLineTreatmentOperationOutputLine.DoesNotExistTreatmentOperationOutputLine.MultipleObjectsReturnedTreatmentOperationOutputLine.allocated_fractionTreatmentOperationOutputLine.get_absolute_url()TreatmentOperationOutputLine.idTreatmentOperationOutputLine.materialTreatmentOperationOutputLine.material_idTreatmentOperationOutputLine.objectsTreatmentOperationOutputLine.operationTreatmentOperationOutputLine.operation_idTreatmentOperationOutputLine.weight_unitTreatmentOperationOutputLine.weight_unit_idTreatmentOperationOutputLine.weight_value
TreatmentOperationOutputLineManagerTreatmentOperationStatusTreatmentOutputLineTreatmentOutputLine.DoesNotExistTreatmentOutputLine.MultipleObjectsReturnedTreatmentOutputLine.allocated_fractionTreatmentOutputLine.get_absolute_url()TreatmentOutputLine.idTreatmentOutputLine.materialTreatmentOutputLine.material_idTreatmentOutputLine.objectsTreatmentOutputLine.treatmentTreatmentOutputLine.treatment_idTreatmentOutputLine.weight_unitTreatmentOutputLine.weight_unit_idTreatmentOutputLine.weight_value
TreatmentOutputLineManagerTreatmentStatus
- ferrosoft.apps.emiflow.services package
- Subpackages
- Submodules
- ferrosoft.apps.emiflow.services.builder module
BuilderOfBuildersBulkCreatorFreightItemBuilderGeoPointBuilderMaterialBuilderModelBuilderTransportChainBuilderTransportChainBuilder.add_bulk()TransportChainBuilder.add_element()TransportChainBuilder.add_freight_item()TransportChainBuilder.booking_date()TransportChainBuilder.consignee()TransportChainBuilder.consignor()TransportChainBuilder.incoterms()TransportChainBuilder.new()TransportChainBuilder.reference()TransportChainBuilder.save()TransportChainBuilder.simulation()TransportChainBuilder.status()TransportChainBuilder.transport_type()
TransportChainElementBuilderTransportChainElementBuilder.activity_distance()TransportChainElementBuilder.activity_distance_type()TransportChainElementBuilder.add_bulk()TransportChainElementBuilder.add_geo_destination()TransportChainElementBuilder.add_geo_origin()TransportChainElementBuilder.chain()TransportChainElementBuilder.distance_adjustment_factor()TransportChainElementBuilder.epitype()TransportChainElementBuilder.new()TransportChainElementBuilder.operation()TransportChainElementBuilder.position()TransportChainElementBuilder.save()
resolve_model()
- ferrosoft.apps.emiflow.services.emissions module
EmissionIntensityCalculatorEmissionIntensityInputsEmissionResultEmissionResultMixinEmissionServiceErrorIntensityCalculationErrorTransportActivityGroupsTransportBookingServiceTransportChainCalculatorTransportChainElementResultTransportChainResultTransportChainResult.add_activity_distance()TransportChainResult.chainTransportChainResult.distanceTransportChainResult.emission_intensity()TransportChainResult.emission_intensity_operationTransportChainResult.emission_intensity_totalTransportChainResult.emissionsTransportChainResult.tce_resultsTransportChainResult.transport_activityTransportChainResult.transport_activity_sum()TransportChainResult.weight
TransportChainSetResultTransportChainVisitorImportCallback
- ferrosoft.apps.emiflow.services.geographic module
- ferrosoft.apps.emiflow.services.pcf module
- ferrosoft.apps.emiflow.services.reporting module
- ferrosoft.apps.emiflow.services.session module
- ferrosoft.apps.emiflow.services.tonnage module
- ferrosoft.apps.emiflow.services.treatment module
- ferrosoft.apps.emiflow.services.update module
- ferrosoft.apps.emiflow.services.vehicle module
- ferrosoft.apps.emiflow.services.visitor module
- ferrosoft.apps.emiflow.templatetags package
- ferrosoft.apps.emiflow.views package
- Submodules
- ferrosoft.apps.emiflow.views.file_import module
- ferrosoft.apps.emiflow.views.index module
- ferrosoft.apps.emiflow.views.intensity module
EmissionIntensityCreateViewEmissionIntensityCreateView.activity_appEmissionIntensityCreateView.activity_titleEmissionIntensityCreateView.cancel_viewEmissionIntensityCreateView.form_classEmissionIntensityCreateView.get_context_data()EmissionIntensityCreateView.get_form_kwargs()EmissionIntensityCreateView.get_success_url()EmissionIntensityCreateView.help_topicEmissionIntensityCreateView.modelEmissionIntensityCreateView.permission_requiredEmissionIntensityCreateView.template_name
EmissionIntensityUpdateViewEmissionIntensityUpdateView.activity_appEmissionIntensityUpdateView.activity_titleEmissionIntensityUpdateView.cancel_viewEmissionIntensityUpdateView.create_viewEmissionIntensityUpdateView.delete_viewEmissionIntensityUpdateView.form_classEmissionIntensityUpdateView.get_context_data()EmissionIntensityUpdateView.get_form_kwargs()EmissionIntensityUpdateView.get_success_url()EmissionIntensityUpdateView.help_topicEmissionIntensityUpdateView.modelEmissionIntensityUpdateView.permission_requiredEmissionIntensityUpdateView.pluralEmissionIntensityUpdateView.read_viewEmissionIntensityUpdateView.related_links_defaultEmissionIntensityUpdateView.singularEmissionIntensityUpdateView.template_name
intensity_create_url()
- ferrosoft.apps.emiflow.views.lifecycle module
LCCValueCreateLifecycleCategoryCreateLifecycleCategoryDeleteLifecycleCategoryListLifecycleCategoryUpdateLifecycleCategoryUpdate.activity_appLifecycleCategoryUpdate.activity_titleLifecycleCategoryUpdate.cancel_viewLifecycleCategoryUpdate.create_viewLifecycleCategoryUpdate.delete_view()LifecycleCategoryUpdate.fieldsLifecycleCategoryUpdate.help_topicLifecycleCategoryUpdate.modelLifecycleCategoryUpdate.permission_requiredLifecycleCategoryUpdate.pluralLifecycleCategoryUpdate.read_viewLifecycleCategoryUpdate.singular
TransportLCCValueCreateTransportLCCValueCreate.activity_appTransportLCCValueCreate.activity_titleTransportLCCValueCreate.cancel_viewTransportLCCValueCreate.form_classTransportLCCValueCreate.get_form_kwargs()TransportLCCValueCreate.get_success_url()TransportLCCValueCreate.help_topicTransportLCCValueCreate.modelTransportLCCValueCreate.parent_modelTransportLCCValueCreate.permission_required
TransportLCCValueDeleteTransportLCCValueUpdateTransportLCCValueUpdate.activity_appTransportLCCValueUpdate.activity_titleTransportLCCValueUpdate.cancel_view()TransportLCCValueUpdate.create_viewTransportLCCValueUpdate.delete_viewTransportLCCValueUpdate.form_classTransportLCCValueUpdate.get_success_url()TransportLCCValueUpdate.help_topicTransportLCCValueUpdate.modelTransportLCCValueUpdate.permission_requiredTransportLCCValueUpdate.pluralTransportLCCValueUpdate.read_viewTransportLCCValueUpdate.related_links_defaultTransportLCCValueUpdate.singular
TreatmentLCCValueCreateTreatmentLCCValueCreate.activity_appTreatmentLCCValueCreate.activity_titleTreatmentLCCValueCreate.cancel_viewTreatmentLCCValueCreate.form_classTreatmentLCCValueCreate.get_form_kwargs()TreatmentLCCValueCreate.get_success_url()TreatmentLCCValueCreate.help_topicTreatmentLCCValueCreate.modelTreatmentLCCValueCreate.parent_modelTreatmentLCCValueCreate.permission_required
TreatmentLCCValueDeleteTreatmentLCCValueUpdateTreatmentLCCValueUpdate.activity_appTreatmentLCCValueUpdate.activity_titleTreatmentLCCValueUpdate.cancel_view()TreatmentLCCValueUpdate.create_viewTreatmentLCCValueUpdate.delete_viewTreatmentLCCValueUpdate.form_classTreatmentLCCValueUpdate.get_success_url()TreatmentLCCValueUpdate.help_topicTreatmentLCCValueUpdate.modelTreatmentLCCValueUpdate.permission_requiredTreatmentLCCValueUpdate.pluralTreatmentLCCValueUpdate.read_viewTreatmentLCCValueUpdate.related_links_defaultTreatmentLCCValueUpdate.singular
- ferrosoft.apps.emiflow.views.reporting module
ReportCreateReportDeleteReportReadReportRead.activity_appReportRead.activity_titleReportRead.create_viewReportRead.feature_requiredReportRead.filterset_classReportRead.help_topicReportRead.modelReportRead.orderingReportRead.permission_requiredReportRead.pluralReportRead.singularReportRead.table_classReportRead.template_name
ReportSelectionViewReportSelectionView.activity_appReportSelectionView.activity_titleReportSelectionView.enable_filter_displayReportSelectionView.feature_requiredReportSelectionView.filterset_classReportSelectionView.get()ReportSelectionView.get_context_data()ReportSelectionView.get_filterset()ReportSelectionView.get_queryset()ReportSelectionView.get_report()ReportSelectionView.help_topicReportSelectionView.modelReportSelectionView.orderingReportSelectionView.permission_requiredReportSelectionView.pluralReportSelectionView.post()ReportSelectionView.singularReportSelectionView.table_classReportSelectionView.template_name
ReportTemplateCreateReportTemplateCreate.activity_appReportTemplateCreate.activity_titleReportTemplateCreate.cancel_viewReportTemplateCreate.feature_requiredReportTemplateCreate.form_classReportTemplateCreate.form_templateReportTemplateCreate.get_form_kwargs()ReportTemplateCreate.help_topicReportTemplateCreate.modelReportTemplateCreate.multipart_formReportTemplateCreate.permission_requiredReportTemplateCreate.template_name
ReportTemplateDeleteReportTemplateIndexReportTemplateIndex.activity_appReportTemplateIndex.activity_titleReportTemplateIndex.create_viewReportTemplateIndex.feature_requiredReportTemplateIndex.help_topicReportTemplateIndex.modelReportTemplateIndex.orderingReportTemplateIndex.permission_requiredReportTemplateIndex.pluralReportTemplateIndex.singular
ReportTemplateUpdateReportTemplateUpdate.activity_appReportTemplateUpdate.activity_titleReportTemplateUpdate.cancel_viewReportTemplateUpdate.create_viewReportTemplateUpdate.delete_viewReportTemplateUpdate.feature_requiredReportTemplateUpdate.form_classReportTemplateUpdate.form_templateReportTemplateUpdate.get_form_kwargs()ReportTemplateUpdate.help_topicReportTemplateUpdate.modelReportTemplateUpdate.multipart_formReportTemplateUpdate.permission_requiredReportTemplateUpdate.pluralReportTemplateUpdate.read_viewReportTemplateUpdate.singularReportTemplateUpdate.template_name
ReportUpdateReportUpdate.activity_appReportUpdate.activity_titleReportUpdate.cancel_viewReportUpdate.create_viewReportUpdate.delete_viewReportUpdate.feature_requiredReportUpdate.form_classReportUpdate.get_context_data()ReportUpdate.help_topicReportUpdate.modelReportUpdate.permission_requiredReportUpdate.pluralReportUpdate.read_viewReportUpdate.related_links()ReportUpdate.singularReportUpdate.template_name
report_document()report_document_output()report_download()run_document_generator()
- ferrosoft.apps.emiflow.views.settings module
BusinessCentralSettingsUpdateBusinessCentralSettingsUpdate.activity_appBusinessCentralSettingsUpdate.activity_titleBusinessCentralSettingsUpdate.cancel_viewBusinessCentralSettingsUpdate.create_viewBusinessCentralSettingsUpdate.delete_viewBusinessCentralSettingsUpdate.form_classBusinessCentralSettingsUpdate.get_object()BusinessCentralSettingsUpdate.modelBusinessCentralSettingsUpdate.permission_requiredBusinessCentralSettingsUpdate.pluralBusinessCentralSettingsUpdate.read_viewBusinessCentralSettingsUpdate.singular
EmissionFactorCreateViewEmissionFactorCreateView.activity_appEmissionFactorCreateView.activity_titleEmissionFactorCreateView.cancel_view()EmissionFactorCreateView.form_classEmissionFactorCreateView.get_form_kwargs()EmissionFactorCreateView.modelEmissionFactorCreateView.parent_modelEmissionFactorCreateView.permission_required
EmissionFactorDeleteViewEmissionFactorUpdateViewEmissionFactorUpdateView.activity_appEmissionFactorUpdateView.activity_titleEmissionFactorUpdateView.cancel_view()EmissionFactorUpdateView.create_viewEmissionFactorUpdateView.delete_viewEmissionFactorUpdateView.form_classEmissionFactorUpdateView.get_success_url()EmissionFactorUpdateView.modelEmissionFactorUpdateView.permission_requiredEmissionFactorUpdateView.pluralEmissionFactorUpdateView.read_viewEmissionFactorUpdateView.related_links_defaultEmissionFactorUpdateView.singular
EmitterCopyViewEmitterCreateViewEmitterDeleteViewEmitterTableViewEmitterTableView.activity_appEmitterTableView.activity_titleEmitterTableView.create_viewEmitterTableView.filterset_classEmitterTableView.help_topicEmitterTableView.modelEmitterTableView.orderingEmitterTableView.permission_requiredEmitterTableView.pluralEmitterTableView.singularEmitterTableView.table_class
EmitterUpdateViewEmitterUpdateView.activity_appEmitterUpdateView.activity_titleEmitterUpdateView.cancel_viewEmitterUpdateView.copy_viewEmitterUpdateView.create_viewEmitterUpdateView.delete_viewEmitterUpdateView.form_classEmitterUpdateView.get_context_data()EmitterUpdateView.help_topicEmitterUpdateView.modelEmitterUpdateView.permission_requiredEmitterUpdateView.pluralEmitterUpdateView.read_viewEmitterUpdateView.related_links()EmitterUpdateView.singularEmitterUpdateView.template_name
EnergyCarrierCopyViewEnergyCarrierCreateViewEnergyCarrierDeleteViewEnergyCarrierTableViewEnergyCarrierTableView.activity_appEnergyCarrierTableView.activity_titleEnergyCarrierTableView.create_viewEnergyCarrierTableView.filterset_classEnergyCarrierTableView.modelEnergyCarrierTableView.orderingEnergyCarrierTableView.permission_requiredEnergyCarrierTableView.pluralEnergyCarrierTableView.singularEnergyCarrierTableView.table_class
EnergyCarrierUpdateViewEnergyCarrierUpdateView.activity_appEnergyCarrierUpdateView.activity_titleEnergyCarrierUpdateView.cancel_viewEnergyCarrierUpdateView.copy_viewEnergyCarrierUpdateView.create_viewEnergyCarrierUpdateView.delete_viewEnergyCarrierUpdateView.form_classEnergyCarrierUpdateView.get_context_data()EnergyCarrierUpdateView.modelEnergyCarrierUpdateView.permission_requiredEnergyCarrierUpdateView.pluralEnergyCarrierUpdateView.read_viewEnergyCarrierUpdateView.singularEnergyCarrierUpdateView.template_name
SettingsIndexSettingsPagesettings_transport_defaults()
- ferrosoft.apps.emiflow.views.transport module
FreightItemCreateFreightItemDeleteFreightItemUpdateFreightItemUpdate.activity_appFreightItemUpdate.activity_titleFreightItemUpdate.cancel_viewFreightItemUpdate.create_viewFreightItemUpdate.delete_viewFreightItemUpdate.form_classFreightItemUpdate.get_success_url()FreightItemUpdate.help_topicFreightItemUpdate.modelFreightItemUpdate.permission_requiredFreightItemUpdate.pluralFreightItemUpdate.read_viewFreightItemUpdate.related_links_defaultFreightItemUpdate.singular
TransportChainElementCreateTransportChainElementCreate.activity_appTransportChainElementCreate.activity_titleTransportChainElementCreate.cancel_view()TransportChainElementCreate.enable_missing_parentTransportChainElementCreate.epitype_queryTransportChainElementCreate.form_classTransportChainElementCreate.form_valid()TransportChainElementCreate.get_context_data()TransportChainElementCreate.get_form_kwargs()TransportChainElementCreate.get_template_names()TransportChainElementCreate.help_topicTransportChainElementCreate.modelTransportChainElementCreate.parent_modelTransportChainElementCreate.permission_required
TransportChainElementDeleteTransportChainElementUpdateTransportChainElementUpdate.activity_appTransportChainElementUpdate.activity_titleTransportChainElementUpdate.cancel_view()TransportChainElementUpdate.create_viewTransportChainElementUpdate.delete_viewTransportChainElementUpdate.form_classTransportChainElementUpdate.form_valid()TransportChainElementUpdate.get_context_data()TransportChainElementUpdate.get_success_url()TransportChainElementUpdate.get_template_names()TransportChainElementUpdate.help_topicTransportChainElementUpdate.modelTransportChainElementUpdate.permission_requiredTransportChainElementUpdate.pluralTransportChainElementUpdate.read_viewTransportChainElementUpdate.related_links_defaultTransportChainElementUpdate.singular
TransportCreateTransportDeleteTransportIndexViewTransportIndexView.activity_appTransportIndexView.activity_titleTransportIndexView.create_viewTransportIndexView.filterset_classTransportIndexView.get_context_data()TransportIndexView.help_topicTransportIndexView.modelTransportIndexView.orderingTransportIndexView.permission_requiredTransportIndexView.pluralTransportIndexView.querysetTransportIndexView.singularTransportIndexView.table_classTransportIndexView.template_name
TransportOperationCopyTransportOperationCreateTransportOperationCreate.activity_appTransportOperationCreate.activity_titleTransportOperationCreate.cancel_viewTransportOperationCreate.form_classTransportOperationCreate.get_form_kwargs()TransportOperationCreate.help_topicTransportOperationCreate.modelTransportOperationCreate.permission_requiredTransportOperationCreate.related_links()
TransportOperationDeleteTransportOperationReadTransportOperationRead.activity_appTransportOperationRead.activity_titleTransportOperationRead.create_viewTransportOperationRead.filterset_classTransportOperationRead.help_topicTransportOperationRead.modelTransportOperationRead.orderingTransportOperationRead.permission_requiredTransportOperationRead.pluralTransportOperationRead.singularTransportOperationRead.table_class
TransportOperationUpdateTransportOperationUpdate.activity_appTransportOperationUpdate.activity_titleTransportOperationUpdate.cancel_viewTransportOperationUpdate.copy_viewTransportOperationUpdate.create_viewTransportOperationUpdate.delete_viewTransportOperationUpdate.form_classTransportOperationUpdate.get_context_data()TransportOperationUpdate.help_topicTransportOperationUpdate.modelTransportOperationUpdate.permission_requiredTransportOperationUpdate.pluralTransportOperationUpdate.read_viewTransportOperationUpdate.related_links()TransportOperationUpdate.singularTransportOperationUpdate.template_name
TransportUpdateTransportUpdate.TransportDetailViewTransportUpdate.activity_appTransportUpdate.activity_titleTransportUpdate.cancel_viewTransportUpdate.create_viewTransportUpdate.delete_viewTransportUpdate.form_classTransportUpdate.form_templateTransportUpdate.get()TransportUpdate.get_context_data()TransportUpdate.get_queryset()TransportUpdate.help_topicTransportUpdate.modelTransportUpdate.permission_requiredTransportUpdate.pluralTransportUpdate.post()TransportUpdate.read_viewTransportUpdate.singularTransportUpdate.template_name
- ferrosoft.apps.emiflow.views.treatment module
AllocationEditViewTreatmentCreateTreatmentDeleteTreatmentInputLineUpdateTreatmentInputLineUpdate.activity_appTreatmentInputLineUpdate.activity_titleTreatmentInputLineUpdate.cancel_view()TreatmentInputLineUpdate.create_viewTreatmentInputLineUpdate.delete_viewTreatmentInputLineUpdate.form_classTreatmentInputLineUpdate.get_success_url()TreatmentInputLineUpdate.help_topicTreatmentInputLineUpdate.modelTreatmentInputLineUpdate.permission_requiredTreatmentInputLineUpdate.pluralTreatmentInputLineUpdate.read_viewTreatmentInputLineUpdate.related_links_defaultTreatmentInputLineUpdate.singular
TreatmentOperationCopyTreatmentOperationCreateTreatmentOperationCreate.activity_appTreatmentOperationCreate.activity_titleTreatmentOperationCreate.cancel_viewTreatmentOperationCreate.form_classTreatmentOperationCreate.form_templateTreatmentOperationCreate.get_form_kwargs()TreatmentOperationCreate.help_topicTreatmentOperationCreate.modelTreatmentOperationCreate.permission_requiredTreatmentOperationCreate.related_links()
TreatmentOperationDeleteTreatmentOperationInputLineCreateTreatmentOperationInputLineCreate.activity_appTreatmentOperationInputLineCreate.activity_titleTreatmentOperationInputLineCreate.cancel_view()TreatmentOperationInputLineCreate.form_classTreatmentOperationInputLineCreate.get_form_kwargs()TreatmentOperationInputLineCreate.get_success_url()TreatmentOperationInputLineCreate.help_topicTreatmentOperationInputLineCreate.modelTreatmentOperationInputLineCreate.permission_required
TreatmentOperationInputLineDeleteTreatmentOperationInputLineDelete.activity_appTreatmentOperationInputLineDelete.activity_titleTreatmentOperationInputLineDelete.cancel_view()TreatmentOperationInputLineDelete.get_success_url()TreatmentOperationInputLineDelete.help_topicTreatmentOperationInputLineDelete.modelTreatmentOperationInputLineDelete.permission_required
TreatmentOperationInputLineUpdateTreatmentOperationInputLineUpdate.activity_appTreatmentOperationInputLineUpdate.activity_titleTreatmentOperationInputLineUpdate.cancel_view()TreatmentOperationInputLineUpdate.create_viewTreatmentOperationInputLineUpdate.delete_viewTreatmentOperationInputLineUpdate.form_classTreatmentOperationInputLineUpdate.get_success_url()TreatmentOperationInputLineUpdate.help_topicTreatmentOperationInputLineUpdate.modelTreatmentOperationInputLineUpdate.permission_requiredTreatmentOperationInputLineUpdate.pluralTreatmentOperationInputLineUpdate.read_viewTreatmentOperationInputLineUpdate.related_links_defaultTreatmentOperationInputLineUpdate.singular
TreatmentOperationOutputLineCreateTreatmentOperationOutputLineCreate.activity_appTreatmentOperationOutputLineCreate.activity_titleTreatmentOperationOutputLineCreate.cancel_view()TreatmentOperationOutputLineCreate.form_classTreatmentOperationOutputLineCreate.get_form_kwargs()TreatmentOperationOutputLineCreate.get_success_url()TreatmentOperationOutputLineCreate.help_topicTreatmentOperationOutputLineCreate.modelTreatmentOperationOutputLineCreate.permission_required
TreatmentOperationOutputLineDeleteTreatmentOperationOutputLineDelete.activity_appTreatmentOperationOutputLineDelete.activity_titleTreatmentOperationOutputLineDelete.cancel_view()TreatmentOperationOutputLineDelete.get_success_url()TreatmentOperationOutputLineDelete.help_topicTreatmentOperationOutputLineDelete.modelTreatmentOperationOutputLineDelete.permission_required
TreatmentOperationOutputLineUpdateTreatmentOperationOutputLineUpdate.activity_appTreatmentOperationOutputLineUpdate.activity_titleTreatmentOperationOutputLineUpdate.cancel_view()TreatmentOperationOutputLineUpdate.create_viewTreatmentOperationOutputLineUpdate.delete_viewTreatmentOperationOutputLineUpdate.form_classTreatmentOperationOutputLineUpdate.get_success_url()TreatmentOperationOutputLineUpdate.help_topicTreatmentOperationOutputLineUpdate.modelTreatmentOperationOutputLineUpdate.permission_requiredTreatmentOperationOutputLineUpdate.pluralTreatmentOperationOutputLineUpdate.read_viewTreatmentOperationOutputLineUpdate.related_links_defaultTreatmentOperationOutputLineUpdate.singular
TreatmentOperationReadTreatmentOperationRead.activity_appTreatmentOperationRead.activity_titleTreatmentOperationRead.create_viewTreatmentOperationRead.filterset_classTreatmentOperationRead.help_topicTreatmentOperationRead.modelTreatmentOperationRead.orderingTreatmentOperationRead.permission_requiredTreatmentOperationRead.pluralTreatmentOperationRead.singularTreatmentOperationRead.table_class
TreatmentOperationUpdateTreatmentOperationUpdate.activity_appTreatmentOperationUpdate.activity_titleTreatmentOperationUpdate.cancel_viewTreatmentOperationUpdate.copy_viewTreatmentOperationUpdate.create_viewTreatmentOperationUpdate.delete_viewTreatmentOperationUpdate.form_classTreatmentOperationUpdate.form_templateTreatmentOperationUpdate.get_context_data()TreatmentOperationUpdate.help_topicTreatmentOperationUpdate.modelTreatmentOperationUpdate.permission_requiredTreatmentOperationUpdate.pluralTreatmentOperationUpdate.post()TreatmentOperationUpdate.read_viewTreatmentOperationUpdate.related_links()TreatmentOperationUpdate.singularTreatmentOperationUpdate.template_name
TreatmentOutputLineUpdateTreatmentOutputLineUpdate.activity_appTreatmentOutputLineUpdate.activity_titleTreatmentOutputLineUpdate.cancel_view()TreatmentOutputLineUpdate.create_viewTreatmentOutputLineUpdate.delete_viewTreatmentOutputLineUpdate.form_classTreatmentOutputLineUpdate.get_success_url()TreatmentOutputLineUpdate.help_topicTreatmentOutputLineUpdate.modelTreatmentOutputLineUpdate.permission_requiredTreatmentOutputLineUpdate.pluralTreatmentOutputLineUpdate.read_viewTreatmentOutputLineUpdate.related_links_defaultTreatmentOutputLineUpdate.singular
TreatmentReadTreatmentRead.activity_appTreatmentRead.activity_titleTreatmentRead.create_viewTreatmentRead.filterset_classTreatmentRead.help_topicTreatmentRead.modelTreatmentRead.orderingTreatmentRead.permission_requiredTreatmentRead.pluralTreatmentRead.singularTreatmentRead.table_classTreatmentRead.template_name
TreatmentUpdateTreatmentUpdate.activity_appTreatmentUpdate.activity_titleTreatmentUpdate.cancel_viewTreatmentUpdate.create_viewTreatmentUpdate.delete_viewTreatmentUpdate.form_classTreatmentUpdate.get_context_data()TreatmentUpdate.help_topicTreatmentUpdate.modelTreatmentUpdate.permission_requiredTreatmentUpdate.pluralTreatmentUpdate.post()TreatmentUpdate.read_viewTreatmentUpdate.singularTreatmentUpdate.template_name
Submodules¶
ferrosoft.apps.emiflow.admin module¶
ferrosoft.apps.emiflow.apps module¶
Django application configuration for the emiflow app.
Wires up settings-menu entries (under the Emissions category) and hooks emiflow updater into ferrobase_update management command.
- class ferrosoft.apps.emiflow.apps.EmiflowConfig(app_name, app_module)[source]¶
Bases:
AppConfigDjango AppConfig for the emiflow application.
Registers the emiflow settings menu items with the shared
SettingsMenuRegistryand hooks emiflow updater into ferrobase_update management command.- SETTINGS_MENU = [MenuItem(display_name='Emitters', view_name='emiflow:emitter_index', permissions=['ferrobase.view_material'], category_name='Emissions', icon=None), MenuItem(display_name='Transport Defaults', view_name='emiflow:settings_transport_defaults', permissions=['emiflow.view_transportchaindefaults'], category_name='Emissions', icon=None), MenuItem(display_name='Lifecycle Categories', view_name='emiflow:lifecyclecategory_index', permissions=['emiflow.view_lifecyclecategory'], category_name='Emissions', icon=None), MenuItem(display_name='Energy Carriers', view_name='emiflow:energycarrier_index', permissions=['emiflow.view_energycarrier'], category_name='Emissions', icon=None)]¶
Menu items contributed to the Emissions category of the settings navigation. Each item is gated by the listed model permissions.
- default_auto_field = 'django.db.models.BigAutoField'¶
- name = 'ferrosoft.apps.emiflow'¶
- ready()[source]¶
Hook the emiflow updater into ferrobase_update and contribute settings menu entries.
- verbose_name = 'Emiflow'¶
ferrosoft.apps.emiflow.filter module¶
django-filter FilterSet definitions for emiflow list views.
Each FilterSet here backs a corresponding list
view: it parses the request query string, validates it against the model
fields declared in Meta, and produces a filtered queryset plus a bound
form that templates render as the filter sidebar. Custom method filters
support filtering by related-object primary key, by membership in a
PostgreSQL array column, and by IN clauses for multi-select widgets.
- class ferrosoft.apps.emiflow.filter.BusinessPartnerFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter business partners by name, street, city, or postal code prefix.
- class Meta[source]¶
Bases:
object- fields = {'city': ['icontains'], 'name': ['icontains'], 'postal_code': ['startswith'], 'street': ['icontains']}¶
- model¶
alias of
BusinessPartner
- base_filters = {'city__icontains': <django_filters.filters.CharFilter object>, 'name__icontains': <django_filters.filters.CharFilter object>, 'postal_code__startswith': <django_filters.filters.CharFilter object>, 'street__icontains': <django_filters.filters.CharFilter object>}¶
- declared_filters = {}¶
- class ferrosoft.apps.emiflow.filter.EmissionBookingRecordFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter emission booking records by lifecycle category, booking-date range, material, and partners.
Booking records carry materials in a PostgreSQL array column, so
material_iduses_filter_by_pk_array()rather than a normal foreign-key lookup. Consignor and consignee filters exclude partners with an empty name.- class Meta[source]¶
Bases:
object- fields = {'entity_reference': ['startswith']}¶
- model¶
alias of
EmissionBookingRecord
- async classmethod aget_user_filtered(user_filter, request=None)[source]¶
Async wrapper around
get_user_filtered()for ASGI views.
- base_filters = {'booking_date_from': <django_filters.filters.DateFilter object>, 'booking_date_until': <django_filters.filters.DateFilter object>, 'entity_reference__startswith': <django_filters.filters.CharFilter object>, 'incoming_partner_id': <django_filters.filters.ModelChoiceFilter object>, 'lifecycle_category': <django_filters.filters.ModelMultipleChoiceFilter object>, 'material_id': <django_filters.filters.ModelChoiceFilter object>, 'outgoing_partner_id': <django_filters.filters.ModelChoiceFilter object>}¶
- declared_filters = {'booking_date_from': <django_filters.filters.DateFilter object>, 'booking_date_until': <django_filters.filters.DateFilter object>, 'incoming_partner_id': <django_filters.filters.ModelChoiceFilter object>, 'lifecycle_category': <django_filters.filters.ModelMultipleChoiceFilter object>, 'material_id': <django_filters.filters.ModelChoiceFilter object>, 'outgoing_partner_id': <django_filters.filters.ModelChoiceFilter object>}¶
- classmethod get_user_filtered(user_filter, request=None)[source]¶
Apply a persisted report filter to
EmissionBookingRecord.Reports persist the filter query string the user originally configured. This method re-applies that query string to produce the same record set later. An empty
user_filterreturns no records, forcing the user to select filters before a report is generated.- Parameters:
- Returns:
The filtered, ordered queryset and the bound filter instance.
- Return type:
tuple[QuerySet, EmissionBookingRecordFilter]
- class ferrosoft.apps.emiflow.filter.EmissionFactorFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter emission factors by energy carrier name substring.
- class Meta[source]¶
Bases:
object- fields = {'energy_carrier__name': ['icontains']}¶
- model¶
alias of
EmissionFactor
- base_filters = {'energy_carrier__name__icontains': <django_filters.filters.CharFilter object>}¶
- declared_filters = {}¶
- class ferrosoft.apps.emiflow.filter.EmitterFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter emitters by name substring, catalog, type, vehicle type, or energy carrier.
- class Meta[source]¶
Bases:
object- fields = {'catalog': ['exact'], 'energy_carrier': ['exact'], 'epitype': ['exact'], 'name': ['icontains'], 'vehicle_type': ['exact']}¶
- base_filters = {'catalog': <django_filters.filters.ModelChoiceFilter object>, 'energy_carrier': <django_filters.filters.ModelChoiceFilter object>, 'epitype': <django_filters.filters.ChoiceFilter object>, 'name__icontains': <django_filters.filters.CharFilter object>, 'vehicle_type': <django_filters.filters.ChoiceFilter object>}¶
- declared_filters = {}¶
- class ferrosoft.apps.emiflow.filter.EnergyCarrierFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter energy carriers by name substring or catalog.
- class Meta[source]¶
Bases:
object- fields = {'catalog': ['exact'], 'name': ['icontains']}¶
- model¶
alias of
EnergyCarrier
- base_filters = {'catalog': <django_filters.filters.ModelChoiceFilter object>, 'name__icontains': <django_filters.filters.CharFilter object>}¶
- declared_filters = {}¶
- class ferrosoft.apps.emiflow.filter.ReportFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter reports by reference prefix, name substring, type, or creation-time range.
- class Meta[source]¶
Bases:
object- fields = {'name': ['icontains'], 'reference': ['startswith'], 'type': ['exact']}¶
- base_filters = {'creation_time_from': <django_filters.filters.DateTimeFilter object>, 'creation_time_until': <django_filters.filters.DateTimeFilter object>, 'name__icontains': <django_filters.filters.CharFilter object>, 'reference__startswith': <django_filters.filters.CharFilter object>, 'type': <django_filters.filters.ChoiceFilter object>}¶
- declared_filters = {'creation_time_from': <django_filters.filters.DateTimeFilter object>, 'creation_time_until': <django_filters.filters.DateTimeFilter object>}¶
- class ferrosoft.apps.emiflow.filter.TransportChainFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter transport chains by type, reference, booking-date range, incoterms, and simulation flag.
- base_filters = {'booking_date_from': <django_filters.filters.DateFilter object>, 'booking_date_until': <django_filters.filters.DateFilter object>, 'incoterms': <django_filters.filters.ChoiceFilter object>, 'reference_like': <django_filters.filters.CharFilter object>, 'simulation': <django_filters.filters.BooleanFilter object>, 'transport_type': <django_filters.filters.ChoiceFilter object>}¶
- declared_filters = {'booking_date_from': <django_filters.filters.DateFilter object>, 'booking_date_until': <django_filters.filters.DateFilter object>, 'incoterms': <django_filters.filters.ChoiceFilter object>, 'reference_like': <django_filters.filters.CharFilter object>, 'simulation': <django_filters.filters.BooleanFilter object>, 'transport_type': <django_filters.filters.ChoiceFilter object>}¶
- class ferrosoft.apps.emiflow.filter.TransportOperationFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter transport operations by reference, name, activity type, emitter, or energy carrier.
- class Meta[source]¶
Bases:
object- fields = {'activity_type': ['exact'], 'emitter': ['exact'], 'energy_carrier': ['exact'], 'name': ['icontains'], 'reference': ['startswith']}¶
- model¶
alias of
TransportOperation
- base_filters = {'activity_type': <django_filters.filters.ChoiceFilter object>, 'emitter': <django_filters.filters.ModelChoiceFilter object>, 'energy_carrier': <django_filters.filters.ModelChoiceFilter object>, 'name__icontains': <django_filters.filters.CharFilter object>, 'reference__startswith': <django_filters.filters.CharFilter object>}¶
- declared_filters = {}¶
- class ferrosoft.apps.emiflow.filter.TreatmentFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter treatments by reference, related operation, related emitter/energy carrier, or booking-date range.
- class Meta[source]¶
Bases:
object- fields = {'operation__emitter__name': ['icontains'], 'operation__energy_carrier__name': ['icontains'], 'reference': ['startswith']}¶
- base_filters = {'booking_date_from': <django_filters.filters.DateFilter object>, 'booking_date_until': <django_filters.filters.DateFilter object>, 'operation': <django_filters.filters.ModelChoiceFilter object>, 'operation__emitter__name__icontains': <django_filters.filters.CharFilter object>, 'operation__energy_carrier__name__icontains': <django_filters.filters.CharFilter object>, 'reference__startswith': <django_filters.filters.CharFilter object>}¶
- declared_filters = {'booking_date_from': <django_filters.filters.DateFilter object>, 'booking_date_until': <django_filters.filters.DateFilter object>, 'operation': <django_filters.filters.ModelChoiceFilter object>}¶
- class ferrosoft.apps.emiflow.filter.TreatmentOperationFilter(data=None, queryset=None, *, request=None, prefix=None)[source]¶
Bases:
FilterSetFilter treatment operations by reference, name, status, emitter, or energy carrier.
- class Meta[source]¶
Bases:
object- fields = {'name': ['icontains'], 'reference': ['startswith'], 'status': ['exact']}¶
- model¶
alias of
TreatmentOperation
- base_filters = {'emitter': <django_filters.filters.ModelChoiceFilter object>, 'energy_carrier': <django_filters.filters.ModelChoiceFilter object>, 'name__icontains': <django_filters.filters.CharFilter object>, 'reference__startswith': <django_filters.filters.CharFilter object>, 'status': <django_filters.filters.ChoiceFilter object>}¶
- declared_filters = {'emitter': <django_filters.filters.ModelChoiceFilter object>, 'energy_carrier': <django_filters.filters.ModelChoiceFilter object>}¶
ferrosoft.apps.emiflow.metrics module¶
Prometheus metrics for emiflow tonnage tracking.
Exposes per-tenant tonnage usage and per-organisation tonnage limits so subscription overages can be alerted on and dashboarded.
- ferrosoft.apps.emiflow.metrics.TonnageCounter = prometheus_client.metrics.Counter(emiflow_tonnage)¶
Cumulative tonnage processed per
(tenant, organization)pair, in metric tons. Seeded at startup from the database and incremented as new booking records are committed.
- ferrosoft.apps.emiflow.metrics.TonnageLimit = prometheus_client.metrics.Gauge(emiflow_tonnage_limit)¶
Per-organisation maximum tonnage allowed by the active subscription plan, in metric tons. Zero when no plan is attached.
- ferrosoft.apps.emiflow.metrics.setup()[source]¶
Seed metrics from the current database state.
Initialises
TonnageCounterfrom the tonnage service’s summary so the counter does not start at zero after a process restart, and publishesTonnageLimitfor every organisation that has a subscription plan attached.
ferrosoft.apps.emiflow.tables module¶
django-tables2 table classes for emiflow list and detail views.
Each table maps a model (or a flat record produced by an aggregation) to
the columns shown in templates, with column types drawn from
ferrosoft.apps.ferrobase.tables for shared rendering behaviour
(number formatting, action buttons, linkified cells). Tables ending in
CRUDTable add an actions column with edit/delete buttons whose
delete URL each subclass resolves in get_delete_action_url.
- class ferrosoft.apps.emiflow.tables.AllocationEditorTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableInline-editable allocation table for treatment-operation output lines.
Renders each output material’s weight alongside a
NumberInputso operators can adjust the percentage allocated to that material; inputs are tagged withdata-material-idto be picked up by the client-side validation script that enforces summation to 100 %.- class Meta[source]¶
Bases:
object- fields = ['material', 'weight', 'allocated_fraction']¶
- model¶
alias of
TreatmentOperationOutputLine
- orderable = False¶
- base_columns = {'allocated_fraction': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'material': <django_tables2.columns.base.Column object>, 'weight': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.EmissionBookingRecordTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableList view table for
EmissionBookingRecordshowing emission, weight, and partner columns.- class Meta[source]¶
Bases:
object- fields = ['creation_time', 'booking_date', 'lifecycle_category_name', 'entity_reference', 'emission_total_value', 'emission_operation_value', 'emission_unit_symbol', 'weight_value', 'weight_unit_symbol', 'material_code', 'material_name', 'incoming_partner_name', 'outgoing_partner_name']¶
- model¶
alias of
EmissionBookingRecord
- base_columns = {'booking_date': <django_tables2.columns.datecolumn.DateColumn object>, 'creation_time': <django_tables2.columns.datetimecolumn.DateTimeColumn object>, 'emission_operation_value': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'emission_total_value': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'emission_unit_symbol': <django_tables2.columns.base.Column object>, 'entity_reference': <django_tables2.columns.base.Column object>, 'incoming_partner_name': <django_tables2.columns.base.Column object>, 'lifecycle_category_name': <django_tables2.columns.base.Column object>, 'material_code': <ferrosoft.apps.ferrobase.tables.columns.ArrayColumn object>, 'material_name': <ferrosoft.apps.ferrobase.tables.columns.ArrayColumn object>, 'outgoing_partner_name': <django_tables2.columns.base.Column object>, 'weight_unit_symbol': <django_tables2.columns.base.Column object>, 'weight_value': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.EmissionFactorTable(*args, **kwargs)[source]¶
Bases:
CRUDTableCRUD table listing emission factors with category, value, and unit columns.
- class Meta[source]¶
Bases:
Meta- fields = ['actions', 'category', 'value', 'unit']¶
- model¶
alias of
EmissionFactor
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'category': <django_tables2.columns.base.Column object>, 'unit': <django_tables2.columns.base.Column object>, 'value': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.EmissionGradeColumn(*args, **kwargs)[source]¶
Bases:
ColumnRender a letter-grade emission badge from an emission-intensity value.
The underlying
gradeis a Python@propertyrather than a real database column, so this column is forced to be non-orderable.
- class ferrosoft.apps.emiflow.tables.EmitterTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableList table for
Emitterwith a linkified name and emission-grade badge.- class Meta[source]¶
Bases:
object- fields = ['name', 'epitype', 'vehicle_type', 'energy_carrier', 'catalog', 'emission_intensity__grade']¶
- base_columns = {'catalog': <django_tables2.columns.base.Column object>, 'emission_intensity__grade': <ferrosoft.apps.emiflow.tables.EmissionGradeColumn object>, 'energy_carrier': <django_tables2.columns.base.Column object>, 'epitype': <django_tables2.columns.base.Column object>, 'name': <django_tables2.columns.base.Column object>, 'vehicle_type': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.EnergyCarrierTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableList table for
EnergyCarriershowing composition, heating value, and density.- class Meta[source]¶
Bases:
object- fields = ['name', 'composition', 'application', 'lower_heating', 'density', 'catalog']¶
- model¶
alias of
EnergyCarrier
- base_columns = {'application': <django_tables2.columns.base.Column object>, 'catalog': <django_tables2.columns.base.Column object>, 'composition': <django_tables2.columns.base.Column object>, 'density': <django_tables2.columns.base.Column object>, 'lower_heating': <django_tables2.columns.base.Column object>, 'name': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.FreightItemTable(*args, **kwargs)[source]¶
Bases:
CRUDTableCRUD table listing freight items with material, weight, and unit columns.
The material link is dropped before render when the current user lacks update permission on
Material, so unprivileged users see a plain label rather than a non-functional link.- class Meta[source]¶
Bases:
Meta- fields = ['actions', 'material', 'weight_value', 'weight_unit']¶
- model¶
alias of
FreightItem
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'empty': <ferrosoft.apps.ferrobase.tables.columns.EmptyExpandColumn object>, 'material': <django_tables2.columns.base.Column object>, 'weight_unit': <django_tables2.columns.base.Column object>, 'weight_value': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.LCCValueTable(*args, **kwargs)[source]¶
Bases:
CRUDTableBase CRUD table for lifecycle-category contribution values.
Subclassed by
TransportLCCValueTableandTreatmentLCCValueTable; each subclass swaps the model and delete-URL resolution while keeping the column layout.- class Meta[source]¶
Bases:
Meta- fields = ['actions', 'lifecycle_category', 'operation_emission', 'total_emission']¶
- orderable = False¶
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'empty': <ferrosoft.apps.ferrobase.tables.columns.EmptyExpandColumn object>, 'lifecycle_category': <django_tables2.columns.base.Column object>, 'operation_emission': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'total_emission': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.MultiplyProportion(fixed_width=None, mixins=None, *args, **kwargs)[source]¶
Bases:
ColumnRender-mixin that converts a 0..1 proportion into a two-decimal percentage.
- class ferrosoft.apps.emiflow.tables.ReportTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableList table for
Reportwith a linkified reference column.- class Meta[source]¶
Bases:
object- fields = ['reference', 'name', 'type', 'proportional_emissions', 'creation_time']¶
- base_columns = {'creation_time': <django_tables2.columns.datetimecolumn.DateTimeColumn object>, 'name': <django_tables2.columns.base.Column object>, 'proportional_emissions': <django_tables2.columns.base.Column object>, 'reference': <django_tables2.columns.base.Column object>, 'type': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.TransportChainElementActionTable(*args, **kwargs)[source]¶
Bases:
CRUDTableCRUD variant of
TransportChainElementTablewith row delete actions.- class Meta[source]¶
Bases:
Meta- fields = ['actions', 'position', 'epitype', 'operation', 'operation__emission_intensity__grade', 'operation__emitter', 'operation__energy_carrier', 'activity_distance_value', 'activity_distance_unit', 'activity_distance_type']¶
- model¶
alias of
TransportChainElement
- orderable = False¶
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'activity_distance_type': <django_tables2.columns.base.Column object>, 'activity_distance_unit': <django_tables2.columns.base.Column object>, 'activity_distance_value': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'epitype': <django_tables2.columns.base.Column object>, 'operation': <django_tables2.columns.base.Column object>, 'operation__emission_intensity__grade': <ferrosoft.apps.emiflow.tables.EmissionGradeColumn object>, 'operation__emitter': <django_tables2.columns.base.Column object>, 'operation__energy_carrier': <django_tables2.columns.base.Column object>, 'position': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.TransportChainElementTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableRead-only table listing the ordered elements of a transport chain.
- class Meta[source]¶
Bases:
object- fields = ['position', 'epitype', 'operation', 'operation__emission_intensity__grade', 'operation__emitter', 'operation__energy_carrier', 'activity_distance_value', 'activity_distance_unit', 'activity_distance_type']¶
- model¶
alias of
TransportChainElement
- base_columns = {'activity_distance_type': <django_tables2.columns.base.Column object>, 'activity_distance_unit': <django_tables2.columns.base.Column object>, 'activity_distance_value': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'epitype': <django_tables2.columns.base.Column object>, 'operation': <django_tables2.columns.base.Column object>, 'operation__emission_intensity__grade': <ferrosoft.apps.emiflow.tables.EmissionGradeColumn object>, 'operation__emitter': <django_tables2.columns.base.Column object>, 'operation__energy_carrier': <django_tables2.columns.base.Column object>, 'position': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.TransportChainTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableList table for
TransportChainwith linkified reference, consignor, and consignee.Consignor/consignee links are stripped before render when the current user lacks update permission on
BusinessPartner.- class Meta[source]¶
Bases:
object- fields = ['reference', 'booking_date', 'status', 'transport_type', 'incoterms', 'consignor', 'consignee', 'simulation']¶
- model¶
alias of
TransportChain
- base_columns = {'booking_date': <django_tables2.columns.datecolumn.DateColumn object>, 'consignee': <django_tables2.columns.base.Column object>, 'consignor': <django_tables2.columns.base.Column object>, 'incoterms': <django_tables2.columns.base.Column object>, 'reference': <django_tables2.columns.base.Column object>, 'simulation': <django_tables2.columns.booleancolumn.BooleanColumn object>, 'status': <django_tables2.columns.base.Column object>, 'transport_type': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.TransportLCCValueTable(*args, **kwargs)[source]¶
Bases:
LCCValueTableLCC value table specialised for transport operations.
- class Meta[source]¶
Bases:
Meta- model¶
alias of
TransportLCCValue
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'empty': <ferrosoft.apps.ferrobase.tables.columns.EmptyExpandColumn object>, 'lifecycle_category': <django_tables2.columns.base.Column object>, 'operation_emission': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'total_emission': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.TransportOperationTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableList table for
TransportOperationwith linkified reference and emission-grade badge.- class Meta[source]¶
Bases:
object- fields = ['reference', 'name', 'activity_type', 'emitter', 'energy_carrier', 'emission_intensity__grade']¶
- model¶
alias of
TransportOperation
- base_columns = {'activity_type': <django_tables2.columns.base.Column object>, 'emission_intensity__grade': <ferrosoft.apps.emiflow.tables.EmissionGradeColumn object>, 'emitter': <django_tables2.columns.base.Column object>, 'energy_carrier': <django_tables2.columns.base.Column object>, 'name': <django_tables2.columns.base.Column object>, 'reference': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.TreatmentInputLineTable(*args, **kwargs)[source]¶
Bases:
TreatmentLineTableTreatment input lines (the materials consumed by a treatment).
- class Meta[source]¶
Bases:
object- fields = ['material', 'weight']¶
- model¶
alias of
TreatmentInputLine
- orderable = False¶
- template_name = 'ferrobase/bootstrap5/table/with_add_button.html'¶
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'material': <django_tables2.columns.base.Column object>, 'weight': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.TreatmentLCCValueTable(*args, **kwargs)[source]¶
Bases:
LCCValueTableLCC value table specialised for treatment operations.
- class Meta[source]¶
Bases:
Meta- model¶
alias of
TreatmentLCCValue
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'empty': <ferrosoft.apps.ferrobase.tables.columns.EmptyExpandColumn object>, 'lifecycle_category': <django_tables2.columns.base.Column object>, 'operation_emission': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'total_emission': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.TreatmentLineTable(*args, **kwargs)[source]¶
Bases:
CRUDTableBase CRUD table for treatment lines, listing material and weight columns.
Subclassed for input, output, and operation-input/output variants; subclasses override the model and (for editable variants) the delete-URL resolution.
- class Meta[source]¶
Bases:
object- fields = ['material', 'weight']¶
- model¶
alias of
TreatmentLine
- orderable = False¶
- template_name = 'ferrobase/bootstrap5/table/with_add_button.html'¶
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'material': <django_tables2.columns.base.Column object>, 'weight': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.TreatmentOperationInputLineTable(*args, **kwargs)[source]¶
Bases:
TreatmentLineTableTreatment-operation input lines with delete actions.
- class Meta[source]¶
Bases:
object- fields = ['material', 'weight']¶
- model¶
alias of
TreatmentOperationInputLine
- orderable = False¶
- template_name = 'ferrobase/bootstrap5/table/with_add_button.html'¶
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'material': <django_tables2.columns.base.Column object>, 'weight': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.TreatmentOperationOutputLineTable(*args, **kwargs)[source]¶
Bases:
TreatmentLineTableTreatment-operation output lines with allocated percentage and delete actions.
- class Meta[source]¶
Bases:
object- fields = ['material', 'weight', 'allocated_fraction']¶
- model¶
alias of
TreatmentOperationOutputLine
- orderable = False¶
- template_name = 'ferrobase/bootstrap5/table/with_add_button.html'¶
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'allocated_fraction': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'material': <django_tables2.columns.base.Column object>, 'weight': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.TreatmentOperationTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableList table for
TreatmentOperationwith linkified reference and emission-grade badge.- class Meta[source]¶
Bases:
object- fields = ['reference', 'status', 'name', 'emitter', 'energy_carrier', 'emission_intensity__grade']¶
- model¶
alias of
TreatmentOperation
- base_columns = {'emission_intensity__grade': <ferrosoft.apps.emiflow.tables.EmissionGradeColumn object>, 'emitter': <django_tables2.columns.base.Column object>, 'energy_carrier': <django_tables2.columns.base.Column object>, 'name': <django_tables2.columns.base.Column object>, 'reference': <django_tables2.columns.base.Column object>, 'status': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.TreatmentOutputLineTable(*args, **kwargs)[source]¶
Bases:
TreatmentLineTableTreatment output lines with an extra allocated-percentage column.
- class Meta[source]¶
Bases:
object- fields = ['material', 'weight']¶
- model¶
alias of
TreatmentOutputLine
- orderable = False¶
- template_name = 'ferrobase/bootstrap5/table/with_add_button.html'¶
- base_columns = {'actions': <ferrosoft.apps.ferrobase.tables.columns.WidgetColumn object>, 'allocated_fraction': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'material': <django_tables2.columns.base.Column object>, 'weight': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
- class ferrosoft.apps.emiflow.tables.TreatmentTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableList table for
Treatmentwith a linkified reference column.- class Meta[source]¶
Bases:
object- fields = ['reference', 'status', 'booking_date', 'operation__name', 'operation__emitter', 'operation__energy_carrier']¶
- base_columns = {'booking_date': <django_tables2.columns.datecolumn.DateColumn object>, 'operation__emitter': <django_tables2.columns.base.Column object>, 'operation__energy_carrier': <django_tables2.columns.base.Column object>, 'operation__name': <django_tables2.columns.base.Column object>, 'reference': <django_tables2.columns.base.Column object>, 'status': <django_tables2.columns.base.Column object>}¶
- class ferrosoft.apps.emiflow.tables.WarehouseOverviewTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableAggregated, model-less warehouse overview keyed by material.
Rows come from a service-side aggregation (not the ORM), so the table declares no
Meta.modeland is non-orderable. Numeric columns format their values throughformat_massso units render alongside the quantity.- base_columns = {'average_operation': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'average_total': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'emission_operation': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'emission_total': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>, 'material': <django_tables2.columns.base.Column object>, 'weight': <ferrosoft.apps.ferrobase.tables.columns.NumberColumn object>}¶
ferrosoft.apps.emiflow.tests module¶
ferrosoft.apps.emiflow.urls module¶
URL configuration for the emiflow application.
Exposes the dashboard index, per-domain CRUD URL bundles imported from
ferrosoft.apps.emiflow.views, ad-hoc views for emission intensity,
file import, reporting, treatment-operation allocation, and the settings
pages, plus the DRF REST API mounted at api/ via
ferrosoft.apps.emiflow.api.router.router. The app namespace is
emiflow.
ferrosoft.apps.emiflow.widgets module¶
Custom Django form widgets used by emiflow forms and tables.
- class ferrosoft.apps.emiflow.widgets.EditDeleteActionsWidget(*args, **kwargs)[source]¶
Bases:
WidgetRow-actions widget rendering edit and delete buttons for a table row.
The button URLs are produced by per-row callables passed via
edit_urlanddelete_urlkwargs at construction time. When used inside aWidgetColumnthe column monkey-patchesrender_argsandrender_kwargsonto the widget instance so the callables receive the row record; either callable may beNoneto suppress that button.- get_context(*args, **kwargs)[source]¶
Resolve
edit_urlanddelete_urlfor the current row and inject them.
- property media¶
- template_name = 'emiflow/treatmentoperation/line_actions_widget.html'¶
- class ferrosoft.apps.emiflow.widgets.EmissionFactorWidget(attrs=None)[source]¶
Bases:
WidgetHidden picker widget that surfaces a selected
EmissionFactor.The form posts the factor’s primary key, but the rendered template needs the full object to show a human-readable preview. This widget looks up the bound factor and exposes it to the template via the
emission_factorcontext key while keeping the underlying input hidden.- get_context(name, value, attrs)[source]¶
Resolve the bound factor (if any) and force the input
typetohidden.
- property media¶
- template_name = 'emiflow/picker/emission_factor/widget.html'¶