# coding=utf-8 from django.db import models from django.conf import settings from apps.account.models import User from apps.tenant.models import Tenant from apps.tenant.area.models import Department from apps.tenant.option.models import Option from utils.exceptions import CustomError from django.db import transaction class Employee(models.Model): LEAVE_UNUSED = 1 WORKING = 2 DAY_OFF = 3 LEAVE_OFFICE = 4 STATUS_CHOICES = ( (LEAVE_UNUSED, u'在职'), (WORKING, u'工作中'), (DAY_OFF, u'调休'), (LEAVE_OFFICE, u'离职'), ) EMPLOYEE = 1 VISITOR = 2 TYPE_CHOICES = ( (EMPLOYEE, u'职工'), (VISITOR, u'游客') ) name = models.CharField(max_length=100, verbose_name=u"姓名") tel = models.CharField(max_length=50, verbose_name=u'电话') gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u'性别', default=settings.MALE) status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态',default=LEAVE_UNUSED) user = models.OneToOneField(settings.AUTH_USER_MODEL, editable=False, related_name='employee', on_delete=models.PROTECT, verbose_name=u'职工', null=True) position = models.ForeignKey(Option, verbose_name=u'职位', on_delete=models.PROTECT, null=True) department = models.ForeignKey(Department, verbose_name=u'部门', on_delete=models.PROTECT, null=True) create_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"创建人", on_delete=models.PROTECT, editable=False, related_name='create_user',null=True) face = models.CharField(max_length=200, verbose_name=u'头像', null=True) baoxiu_count = models.IntegerField(verbose_name='报修次数', default=0) forbid_baoxiu = models.BooleanField(verbose_name='是否禁用报修', default=False) tenant = models.ForeignKey(Tenant, verbose_name=u'租户', editable=False, on_delete=models.PROTECT,null=True) type = models.PositiveSmallIntegerField(verbose_name=u'人员类型', choices=TYPE_CHOICES, default=VISITOR) class Meta: db_table = "employee" verbose_name = u"员工管理" ordering = ['-id'] index_together = ( 'name', 'tel', ) default_permissions = () permissions = [ ('browse_employee', u'查看'), ('add_employee', u'添加'), ('delete_employee', u'删除'), ] @staticmethod def create_admin(tenant, username, password): user = User.objects.create_superuser_tenant(username, password) instance = Employee.objects.create( name=username, tel='', gender=settings.MALE, user=user, tenant=tenant, type=Employee.EMPLOYEE, ) return instance @staticmethod def get_instance_by_id(id, tenant): try: id = int(id) except: raise CustomError('无效的employee_id') instance = Employee.objects.filter(pk=id, tenant=tenant).first() if not instance: raise CustomError('未找到对应的员工实例') return instance @staticmethod def getOrRegister(tenant, user): customer = Employee.objects.filter(tenant=tenant, user=user).first() if customer: return customer with transaction.atomic(): customer = Employee.objects.create(user=user,type=Employee.VISITOR, tel=user.username, name=user.username, tenant=tenant) return customer