factory/apps/rpm/services.py

122 lines
4.1 KiB
Python

from apps.hrm.models import Certificate, Employee
from apps.hrm.services import HrmService
from apps.system.models import Post, User, UserPost
from apps.utils.tools import ranstr
from apps.wf.models import Ticket, Transition
from apps.rpm.models import Remployee, Rfile, Rparty, Rpj, Rpjcertificate, Rpjfile, Rpjmember
from django.contrib.auth.hashers import make_password
def sync_to_rep(ep: Employee):
# 个人信息完善时同步到rep表
Remployee.objects.filter(employee=ep).update(name=ep.name, phone=ep.phone, id_number=ep.id_number, photo=ep.photo)
if ep.user:
rps = Rparty.objects.filter(admin=ep.user)
# 如果是管理员账户
for i in rps:
Remployee.objects.get_or_create(employee=ep, defaults={
'employee': ep,
'name': ep.name,
'phone': ep.phone,
'id_number': ep.id_number,
'photo': ep.photo,
'rparty': i
})
def bind_rpj(ticket: Ticket, transition: Transition, new_ticket_data: dict):
rpj = Rpj.objects.get(id=new_ticket_data['rpj'])
# ticket_data = ticket.ticket_data
# ticket_data.update({'level': opl.level})
# ticket.ticket_data = ticket_data
# ticket.save()
rpj.ticket = ticket
rpj.state = Rpj.RPJ_AUDIT
rpj.save()
ticket.belong_dept = rpj.belong_dept
ticket.create_by = rpj.create_by
ticket.save()
def rpj_audit_end(ticket):
rpj = Rpj.objects.get(ticket=ticket)
rpj_dept = rpj.rparty.dept
post = Post.objects.get(code='remployee')
# 更新入厂项目人员库
for i in Rpjmember.objects.filter(rpj=rpj):
rep = i.remployee
# 尝试找到人员
ep = Employee.objects.filter(id_number=rep.id_number).first()
if ep:
pass
else:
ep = Employee()
ep.id_number = rep.id_number
ep.name = rep.name
ep.phone = rep.phone
ep.photo = rep.photo
ep.type = 'remployee'
ep.belong_dept = rpj.rparty.dept
ep.save()
# 给相关方人员创建账户
user = ep.user
if user: # 如果该人员有账户
pass
else:
user_e = User()
user_e.username = 'RE_' + ranstr(6)
user_e.name = rep.name
user_e.phone = rep.phone
user_e.type = 'remployee'
user_e.password = make_password('0000')
user_e.belong_dept = rpj_dept
user_e.post = post
user_e.save()
ep.user = user_e
ep.save()
# 账号划给部门
UserPost.objects.get_or_create(user=ep.user, dept=rpj_dept,
defaults={
'user': ep.user,
'dept': rpj_dept,
'post': post
})
# 回写
rep.employee = ep
rep.rpj = rpj # 更新当前入厂项目
rep.save()
# 同步至大华人员库并下发人脸
HrmService.sync_dahua_employee(ep, '', rpj.come_time, rpj.leave_time)
# 更新入厂项目人员证书库
for i in Rpjcertificate.objects.filter(rpj_member__rpj=rpj):
ct = Certificate.objects.filter(number=i.number).first()
if ct:
pass
else:
ct = Certificate()
ct.employee = i.rpj_member.remployee.employee
ct.name = i.name
ct.number = i.number
ct.type = i.type
ct.issue_date = i.issue_date
ct.expiration_date = i.expiration_date
ct.review_date = i.review_date
ct.file = i.file
ct.save()
# 更新相关方资料库后续可从资料库里选择
for i in Rpjfile.objects.filter(rpj=rpj):
rf = Rfile.objects.filter(file_cate=i.file_cate, rparty=i.rpj.rparty).first()
if rf:
pass
else:
rf = Rfile()
rf.rparty = i.rpj.rparty
rf.file_cate = i.file_cate
rf.save()
for m in i.files.all():
rf.files.add(m)
rpj.state = Rpj.RPJ_ENTER
rpj.save()
# 发送通知?