Merge branch 'main' of http://10.10.1.136:3000/ismail/haikal into frontend
This commit is contained in:
commit
e6e2ed0150
@ -728,6 +728,9 @@ class Car(Base):
|
|||||||
def additional_services(self):
|
def additional_services(self):
|
||||||
return self.finances.additional_services.all()
|
return self.finances.additional_services.all()
|
||||||
@property
|
@property
|
||||||
|
def total_additional_services(self):
|
||||||
|
return sum([service.price_ for service in self.additional_services])
|
||||||
|
@property
|
||||||
def ready(self):
|
def ready(self):
|
||||||
try:
|
try:
|
||||||
return all(
|
return all(
|
||||||
@ -2467,7 +2470,7 @@ class Notification(models.Model):
|
|||||||
user = models.ForeignKey(
|
user = models.ForeignKey(
|
||||||
User, on_delete=models.CASCADE, related_name="notifications"
|
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"))
|
is_read = models.BooleanField(default=False, verbose_name=_("Is Read"))
|
||||||
created = models.DateTimeField(auto_now_add=True, verbose_name=_("Created"))
|
created = models.DateTimeField(auto_now_add=True, verbose_name=_("Created"))
|
||||||
|
|
||||||
@ -2751,7 +2754,7 @@ class SaleOrder(models.Model):
|
|||||||
blank=True,
|
blank=True,
|
||||||
)
|
)
|
||||||
comments = models.TextField(blank=True, null=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 and Dates
|
||||||
status = models.CharField(
|
status = models.CharField(
|
||||||
|
|||||||
@ -1125,7 +1125,7 @@ def estimate_in_review_notification(sender, instance, created, **kwargs):
|
|||||||
url=reverse(
|
url=reverse(
|
||||||
"estimate_detail",
|
"estimate_detail",
|
||||||
kwargs={"dealer_slug": dealer.slug, "pk": instance.pk},
|
kwargs={"dealer_slug": dealer.slug, "pk": instance.pk},
|
||||||
),
|
)
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -69,7 +69,7 @@ def create_coa_accounts(instance):
|
|||||||
"role": roles.ASSET_CA_CASH,
|
"role": roles.ASSET_CA_CASH,
|
||||||
"balance_type": roles.DEBIT,
|
"balance_type": roles.DEBIT,
|
||||||
"locked": False,
|
"locked": False,
|
||||||
"default": False,
|
"default": False,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"code": "1030",
|
"code": "1030",
|
||||||
|
|||||||
@ -1055,7 +1055,8 @@ class CarFinanceCalculator:
|
|||||||
quantity = self._get_quantity(item)
|
quantity = self._get_quantity(item)
|
||||||
car = item.item_model.car
|
car = item.item_model.car
|
||||||
unit_price = Decimal(car.finances.marked_price)
|
unit_price = Decimal(car.finances.marked_price)
|
||||||
|
discount = self.extra_info.data.get("discount",0)
|
||||||
|
sell_price = unit_price - Decimal(discount)
|
||||||
return {
|
return {
|
||||||
"item_number": item.item_model.item_number,
|
"item_number": item.item_model.item_number,
|
||||||
"vin": car.vin, #car_info.get("vin"),
|
"vin": car.vin, #car_info.get("vin"),
|
||||||
@ -1071,8 +1072,13 @@ class CarFinanceCalculator:
|
|||||||
"discount": car.finances.discount_amount,
|
"discount": car.finances.discount_amount,
|
||||||
"quantity": quantity,
|
"quantity": quantity,
|
||||||
"unit_price": unit_price,
|
"unit_price": unit_price,
|
||||||
"total": unit_price * Decimal(quantity),
|
"sell_price": sell_price,
|
||||||
"total_vat": car.finances.total_vat,
|
"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(
|
"additional_services": car.additional_services,# self._get_nested_value(
|
||||||
#item, self.ADDITIONAL_SERVICES_KEY
|
#item, self.ADDITIONAL_SERVICES_KEY
|
||||||
#),
|
#),
|
||||||
@ -1087,10 +1093,10 @@ class CarFinanceCalculator:
|
|||||||
Decimal(item.price_) for item in self._get_additional_services())
|
Decimal(item.price_) for item in self._get_additional_services())
|
||||||
|
|
||||||
total_discount = self.extra_info.data.get("discount",0)
|
total_discount = self.extra_info.data.get("discount",0)
|
||||||
|
|
||||||
total_price_discounted = total_price
|
total_price_discounted = total_price
|
||||||
if total_discount:
|
if total_discount:
|
||||||
total_price_discounted = total_price - Decimal(total_discount)
|
total_price_discounted = total_price - Decimal(total_discount)
|
||||||
|
print(total_price_discounted)
|
||||||
total_vat_amount = total_price_discounted * self.vat_rate
|
total_vat_amount = total_price_discounted * self.vat_rate
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -1371,10 +1377,10 @@ def _post_sale_and_cogs(invoice, dealer):
|
|||||||
).first().item_model.car
|
).first().item_model.car
|
||||||
qty = Decimal(car_data['quantity'])
|
qty = Decimal(car_data['quantity'])
|
||||||
|
|
||||||
net_car_price = Decimal(car_data['total'])
|
net_car_price = Decimal(car_data['total']) - Decimal(car_data['total_discount'])
|
||||||
net_add_price = Decimal(data['total_additionals'])
|
net_additionals_price = Decimal(data['total_additionals'])
|
||||||
vat_amount = Decimal(data['total_vat_amount']) * qty
|
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
|
cost_total = Decimal(car_data['cost_price']) * qty
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
@ -1420,12 +1426,12 @@ def _post_sale_and_cogs(invoice, dealer):
|
|||||||
tx_type='credit'
|
tx_type='credit'
|
||||||
)
|
)
|
||||||
|
|
||||||
if net_add_price > 0:
|
if net_additionals_price > 0:
|
||||||
# Cr Sales – Additional Services
|
# Cr Sales – Additional Services
|
||||||
TransactionModel.objects.create(
|
TransactionModel.objects.create(
|
||||||
journal_entry=je_sale,
|
journal_entry=je_sale,
|
||||||
account=add_rev,
|
account=add_rev,
|
||||||
amount=net_add_price,
|
amount=net_additionals_price,
|
||||||
tx_type='credit'
|
tx_type='credit'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -4807,7 +4807,7 @@ class EstimateDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView
|
|||||||
finance_data = calculator.get_finance_data()
|
finance_data = calculator.get_finance_data()
|
||||||
invoice_obj = InvoiceModel.objects.all().filter(ce_model=estimate).first()
|
invoice_obj = InvoiceModel.objects.all().filter(ce_model=estimate).first()
|
||||||
kwargs["data"] = finance_data
|
kwargs["data"] = finance_data
|
||||||
print(kwargs["data"])
|
|
||||||
kwargs["invoice"] = invoice_obj
|
kwargs["invoice"] = invoice_obj
|
||||||
try:
|
try:
|
||||||
car_finances = estimate.get_itemtxs_data()[0].first().item_model.car.finances
|
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 = {
|
invoice_itemtxs = {
|
||||||
i.get("item_number"): {
|
i.get("item_number"): {
|
||||||
"unit_cost": i.get("total_vat"),
|
"unit_cost": i.get("grand_total"),
|
||||||
"quantity": i.get("quantity"),
|
"quantity": 1,
|
||||||
"total_amount": i.get("total_vat"),
|
"total_amount": i.get("grand_total"),
|
||||||
}
|
}
|
||||||
for i in finance_data.get("cars")
|
for i in finance_data.get("cars")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
<li class="collapsed-nav-item-title d-none">{% trans "Inventory"|capfirst %}</li>
|
<li class="collapsed-nav-item-title d-none">{% trans "Inventory"|capfirst %}</li>
|
||||||
{% if perms.inventory.add_car %}
|
{% if perms.inventory.add_car %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a hx-boost="true" id="btn-add-car" class="nav-link btn-add-car" href="{% url 'car_add' request.dealer.slug %}">
|
<a hx-boost="false" id="btn-add-car" class="nav-link btn-add-car" href="{% url 'car_add' request.dealer.slug %}">
|
||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
<span class="nav-link-icon"><span class="fas fa-plus-circle"></span></span><span class="nav-link-text">{% trans "add car"|capfirst %}</span>
|
<span class="nav-link-icon"><span class="fas fa-plus-circle"></span></span><span class="nav-link-text">{% trans "add car"|capfirst %}</span>
|
||||||
</div>
|
</div>
|
||||||
@ -164,7 +164,7 @@
|
|||||||
<li class="collapsed-nav-item-title d-none">{% trans 'sales'|capfirst %}</li>
|
<li class="collapsed-nav-item-title d-none">{% trans 'sales'|capfirst %}</li>
|
||||||
{% if perms.django_ledger.add_estimatemodel %}
|
{% if perms.django_ledger.add_estimatemodel %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'estimate_create' request.dealer.slug %}">
|
<a hx-boost="false" class="nav-link" href="{% url 'estimate_create' request.dealer.slug %}">
|
||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
<span class="nav-link-icon"><span class="fas fa-handshake"></span></span><span class="nav-link-text">{% trans "create quotation"|capfirst %}</span>
|
<span class="nav-link-icon"><span class="fas fa-handshake"></span></span><span class="nav-link-text">{% trans "create quotation"|capfirst %}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -191,7 +191,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user