result = []
field_lists = ["holiday_type_id", "quota", "adjust_num", "used_num",
"invalid_num", "salary_num", "display_holiday_type_name"]
holiday_type = env['hr.holiday.type'].search([('code', '=', 'L001')])
c_holiday_type = env['hr.holiday.type'].search([('code', '=', 'L005')])
# 发假规则
allot_rule = env['hr.holiday.allot.rule'].search([('holiday_type_id', '=', holiday_type.id),('active', '=', True), ('holiday_package_id', '=', package.id)], limit=1)
# 发假单位
product_uom_id = allot_rule.product_uom_id.id if allot_rule else None
float_round = env['hr.holiday.rule.function'].compatibility_precision_round
# 公司年假
company_holiday = env['hr.holiday.inquiry'].search([('employee_id', '=', employee.id),
('company_id', '=', employee.company_id.id),
('holiday_period_id', '=', previous_period.id),
('holiday_type_id.code', '=', 'L005')])
# 配额
c_max_num = 0
# 余额
balance = 0
if company_holiday:
for inquiry in company_holiday:
sublist_data = env['hr.holiday.move'].get_sublist_data(prev_model='hr.holiday.inquiry', prev_id=inquiry.id, field_lists=field_lists)
for data in sublist_data:
if '去年' in data.get('display_holiday_type_name', '') or 'Last Year' in data.get('display_holiday_type_name', ''):
continue
else:
balance += data['quota']
# 余额
c_max_num += data['balances']
c_max_num = float_round(balance * 0.3, '0.01', 'rounding') if c_max_num >= balance * 0.3 else c_max_num
result.append(
{
'employee_id': employee.id,
'holiday_type_id': c_holiday_type.id,
'max_num': c_max_num,
'product_uom_id': product_uom_id
}
)
# 法定年假
annual_holiday = env['hr.holiday.inquiry'].search([('employee_id', '=', employee.id), ('company_id', '=', employee.company_id.id),
('holiday_period_id', '=', previous_period.id), ('holiday_type_id.code', '=', 'L001')])
# 配额
l_max_num = 0
# 余额
l_balance = 0
if annual_holiday:
for inquiry in annual_holiday:
sublist_data = env['hr.holiday.move'].get_sublist_data(prev_model='hr.holiday.inquiry',
prev_id=inquiry.id,
field_lists=field_lists)
for data in sublist_data:
if '去年' in data.get('display_holiday_type_name', '') or \
'Last Year' in data.get('display_holiday_type_name', ''):
continue
else:
l_balance += data['quota']
# 余额
l_max_num += data['balances']
l_max_num = float_round(l_balance * 0.3, '0.01', 'rounding') if l_max_num >= l_balance * 0.3 else l_max_num
result.append(
{
'employee_id': employee.id,
'holiday_type_id': holiday_type.id,
'max_num': l_max_num,
'product_uom_id': product_uom_id
}
)