Merge branch 'dev' of https://gitee.com/jinan-pengyusen-data/gzth into dev_wang
This commit is contained in:
@@ -69,16 +69,16 @@ class ExtendedVacationApproval(models.Model):
|
||||
('vacation_date', '<=', end_date)
|
||||
])
|
||||
if report_records:
|
||||
latest_record = report_records.sorted(key='vacation_date', reverse=True)[0]
|
||||
|
||||
write_vals = {}
|
||||
if has_annual_leave:
|
||||
write_vals['valid_date'] = self.date_postponed
|
||||
if has_overtime_leave:
|
||||
write_vals['valid_date1'] = self.date_postponed
|
||||
|
||||
if write_vals:
|
||||
report_records.write(write_vals)
|
||||
for record in report_records:
|
||||
record.update_line()
|
||||
latest_record.write(write_vals)
|
||||
latest_record.update_line()
|
||||
|
||||
class ExtendedVacationLine(models.Model):
|
||||
_name = 'extended.vacation.line'
|
||||
|
||||
@@ -304,9 +304,8 @@ class YuthonVacationReports(models.Model):
|
||||
over_ids = self.env["yuthon.vacation.reports"].browse(
|
||||
self._context.get('active_ids', self._context.get('active_id')))
|
||||
for rec in over_ids:
|
||||
inherit_lines = rec.overtime_ids.filtered(lambda l: l.text == '上月额度继承')
|
||||
if inherit_lines:
|
||||
inherit_lines.is_initial_number = True
|
||||
rec.previous_year = 0
|
||||
rec.previous_year1 = 0
|
||||
|
||||
def all_update_line(self):
|
||||
records = self.env["yuthon.vacation.reports"].browse(
|
||||
@@ -321,6 +320,39 @@ class YuthonVacationReports(models.Model):
|
||||
self.manage_reject()
|
||||
# ========== 第一步:处理年假逻辑 ==========
|
||||
for rec in self:
|
||||
current_date = rec.vacation_date
|
||||
current_year_first = fields.Date.to_date(f"{current_date.year}-01-01")
|
||||
# 找当前员工当年1月1日的报表主记录
|
||||
target_main_record = rec.env["yuthon.vacation.reports"].search([
|
||||
('employee_id', '=', rec.employee_id.id),
|
||||
('vacation_date', '=', current_year_first),
|
||||
], limit=1)
|
||||
# 提取需减额度
|
||||
leave_deduct = 0.0
|
||||
overtime_deduct = 0.0
|
||||
if target_main_record:
|
||||
# 年假需减值
|
||||
leave_lines = target_main_record.leave_ids.filtered(
|
||||
lambda o: not o.workflow_record_id and o.text == '上月额度继承')
|
||||
leave_deduct = leave_lines.update_lines / 8 if (leave_lines and leave_lines.update_lines) else 0.0
|
||||
# 补休需减值
|
||||
overtime_lines = target_main_record.overtime_ids.filtered(
|
||||
lambda o: not o.workflow_record_id and o.text == '上月额度继承')
|
||||
overtime_deduct = (overtime_lines.workday + overtime_lines.public_holidays) / 8 if (overtime_lines and overtime_lines.workday and overtime_lines.public_holidays) else 0.0
|
||||
|
||||
# 补休明细减值(仅过期时)
|
||||
if rec.valid_date1 and rec.valid_date1 < current_date and overtime_deduct > 0:
|
||||
self_overtime = rec.overtime_ids.filtered(
|
||||
lambda o: not o.workflow_record_id and o.text == '上月额度继承')
|
||||
if self_overtime:
|
||||
self_overtime.workday = max(0.0, self_overtime.workday - overtime_deduct * 8)
|
||||
|
||||
# 年假明细减值(仅过期时)
|
||||
if rec.valid_date and rec.valid_date < current_date and leave_deduct > 0:
|
||||
self_leave = rec.leave_ids.filtered(lambda o: not o.workflow_record_id and o.text == '上月额度继承')
|
||||
if self_leave:
|
||||
self_leave.update_lines = max(0.0, self_leave.update_lines - leave_deduct * 8)
|
||||
|
||||
valid_leave_lines = rec.leave_ids.filtered(
|
||||
lambda l: l.workflow_record_id and l.update_type == 'reduce' and l.is_void != True
|
||||
)
|
||||
@@ -377,34 +409,6 @@ class YuthonVacationReports(models.Model):
|
||||
rec.year_workday += workday_overtime_add
|
||||
rec.year_holiday += holidays_overtime_add
|
||||
|
||||
current_month_first = rec.vacation_date.replace(day=1)
|
||||
last_month_last = current_month_first - timedelta(days=1)
|
||||
last_month_first = last_month_last.replace(day=1)
|
||||
last_month_record = self.env['yuthon.vacation.reports'].search([
|
||||
('employee_id', '=', rec.employee_id.id),
|
||||
('vacation_date', '=', last_month_first),
|
||||
], limit=1)
|
||||
if last_month_record:
|
||||
total_overtime = last_month_record.dynamic_previous_year1 + last_month_record.this_year1
|
||||
else:
|
||||
total_overtime = 0.0
|
||||
|
||||
if total_overtime > 0:
|
||||
working_overtime_lines = rec.overtime_ids.filtered(
|
||||
lambda o: not o.workflow_record_id and o.text == '上月额度继承'
|
||||
)
|
||||
working_overtime_lines.workday = total_overtime * 8
|
||||
if last_month_record:
|
||||
total_leave = last_month_record.dynamic_previous_year + last_month_record.dynamic_remainder_year
|
||||
else:
|
||||
total_leave = 0.0
|
||||
|
||||
if total_leave > 0:
|
||||
leave_lines = rec.leave_ids.filtered(
|
||||
lambda o: not o.workflow_record_id and o.text == '上月额度继承'
|
||||
)
|
||||
leave_lines.update_lines = total_leave * 8
|
||||
|
||||
rec._compute_leave()
|
||||
rec._compute_working_overtime()
|
||||
|
||||
@@ -1381,16 +1385,12 @@ class YuthonVacationReports(models.Model):
|
||||
}
|
||||
rec.write(inherit_vals)
|
||||
|
||||
current_date = fields.Date.today()
|
||||
current_date = rec.vacation_date
|
||||
if last_month_record:
|
||||
if last_month_record.valid_date and last_month_record.valid_date < current_date:
|
||||
dynamic_previous_year_val = 0.0
|
||||
else:
|
||||
dynamic_previous_year_val = last_month_record.dynamic_previous_year
|
||||
if last_month_record.valid_date1 and last_month_record.valid_date1 < current_date:
|
||||
dynamic_previous_year1_val = 0.0
|
||||
else:
|
||||
dynamic_previous_year1_val = last_month_record.dynamic_previous_year1
|
||||
dynamic_previous_year_val = 0.0 if (
|
||||
rec.valid_date and rec.valid_date < current_date) else last_month_record.dynamic_previous_year
|
||||
dynamic_previous_year1_val = 0.0 if (
|
||||
rec.valid_date1 and rec.valid_date1 < current_date) else last_month_record.dynamic_previous_year1
|
||||
inherit_vals = {
|
||||
'leave': last_month_record.leave,
|
||||
'dynamic_previous_year': dynamic_previous_year_val,
|
||||
@@ -1400,19 +1400,22 @@ class YuthonVacationReports(models.Model):
|
||||
'working_overtime': last_month_record.working_overtime,
|
||||
'medical_fee': last_month_record.medical_fee,
|
||||
'previous_year': last_month_record.previous_year,
|
||||
'valid_date': last_month_record.valid_date,
|
||||
'remaining_parental_leave': last_month_record.remaining_parental_leave,
|
||||
'year_distribution': last_month_record.year_distribution,
|
||||
'used_this_year': last_month_record.used_this_year,
|
||||
'last_holiday': last_month_record.last_holiday,
|
||||
'last_workday': last_month_record.last_workday,
|
||||
'valid_date1': last_month_record.valid_date1,
|
||||
'year_holiday': last_month_record.year_holiday,
|
||||
'year_workday': last_month_record.year_workday,
|
||||
'previous_year1': last_month_record.previous_year1,
|
||||
'used_this_year1': last_month_record.used_this_year1,
|
||||
}
|
||||
if not rec.valid_date:
|
||||
inherit_vals['valid_date'] = last_month_record.valid_date
|
||||
if not rec.valid_date1:
|
||||
inherit_vals['valid_date1'] = last_month_record.valid_date1
|
||||
rec.write(inherit_vals)
|
||||
|
||||
if rec.remain_missed_meals:
|
||||
self._update_meal_lines(rec, [rec], rec.remain_missed_meals)
|
||||
if rec.leave:
|
||||
@@ -1724,60 +1727,63 @@ class YuthonVacationReports(models.Model):
|
||||
for alloc in allocations:
|
||||
existing_line = self.env['vacation.leave.line'].search([
|
||||
('vacation_id', '=', report.id),
|
||||
('employee_id', '=', report.employee_id.id),
|
||||
'|',
|
||||
('text', '=', '上月额度继承'),
|
||||
('text', '=', '年假分配')
|
||||
], limit=1)
|
||||
if existing_line:
|
||||
continue
|
||||
self.env['vacation.leave.line'].create({
|
||||
'vacation_id': report.id,
|
||||
'valid_date': report.valid_date1 + relativedelta(years=1) if report.valid_date1 else None,
|
||||
'employee_id': report.employee_id.id,
|
||||
'update_type': 'add',
|
||||
'update_date': fields.Date.today(),
|
||||
'update_lines': number_of_hours_display,
|
||||
'is_void': False,
|
||||
'allocation_type': 'allocation',
|
||||
'text': f"上月额度继承"
|
||||
})
|
||||
existing_line.write({
|
||||
'update_lines': number_of_hours_display,
|
||||
})
|
||||
else:
|
||||
self.env['vacation.leave.line'].create({
|
||||
'vacation_id': report.id,
|
||||
'valid_date': report.valid_date1 + relativedelta(years=1) if report.valid_date1 else None,
|
||||
'employee_id': report.employee_id.id,
|
||||
'update_type': 'add',
|
||||
'update_date': fields.Date.today(),
|
||||
'update_lines': number_of_hours_display,
|
||||
'is_void': False,
|
||||
'allocation_type': 'allocation',
|
||||
'text': f"上月额度继承"
|
||||
})
|
||||
|
||||
def _update_over_lines(self, report, allocations, number_of_hours_display):
|
||||
"""更新补休明细行"""
|
||||
for alloc in allocations:
|
||||
existing_line = self.env['vacation.over.line'].search([
|
||||
('vacation_id', '=', report.id),
|
||||
('employee_id', '=', report.employee_id.id),
|
||||
('text', '=', '上月额度继承'),
|
||||
], limit=1)
|
||||
if existing_line:
|
||||
continue
|
||||
if report.valid_date1 and report.dynamic_previous_year1 and not report.this_year1:
|
||||
valid_date = report.valid_date1
|
||||
elif report.valid_date1 and report.dynamic_previous_year1 and report.this_year1:
|
||||
valid_date = report.valid_date1 + relativedelta(years=1)
|
||||
existing_line.write({
|
||||
'workday': number_of_hours_display,
|
||||
})
|
||||
else:
|
||||
valid_date = False
|
||||
self.env['vacation.over.line'].create({
|
||||
'vacation_id': report.id,
|
||||
'employee_id': report.employee_id.id,
|
||||
'valid_date': valid_date,
|
||||
'update_type': 'add',
|
||||
'update_date': fields.Date.today(),
|
||||
'workday': number_of_hours_display,
|
||||
'legal_day': 0,
|
||||
'public_holidays': 0,
|
||||
'meal_number': 0,
|
||||
'text': f"上月额度继承",
|
||||
'logging_data': '333',
|
||||
})
|
||||
if report.valid_date1 and report.dynamic_previous_year1 and not report.this_year1:
|
||||
valid_date = report.valid_date1
|
||||
elif report.valid_date1 and report.dynamic_previous_year1 and report.this_year1:
|
||||
valid_date = report.valid_date1 + relativedelta(years=1)
|
||||
else:
|
||||
valid_date = False
|
||||
self.env['vacation.over.line'].create({
|
||||
'vacation_id': report.id,
|
||||
'employee_id': report.employee_id.id,
|
||||
'valid_date': valid_date,
|
||||
'update_type': 'add',
|
||||
'update_date': fields.Date.today(),
|
||||
'workday': number_of_hours_display,
|
||||
'legal_day': 0,
|
||||
'public_holidays': 0,
|
||||
'meal_number': 0,
|
||||
'text': f"上月额度继承",
|
||||
'logging_data': '333',
|
||||
})
|
||||
|
||||
def _update_parental_leave_lines(self, report, allocations, number_of_hours_display, update_date, end_date):
|
||||
for alloc in allocations:
|
||||
existing_line = self.env['vacation.parenting.line'].search([
|
||||
('vacation_id', '=', report.id),
|
||||
('employee_id', '=', report.employee_id.id),
|
||||
('text', '=', '上月额度继承'),
|
||||
], limit=1)
|
||||
if existing_line:
|
||||
|
||||
Reference in New Issue
Block a user