haikal/inventory/utilities/financials.py
2024-12-26 07:51:23 +00:00

44 lines
1.7 KiB
Python

from decimal import Decimal
from django.conf import settings
from inventory import models
def calculate_vat(value):
"""Helper to calculate VAT dynamically for a given value."""
vat_rate = getattr(settings, 'VAT_RATE', Decimal('0.15')) # Default VAT rate
return (value * vat_rate).quantize(Decimal('0.01'))
# def get_financial_value(instance,attribute,vat=False):
# if vat:
# return calculate_vat(getattr(instance, attribute, Decimal('0.00')) if instance else Decimal('0.00'))
# return getattr(instance, attribute, Decimal('0.00')) if instance else Decimal('0.00')
def get_financial_value(name,vat=False):
val = models.AdditionalServices.objects.filter(name=name).first()
if not val:
return 0
if vat:
return (val.price * settings.VAT_RATE).quantize(Decimal('0.01'))
return val.price
def get_total_financials(instance,vat=False):
total = 0
if instance.additional_services.exists():
total = sum(x.price for x in instance.additional_services.all()) + instance.selling_price
if vat:
total = (total * settings.VAT_RATE).quantize(Decimal('0.01')) + total
# price_after_discount = get_financial_value(instance,"selling_price",vat) - get_financial_value(instance,"discount_amount",vat)
# subtotal = (
# price_after_discount +
# get_financial_value("registration_fee") +
# get_financial_value("administration_fee",vat) +
# get_financial_value("transportation_fee",vat) +
# get_financial_value("custom_card_fee",vat))
return total
def get_total(instance):
total = get_total_financials(instance,vat=True)
# total_vat = get_total_financials(instance,vat=True)
return total