You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
depot_django/payments/utils.py

37 lines
1017 B
Python

from django.db.models import Q
from payments.models import ContainerTariffPeriod, AdditionalFees
def calculate_charges(container):
days = (container.expedited_on.date() - container.received_on.date()).days + 1
total = 0
size = '20' if container.container_type.length == 20 else '40'
tariff = ContainerTariffPeriod.objects.get(
Q(to_days__gt=days) | Q(to_days__isnull=True),
container_size=size,
from_days__lte=days,
)
fees = AdditionalFees.objects.first()
storage_charge = days * float(tariff.daily_rate)
if container.container_type.container_type == 'reefer':
storage_charge += days * float(fees.reefer_daily_supplement)
if container.swept:
total += float(fees.sweeping_fee)
if container.washed:
total += float(fees.fumigation_fee)
total += storage_charge
return {
'days': days,
'storage_charge': storage_charge,
'services_charge': total - storage_charge,
'total': total,
}