models.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. # coding=utf-8
  2. from django.db import models
  3. from django.conf import settings
  4. from apps.account.models import User
  5. from apps.tenant.models import Tenant
  6. from utils.exceptions import CustomError
  7. from django.db import transaction
  8. class Employee(models.Model):
  9. ENABLE = 1
  10. WORKING = 2
  11. DAY_OFF = 3
  12. DISABLE = 4
  13. STATUS_CHOICES = (
  14. (ENABLE, u'在用'),
  15. (WORKING, u'工作中'),
  16. (DAY_OFF, u'调休'),
  17. (DISABLE, u'禁用'),
  18. )
  19. SUPER = 1
  20. ADMIN = 2
  21. EMPLOYEE = 3
  22. REPAIR = 4
  23. TYPE_CHOICES = (
  24. (SUPER, u'平台管理员'),
  25. (ADMIN, u'管理者'),
  26. (EMPLOYEE, u'检修人'),
  27. (REPAIR, u'报修人'),
  28. )
  29. name = models.CharField(max_length=100, verbose_name=u"姓名")
  30. tel = models.CharField(max_length=50, verbose_name=u'电话')
  31. gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u'性别', default=settings.MALE)
  32. status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态',default=ENABLE)
  33. user = models.OneToOneField(settings.AUTH_USER_MODEL, editable=False, related_name='employee',
  34. on_delete=models.PROTECT, verbose_name=u'添加人', null=True)
  35. position = models.CharField(max_length=20, verbose_name=u'职位', null=True)
  36. create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"创建人", on_delete=models.PROTECT,
  37. editable=False, related_name='create_user',null=True)
  38. face = models.CharField(max_length=200, verbose_name=u'头像', null=True)
  39. baoxiu_count = models.IntegerField(verbose_name='报修次数', default=0)
  40. tenant = models.ForeignKey(Tenant, verbose_name=u'企业', editable=False, on_delete=models.PROTECT,null=True)
  41. type = models.PositiveSmallIntegerField(verbose_name=u'人员类型', choices=TYPE_CHOICES, default=REPAIR)
  42. class Meta:
  43. db_table = "employee"
  44. verbose_name = u"用户管理"
  45. ordering = ['-id']
  46. index_together = (
  47. 'name',
  48. 'tel',
  49. )
  50. default_permissions = ()
  51. @staticmethod
  52. def create_super_admin(tenant,name, username, password):
  53. # 企业添加管理超级管理员
  54. user = User.objects.create_superuser_tenant(username, password)
  55. Employee.objects.create(
  56. name=name,
  57. tel=username,
  58. gender=settings.MALE,
  59. user=user,
  60. tenant=tenant,
  61. type=Employee.SUPER,
  62. )
  63. return user
  64. @staticmethod
  65. def get_instance_by_id(id, tenant):
  66. try:
  67. id = int(id)
  68. except:
  69. raise CustomError('无效的employee_id')
  70. instance = Employee.objects.filter(pk=id, tenant=tenant).first()
  71. if not instance:
  72. raise CustomError('未找到对应的员工实例')
  73. return instance
  74. @staticmethod
  75. def getOrRegister(user):
  76. # 小程序登录后,自动注册报修人
  77. customer = Employee.objects.filter(user=user).first()
  78. if customer:
  79. return customer
  80. with transaction.atomic():
  81. customer = Employee.objects.create(user=user,type=Employee.REPAIR, tel=user.username, name=user.username)
  82. return customer
  83. @staticmethod
  84. def checkSuper(tenant, id=None):
  85. # 检查超级管理员数量
  86. rows = Employee.objects.filter(type=Employee.SUPER, tenant=tenant)
  87. if id:
  88. rows = rows.exclude(id=id)
  89. return rows.count()
  90. @staticmethod
  91. def checkEmployee(tenant, id=None):
  92. # 标准版 限制检修人人数为2
  93. rows = Employee.objects.filter(type=Employee.EMPLOYEE, tenant=tenant)
  94. if id:
  95. rows = rows.exclude(id=id)
  96. return rows.count() >=2 and tenant.edition < Tenant.EDITION_3