访客增加拉送货项目, 人员类型增加司机

This commit is contained in:
曹前明 2022-09-01 11:55:49 +08:00
parent d48795f237
commit 543a460090
5 changed files with 51 additions and 6 deletions

View File

@ -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,

View File

@ -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)

View File

@ -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='手机号验证码')

View File

@ -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()

View File

@ -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