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.
31 lines
1.2 KiB
31 lines
1.2 KiB
# -*- coding: utf-8 -*-
|
|
from django.db import models
|
|
|
|
from .custom_tariffs import TariffBase, TARIFF_CHOICES
|
|
from mydefs import MyChoicesAdapter
|
|
|
|
|
|
class Tariff(models.Model):
|
|
title = models.CharField(max_length=32)
|
|
descr = models.CharField(max_length=256)
|
|
speedIn = models.FloatField(default=0.0)
|
|
speedOut = models.FloatField(default=0.0)
|
|
amount = models.FloatField(default=0.0)
|
|
calc_type = models.CharField(max_length=2, default=TARIFF_CHOICES[0][0], choices=MyChoicesAdapter(TARIFF_CHOICES))
|
|
is_admin = models.BooleanField(default=False)
|
|
|
|
# Возвращает потомок класса TariffBase, методы которого дают нужную логику оплаты по тарифу
|
|
def get_calc_type(self):
|
|
ob = [TC for TC in TARIFF_CHOICES if TC[0] == self.calc_type]
|
|
if len(ob) > 0:
|
|
res_type = ob[0][1]
|
|
assert issubclass(res_type, TariffBase)
|
|
return res_type
|
|
|
|
def calc_deadline(self):
|
|
calc_type = self.get_calc_type()
|
|
calc_obj = calc_type(self)
|
|
return calc_obj.calc_deadline()
|
|
|
|
def __str__(self):
|
|
return "%s (%.2f)" % (self.title, self.amount)
|