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.
 
 
 
 

92 lines
3.5 KiB

# -*- coding: utf-8 -*-
from datetime import datetime
from django.db import models
from django.core.exceptions import ObjectDoesNotExist
from dateutil.relativedelta import relativedelta
from . import consts
class UserProfileManager(models.Manager):
def create_profile(self, profile_type):
"""Создает профиль."""
profile = self.model(profile_type=profile_type)
profile.save()
return profile
class UserProfileFiltersManager(models.Manager):
def create_filters(self, user):
"""Создает фильтры профиля."""
filters = self.model(company=user.profile)
filters.save()
return filters
def get_or_create_filters(self, user):
"""Возвращает фильтры профиля. Если их вдруг нет, то создает."""
try:
filters = self.get(company=user.profile)
except ObjectDoesNotExist:
filters = self.create_filters(company=user.profile)
filters.save()
return filters
class BankAccountManager(models.Manager):
def get_main(self, company):
"""Возвращает основной расчетный счет пользователя или None если у него еще нет расчетных счетов."""
try:
return self.filter(company=company).order_by('-is_main', 'created_at')[0]
except IndexError:
return None
def get_all(self, company):
"""Возвращает все расчетные счета пользователя.
Отсортированы так, что первым идет основной счет, а потом остальные в порядке их добавления."""
try:
return self.filter(company=company).order_by('-is_main', 'created_at')
except:
return self.none()
def have_main(self, company):
"""Возвращает True, если у пользователя есть основной расчетный счет, и False в противном случае."""
return True if self.filter(company=company, is_main=True) else False
def force_main(self, company):
"""Проверяет есть ли у пользователя основной расчетный счет.
И если нет - принудительно его выставляет.
"""
if not self.have_main(company=company):
try:
accounts = self.get_all(company=company)[0]
accounts.is_main=True
accounts.save()
except IndexError:
pass
class ClientManager(models.Manager):
def get_all(self, company):
"""Возвращает всех клиентов пользователя."""
try:
return self.filter(company=company)
except:
return self.none()
class LicenseManager(models.Manager):
def create_test_period_license(self, company):
"""Создать лицензию на пробный период."""
now_ = datetime.now()
license = self.model(
company=company,
date_from = now_.today(),
date_to = now_.today() + relativedelta(days = consts.LICENSE_TEST_PERIOD_DAYS - 1),
term=consts.LICENSE_TEST_PERIOD_TERM,
status=consts.LICENSE_INACTIVE,
payform=consts.PAYFORM_TEST_PERIOD
)
license.save()
return license