diff --git a/inventory/__pycache__/services.cpython-311.pyc b/inventory/__pycache__/services.cpython-311.pyc
index 6d167297..7451acb6 100644
Binary files a/inventory/__pycache__/services.cpython-311.pyc and b/inventory/__pycache__/services.cpython-311.pyc differ
diff --git a/inventory/__pycache__/views.cpython-311.pyc b/inventory/__pycache__/views.cpython-311.pyc
index a1f04797..6f6f4da3 100644
Binary files a/inventory/__pycache__/views.cpython-311.pyc and b/inventory/__pycache__/views.cpython-311.pyc differ
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 1e09e9e6..3cf4b970 100644
--- a/inventory/views.py
+++ b/inventory/views.py
@@ -1826,15 +1826,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()
@@ -1845,6 +1844,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):
@@ -1853,7 +1874,7 @@ class AccountUpdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
template_name = "ledger/coa_accounts/account_form.html"
success_url = reverse_lazy("account_list")
success_message = "Account updated successfully."
-
+
def get_form(self, form_class=None):
form = super().get_form(form_class)
form.fields['_ref_node_id'].widget = HiddenInput()
@@ -1879,7 +1900,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()
@@ -2178,7 +2200,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
@@ -2192,7 +2214,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
@@ -2209,7 +2231,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
@@ -2245,7 +2267,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
if request.method == "POST":
form = forms.InvoiceModelCreateForm(
@@ -2343,8 +2366,9 @@ 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)
if form.is_valid():
@@ -2425,9 +2449,9 @@ def PaymentCreateView(request, pk=None):
return redirect("invoice_detail", pk=invoice.pk)
except Exception as e:
messages.error(request, f"Error creating payment: {str(e)}")
- else:
- messages.error(request, f"Invalid form data: {form.errors.as_text()}")
-
+ else:
+ messages.error(request, f"Invalid form data: {str(form.errors)}")
+ return redirect("invoice_detail", pk=invoice.pk)
form = forms.PaymentForm()
form.initial["amount"] = invoice.amount_due
@@ -2471,7 +2495,7 @@ def payment_mark_as_paid(request, pk):
user_model=invoice.ledger.entity.admin,
)
invoice.save()
-
+
invoice.ledger.lock_journal_entries()
invoice.ledger.post_journal_entries()
@@ -2713,7 +2737,7 @@ class ItemServiceCreateView(LoginRequiredMixin,SuccessMessageMixin,CreateView):
success_url = reverse_lazy("item_service_list")
success_message = _("Service created successfully.")
context_object_name = "service"
-
+
def form_valid(self, form):
vat = models.VatRate.objects.get(is_active=True)
form.instance.dealer = get_user_type(self.request.user.dealer)
@@ -2725,10 +2749,10 @@ class ItemServiceUpdateView(LoginRequiredMixin,SuccessMessageMixin,UpdateView):
model = models.AdditionalServices
form_class = forms.AdditionalServiceForm
template_name = "items/service/service_create.html"
- success_url = reverse_lazy("item_service_list")
+ success_url = reverse_lazy("item_service_list")
success_message = _("Service updated successfully.")
context_object_name = "service"
-
+
def form_valid(self, form):
vat = models.VatRate.objects.get(is_active=True)
form.instance.dealer = get_user_type(self.request.user.dealer)
@@ -2755,14 +2779,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)
@@ -2774,14 +2798,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
+
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 @@