feat: finish adding DCA Tracker tool

This commit is contained in:
Herculino Trotta
2024-11-12 11:40:50 -03:00
parent 7ebe3b6b5b
commit ba52e8740f
14 changed files with 887 additions and 369 deletions

View File

@@ -1,16 +1,24 @@
from crispy_forms.bootstrap import FormActions
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Row, Column
from django.utils.translation import gettext_lazy as _
from .models import DCAStrategy, DCAEntry
from apps.common.widgets.tom_select import TomSelect
from apps.dca.models import DCAStrategy, DCAEntry
from apps.common.widgets.decimal import ArbitraryDecimalDisplayNumberInput
from apps.common.widgets.crispy.submit import NoClassSubmit
class DCAStrategyForm(forms.ModelForm):
class Meta:
model = DCAStrategy
fields = ["name", "target_currency", "payment_currency", "notes"]
widgets = {
"target_currency": TomSelect(clear_button=False),
"payment_currency": TomSelect(clear_button=False),
"notes": forms.Textarea(attrs={"rows": 3}),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@@ -19,12 +27,29 @@ class DCAStrategyForm(forms.ModelForm):
self.helper.layout = Layout(
"name",
Row(
Column("target_currency", css_class="form-group col-md-6"),
Column("payment_currency", css_class="form-group col-md-6"),
Column("target_currency", css_class="form-group col-md-6"),
),
"notes",
)
if self.instance and self.instance.pk:
self.helper.layout.append(
FormActions(
NoClassSubmit(
"submit", _("Update"), css_class="btn btn-outline-primary w-100"
),
),
)
else:
self.helper.layout.append(
FormActions(
NoClassSubmit(
"submit", _("Add"), css_class="btn btn-outline-primary w-100"
),
),
)
class DCAEntryForm(forms.ModelForm):
class Meta:
@@ -33,13 +58,11 @@ class DCAEntryForm(forms.ModelForm):
"date",
"amount_paid",
"amount_received",
"expense_transaction",
"income_transaction",
"notes",
]
widgets = {
"amount_paid": ArbitraryDecimalDisplayNumberInput(decimal_places=8),
"amount_received": ArbitraryDecimalDisplayNumberInput(decimal_places=8),
"date": forms.DateInput(attrs={"type": "date"}, format="%Y-%m-%d"),
"notes": forms.Textarea(attrs={"rows": 3}),
}
def __init__(self, *args, **kwargs):
@@ -58,3 +81,28 @@ class DCAEntryForm(forms.ModelForm):
),
"notes",
)
if self.instance and self.instance.pk:
# decimal_places = self.instance.account.currency.decimal_places
# self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput(
# decimal_places=decimal_places
# )
self.helper.layout.append(
FormActions(
NoClassSubmit(
"submit", _("Update"), css_class="btn btn-outline-primary w-100"
),
),
)
else:
# self.fields["amount"].widget = ArbitraryDecimalDisplayNumberInput()
self.helper.layout.append(
FormActions(
NoClassSubmit(
"submit", _("Add"), css_class="btn btn-outline-primary w-100"
),
),
)
self.fields["amount_paid"].widget = ArbitraryDecimalDisplayNumberInput()
self.fields["amount_received"].widget = ArbitraryDecimalDisplayNumberInput()