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.
70 lines
2.8 KiB
70 lines
2.8 KiB
# -*- 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()
|
|
|