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

# -*- 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)