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.
66 lines
2.1 KiB
66 lines
2.1 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())
|
|
|
|
# сколько прошло с начала действия услуги
|
|
time_diff = nw - abon_tariff.time_start
|
|
|
|
# времени в этом месяце
|
|
curr_month_time = datetime(nw.year, 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 u'Базовый расчётный функционал'
|
|
|
|
|
|
class TariffDp(TariffBase):
|
|
# в IS снимается вся стоимость тарифа вне зависимости от времени использования
|
|
|
|
# просто возвращаем всю стоимость тарифа
|
|
def calc_amount(self, abon_tariff):
|
|
return float(abon_tariff.tariff.amount)
|
|
|
|
@staticmethod
|
|
def description():
|
|
return u'Как в IS'
|
|
|
|
|
|
class TariffCp(TariffBase):
|
|
|
|
def calc_amount(self, abon_tariff):
|
|
return 12.6
|
|
|
|
@staticmethod
|
|
def description():
|
|
return u'Пользовательский'
|
|
|
|
|
|
# Первый - всегда по умолчанию
|
|
TARIFF_CHOICES = (
|
|
('Df', TariffDefault),
|
|
('Dp', TariffDp),
|
|
('Cp', TariffCp)
|
|
)
|