Files

43 lines
1.8 KiB
Python

from django.shortcuts import redirect
from django.contrib import messages
from django.db.models import Q
from django.views.generic import TemplateView
from web_project import TemplateLayout
from apps.transactions.forms import TransactionForm
from apps.transactions.models import Transaction
from django.contrib.auth.mixins import PermissionRequiredMixin
class TransactionUpdateView(PermissionRequiredMixin, TemplateView):
permission_required = ("transactions.update_transaction")
def get_context_data(self, **kwargs):
context = TemplateLayout.init(self, super().get_context_data(**kwargs))
context['transaction_id'] = self.get_transaction(self.kwargs['pk'])
return context
def post(self, request, pk):
transaction = self.get_transaction(pk)
form = TransactionForm(request.POST, instance=transaction)
if form.is_valid():
if not self.transaction_exists(form.cleaned_data, transaction):
form.save()
messages.success(request, 'Transaction Updated')
else:
messages.error(request, 'Transaction Already Exists')
else:
messages.error(request, 'Transaction Failed')
return redirect('transactions')
def get_transaction(self, pk):
return Transaction.objects.get(pk=pk)
def transaction_exists(self, cleaned_data, current_transaction):
matching_transactions = Transaction.objects.filter(
Q(customer__iexact=cleaned_data['customer']) &
Q(transaction_date=cleaned_data['transaction_date']) &
Q(due_date=cleaned_data['due_date']) &
Q(total=cleaned_data['total']) &
Q(status=cleaned_data['status'])
).exclude(pk=current_transaction.pk)
return matching_transactions.exists()