feat: hrm - 修改 人员调岗后更新部门和岗位
This commit is contained in:
parent
beef2b3e54
commit
4690a78ac6
|
|
@ -20,6 +20,7 @@ from apps.utils.tools import rannum, ranstr
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from apps.wf.models import Ticket, Transition
|
from apps.wf.models import Ticket, Transition
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
from django.db.models import F
|
||||||
|
|
||||||
myLogger = logging.getLogger('log')
|
myLogger = logging.getLogger('log')
|
||||||
|
|
||||||
|
|
@ -500,23 +501,75 @@ class HrmService:
|
||||||
|
|
||||||
|
|
||||||
# 人员调岗申请
|
# 人员调岗申请
|
||||||
def post_transfer(ticket: Ticket, new_ticket_data:dict, **kwargs):
|
def post_transfer(ticket: Ticket, new_ticket_data: dict, **kwargs):
|
||||||
|
# 1️⃣ 获取调岗单
|
||||||
try:
|
try:
|
||||||
obj = EmployeeTransfer.objects.get(id=new_ticket_data['t_id'])
|
obj = EmployeeTransfer.objects.select_related(
|
||||||
|
'employee', 'employee__user'
|
||||||
|
).get(id=new_ticket_data['t_id'])
|
||||||
except EmployeeTransfer.DoesNotExist:
|
except EmployeeTransfer.DoesNotExist:
|
||||||
raise ParseError('调岗申请不存在')
|
raise ParseError('调岗申请不存在')
|
||||||
data_save = {k: v for k, v in new_ticket_data.items() if k not in ['t_model', 't_id']}
|
|
||||||
# 需要删除UserPost中的记录,然后新增一条调到的部门和岗位记录,排序为1
|
employee = obj.employee
|
||||||
with transaction.atomic():
|
user = employee.user
|
||||||
del_count, _ = UserPost.objects.filter(post=obj.original_post, dept=obj.original_dept, user=obj.employee.user).delete()
|
|
||||||
if del_count == 0:
|
if not user:
|
||||||
raise ParseError('原岗位记录不存在')
|
raise ParseError('员工未绑定系统账号,无法执行调岗')
|
||||||
UserPost.objects.create(post=obj.new_post, dept=obj.new_dept, user=obj.employee.user, sort=1)
|
|
||||||
# 如果有调薪并有领导申请决定,那么可以从new_ticket_data 获取调薪金额
|
# 2️⃣ 先更新 EmployeeTransfer(避免 atomic 中用到旧数据)
|
||||||
for k, v in data_save.items():
|
update_fields = []
|
||||||
if k in ['new_post','original_post']:
|
for k, v in new_ticket_data.items():
|
||||||
|
if k in ['t_model', 't_id']:
|
||||||
|
continue
|
||||||
|
if k in ['new_post', 'original_post', 'new_dept', 'original_dept']:
|
||||||
setattr(obj, f'{k}_id', v)
|
setattr(obj, f'{k}_id', v)
|
||||||
else:
|
else:
|
||||||
setattr(obj, k, v)
|
setattr(obj, k, v)
|
||||||
|
update_fields.append(k)
|
||||||
|
|
||||||
obj.save()
|
obj.save()
|
||||||
|
|
||||||
|
# 3️⃣ 调岗事务(岗位、部门、UserPost 一致性)
|
||||||
|
with transaction.atomic():
|
||||||
|
|
||||||
|
# 3.1 校验并删除原岗位记录
|
||||||
|
old_post_qs = UserPost.objects.filter(
|
||||||
|
user=user,
|
||||||
|
post=obj.original_post,
|
||||||
|
dept=obj.original_dept
|
||||||
|
)
|
||||||
|
|
||||||
|
if not old_post_qs.exists():
|
||||||
|
raise ParseError('原岗位记录不存在,无法调岗')
|
||||||
|
|
||||||
|
old_post_qs.delete()
|
||||||
|
|
||||||
|
# 3.2 处理岗位排序(新岗位置顶)
|
||||||
|
UserPost.objects.filter(user=user).update(sort=F('sort') + 1)
|
||||||
|
|
||||||
|
UserPost.objects.create(
|
||||||
|
user=user,
|
||||||
|
post=obj.new_post,
|
||||||
|
dept=obj.new_dept,
|
||||||
|
sort=1
|
||||||
|
)
|
||||||
|
|
||||||
|
# 3.3 更新 Employee
|
||||||
|
employee.belong_dept = obj.new_dept
|
||||||
|
employee.post = obj.new_post
|
||||||
|
employee.save(update_fields=['belong_dept', 'post'])
|
||||||
|
|
||||||
|
# 3.4 同步更新 User
|
||||||
|
User.objects.filter(id=user.id).update(
|
||||||
|
belong_dept=obj.new_dept,
|
||||||
|
post=obj.new_post
|
||||||
|
)
|
||||||
|
|
||||||
|
return obj
|
||||||
|
|
||||||
|
|
||||||
|
def validate_userdept(ticket: Ticket, new_ticket_data: dict, **kwargs):
|
||||||
|
obj = EmployeeTransfer.objects.get(id=new_ticket_data['t_id'])
|
||||||
|
exist_dept_post = UserPost.objects.filter(user=obj.employee.user, post=obj.original_post, dept=obj.original_dept)
|
||||||
|
if not exist_dept_post.exists():
|
||||||
|
raise ParseError('该用户的原部门或原职务不匹配')
|
||||||
Loading…
Reference in New Issue