from datetime import timedelta from django.conf import settings from django.db import models from core.utils import CachedSingleton @CachedSingleton("global_settings") class GlobalSettings(models.Model): yuan_rate = models.DecimalField('Курс CNY/RUB', max_digits=10, decimal_places=2, default=0) yuan_rate_last_updated = models.DateTimeField('Дата обновления курса CNY/RUB', null=True, default=None) yuan_rate_commission = models.DecimalField('Наценка на курс юаня, руб', max_digits=10, decimal_places=2, default=0) delivery_price_CN = models.DecimalField('Цена доставки по Китаю', max_digits=10, decimal_places=2, default=0) commission_rub = models.DecimalField('Комиссия, руб', max_digits=10, decimal_places=2, default=0) pickup_address = models.CharField('Адрес пункта самовывоза', max_length=200, blank=True, null=True) time_to_buy = models.DurationField('Время на покупку', help_text="Через N времени заказ переходит из статуса 'Новый' в 'Черновик'", default=timedelta(hours=3)) class Meta: verbose_name = 'Глобальные настройки' verbose_name_plural = 'Глобальные настройки' def __str__(self) -> str: return f'GlobalSettings <{self.id}>' @property def full_yuan_rate(self): return self.yuan_rate + self.yuan_rate_commission DEFAULT_CONFIG = settings.BONUS_PROGRAM_DEFAULT_CONFIG @CachedSingleton("bonus_config") class BonusProgramConfig(models.Model): amount_signup = models.PositiveSmallIntegerField( 'Бонус за регистрацию', default=DEFAULT_CONFIG['amounts']['signup']) amount_referral = models.PositiveSmallIntegerField( 'Реферальный бонус', default=DEFAULT_CONFIG['amounts']['referral']) class Meta: verbose_name = 'Настройки бонусной программы' verbose_name_plural = 'Настройки бонусной программы'