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.
64 lines
2.6 KiB
64 lines
2.6 KiB
# -*- coding: utf-8 -*-
|
|
from django.db import models
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
|
|
|
|
class UserProfileManager(models.Manager):
|
|
def create_profile(self, user, profile_type):
|
|
"""Создает профиль."""
|
|
profile = self.model(user=user, profile_type=profile_type)
|
|
profile.save()
|
|
return profile
|
|
|
|
|
|
class UserProfileFiltersManager(models.Manager):
|
|
def create_filters(self, user):
|
|
"""Создает фильтры профиля."""
|
|
filters = self.model(user=user)
|
|
filters.save()
|
|
return filters
|
|
|
|
def get_or_create_filters(self, user):
|
|
"""Возвращает фильтры профиля. Если их вдруг нет, то создает."""
|
|
try:
|
|
filters = self.get(user=user)
|
|
except ObjectDoesNotExist:
|
|
filters = self.create_filters(user=user)
|
|
filters.save()
|
|
return filters
|
|
|
|
|
|
class BankAccountManager(models.Manager):
|
|
def get_main(self, user):
|
|
"""Возвращает основной расчетный счет пользователя или None если у него еще нет расчетных счетов."""
|
|
try:
|
|
return self.filter(user=user).order_by('-is_main', 'created_at')[0]
|
|
except IndexError:
|
|
return None
|
|
|
|
def get_all(self, user):
|
|
"""Возвращает все расчетные счета пользователя.
|
|
Отсортированы так, что первым идет основной счет, а потом остальные в порядке их добавления."""
|
|
return self.filter(user=user).order_by('-is_main', 'created_at')
|
|
|
|
def have_main(self, user):
|
|
"""Возвращает True, если у пользователя есть основной расчетный счет, и False в противном случае."""
|
|
return True if self.filter(user=user, is_main=True) else False
|
|
|
|
def force_main(self, user):
|
|
"""Проверяет есть ли у пользователя основной расчетный счет.
|
|
И если нет - принудительно его выставляет.
|
|
"""
|
|
if not self.have_main(user=user):
|
|
try:
|
|
accounts = self.get_all(user=user)[0]
|
|
accounts.is_main=True
|
|
accounts.save()
|
|
except IndexError:
|
|
pass
|
|
|
|
|
|
class ClientManager(models.Manager):
|
|
def get_all(self, user):
|
|
"""Возвращает всех клиентов пользователя."""
|
|
return self.filter(user=user)
|
|
|