假期分配拒绝同步,字段不创建
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user