Forms update
Add transactions to snapshot Fix snapshot delete
This commit is contained in:
parent
ea9cd1b9b8
commit
0184cba30d
3 changed files with 59 additions and 19 deletions
|
@ -1,4 +1,6 @@
|
||||||
from django.forms import ModelForm
|
from django.db import models, transaction
|
||||||
|
from django.forms import CheckboxSelectMultiple, ModelForm, MultipleChoiceField
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .models import Account, Category, Invoice, Snapshot, Transaction
|
from .models import Account, Category, Invoice, Snapshot, Transaction
|
||||||
|
|
||||||
|
@ -6,15 +8,17 @@ from .models import Account, Category, Invoice, Snapshot, Transaction
|
||||||
class NummiForm(ModelForm):
|
class NummiForm(ModelForm):
|
||||||
template_name = "main/form/base.html"
|
template_name = "main/form/base.html"
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, user, **kwargs):
|
||||||
kwargs.pop("user", None)
|
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class AccountForm(NummiForm):
|
class AccountForm(NummiForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Account
|
model = Account
|
||||||
fields = "__all__"
|
fields = [
|
||||||
|
"name",
|
||||||
|
"icon",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class CategoryForm(NummiForm):
|
class CategoryForm(NummiForm):
|
||||||
|
@ -29,7 +33,7 @@ class TransactionForm(NummiForm):
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
_user = kwargs.pop("user")
|
_user = kwargs.get("user")
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.fields["category"].queryset = Category.objects.filter(user=_user)
|
self.fields["category"].queryset = Category.objects.filter(user=_user)
|
||||||
self.fields["snapshot"].queryset = Snapshot.objects.filter(user=_user)
|
self.fields["snapshot"].queryset = Snapshot.objects.filter(user=_user)
|
||||||
|
@ -49,6 +53,33 @@ class SnapshotForm(NummiForm):
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
_user = kwargs.pop("user")
|
_user = kwargs.get("user")
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.fields["account"].queryset = Account.objects.filter(user=_user)
|
self.fields["account"].queryset = Account.objects.filter(user=_user)
|
||||||
|
self.fields["transactions"] = MultipleChoiceField(
|
||||||
|
choices=(
|
||||||
|
((transaction.id), transaction)
|
||||||
|
for transaction in Transaction.objects.filter(user=_user)
|
||||||
|
),
|
||||||
|
label=_("Add transactions"),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
instance = super().save(*args, **kwargs)
|
||||||
|
new_transactions = Transaction.objects.filter(
|
||||||
|
id__in=self.cleaned_data["transactions"]
|
||||||
|
)
|
||||||
|
|
||||||
|
to_update = list(
|
||||||
|
new_transactions.order_by().only("snapshot").distinct("snapshot")
|
||||||
|
)
|
||||||
|
|
||||||
|
instance.account.transaction_set.add(*new_transactions)
|
||||||
|
instance.transaction_set.add(*new_transactions)
|
||||||
|
instance.update_sum()
|
||||||
|
|
||||||
|
for upd in to_update:
|
||||||
|
upd.snapshot.update_sum()
|
||||||
|
|
||||||
|
return instance
|
||||||
|
|
|
@ -165,9 +165,10 @@ class Snapshot(AccountModel):
|
||||||
self.sum = self.transaction_set.aggregate(sum=models.Sum("value")).get("sum", 0)
|
self.sum = self.transaction_set.aggregate(sum=models.Sum("value")).get("sum", 0)
|
||||||
super().save()
|
super().save()
|
||||||
|
|
||||||
def delete(self, *args, only_super=False, **kwargs):
|
def delete(self, *args, **kwargs):
|
||||||
if self.file:
|
if self.file:
|
||||||
self.file.delete()
|
self.file.delete()
|
||||||
|
super().delete(*args, **kwargs)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse("snapshot", kwargs={"pk": self.pk})
|
return reverse("snapshot", kwargs={"pk": self.pk})
|
||||||
|
@ -218,8 +219,10 @@ class Transaction(CustomModel):
|
||||||
)
|
)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
prev_self = Transaction.objects.get(pk=self.pk)
|
||||||
self.account = self.snapshot.account
|
self.account = self.snapshot.account
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
prev_self.snapshot.update_sum()
|
||||||
self.snapshot.update_sum()
|
self.snapshot.update_sum()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
|
@ -38,16 +38,22 @@ class UserMixin(LoginRequiredMixin):
|
||||||
def get_queryset(self, **kwargs):
|
def get_queryset(self, **kwargs):
|
||||||
return super().get_queryset().filter(user=self.request.user)
|
return super().get_queryset().filter(user=self.request.user)
|
||||||
|
|
||||||
|
|
||||||
|
class UserFormMixin:
|
||||||
def get_form_kwargs(self):
|
def get_form_kwargs(self):
|
||||||
return super().get_form_kwargs() | {"user": self.request.user}
|
return super().get_form_kwargs() | {"user": self.request.user}
|
||||||
|
|
||||||
|
|
||||||
class UserCreateView(UserMixin, CreateView):
|
class NummiCreateView(UserMixin, UserFormMixin, CreateView):
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
form.instance.user = self.request.user
|
form.instance.user = self.request.user
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
class NummiUpdateView(UserMixin, UserFormMixin, UpdateView):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class NummiDeleteView(UserMixin, DeleteView):
|
class NummiDeleteView(UserMixin, DeleteView):
|
||||||
template_name = "main/confirm_delete.html"
|
template_name = "main/confirm_delete.html"
|
||||||
success_url = reverse_lazy("index")
|
success_url = reverse_lazy("index")
|
||||||
|
@ -69,17 +75,17 @@ class TransactionListView(UserMixin, ListView):
|
||||||
context_object_name = "transactions"
|
context_object_name = "transactions"
|
||||||
|
|
||||||
|
|
||||||
class AccountCreateView(UserCreateView):
|
class AccountCreateView(NummiCreateView):
|
||||||
model = Account
|
model = Account
|
||||||
form_class = AccountForm
|
form_class = AccountForm
|
||||||
|
|
||||||
|
|
||||||
class TransactionCreateView(UserCreateView):
|
class TransactionCreateView(NummiCreateView):
|
||||||
model = Transaction
|
model = Transaction
|
||||||
form_class = TransactionForm
|
form_class = TransactionForm
|
||||||
|
|
||||||
|
|
||||||
class InvoiceCreateView(UserCreateView):
|
class InvoiceCreateView(NummiCreateView):
|
||||||
model = Invoice
|
model = Invoice
|
||||||
form_class = InvoiceForm
|
form_class = InvoiceForm
|
||||||
|
|
||||||
|
@ -94,27 +100,27 @@ class InvoiceCreateView(UserCreateView):
|
||||||
return reverse_lazy("transaction", kwargs={"pk": self.object.transaction.pk})
|
return reverse_lazy("transaction", kwargs={"pk": self.object.transaction.pk})
|
||||||
|
|
||||||
|
|
||||||
class CategoryCreateView(UserCreateView):
|
class CategoryCreateView(NummiCreateView):
|
||||||
model = Category
|
model = Category
|
||||||
form_class = CategoryForm
|
form_class = CategoryForm
|
||||||
|
|
||||||
|
|
||||||
class SnapshotCreateView(UserCreateView):
|
class SnapshotCreateView(NummiCreateView):
|
||||||
model = Snapshot
|
model = Snapshot
|
||||||
form_class = SnapshotForm
|
form_class = SnapshotForm
|
||||||
|
|
||||||
|
|
||||||
class AccountUpdateView(UserMixin, UpdateView):
|
class AccountUpdateView(NummiUpdateView):
|
||||||
model = Account
|
model = Account
|
||||||
form_class = AccountForm
|
form_class = AccountForm
|
||||||
|
|
||||||
|
|
||||||
class TransactionUpdateView(UserMixin, UpdateView):
|
class TransactionUpdateView(NummiUpdateView):
|
||||||
model = Transaction
|
model = Transaction
|
||||||
form_class = TransactionForm
|
form_class = TransactionForm
|
||||||
|
|
||||||
|
|
||||||
class InvoiceUpdateView(UserMixin, UpdateView):
|
class InvoiceUpdateView(NummiUpdateView):
|
||||||
model = Invoice
|
model = Invoice
|
||||||
form_class = InvoiceForm
|
form_class = InvoiceForm
|
||||||
|
|
||||||
|
@ -133,12 +139,12 @@ class InvoiceUpdateView(UserMixin, UpdateView):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CategoryUpdateView(UserMixin, UpdateView):
|
class CategoryUpdateView(NummiUpdateView):
|
||||||
model = Category
|
model = Category
|
||||||
form_class = CategoryForm
|
form_class = CategoryForm
|
||||||
|
|
||||||
|
|
||||||
class SnapshotUpdateView(UserMixin, UpdateView):
|
class SnapshotUpdateView(NummiUpdateView):
|
||||||
model = Snapshot
|
model = Snapshot
|
||||||
form_class = SnapshotForm
|
form_class = SnapshotForm
|
||||||
|
|
||||||
|
@ -171,7 +177,7 @@ class SnapshotDeleteView(NummiDeleteView):
|
||||||
model = Snapshot
|
model = Snapshot
|
||||||
|
|
||||||
|
|
||||||
class SearchView(UserMixin, ListView, ProcessFormView):
|
class SearchView(UserMixin, UserFormMixin, ListView):
|
||||||
paginate_by = 24
|
paginate_by = 24
|
||||||
model = Transaction
|
model = Transaction
|
||||||
template_name = "main/transactions.html"
|
template_name = "main/transactions.html"
|
||||||
|
|
Loading…
Reference in a new issue