# -*- coding: utf-8 -*- from django.db import models from django.core.exceptions import ObjectDoesNotExist 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()