Forms update

Add transactions to snapshot
Fix snapshot delete
This commit is contained in:
Edgar P. Burkhart 2022-12-30 17:09:02 +01:00
parent ea9cd1b9b8
commit 0184cba30d
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
3 changed files with 59 additions and 19 deletions

View file

@ -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

View file

@ -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):

View file

@ -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"