From ff85feccdffbe1da5a101edfa70b5766cc5788c5 Mon Sep 17 00:00:00 2001 From: Marwan Alwali Date: Tue, 24 Dec 2024 17:13:00 +0300 Subject: [PATCH] update --- inventory/models.py | 5 ++++- inventory/signals.py | 26 +++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/inventory/models.py b/inventory/models.py index 1b62f54d..7a1a0881 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -648,6 +648,9 @@ class SaleQuotation(models.Model): ("DRAFT", _("Draft")), ("CONFIRMED", _("Confirmed")), ("CANCELED", _("Canceled")), + ("EXPIRED", _("Expired")), + ("PARTIALLY", _("Partially")), + ("COMPLETED", _("Completed")), ] dealer = models.ForeignKey( Dealer, on_delete=models.CASCADE, related_name="sales", null=True @@ -827,7 +830,7 @@ class Payment(models.Model): verbose_name_plural = _("payments") def __str__(self): - return f"Payment of {self.amount} on {self.date} for {self.order}" + return f"Payment of {self.amount} on {self.payment_date} for {self.quotation}" class Refund(models.Model): diff --git a/inventory/signals.py b/inventory/signals.py index 324b626e..ea65b4c4 100644 --- a/inventory/signals.py +++ b/inventory/signals.py @@ -1,7 +1,8 @@ from random import randint -from django.db.models.signals import post_save, post_delete,pre_delete +from django.db.models.signals import post_save, post_delete, pre_delete, pre_save from django.dispatch import receiver +from django.utils import timezone from django_ledger.models import EntityModel from django.utils.translation import gettext_lazy as _ @@ -251,3 +252,26 @@ def create_customer(sender, instance, created, **kwargs): # default_amount=instance.cost_price, # ) # print(f"Inventory item updated with CarFinance data for Car: {instance.car}") + + +@receiver(pre_save, sender=models.SaleQuotation) +def update_quotation_status(sender, instance, **kwargs): + if instance.valid_until and timezone.now() > instance.valid_until: + instance.status = 'expired' + # instance.total_price = instance.calculate_total_price() + + +@receiver(post_save, sender=models.Payment) +def update_status_on_payment(sender, instance, created, **kwargs): + if created: + quotation = instance.sale_quotation + total_payments = sum(payment.amount for payment in quotation.payments.all()) + if total_payments >= quotation.amount: + quotation.status = 'completed' + # SalesInvoice.objects.create(sales_order=order) + elif total_payments > 0: + quotation.status = 'partially_paid' + else: + quotation.status = 'pending' + quotation.save() +