models.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. # coding=utf-8
  2. from django.db import models
  3. from django.db.models import Q
  4. from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager, Group, AbstractUser
  5. from django.utils import timezone
  6. from rest_framework.utils import model_meta
  7. from utils.exceptions import CustomError
  8. from django.conf import settings
  9. from apps.agent.models import Store, Agent,GeneralAgent
  10. class UserManager(BaseUserManager):
  11. def create_user(self, type, username, password=None, **extra_fields):
  12. if not username:
  13. raise CustomError(u'请输入账号!')
  14. count = User.objects.filter(username=username).count()
  15. if count > 0:
  16. raise CustomError(u'该账号已存在!')
  17. user = self.model(
  18. type=type,
  19. username=username,
  20. is_superuser=False,
  21. last_login=timezone.now(),
  22. **extra_fields
  23. )
  24. user.set_password(password)
  25. user.save(using=self._db)
  26. return user
  27. class User(AbstractBaseUser, PermissionsMixin):
  28. WAITING_JOIN = 1
  29. INSERVICE = 2
  30. DIMISSION = 3
  31. STATUS_CHOICES = (
  32. (WAITING_JOIN, u'待入职'),
  33. (INSERVICE, u'在职'),
  34. (DIMISSION, u'离职'),
  35. )
  36. username = models.CharField(verbose_name=u'用户名', max_length=30, unique=True, db_index=True,
  37. help_text=u'不多于20个字符。只能用字母、数字和字符。')
  38. # password = models.CharField(u'密码', max_length=128, blank=True,)
  39. is_active = models.BooleanField(verbose_name=u'是否可用', default=True, editable=False)
  40. date_joined = models.DateTimeField(verbose_name=u'注册时间', auto_now_add=True, editable=False)
  41. name = models.CharField(max_length=20, verbose_name=u"姓名")
  42. gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u"性别")
  43. ID_card = models.CharField(max_length=18, verbose_name=u"身份证号", null=True, blank=True)
  44. address = models.CharField(max_length=100, verbose_name=u"家庭住址", null=True, blank=True)
  45. tel = models.CharField(max_length=15, verbose_name=u"手机")
  46. general_agent = models.ForeignKey(GeneralAgent, verbose_name=u"总代理", null=True, blank=True, on_delete=models.PROTECT)
  47. agent = models.ForeignKey(Agent, verbose_name=u"代理商", null=True, blank=True, on_delete=models.PROTECT)
  48. store = models.ForeignKey(Store, verbose_name=u"所属门店", null=True, blank=True, on_delete=models.PROTECT)
  49. status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u"是否在职", default=INSERVICE)
  50. check_user = models.ForeignKey('User', verbose_name=u'审核人', related_name='user_check_user', null=True,
  51. on_delete=models.PROTECT)
  52. check_time = models.DateTimeField(verbose_name=u'审核时间', editable=False, null=True)
  53. create_user = models.ForeignKey('self', verbose_name='创建者', blank=True, on_delete=models.PROTECT)
  54. objects = UserManager()
  55. USERNAME_FIELD = 'username'
  56. REQUIRED_FIELDS = []
  57. class Meta:
  58. db_table = "auth_user"
  59. verbose_name = u"人员管理"
  60. unique_together = [
  61. ('username')
  62. ]
  63. ordering = ['-id']
  64. default_permissions = ()
  65. permissions = [
  66. ('browse_user', u'查看'),
  67. ('add_user', u'添加'),
  68. ('delete_user', u'删除'),
  69. ('check_user', u'入职审核'),
  70. ('manager_store', u'管理门店'),
  71. ]
  72. def __unicode__(self):
  73. return self.username
  74. def get_manager_range(self):
  75. stores = []
  76. if self.is_superuser:
  77. rows = Store.objects.filter(enable=True).values('id')
  78. return [row['id'] for row in rows]
  79. rows = ManageStoreUser.objects.filter(manage_user=self).values('store_id')
  80. for row in rows:
  81. stores.append(row['store_id'])
  82. create_stores = Store.objects.filter(Q(create_user=self) |
  83. Q(agent__create_user=self) |
  84. Q(agent__general_agent__create_user=self)
  85. ).values('id')
  86. for create_store in create_stores:
  87. stores.append(create_store['id'])
  88. return list(set(stores))
  89. def get_remind_users(self):
  90. # 报备客户转潜客,查询有“内部跟踪”权限且有管理网点的人
  91. if not self.store:
  92. return []
  93. users = []
  94. stores = ManageStoreUser.objects.filter(store=self.store)
  95. for store in stores:
  96. if store.manage_user.has_perm('customer.inner_review'):
  97. users.append(store.manage_user.id)
  98. return list(set(users))
  99. def change_password(self, new_password, confirm_password, old_password):
  100. if new_password != confirm_password:
  101. raise CustomError(u'两次输入的密码不一致,请检查')
  102. if not self.check_password(old_password):
  103. raise CustomError(u'原密码输入错误,请检查')
  104. self.set_password(new_password)
  105. self.save()
  106. def update_item(self, validated_data):
  107. def update():
  108. info = model_meta.get_field_info(self)
  109. for attr, value in validated_data.items():
  110. if attr in info.relations and info.relations[attr].to_many:
  111. field = getattr(self, attr)
  112. field.set(value)
  113. else:
  114. setattr(self, attr, value)
  115. if not 'username' in validated_data:
  116. raise CustomError(u'账号不能为空!')
  117. count = User.objects.filter(username=validated_data['username']).exclude(id=self.id).count()
  118. if count > 0:
  119. raise CustomError(u'该账号已存在!')
  120. if not 'password' in validated_data or not validated_data['password']:
  121. validated_data['password'] = self.password
  122. update()
  123. else:
  124. update()
  125. self.set_password(validated_data['password'])
  126. self.save()
  127. return self
  128. class ManageStoreUser(models.Model):
  129. store = models.ForeignKey(Store, verbose_name=u"门店", null=True, blank=True, on_delete=models.PROTECT)
  130. manage_user = models.ForeignKey(User, verbose_name=u"管理人员",related_name='manger_user_ref_user', on_delete=models.PROTECT)
  131. class Meta:
  132. db_table = "auth_user_manage_store"
  133. verbose_name = u"权限管理" #用户管理范围
  134. default_permissions = ()
  135. permissions = [
  136. ('manager_permissions', u'管理'),
  137. ]
  138. class OfficeStoreUser(models.Model):
  139. store = models.ForeignKey(Store, verbose_name=u"门店", null=True, blank=True, on_delete=models.PROTECT)
  140. office_user = models.ForeignKey(User, verbose_name=u"任职人员",related_name='office_user_ref_user', on_delete=models.PROTECT)
  141. class Meta:
  142. db_table = "auth_user_office_store"
  143. verbose_name = u"任职门店" #人员任职门店
  144. default_permissions = ()
  145. permissions = [
  146. ]
  147. Group.add_to_class('create_user', models.ForeignKey(User, verbose_name=u"创建人", on_delete=models.PROTECT, editable=False))