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.
37 lines
1017 B
Python
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,
|
|
}
|