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.
 
 
 
 
 
 

82 lines
2.6 KiB

from datetime import datetime
from django.db import models
from store.models import ProductVariation
def get_change(current, previous):
if current == previous:
return 100.0
try:
return (abs(current - previous) / previous) * 100.0
except ZeroDivisionError:
return 0
class DTYSModel(models.Model):
"""Drop `Til You Shop Model"""
product = models.ForeignKey(ProductVariation)
price_start = models.IntegerField(verbose_name="Начальная цена")
price_end = models.IntegerField(verbose_name="Конечная цена (минимальная)")
price_stopped = models.IntegerField(verbose_name="Прайс заказа", default=0)
start_date = models.DateField(verbose_name='Дата начала')
start_time = models.TimeField(verbose_name='Время начала')
end_date = models.DateField(verbose_name='Дата окончания')
end_time = models.TimeField(verbose_name='Время окончания')
is_stopped = models.BooleanField(verbose_name="Остановлен", default=False)
is_public = models.BooleanField(verbose_name="Опубликован", default=False)
is_ordered = models.BooleanField(verbose_name="Заказан", default=False)
@property
def end_datetime(self):
return datetime.combine(self.end_date, self.end_time)
@property
def start_datetime(self):
return datetime.combine(self.start_date, self.start_time)
def get_dec_by_sec(self):
return "%.1f" % (self.get_price_diff() / self.get_date_delta())
def get_price_diff(self):
return self.price_start - self.price_end
def _time_percent(self):
time_percent = get_change(
self.get_delta_now(),
self.get_date_delta()
)
return time_percent
def get_delta_now(self):
"""in seconds"""
from django.utils import timezone as tz
_now = tz.now()
return (self.end_datetime - _now).total_seconds()
def get_date_delta(self):
""" in seconds """
return (self.end_datetime - self.start_datetime).total_seconds()
def get_current_price(self):
dec_from_price = (self.get_price_diff() * (self._time_percent() / 100))
price_current = self.price_start - dec_from_price
return price_current
def current_price_format(self):
return "%.1f" % self.get_current_price()
def stop(self):
"""Stop this DTYS"""
self.is_stopped = True
if self.price_stopped == 0:
self.price_stopped = max(self.price_end, self.get_current_price())
self.save()