71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
from decimal import Decimal
|
|
from django_ledger.models import EstimateModel
|
|
from rich import print
|
|
|
|
from inventory.models import VatRate
|
|
|
|
|
|
def run():
|
|
estimate = EstimateModel.objects.first()
|
|
vat = VatRate.objects.filter(is_active=True).first()
|
|
data = estimate.get_itemtxs_data()[0].all()
|
|
total = sum(
|
|
[
|
|
Decimal(item.item_model.additional_info["car_finance"]["selling_price"])
|
|
* Decimal(item.ce_quantity or item.quantity)
|
|
for item in data
|
|
]
|
|
)
|
|
|
|
additional_services = []
|
|
|
|
for i in data:
|
|
if i.item_model.additional_info["additional_services"]:
|
|
additional_services.extend(
|
|
[
|
|
{"name": x.name, "price": x.price}
|
|
for x in i.item_model.additional_info["additional_services"]
|
|
]
|
|
)
|
|
cars_info = {
|
|
"cars": [
|
|
{
|
|
"vin": x.item_model.additional_info["car_info"]["vin"],
|
|
"make": x.item_model.additional_info["car_info"]["make"],
|
|
"model": x.item_model.additional_info["car_info"]["model"],
|
|
"year": x.item_model.additional_info["car_info"]["year"],
|
|
"trim": x.item_model.additional_info["car_info"]["mileage"],
|
|
"cost_price": x.item_model.additional_info["car_finance"]["cost_price"],
|
|
"selling_price": x.item_model.additional_info["car_finance"][
|
|
"selling_price"
|
|
],
|
|
"discount": x.item_model.additional_info["car_finance"][
|
|
"discount_amount"
|
|
],
|
|
"total": x.item_model.additional_info["car_finance"]["total"],
|
|
"additional_services": x.item_model.additional_info[
|
|
"additional_services"
|
|
],
|
|
}
|
|
for x in data
|
|
],
|
|
"quantity": data.count(),
|
|
"total_price": total,
|
|
"total__vat": (total * vat.rate) + total,
|
|
"total_discount": sum(
|
|
Decimal(x.item_model.additional_info["car_finance"]["discount_amount"])
|
|
for x in data
|
|
),
|
|
"grand_total": Decimal(total * vat.rate)
|
|
+ total
|
|
- Decimal(
|
|
sum(
|
|
Decimal(x.item_model.additional_info["car_finance"]["discount_amount"])
|
|
for x in data
|
|
)
|
|
),
|
|
"additionals": additional_services,
|
|
}
|
|
|
|
print(cars_info)
|