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