From bd1e4d73ae8d8b04e5639d7f9863069b15dbfbfa Mon Sep 17 00:00:00 2001 From: ismail Date: Tue, 5 Aug 2025 19:48:48 +0300 Subject: [PATCH] fix the financials --- inventory/models.py | 7 ++++-- inventory/signals.py | 2 +- inventory/tasks.py | 2 +- inventory/utils.py | 24 ++++++++++++-------- inventory/views.py | 8 +++---- templates/header.html | 4 ++-- templates/sales/estimates/estimate_form.html | 2 +- 7 files changed, 29 insertions(+), 20 deletions(-) diff --git a/inventory/models.py b/inventory/models.py index 2446d135..2c190588 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -728,6 +728,9 @@ class Car(Base): def additional_services(self): return self.finances.additional_services.all() @property + def total_additional_services(self): + return sum([service.price_ for service in self.additional_services]) + @property def ready(self): try: return all( @@ -2467,7 +2470,7 @@ class Notification(models.Model): user = models.ForeignKey( User, on_delete=models.CASCADE, related_name="notifications" ) - message = models.CharField(max_length=255, verbose_name=_("Message")) + message = models.TextField(verbose_name=_("Message")) is_read = models.BooleanField(default=False, verbose_name=_("Is Read")) created = models.DateTimeField(auto_now_add=True, verbose_name=_("Created")) @@ -2751,7 +2754,7 @@ class SaleOrder(models.Model): blank=True, ) comments = models.TextField(blank=True, null=True) - formatted_order_id = models.CharField(max_length=10, unique=True, editable=False) + formatted_order_id = models.CharField(max_length=255, unique=True, editable=False) # Status and Dates status = models.CharField( diff --git a/inventory/signals.py b/inventory/signals.py index c63a9c55..874d1e33 100644 --- a/inventory/signals.py +++ b/inventory/signals.py @@ -1125,7 +1125,7 @@ def estimate_in_review_notification(sender, instance, created, **kwargs): url=reverse( "estimate_detail", kwargs={"dealer_slug": dealer.slug, "pk": instance.pk}, - ), + ) ), ) diff --git a/inventory/tasks.py b/inventory/tasks.py index b04b49af..fecf7fda 100644 --- a/inventory/tasks.py +++ b/inventory/tasks.py @@ -69,7 +69,7 @@ def create_coa_accounts(instance): "role": roles.ASSET_CA_CASH, "balance_type": roles.DEBIT, "locked": False, - "default": False, + "default": False, }, { "code": "1030", diff --git a/inventory/utils.py b/inventory/utils.py index 86e5ccb1..164d93f7 100644 --- a/inventory/utils.py +++ b/inventory/utils.py @@ -1055,7 +1055,8 @@ class CarFinanceCalculator: quantity = self._get_quantity(item) car = item.item_model.car unit_price = Decimal(car.finances.marked_price) - + discount = self.extra_info.data.get("discount",0) + sell_price = unit_price - Decimal(discount) return { "item_number": item.item_model.item_number, "vin": car.vin, #car_info.get("vin"), @@ -1071,8 +1072,13 @@ class CarFinanceCalculator: "discount": car.finances.discount_amount, "quantity": quantity, "unit_price": unit_price, - "total": unit_price * Decimal(quantity), - "total_vat": car.finances.total_vat, + "sell_price": sell_price, + "total": unit_price, + "total_vat": sell_price * self.vat_rate, + "total_discount": discount, + "final_price": sell_price + (sell_price * self.vat_rate), + "total_additionals": car.total_additional_services, + "grand_total": sell_price + (sell_price * self.vat_rate) + car.total_additional_services, "additional_services": car.additional_services,# self._get_nested_value( #item, self.ADDITIONAL_SERVICES_KEY #), @@ -1087,10 +1093,10 @@ class CarFinanceCalculator: Decimal(item.price_) for item in self._get_additional_services()) total_discount = self.extra_info.data.get("discount",0) - total_price_discounted = total_price if total_discount: total_price_discounted = total_price - Decimal(total_discount) + print(total_price_discounted) total_vat_amount = total_price_discounted * self.vat_rate return { @@ -1371,10 +1377,10 @@ def _post_sale_and_cogs(invoice, dealer): ).first().item_model.car qty = Decimal(car_data['quantity']) - net_car_price = Decimal(car_data['total']) - net_add_price = Decimal(data['total_additionals']) + net_car_price = Decimal(car_data['total']) - Decimal(car_data['total_discount']) + net_additionals_price = Decimal(data['total_additionals']) vat_amount = Decimal(data['total_vat_amount']) * qty - grand_total = net_car_price + net_add_price + vat_amount + grand_total = net_car_price + net_additionals_price + vat_amount cost_total = Decimal(car_data['cost_price']) * qty # ------------------------------------------------------------------ @@ -1420,12 +1426,12 @@ def _post_sale_and_cogs(invoice, dealer): tx_type='credit' ) - if net_add_price > 0: + if net_additionals_price > 0: # Cr Sales – Additional Services TransactionModel.objects.create( journal_entry=je_sale, account=add_rev, - amount=net_add_price, + amount=net_additionals_price, tx_type='credit' ) diff --git a/inventory/views.py b/inventory/views.py index 42c5b5c9..b9eb9640 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -4807,7 +4807,7 @@ class EstimateDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView finance_data = calculator.get_finance_data() invoice_obj = InvoiceModel.objects.all().filter(ce_model=estimate).first() kwargs["data"] = finance_data - print(kwargs["data"]) + kwargs["invoice"] = invoice_obj try: car_finances = estimate.get_itemtxs_data()[0].first().item_model.car.finances @@ -5465,9 +5465,9 @@ def invoice_create(request, dealer_slug, pk): invoice_itemtxs = { i.get("item_number"): { - "unit_cost": i.get("total_vat"), - "quantity": i.get("quantity"), - "total_amount": i.get("total_vat"), + "unit_cost": i.get("grand_total"), + "quantity": 1, + "total_amount": i.get("grand_total"), } for i in finance_data.get("cars") } diff --git a/templates/header.html b/templates/header.html index 11f83261..d1342424 100644 --- a/templates/header.html +++ b/templates/header.html @@ -20,7 +20,7 @@
  • {% trans "Inventory"|capfirst %}
  • {% if perms.inventory.add_car %}
  • {% trans 'sales'|capfirst %}
  • {% if perms.django_ledger.add_estimatemodel %}