From 704f0aaed67c359c42f657fbb5975c2c55cd2c49 Mon Sep 17 00:00:00 2001 From: Marwan Alwali Date: Wed, 15 Jan 2025 12:58:23 +0300 Subject: [PATCH] update --- .../__pycache__/services.cpython-311.pyc | Bin 4778 -> 4776 bytes inventory/__pycache__/views.cpython-311.pyc | Bin 140435 -> 141327 bytes inventory/services.py | 5 +- inventory/views.py | 54 ++++++++++---- templates/inventory/car_form.html | 2 +- templates/inventory/inventory_stats.html | 6 +- .../ledger/coa_accounts/account_detail.html | 66 +++++++++++++++++- .../ledger/coa_accounts/account_list.html | 30 ++++---- templates/sales/quotation_list.html | 38 +--------- 9 files changed, 125 insertions(+), 76 deletions(-) diff --git a/inventory/__pycache__/services.cpython-311.pyc b/inventory/__pycache__/services.cpython-311.pyc index 6d1672976cb664f1154a7be0cb3dd648a04995ad..7451acb6d80896999193ed7b964f731840b761fd 100644 GIT binary patch delta 159 zcmZ3bx1i$ZKGD$}c%XxwF2f z{sOyPL)ixg4pxyH{GuJacLh}z1YZ=?ydtQ1fm5?X>;nVaH z8yOj`CiipHF&b><CdRPMLIS=_{9KG89~j_-)Z{!ND*zgB BEw%sv diff --git a/inventory/__pycache__/views.cpython-311.pyc b/inventory/__pycache__/views.cpython-311.pyc index a1f047979725568ea4bd01ab74c5c555b87e99bb..6f6f4da31d40cf0a6ccb2a4ea8ca8b268fe3c906 100644 GIT binary patch delta 6501 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 Q4b8$MI6>`@Al{PxA5jW8&j0`b diff --git a/inventory/services.py b/inventory/services.py index f4e90bf9..cc782106 100644 --- a/inventory/services.py +++ b/inventory/services.py @@ -36,11 +36,10 @@ def decodevin(vin): if result:=decode_vin(vin): return result - elif result:=decode_vin_haikalna(vin): - return result elif result:=elm(vin): return result - + elif result:=decode_vin_haikalna(vin): + return result else: return None diff --git a/inventory/views.py b/inventory/views.py index bbdca039..f4c1a98e 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -1814,15 +1814,14 @@ class AccountCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): success_message = "Account created successfully." def form_valid(self, form): - form.instance.entity_model = self.request.user.dealer.entity + dealer = get_user_type(self.request) + form.instance.entity_model = dealer.entity form.instance.depth = 0 return super().form_valid(form) def get_form_kwargs(self): - """ - Override this method to pass additional keyword arguments to the form. - """ - entity = self.request.user.dealer.entity + dealer = get_user_type(self.request) + entity = dealer.entity kwargs = super().get_form_kwargs() kwargs["coa_model"] = entity.get_default_coa() @@ -1833,6 +1832,28 @@ class AccountDetailView(LoginRequiredMixin, DetailView): model = AccountModel template_name = "ledger/coa_accounts/account_detail.html" context_object_name = "account" + slug_field = 'uuid' + DEFAULT_TXS_DAYS = 30 + extra_context = { + 'DEFAULT_TXS_DAYS': DEFAULT_TXS_DAYS, + 'header_subtitle_icon': 'ic:round-account-tree' + } + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + account_model: AccountModel = context['object'] + context['header_title'] = f'Account {account_model.code} - {account_model.name}' + context['page_title'] = f'Account {account_model.code} - {account_model.name}' + txs_qs = account_model.transactionmodel_set.all().posted().order_by( + 'journal_entry__timestamp' + ).select_related( + 'journal_entry', + 'journal_entry__entity_unit', + 'journal_entry__ledger__billmodel', + 'journal_entry__ledger__invoicemodel', + ) + + return context class AccountUpdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView): @@ -1862,7 +1883,8 @@ class EstimateListView(LoginRequiredMixin, ListView): context_object_name = "estimates" def get_queryset(self): - entity = self.request.user.dealer.entity + dealer = get_user_type(self.request) + entity = dealer.entity return entity.get_estimates() @@ -2160,7 +2182,7 @@ class DraftInvoiceModelUpdateFormView(LoginRequiredMixin, UpdateView): def get_form_kwargs(self): kwargs = super().get_form_kwargs() - dealer = get_user_type(self.request.user.dealer) + dealer = get_user_type(self.request) kwargs["entity_slug"] = dealer.entity kwargs["user_model"] = dealer.entity.admin return kwargs @@ -2174,7 +2196,7 @@ class ApprovedInvoiceModelUpdateFormView(LoginRequiredMixin, UpdateView): def get_form_kwargs(self): kwargs = super().get_form_kwargs() - dealer = get_user_type(self.request.user.dealer) + dealer = get_user_type(self.request) kwargs["entity_slug"] = dealer.entity kwargs["user_model"] = dealer.entity.admin return kwargs @@ -2191,7 +2213,7 @@ class PaidInvoiceModelUpdateFormView(LoginRequiredMixin, UpdateView): def get_form_kwargs(self): kwargs = super().get_form_kwargs() - dealer = get_user_type(self.request.user.dealer) + dealer = get_user_type(self.request) kwargs["entity_slug"] = dealer.entity kwargs["user_model"] = dealer.entity.admin return kwargs @@ -2240,7 +2262,8 @@ def invoice_mark_as(request, pk): def invoice_create(request, pk): estimate = get_object_or_404(EstimateModel, pk=pk) - entity = request.user.dealer.entity + dealer = get_user_type(request) + entity = dealer.entity form = InvoiceModelCreateForm(entity_slug=entity.slug, user_model=entity.admin) if request.method == "POST": @@ -2323,7 +2346,8 @@ class InvoicePreviewView(LoginRequiredMixin, DetailView): def PaymentCreateView(request, pk=None): invoice = InvoiceModel.objects.filter(pk=pk).first() - entity = request.user.dealer.entity + dealer = get_user_type(request) + entity = dealer.entity form = forms.PaymentForm() if request.method == "POST": form = forms.PaymentForm(request.POST) @@ -2658,14 +2682,14 @@ class ItemExpenseCreateView(CreateView): success_url = reverse_lazy("item_expense_list") def get_form_kwargs(self): - dealer = get_user_type(self.request.user.dealer) + dealer = get_user_type(self.request) kwargs = super().get_form_kwargs() kwargs["entity_slug"] = dealer.entity.slug kwargs["user_model"] = dealer.entity.admin return kwargs def form_valid(self, form): - dealer = get_user_type(self.request.user.dealer) + dealer = get_user_type(self.request) form.instance.entity = dealer.entity return super().form_valid(form) @@ -2677,14 +2701,14 @@ class ItemExpenseUpdateView(UpdateView): success_url = reverse_lazy("item_expense_list") def get_form_kwargs(self): - dealer = get_user_type(self.request.user.dealer) + dealer = get_user_type(self.request) kwargs = super().get_form_kwargs() kwargs["entity_slug"] = dealer.entity.slug kwargs["user_model"] = dealer.entity.admin return kwargs def form_valid(self, form): - dealer = get_user_type(self.request.user.dealer) + dealer = get_user_type(self.request) form.instance.entity = dealer.entity return super().form_valid(form) diff --git a/templates/inventory/car_form.html b/templates/inventory/car_form.html index 609a647a..2dbaf02e 100644 --- a/templates/inventory/car_form.html +++ b/templates/inventory/car_form.html @@ -346,7 +346,7 @@ } document.addEventListener("DOMContentLoaded", function () { - const csrfToken = getCookie("token"); + const csrfToken = getCookie("csrftoken"); const vinInput = document.getElementById("{{ form.vin.id_for_label }}"); const decodeVinBtn = document.getElementById("decodeVinBtn"); diff --git a/templates/inventory/inventory_stats.html b/templates/inventory/inventory_stats.html index 650032bf..b7d98f06 100644 --- a/templates/inventory/inventory_stats.html +++ b/templates/inventory/inventory_stats.html @@ -12,9 +12,9 @@

{{ inventory.total_cars }}

{% trans "Total Cars in Inventory" %}

-
-

1,866

-

Emails Sent

+
+

2

+

{{ _("Reserved")}}

1,366

diff --git a/templates/ledger/coa_accounts/account_detail.html b/templates/ledger/coa_accounts/account_detail.html index 8ba5814c..48674f76 100644 --- a/templates/ledger/coa_accounts/account_detail.html +++ b/templates/ledger/coa_accounts/account_detail.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% load i18n %} -{% block title %}{{ _("View Account") }}{% endblock title %} +{% block title %}{{ page_title }}{% endblock title %} {% block content %} @@ -40,8 +40,8 @@
-
-

{{ _("Bank Account Details") }}

+
+

{{ header_title|upper }}

@@ -54,6 +54,66 @@

{{ _("Active") }}: {{ account.active }}

+
+
+ + + + + + + + + + + {% for tx in transactions %} + + + + + + + + + + {% endfor %} + + + + + + + + + +
{{ _("JE Number")}}{{ _("Date") }}{{ _("Debit") }}{{ _("Credit") }}{{ _("Description") }}{{ _("Unit") }}{{ _("Actions") }}
{{ tx.journal_entry.je_number }}{{ tx.journal_entry.timestamp }}{% if tx.tx_type == 'debit' %}${{ tx.amount }}{% endif %}{% if tx.tx_type == 'credit' %}${{ tx.amount }}{% endif %}{{ tx.description }}{{ tx.journal_entry.entity_unit.name }} + +
Total${{ total_credits }}${{ total_debits }}
+
+
- {{ account.name }} - {{ account.code }} - + {{ account.name }} + {{ account.code }} + {% if account.balance_type == 'debit' %}
{{ _("Debit") }}
@@ -101,16 +101,18 @@
{{ _("Credit") }}
{% endif %} - {% if account.is_active %} - + + {% if account.active %} + {% else %} - + {% endif %} +
- {% if is_paginated %} - +{% include 'partials/pagination.html' %} {% endif %}
{% endblock %} \ No newline at end of file