Source code for ferrosoft.apps.emiflow.forms.settings
# Copyright (c) 2024 Ferrosoft GmbH. All rights reserved.
from django import forms
from django.utils.translation import gettext_lazy as _
from ferrosoft.apps.emiflow.models import (
TransportChainDefaults,
Settings,
VehicleType,
BusinessCentralSettings,
)
_ME_SUBMIT = """on change js(me) me.form.submit() end"""
[docs]
class BusinessCentralSettingsForm(forms.ModelForm):
[docs]
class Meta:
model = BusinessCentralSettings
fields = [
"tenant_id",
"environment",
"oauth_auth_url",
"oauth_client_id",
"oauth_client_secret",
"oauth_scope",
]
widgets = {
"oauth_client_secret": forms.PasswordInput(render_value=True),
}
[docs]
class DefaultsSearchForm(forms.Form):
vehicle_type = forms.ChoiceField(
choices=VehicleType.choices,
required=False,
label=_("Vehicle type"),
help_text=_(
"Please select a vehicle type for which to define default settings."
),
widget=forms.Select(
attrs={"_": _ME_SUBMIT},
),
)
[docs]
class DefaultsEditForm(forms.ModelForm):
[docs]
class Meta:
model = TransportChainDefaults
fields = [
"vehicle_type",
"distance_type",
"transport_operation",
]
widgets = {
"vehicle_type": forms.HiddenInput(),
"distance_type": forms.Select(attrs={"_": _ME_SUBMIT}),
"transport_operation": forms.Select(attrs={"_": _ME_SUBMIT}),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.warn_incomplete_data = False
[docs]
def clean(self):
data = super().clean()
if data.get("distance_type") is None or data.get("transport_operation") is None:
self.warn_incomplete_data = True
[docs]
def save(self, commit=True):
instance = super().save(commit=False)
instance.settings = Settings.get_instance()
if commit:
instance.save()