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

65 lines
2.3 KiB

# -*- coding: utf-8 -*-
from datetime import datetime, timedelta
from django.utils import timezone
from .base_intr import TariffBase
# from abonapp import AbonTariff
class TariffDefault(TariffBase):
# Базовый функционал считает стоимость пропорционально использованному времени
def calc_amount(self, abon_tariff):
#assert isinstance(abon_tariff, AbonTariff)
# сейчас
nw = datetime.now(tz=timezone.get_current_timezone())
# сколько прошло с начала действия услуги
# если времени начала нет то это начало действия, использованное время 0
time_diff = nw - abon_tariff.time_start if abon_tariff.time_start else timedelta(0)
# времени в этом месяце
curr_month_time = datetime(nw.year, nw.month if nw.month == 12 else nw.month + 1, 1) - timedelta(days=1)
curr_month_time = timedelta(days=curr_month_time.day)
# Сколько это в процентах от всего месяца (k - коеффициент, т.е. без %)
k = time_diff.total_seconds() / curr_month_time.total_seconds()
# результат - это полная стоимость тарифа умноженная на k
res = k * abon_tariff.tariff.amount
return float(res)
@staticmethod
def description():
return 'Базовый расчётный функционал'
class TariffDp(TariffBase):
# в IS снимается вся стоимость тарифа вне зависимости от времени использования
# просто возвращаем всю стоимость тарифа
def calc_amount(self, abon_tariff):
return float(abon_tariff.tariff.amount)
@staticmethod
def description():
return 'Как в IS'
class TariffCp(TariffBase):
def calc_amount(self, abon_tariff):
return 12.6
@staticmethod
def description():
return 'Пользовательский'
# Первый - всегда по умолчанию
TARIFF_CHOICES = (
('Df', TariffDefault),
('Dp', TariffDp),
('Cp', TariffCp)
)