diff --git a/apps/hrm/models.py b/apps/hrm/models.py index 81ef63fb..bfe7b92a 100755 --- a/apps/hrm/models.py +++ b/apps/hrm/models.py @@ -17,7 +17,8 @@ class Employee(CommonBModel): PEOPLE_TYPE_CHOICES = ( ('employee', '内部员工'), ('remployee', '相关方人员'), - ('visitor', '访客') + ('visitor', '访客'), + ('driver', '司机') ) type = models.CharField('人员类型', default='employee', max_length=10, choices=PEOPLE_TYPE_CHOICES) user = models.OneToOneField(User, diff --git a/apps/vm/models.py b/apps/vm/models.py index 101f72bd..ff0d8d02 100644 --- a/apps/vm/models.py +++ b/apps/vm/models.py @@ -15,7 +15,8 @@ class Visit(CommonBModel): (10, '参观'), (20, '拜访'), (30, '面试'), - (40, '开会') + (40, '开会'), + (50, '拉送货') ) V_CREATE = 10 V_AUDIT = 20 @@ -44,7 +45,7 @@ class Visit(CommonBModel): visit_time = models.DateTimeField('来访时间') leave_time = models.DateTimeField('离开时间') count_people = models.PositiveSmallIntegerField('来访人数', null=True, blank=True) - receptionist = models.ForeignKey(User, verbose_name='接待人', on_delete=models.CASCADE) + receptionist = models.ForeignKey(User, verbose_name='接待人', on_delete=models.CASCADE, null=True, blank=True) visitors = models.ManyToManyField('vm.visitor', through='vm.vpeople', related_name='v_visitors') ticket = models.ForeignKey(Ticket, verbose_name='关联工单', on_delete=models.SET_NULL, null=True, blank=True) diff --git a/apps/vm/serializers.py b/apps/vm/serializers.py index 06071804..fe38a5bb 100644 --- a/apps/vm/serializers.py +++ b/apps/vm/serializers.py @@ -86,6 +86,7 @@ class VpeopleSerializer(CustomModelSerializer): class VisitorRegisterSerializer(serializers.Serializer): + type = serializers.CharField(label="人员类型") name = serializers.CharField(label="姓名") phone = serializers.CharField(label="手机号") code = serializers.CharField(label='手机号验证码') diff --git a/apps/vm/services.py b/apps/vm/services.py index 18023988..0ab905dc 100644 --- a/apps/vm/services.py +++ b/apps/vm/services.py @@ -64,3 +64,28 @@ def visit_audit_end(ticket): send_sms(phone=phone, template_code=1004, template_param={'name': '访客项目'}) except Exception: pass + + +def visit_driver_end(visit: Visit): + # 更新企业司机人员库 + for i in Vpeople.objects.filter(visit=visit): + visitor = i.visitor + ep = Employee.objects.filter(id_number=visitor.id_number).first() + if ep: + pass + else: + ep = Employee() + ep.id_number = visitor.id_number + ep.name = visitor.name + ep.phone = visitor.phone + ep.photo = visitor.photo + ep.type = 'driver' + ep.belong_dept = visit.belong_dept + ep.save() + visitor.employee = ep + visitor.visit = visit # 更新当前所属访客项目 + visitor.save() + # 同步至大华人员库并下发人脸 + HrmService.sync_dahua_employee(ep, '', visit.visit_time, visit.leave_time) + visit.state = Visit.V_ENTER + visit.save() \ No newline at end of file diff --git a/apps/vm/views.py b/apps/vm/views.py index 3ebb21fc..7a1ec97f 100644 --- a/apps/vm/views.py +++ b/apps/vm/views.py @@ -14,6 +14,9 @@ from rest_framework.exceptions import ParseError from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, CreateModelMixin, DestroyModelMixin from django.contrib.auth.hashers import make_password from django.db import transaction +from rest_framework.serializers import Serializer + +from apps.vm.services import visit_driver_end # Create your views here. @@ -52,6 +55,18 @@ class VisitViewSet(CustomModelViewSet): raise ParseError('项目非创建状态不可删除') return super().destroy(request, *args, **kwargs) + @action(methods=['post'], detail=True, permission_classes=[], + serializer_class=Serializer) + @transaction.atomic + def submit(self, request, *args, **kwargs): + """司机直接提交不走工单 + + 司机直接提交不走工单 + """ + obj = self.get_object() + visit_driver_end(obj) + return Response() + class VisitorViewSet(CustomModelViewSet): queryset = Visitor.objects.all() @@ -72,9 +87,9 @@ class VisitorViewSet(CustomModelViewSet): serializer_class=VisitorRegisterSerializer) @transaction.atomic def register(self, request, *args, **kwargs): - """访客账户注册 + """访客/司机账户注册 - 访客账户注册 + 访客/司机账户注册 """ serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -88,9 +103,11 @@ class VisitorViewSet(CustomModelViewSet): user = User.objects.filter(phone=phone).first() if user: raise ParseError('该手机号已注册,请直接登录') - # 访客账户创建 + # 访客/司机账户创建 user = User() user.type = 'visitor' + if vdata['type'] == 'driver': + user.type = 'driver' user.name = name user.username = 'V_' + ranstr(10) user.phone = phone