This commit is contained in:
Marwan Alwali 2024-12-23 17:49:53 +03:00
parent c6a802e377
commit 9e8ef1978f
2 changed files with 59 additions and 146 deletions

View File

@ -1,27 +1,15 @@
from random import randint 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
from django.dispatch import receiver from django.dispatch import receiver
<<<<<<< HEAD
from django_ledger.models import (
EntityModel,
VendorModel,
CustomerModel,
UnitOfMeasureModel,
AccountModel,
ItemModelAbstract,
ItemModel
)
from django.contrib.auth import get_user_model
=======
from django_ledger.models import EntityModel from django_ledger.models import EntityModel
>>>>>>> d57702ea7abaa3ad61315b9d593fbd8c32e314e2
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from . import models from . import models
# @receiver(post_save, sender=models.SaleQuotation) # @receiver(post_save, sender=models.SaleQuotation)
# def link_quotation_to_entity(sender, instance, created, **kwargs): # def link_quotation_to_entity(sender, instance, created, **kwargs):
# if created: # if created:
@ -34,72 +22,21 @@ from . import models
# user = instance.user # user = instance.user
# if user: # if user:
# user.delete() # user.delete()
User = get_user_model()
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
dealer = models.Dealer.objects.create(user=instance, name=instance.username)
# dealer.user.set_password("Tenhal@123")
dealer.save()
@receiver(post_save, sender=models.Car)
def create_product_for_car(sender, instance, created, **kwargs):
if created:
entity = EntityModel.objects.get(name=instance.dealer.get_root_dealer.name)
product_model = entity.create_item_product(
name=f"{instance.year} {instance.id_car_make} {instance.id_car_model} {instance.id_car_trim}",
uom_model=entity.get_uom_all().first(),
item_type=ItemModel.ITEM_TYPE_OTHER,
coa_model=entity.get_default_coa(),
)
print(f"Created product: {product_model.name}")
@receiver(post_save, sender=models.CarFinance)
def update_product_default_value(sender, instance, **kwargs):
# Get the associated car
car = instance.car
# Get the entity associated with the dealer
entity = EntityModel.objects.get(name=car.dealer.get_root_dealer.name) # Assuming the dealer's name matches the entity name
# Get the product in Django Ledger associated with the car
items_products = entity.get_items_products()
try:
product_model = items_products.get(
name=f"{car.year} {car.id_car_make} {car.id_car_model} {car.id_car_trim}"
)
except ItemModel.DoesNotExist:
print(f"Product for car {car} does not exist in Django Ledger.")
return
# Update the default value per unit of measure for the product
product_model.default_amount = instance.selling_price
product_model.save()
print(f"Updated product {product_model.name} with default value: {product_model.default_amount}")
@receiver(post_save, sender=models.Car) @receiver(post_save, sender=models.Car)
def create_car_location(sender, instance, created, **kwargs): def create_car_location(sender, instance, created, **kwargs):
""" """
Signal to create or update the car's location when a car instance is saved. Signal to create or update the car's location when a car instance is saved.
""" """
try: try:
if created: if created:
if instance.dealer is None: if instance.dealer is None:
raise ValueError( raise ValueError(f"Cannot create CarLocation for car {instance.vin}: dealer is missing.")
f"Cannot create CarLocation for car {instance.vin}: dealer is missing."
)
models.CarLocation.objects.create( models.CarLocation.objects.create(
car=instance, car=instance,
owner=instance.dealer, owner=instance.dealer,
showroom=instance.dealer, showroom=instance.dealer,
description=f"Initial location set for car {instance.vin}.", description=f"Initial location set for car {instance.vin}."
) )
print("Car Location created") print("Car Location created")
except Exception as e: except Exception as e:
@ -126,27 +63,6 @@ def update_car_status_on_reservation_delete(sender, instance, **kwargs):
@receiver(post_save, sender=models.Dealer) @receiver(post_save, sender=models.Dealer)
def create_ledger_entity(sender, instance, created, **kwargs): def create_ledger_entity(sender, instance, created, **kwargs):
if created: if created:
<<<<<<< HEAD
# Group.objects.get(name=instance.dealer_type.lower()).user_set.add(instance.user)
try:
entity, created = EntityModel.objects.get_or_create(
name=instance.get_root_dealer.name,
admin=instance.get_root_dealer.user,
# address_1=instance.address,
accrual_method=False,
fy_start_month=1,
depth=0,
)
if created:
default_coa = entity.create_chart_of_accounts(
assign_as_default=True, commit=True, coa_name=_("Chart of Accounts")
)
if default_coa:
entity.populate_default_coa(
activate_accounts=True, coa_model=default_coa
)
print(f"Ledger entity created for Dealer: {instance.name}")
=======
entity, created = EntityModel.objects.get_or_create( entity, created = EntityModel.objects.get_or_create(
name=instance.get_root_dealer.name, name=instance.get_root_dealer.name,
admin=instance.get_root_dealer.user, admin=instance.get_root_dealer.user,
@ -163,67 +79,66 @@ def create_ledger_entity(sender, instance, created, **kwargs):
if default_coa: if default_coa:
entity.populate_default_coa(activate_accounts=True, coa_model=default_coa) entity.populate_default_coa(activate_accounts=True, coa_model=default_coa)
print(f"Ledger entity created for Dealer: {instance.name}") print(f"Ledger entity created for Dealer: {instance.name}")
>>>>>>> d57702ea7abaa3ad61315b9d593fbd8c32e314e2
entity.create_account( # entity.create_account(
coa_model=default_coa, # coa_model=coa,
code="10100", # code=1010,
role='asset_ca_cash', # role='asset_ca_cash',
name=_('Cash'), # name=_('Cash'),
balance_type="debit", # balance_type="debit",
) # )
entity.create_account( # entity.create_account(
coa_model=default_coa, # coa_model=coa,
code="11000", # code=1100,
role='asset_ca_recv', # role='asset_ca_recv',
name=_('Accounts Receivable'), # name=_('Accounts Receivable'),
balance_type="debit", # balance_type="debit",
) # )
entity.create_account( # entity.create_account(
coa_model=default_coa, # coa_model=coa,
code="12000", # code=1200,
role='asset_ca_inv', # role='asset_ca_inv',
name=_('Inventory'), # name=_('Inventory'),
balance_type="debit", # balance_type="debit",
active=True) # active=True)
entity.create_account(
coa_model=default_coa,
code="20100",
role='lia_cl_acc_payable',
name=_('Accounts Payable'),
balance_type="credit",
active=True)
entity.create_account(
coa_model=default_coa,
code="40100",
role='in_operational',
name=_('Sales Income'),
balance_type="credit",
active=True)
entity.create_account(
coa_model=default_coa,
code="50100",
role='cogs_regular',
name=_('Cost of Goods Sold'),
balance_type="debit",
active=True)
except Exception as e:
print(f"Failed to create Ledger entity for Dealer: {instance.name}. Error: {e}")
# entity = EntityModel.objects.filter(name=instance.dealer.name).first()
# #
# entity.create_account(
# coa_model=coa,
# code=2010,
# role='lia_cl_acc_payable',
# name=_('Accounts Payable'),
# balance_type="credit",
# active=True)
#
# entity.create_account(
# coa_model=coa,
# code=4010,
# role='in_operational',
# name=_('Sales Income'),
# balance_type="credit",
# active=True)
#
# entity.create_account(
# coa_model=coa,
# code=5010,
# role='cogs_regular',
# name=_('Cost of Goods Sold'),
# balance_type="debit",
# active=True)
# uom_name = _("Unit") # uom_name = _("Unit")
# unit_abbr = _("U") # unit_abbr = _("U")
# #
# entity.create_uom(uom_name, unit_abbr) # entity.create_uom(uom_name, unit_abbr)
# Create Vendor # Create Vendor
@receiver(post_save, sender=models.Vendor) @receiver(post_save, sender=models.Vendor)
def create_ledger_vendor(sender, instance, created, **kwargs): def create_ledger_vendor(sender, instance, created, **kwargs):
if created: if created:
entity = EntityModel.objects.filter(name=instance.dealer.name).first() entity = EntityModel.objects.filter(name=instance.dealer.name).first()
@ -238,8 +153,8 @@ def create_ledger_vendor(sender, instance, created, **kwargs):
additional_info={ additional_info={
"arabic_name": instance.arabic_name, "arabic_name": instance.arabic_name,
"contact_person": instance.contact_person, "contact_person": instance.contact_person,
}, })
)
print(f"VendorModel created for Vendor: {instance.name}") print(f"VendorModel created for Vendor: {instance.name}")
@ -247,9 +162,7 @@ def create_ledger_vendor(sender, instance, created, **kwargs):
@receiver(post_save, sender=models.Customer) @receiver(post_save, sender=models.Customer)
def create_customer(sender, instance, created, **kwargs): def create_customer(sender, instance, created, **kwargs):
if created: if created:
entity = EntityModel.objects.filter( entity = EntityModel.objects.filter(name=instance.dealer.get_root_dealer.name).first()
name=instance.dealer.get_root_dealer.name
).first()
name = f"{instance.first_name} {instance.middle_name} {instance.last_name}" name = f"{instance.first_name} {instance.middle_name} {instance.last_name}"
entity.create_customer( entity.create_customer(
@ -261,7 +174,7 @@ def create_customer(sender, instance, created, **kwargs):
"sales_tax_rate": 0.15, "sales_tax_rate": 0.15,
"active": True, "active": True,
"hidden": False, "hidden": False,
"additional_info": {}, "additional_info": {}
} }
) )