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.
 
 
 
 
 

54 lines
2.3 KiB

# -*- coding: utf-8 -*-
from django.db import models
from custom_tariffs import TariffBase, TARIFF_CHOICES
from mydefs import MyChoicesAdapter
from agent import get_TransmitterClientKlass
# Класс похож на адаптер. Предназначен для Django CHOICES чтоб можно было передавать классывместо просто описания поля,
# классы передавать для того чтоб по значению из базы понять какой класс нужно взять для расчёта стоимости тарифа.
class _TariffChoicesAdapter(MyChoicesAdapter):
# На вход принимает кортеж кортежей, вложенный из 2х элементов: кода и класса, как: TARIFF_CHOICES
def __init__(self):
super(_TariffChoicesAdapter, self).__init__(TARIFF_CHOICES)
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)
time_of_action = models.IntegerField(default=30)
calc_type = models.CharField(max_length=2, default=TARIFF_CHOICES[0][0], choices=_TariffChoicesAdapter())
# Возвращает потомок класса TariffBase, методы которого дают нужную логику оплаты по тарифу
def get_calc_type(self):
ob = filter(lambda TC: TC[0] == self.calc_type, TARIFF_CHOICES)
if len(ob) > 0:
res_type = ob[0][1]
assert issubclass(res_type, TariffBase)
return res_type()
def __unicode__(self):
return u"%s (%f)" % (self.title, self.amount)
def tariff_save_signal(sender, instance, **kwargs):
assert isinstance(instance, Tariff)
tc = get_TransmitterClientKlass()()
if kwargs['created']:
tc.signal_tariff_create(instance)
else:
tc.signal_tariff_refresh(instance)
def tariff_remove_signal(sender, instance, **kwargs):
assert isinstance(instance, Tariff)
tc = get_TransmitterClientKlass()()
tc.signal_tariff_remove(instance)
models.signals.pre_save.connect(tariff_save_signal, sender=Tariff)
models.signals.post_delete.connect(tariff_remove_signal, sender=Tariff)