!10914 Merge branch 'dev' of <a href="https://gitee.com/jinan-pengyusen-data/gzth">https://gitee.com/jinan-pengyusen-data/gzth</a> into dev_wang
Merge pull request !10914 from 李鹏宇/dev_wang
This commit is contained in:
@@ -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 []
|
||||
|
||||
Reference in New Issue
Block a user