Merge pull request !10914 from 李鹏宇/dev_wang
This commit is contained in:
李鹏宇
2026-04-16 03:56:55 +00:00
committed by Gitee
@@ -210,36 +210,75 @@ class ExportDateWizard(models.TransientModel):
}
def _export_overtime_active(self, start_date, end_date):
"""导出加班归档明细"""
domain = [
('carry_forward_date', '>=', start_date.date()),
('carry_forward_date', '<', end_date.date()),
('is_void', '=', False),
('carryover_type', '=', 'fee')
]
filtered_records = self.env['overtime.carryover'].search(domain)
"""导出加班归档明细 - 导出每条归档记录对应详情(overtime.carryover.tree1)中的数据"""
import datetime as dt
import math
if not filtered_records:
# 获取选中的 vacation.overtime.active 记录
active_ids = json.loads(self.active_ids) if self.active_ids else []
if active_ids:
active_records = self.env['vacation.overtime.active'].browse(active_ids)
else:
active_records = self.env['vacation.overtime.active'].search([
('carry_forward_date', '>=', start_date.date()),
('carry_forward_date', '<', end_date.date()),
])
if not active_records:
raise UserError(f'在 {self.year} 年 {self.month} 月没有找到符合条件的加班归档记录')
export_data = []
for record in filtered_records:
over_line = record.over_line_id
carry_forward_state_value = ''
if over_line and over_line.carry_forward_state:
selection_dict = dict(over_line._fields.get('carry_forward_state').selection)
carry_forward_state_value = selection_dict.get(over_line.carry_forward_state, '')
row_data = {
'employee_id': over_line.employee_id.name if over_line and over_line.employee_id else '',
'department_id': over_line.department_id.name if over_line and over_line.department_id else '',
'start_time': (over_line.start_time + timedelta(hours=8)).strftime('%Y-%m-%d %H:%M:%S') if over_line and over_line.start_time else '',
'end_time': (over_line.end_time + timedelta(hours=8)).strftime('%Y-%m-%d %H:%M:%S') if over_line and over_line.end_time else '',
'carry_forward_date': record.carry_forward_date,
'carry_forward_quantity': record.carry_forward_quantity,
'carry_forward_state': carry_forward_state_value
}
export_data.append(row_data)
carry_result_dict = dict(self.env['overtime.carryover']._fields['carry_result'].selection)
for active in active_records:
year = int(active.select_year) if active.select_year else start_date.year
month = int(active.select_month) if active.select_month else start_date.month
if month == 12:
last_day_date = dt.date(year, 12, 31)
else:
next_month_first = dt.date(year, month + 1, 1)
last_day_date = next_month_first - dt.timedelta(days=1)
last_day = last_day_date.strftime("%Y-%m-%d")
original_domain = [
('over_line_id.vacation_id.employee_id', '=', active.employee_id.id),
('is_void', '=', False),
'|',
'&',
('carryover_type', '=', 'fee'),
('carry_forward_date', '=', active.carry_forward_date),
'&',
('carryover_type', '=', 'leave'),
('leave_id.start_date', '>', last_day),
]
records = self.env['overtime.carryover'].search(original_domain)
total = sum(r.carry_forward_quantity for r in records)
if not math.isclose(total, active.carry_forward_quantity, abs_tol=0.1):
records = self.env['overtime.carryover'].search([
('over_line_id.vacation_id.employee_id', '=', active.employee_id.id),
('is_void', '=', False),
('carryover_type', '=', 'fee'),
('carry_forward_date', '=', active.carry_forward_date),
])
for record in records:
over_line = record.over_line_id
row_data = {
'employee_id': over_line.employee_id.name if over_line and over_line.employee_id else '',
'department_id': over_line.department_id.name if over_line and over_line.department_id else '',
'start_time': (over_line.start_time + timedelta(hours=8)).strftime('%Y-%m-%d %H:%M:%S') if over_line and over_line.start_time else '',
'end_time': (over_line.end_time + timedelta(hours=8)).strftime('%Y-%m-%d %H:%M:%S') if over_line and over_line.end_time else '',
'carry_forward_date': record.carry_forward_date,
'carry_forward_quantity': record.carry_forward_quantity,
'carry_result': carry_result_dict.get(record.carry_result, '') if record.carry_result else '',
}
export_data.append(row_data)
if not export_data:
raise UserError(f'在 {self.year} 年 {self.month} 月没有找到符合条件的加班归档记录')
fields_name = ['employee_id', 'department_id', 'start_time', 'end_time',
'carry_forward_date', 'carry_forward_quantity', 'carry_forward_state']
'carry_forward_date', 'carry_forward_quantity', 'carry_result']
field_label = ['姓名', '部门', '加班开始时间', '加班结束时间', '结转日期',
'结转时长', '结转结果']
@@ -262,6 +301,7 @@ class ExportDateWizard(models.TransientModel):
'report_type': 'xlsx',
}
def _export_meal(self, start_date, end_date):
"""导出误餐明细"""
active_ids = json.loads(self.active_ids) if self.active_ids else []