假期分配拒绝同步,字段不创建

This commit is contained in:
李鹏宇
2026-05-29 17:53:10 +08:00
parent 781b30b5a9
commit 63f66ee2e4
2 changed files with 99 additions and 5 deletions
@@ -228,10 +228,98 @@ class HrLeaveAllocation(models.Model):
return super(HrLeaveAllocation, self).unlink()
def action_refuse(self):
"""拒绝假期分配时,删除之前验证时添加的明细行并重新计算"""
import logging
logger = logging.getLogger(__name__)
result = super(HrLeaveAllocation, self).action_refuse()
for leave in self:
logger.info("===== 拒绝假期分配处理开始 =====")
logger.info(f"假期分配ID: {leave.id}")
logger.info(f"假期类型: {leave.holiday_status_id.name}")
logger.info(f"员工ID: {leave.employee_id.id}, 员工姓名: {leave.employee_id.name}")
logger.info(f"date_from: {leave.date_from}")
logger.info(f"分配类型: {leave.allocation_type}")
# 使用date_from或date_to计算月份
if leave.date_from:
vacation_date = leave.date_from.replace(day=1)
elif leave.date_to:
vacation_date = leave.date_to.replace(day=1)
else:
vacation_date = fields.Date.today().replace(day=1)
logger.info(f"vacation_date: {vacation_date}")
reports_id = self.env['yuthon.vacation.reports'].search([
('employee_id', '=', leave.employee_id.id),
('vacation_date', '=', vacation_date)
], limit=1)
logger.info(f"找到的reports_id: {reports_id}")
if not reports_id:
logger.info("未找到对应的考勤报告记录")
continue
if leave.holiday_status_id.name == '年假':
# 精确查找并删除当前表单添加的年假明细行
lines_to_delete = reports_id.leave_ids.filtered(
lambda l: l.update_type == 'add' and l.allocation_id.id == leave.id
)
logger.info(f"找到需要删除的年假明细行数量: {len(lines_to_delete)}")
if lines_to_delete:
lines_to_delete.unlink()
reports_id.update_line()
logger.info("年假明细行已删除并重新计算")
else:
# 尝试按旧方式查找(没有allocation_id的记录)
old_lines = reports_id.leave_ids.filtered(
lambda l: l.update_type == 'add' and f'({leave.id})' in (l.text or '')
)
logger.info(f"按旧方式找到的明细行数量: {len(old_lines)}")
if old_lines:
old_lines.unlink()
reports_id.update_line()
logger.info("按旧方式删除年假明细行并重新计算")
elif leave.holiday_status_id.name == '补休':
# 精确查找并删除当前表单添加的补休明细行
lines_to_delete = reports_id.overtime_ids.filtered(
lambda o: o.update_type == 'add' and o.allocation_id.id == leave.id
)
logger.info(f"找到需要删除的补休明细行数量: {len(lines_to_delete)}")
if lines_to_delete:
lines_to_delete.unlink()
reports_id.update_line()
logger.info("补休明细行已删除并重新计算")
else:
# 尝试按旧方式查找
old_lines = reports_id.overtime_ids.filtered(
lambda o: o.update_type == 'add' and f'({leave.id})' in (o.text or '')
)
logger.info(f"按旧方式找到的明细行数量: {len(old_lines)}")
if old_lines:
old_lines.unlink()
reports_id.update_line()
logger.info("按旧方式删除补休明细行并重新计算")
logger.info("===== 拒绝假期分配处理结束 =====")
return result
def action_validate(self):
import logging
logger = logging.getLogger(__name__)
result = super(HrLeaveAllocation, self).action_validate()
for leave in self:
logger.info("===== 验证假期分配处理开始 =====")
logger.info(f"假期分配ID: {leave.id}")
logger.info(f"假期类型: {leave.holiday_status_id.name}")
logger.info(f"number_of_days_display: {leave.number_of_days_display}")
if leave.holiday_status_id.name == '年假':
vacation_date = leave.date_from.replace(day=1) if leave.date_from else fields.Date.today().replace(day=1)
@@ -242,17 +330,22 @@ class HrLeaveAllocation(models.Model):
if reports_id:
leave_hours = leave.number_of_days_display * 8
logger.info(f"准备写入年假明细行: allocation_id={leave.id}, update_lines={leave_hours}, text={leave.name}")
reports_id.write({
'valid_date': leave.date_to,
'leave_ids': [(0, 0, {
'vacation_id': reports_id.id,
'allocation_id': leave.id,
'update_type': 'add',
'update_date': fields.Datetime.now(),
'valid_date': leave.date_from,
'update_lines': leave_hours,
'text': '年假分配'
'text': leave.name
})]
})
# 验证是否写入成功
new_line = reports_id.leave_ids.filtered(lambda l: l.allocation_id.id == leave.id)
logger.info(f"写入后的年假明细行: {new_line}")
reports_id.update_line()
elif leave.holiday_status_id.name == '补休':
@@ -269,6 +362,7 @@ class HrLeaveAllocation(models.Model):
'valid_date1': leave.date_to,
'overtime_ids': [(0, 0, {
'vacation_id': reports_id.id,
'allocation_id': leave.id,
'update_type': 'add',
'update_date': fields.Datetime.now(),
'valid_date': leave.date_to,
+4 -4
View File
@@ -248,7 +248,7 @@
<field name="ordinal"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="issue_approval_decision_id" class="o_m2o_mutil_line"
context="{'search_default_group_scope': 1}"/>
context="{'search_default_group_scope': 1}" options="{'no_create': True}"/>
<field name="council_id" readonly="1" groups="yuthon_salary.group_jtbb_user"
string="党总支"/>
<field name="council_id" readonly="1"
@@ -562,7 +562,7 @@
<tree editable="bottom">
<field name="issue_library_id" column_invisible="1"/>
<field name="issue_approval_decision_id" class="o_m2o_mutil_line"
context="{'search_default_group_scope': 1}"/>
context="{'search_default_group_scope': 1}" options="{'no_create': True}"/>
<field name="council_id" readonly="1"/>
<field name="district_state_id" readonly="1"/>
<field name="district_government_id" readonly="1"/>
@@ -773,7 +773,7 @@
<field name="ordinal"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="issue_approval_decision_id" class="o_m2o_mutil_line"
context="{'search_default_group_scope': 1}"/>
context="{'search_default_group_scope': 1}" options="{'no_create': True}"/>
<field name="team_meet_id" readonly="1"/>
<field name="district_state_id" readonly="1"/>
<field name="district_government_id" readonly="1"/>
@@ -970,7 +970,7 @@
<field name="ordinal"/>
<field name="issue_library_id" column_invisible="1"/>
<field name="issue_approval_decision_id" class="o_m2o_mutil_line"
context="{'search_default_group_scope': 1}"/>
context="{'search_default_group_scope': 1}" options="{'no_create': True}"/>
<field name="board_meet_id" readonly="1"/>
<field name="district_state_id" readonly="1"/>
<field name="district_government_id" readonly="1"/>