factory/apps/rpm/services.py

136 lines
4.8 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.sms import send_sms
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({'belong_dept': rpj.belong_dept})
ticket.ticket_data = ticket_data
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.get_queryset(all=True).filter(id_number=rep.id_number).first()
ep2 = Employee.objects.get_queryset(all=True).filter(phone=rep.phone).first()
if ep:
pass
elif ep2:
ep = ep2
else:
ep = Employee()
ep.id_number = rep.id_number
ep.name = rep.name
ep.id_number = rep.id_number
ep.phone = rep.phone
ep.photo = rep.photo
ep.type = 'remployee'
ep.belong_dept = rpj.rparty.dept
ep.is_deleted = False
ep.save()
# 给相关方人员创建账户
user_e = ep.user
if user_e: # 如果该人员有账户
pass
else:
user_e = User.objects.get_queryset(all=True).filter(phone=rep.phone).first() # 看看有没有存在的账户
if user_e:
user_e.is_active = True
user_e.is_deleted = False
else:
user_e = User()
user_e.username = 'RE_' + ranstr(6)
user_e.password = make_password('0000')
user_e.name = rep.name
user_e.phone = rep.phone
user_e.type = 'remployee'
user_e.belong_dept = rpj_dept
user_e.post = post
user_e.save()
# 账号划给部门
UserPost.objects.get_or_create(user=user_e, dept=rpj_dept,
defaults={
'user': user_e,
'dept': rpj_dept,
'post': post
})
ep.user = user_e
ep.save()
# 回写
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.belong_dept = i.rpj.rparty.dept
rf.save()
for m in i.files.all():
rf.files.add(m)
rpj.state = Rpj.RPJ_ENTER
rpj.save()
# 发送通知?
phone = rpj.create_by.phone
if phone:
send_sms(phone=phone, template_code=1004, template_param={'name': '相关方项目'})