from apps.common.widgets.crispy.daisyui import Switch from apps.common.widgets.crispy.submit import NoClassSubmit from apps.common.widgets.datepicker import AirDateTimePickerInput from apps.common.widgets.decimal import ArbitraryDecimalDisplayNumberInput from apps.common.widgets.tom_select import TomSelect from apps.currencies.models import Currency, ExchangeRate, ExchangeRateService from crispy_forms.bootstrap import FormActions from crispy_forms.helper import FormHelper from crispy_forms.layout import Column, Layout, Row from django import forms from django.forms import CharField from django.utils.translation import gettext_lazy as _ class CurrencyForm(forms.ModelForm): prefix = CharField(strip=False, required=False, label=_("Prefix")) suffix = CharField(strip=False, required=False, label=_("Suffix")) class Meta: model = Currency fields = [ "name", "decimal_places", "prefix", "suffix", "code", "exchange_currency", "is_archived", ] widgets = { "exchange_currency": TomSelect(), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_tag = False self.helper.form_method = "post" self.helper.layout = Layout( "code", "name", Switch("is_archived"), "decimal_places", "prefix", "suffix", "exchange_currency", ) if self.instance and self.instance.pk: self.helper.layout.append( FormActions( NoClassSubmit("submit", _("Update"), css_class="btn btn-primary"), ), ) else: self.helper.layout.append( FormActions( NoClassSubmit("submit", _("Add"), css_class="btn btn-primary"), ), ) class ExchangeRateForm(forms.ModelForm): date = forms.DateTimeField( label=_("Date"), ) class Meta: model = ExchangeRate fields = ["from_currency", "to_currency", "rate", "date"] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_tag = False self.helper.form_method = "post" self.helper.layout = Layout("date", "from_currency", "to_currency", "rate") self.fields["rate"].widget = ArbitraryDecimalDisplayNumberInput() self.fields["date"].widget = AirDateTimePickerInput(clear_button=False) if self.instance and self.instance.pk: self.helper.layout.append( FormActions( NoClassSubmit("submit", _("Update"), css_class="btn btn-primary"), ), ) else: self.helper.layout.append( FormActions( NoClassSubmit("submit", _("Add"), css_class="btn btn-primary"), ), ) class ExchangeRateServiceForm(forms.ModelForm): class Meta: model = ExchangeRateService fields = [ "name", "service_type", "is_active", "api_key", "interval_type", "fetch_interval", "target_currencies", "target_accounts", "singleton", ] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_tag = False self.helper.form_method = "post" self.helper.layout = Layout( "name", "service_type", Switch("is_active"), Switch("singleton"), "api_key", Row( Column("interval_type"), Column("fetch_interval"), ), "target_currencies", "target_accounts", ) if self.instance and self.instance.pk: self.helper.layout.append( FormActions( NoClassSubmit("submit", _("Update"), css_class="btn btn-primary"), ), ) else: self.helper.layout.append( FormActions( NoClassSubmit("submit", _("Add"), css_class="btn btn-primary"), ), )