118 lines
3.3 KiB
Python
118 lines
3.3 KiB
Python
import json
|
|
|
|
from category.forms import CategorySelect
|
|
from main.forms import DatalistInput, NummiFileInput, NummiForm
|
|
from statement.forms import StatementSelect
|
|
|
|
from .models import Invoice, Transaction
|
|
from .utils import get_datalist
|
|
|
|
|
|
class TransactionForm(NummiForm):
|
|
class Meta:
|
|
model = Transaction
|
|
fields = [
|
|
"statement",
|
|
"name",
|
|
"value",
|
|
"date",
|
|
"real_date",
|
|
"category",
|
|
"trader",
|
|
"payment",
|
|
"description",
|
|
]
|
|
widgets = {
|
|
"statement": StatementSelect(),
|
|
"category": CategorySelect(),
|
|
"name": DatalistInput(),
|
|
"trader": DatalistInput(),
|
|
"payment": DatalistInput(),
|
|
}
|
|
|
|
meta_fieldsets = [
|
|
[
|
|
["statement"],
|
|
["name"],
|
|
["value"],
|
|
[
|
|
"date",
|
|
"real_date",
|
|
],
|
|
["category"],
|
|
["trader", "payment"],
|
|
],
|
|
[["description"]],
|
|
]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
_user = kwargs.get("user")
|
|
_disable_statement = kwargs.pop("disable_statement", False)
|
|
_autocomplete = kwargs.pop("autocomplete", False)
|
|
super().__init__(*args, **kwargs)
|
|
|
|
self.fields["category"].queryset = self.fields["category"].queryset.filter(
|
|
user=_user
|
|
)
|
|
self.fields["statement"].queryset = self.fields["statement"].queryset.filter(
|
|
user=_user
|
|
)
|
|
|
|
self.fields["name"].widget.options = get_datalist(_user, "name")
|
|
self.fields["trader"].widget.options = get_datalist(_user, "trader")
|
|
self.fields["payment"].widget.options = get_datalist(_user, "payment")
|
|
|
|
self.fields["category"].widget.attrs |= {
|
|
"class": "category",
|
|
"data-icons": json.dumps(
|
|
{
|
|
str(cat.id): cat.icon
|
|
for cat in self.fields["category"].queryset.only("id", "icon")
|
|
}
|
|
),
|
|
}
|
|
|
|
if _autocomplete:
|
|
self.autocomplete = {
|
|
"field": "name",
|
|
"data": {
|
|
t.name: [
|
|
{
|
|
"field": "value",
|
|
"value": t.value,
|
|
},
|
|
{
|
|
"field": "category",
|
|
"value": t.category.id if t.category else "",
|
|
},
|
|
{
|
|
"field": "trader",
|
|
"value": t.trader,
|
|
},
|
|
{
|
|
"field": "payment",
|
|
"value": t.payment,
|
|
},
|
|
]
|
|
for t in _user.transaction_set.order_by("name", "-date").distinct(
|
|
"name"
|
|
)
|
|
},
|
|
}
|
|
|
|
if _disable_statement:
|
|
self.fields["statement"].disabled = True
|
|
|
|
|
|
class InvoiceForm(NummiForm):
|
|
prefix = "invoice"
|
|
|
|
class Meta:
|
|
model = Invoice
|
|
fields = [
|
|
"name",
|
|
"file",
|
|
]
|
|
widgets = {
|
|
"file": NummiFileInput,
|
|
}
|