116 lines
4.3 KiB
Python
116 lines
4.3 KiB
Python
|
|
from apps.hrm.models import Employee
|
|
from apps.hrm.services import HrmService
|
|
from apps.utils.sms import send_sms
|
|
from apps.utils.tools import get_info_from_id
|
|
from apps.vm.models import Visit, Visitor, Vpeople
|
|
from rest_framework.exceptions import ParseError
|
|
|
|
|
|
def sync_to_visitor(ep: Employee):
|
|
# 个人信息完善时同步到visitor表
|
|
Visitor.objects.filter(employee=ep).update(name=ep.name, phone=ep.phone, id_number=ep.id_number, photo=ep.photo)
|
|
if not Visitor.objects.filter(employee=ep, create_by=ep.user).exists():
|
|
Visitor.objects.create(employee=ep, name=ep.name, phone=ep.phone,
|
|
id_number=ep.id_number, photo=ep.photo, create_by=ep.user)
|
|
|
|
|
|
def bind_visit(ticket, transition, new_ticket_data: dict):
|
|
visit = Visit.objects.get(id=new_ticket_data['visit'])
|
|
if visit.level == 10 and (not Vpeople.objects.filter(visit=visit).exists()):
|
|
raise ParseError('请至少选择一位访客')
|
|
ticket_data = ticket.ticket_data
|
|
ticket_data.update({
|
|
'purpose': visit.purpose,
|
|
'belong_dept': visit.belong_dept.id
|
|
})
|
|
ticket.ticket_data = ticket_data
|
|
ticket.belong_dept = visit.belong_dept
|
|
ticket.create_by = visit.create_by
|
|
ticket.save()
|
|
if visit.ticket is None:
|
|
visit.ticket = ticket
|
|
visit.state = Visit.V_AUDIT
|
|
visit.save()
|
|
|
|
|
|
def get_receptionist(state, ticket, new_ticket_data, handler):
|
|
visit = Visit.objects.filter(ticket=ticket).first()
|
|
if visit:
|
|
return [visit.receptionist.id]
|
|
|
|
|
|
def visit_audit_end(ticket):
|
|
visit = Visit.objects.get(ticket=ticket)
|
|
# 更新企业访客人员库
|
|
for i in Vpeople.objects.filter(visit=visit):
|
|
visitor = i.visitor
|
|
# if visitor.id_number and visitor.photo:
|
|
ep = Employee.objects.get_queryset(all=True).filter(id_number=visitor.id_number).first()
|
|
ep2 = Employee.objects.get_queryset(all=True).filter(phone=visitor.phone).first()
|
|
if ep:
|
|
pass
|
|
elif ep2:
|
|
ep = ep2
|
|
else:
|
|
ep = Employee()
|
|
ep.id_number = visitor.id_number
|
|
ep.gender = get_info_from_id(visitor.id_number).get('gender', '男')
|
|
ep.name = visitor.name
|
|
ep.phone = visitor.phone
|
|
ep.photo = visitor.photo
|
|
ep.type = 'visitor'
|
|
ep.belong_dept = visit.receptionist.belong_dept if visit.receptionist else visit.belong_dept
|
|
ep.is_deleted = False
|
|
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()
|
|
# 发送通知?
|
|
phone = visit.create_by.phone if visit.create_by else None
|
|
if phone:
|
|
send_sms(phone=phone, template_code=1004, template_param={'name': '访客项目'})
|
|
|
|
|
|
def visit_driver_end(ticket):
|
|
visit = Visit.objects.get(ticket=ticket)
|
|
# 更新企业司机人员库
|
|
for i in Vpeople.objects.filter(visit=visit):
|
|
visitor = i.visitor
|
|
# 尝试找到人员
|
|
ep = Employee.objects.get_queryset(all=True).filter(id_number=visitor.id_number).first()
|
|
ep2 = Employee.objects.get_queryset(all=True).filter(phone=visitor.phone).first()
|
|
if ep:
|
|
pass
|
|
elif ep2:
|
|
ep = ep2
|
|
else:
|
|
ep = Employee()
|
|
ep.id_number = visitor.id_number
|
|
ep.gender = get_info_from_id(visitor.id_number).get('gender', '男')
|
|
ep.name = visitor.name
|
|
ep.phone = visitor.phone
|
|
ep.photo = visitor.photo
|
|
ep.type = 'driver'
|
|
ep.belong_dept = visit.belong_dept
|
|
ep.save()
|
|
if ep.user:
|
|
user = ep.user
|
|
user.type = 'driver'
|
|
user.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()
|
|
# 发送通知?
|
|
phone = visit.create_by.phone if visit.create_by else None
|
|
if phone:
|
|
send_sms(phone=phone, template_code=1004, template_param={'name': '拉送货入厂'})
|