diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py
index 1972765b2..ec637b159 100644
--- a/soong_workflow/models/soong_workflow_mixin.py
+++ b/soong_workflow/models/soong_workflow_mixin.py
@@ -119,6 +119,12 @@ class SoongWorkflowMixin(models.AbstractModel):
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
+ target_role = self.env['soong.user.role'].search(
+ [('name', '=', '考勤校对'), ('company_id', '=', res.env.user.employee_id.company_id.id)],
+ limit=1
+ )
+ target_role_id = target_role.id if target_role else None
+
for record in res:
button_ids = record.sudo().workflow_id.node_ids.button_ids.search(
[('workflow_id', '=', record.workflow_id.id)])
@@ -129,7 +135,8 @@ class SoongWorkflowMixin(models.AbstractModel):
current_user_role_ids.append(employee.user_role_id.id)
if employee.user_role_ids:
current_user_role_ids.extend(employee.user_role_ids.ids)
-
+ if target_role_id in current_user_role_ids:
+ continue
for button_id in button_ids:
allowed_departments = button_id.node_id.department_id
if allowed_departments and employee.department_id.id not in allowed_departments.ids:
@@ -240,12 +247,6 @@ class SoongWorkflowMixin(models.AbstractModel):
("approval_state", "!=", "2")
]
)
- self.log_ids[-1].approval_state = "3"
- self.log_ids[-1].lase_click_date = fields.Datetime.now()
- self.work_end = True
- self.env['soong.workflow.record'].search([('code', '=', self.code)]).write({'approve_state': 'end',
- "employee_ids": False,
- "node_id": False, })
if apostille_log_obj:
raise UserError("当前加签人员还有没有审批完成的!")
# 继续正常流程
diff --git a/yuthon_hr_attendance/models/yuthon_vacation_reports.py b/yuthon_hr_attendance/models/yuthon_vacation_reports.py
index 59ee720af..490593bfd 100644
--- a/yuthon_hr_attendance/models/yuthon_vacation_reports.py
+++ b/yuthon_hr_attendance/models/yuthon_vacation_reports.py
@@ -286,39 +286,6 @@ class YuthonVacationReports(models.Model):
record.medical_fee = max(total, 0.0)
- def monthly_report(self):
- today = fields.Date.today()
- employees = self.env['hr.employee'].search([])
- current_month_first = today.replace(day=1)
- last_month_last = current_month_first - timedelta(days=1)
- last_month_first = last_month_last.replace(day=1)
- for employee in employees:
- resource_user_ids = employee.resource_calendar_id.resource_user_ids.ids
- is_resource_user = True if employee.id in resource_user_ids else False
- existing_record = self.search([
- ('employee_id', '=', employee.id),
- ('vacation_date', '=', today)
- ], limit=1)
- if not existing_record and not is_resource_user:
- last_month_record = self.search([
- ('employee_id', '=', employee.id),
- ('vacation_date', '>=', fields.Date.to_string(last_month_first)),
- ('vacation_date', '<=', fields.Date.to_string(last_month_last))
- ], limit=1)
- inherit_vals = {}
- if last_month_record:
- inherit_vals = {
- 'leave': last_month_record.leave,
- 'working_overtime': last_month_record.working_overtime,
- 'medical_fee': last_month_record.medical_fee,
- }
-
- self.create({
- 'employee_id': employee.id,
- 'vacation_date': today,
- **inherit_vals
- })
-
def disposable_report(self):
year = 2025
months = range(1, 8)
@@ -455,43 +422,53 @@ class YuthonVacationReports(models.Model):
meal_total -= int(line.update_lines or 0)
record.meal_fee = meal_total
- def update_vacation(self):
- """
- 从hr.leave.allocation中汇总年假和补休数据,更新到8月份的假期报表
- """
- # 定义目标月份:8月1号(当年)
- current_year = fields.Date.today().year
- target_month = date(current_year, 8, 4)
- target_month_str = fields.Date.to_string(target_month)
- # 获取所有员工
+ def monthly_report(self):
+ today = fields.Date.today()
employees = self.env['hr.employee'].search([])
+ current_month_first = today.replace(day=1)
+ last_month_last = current_month_first - timedelta(days=1)
+ last_month_first = last_month_last.replace(day=1)
+
for employee in employees:
- # 1. 处理年假分配
- annual_allocations = self.env['hr.leave.allocation'].search([
- ('employee_id', '=', employee.id),
- ('holiday_status_id.name', '=', '年假'),
- ('state', '=', 'validate')
- ])
+ resource_user_ids = employee.resource_calendar_id.resource_user_ids.ids
+ is_resource_user = employee.id in resource_user_ids
- # 累加年假总小时数
- total_annual_hours = sum(alloc.number_of_hours_display for alloc in annual_allocations)
-
- # 2. 处理补休分配
- comp_allocations = self.env['hr.leave.allocation'].search([
+ existing_record = self.search([
('employee_id', '=', employee.id),
- ('holiday_status_id.name', '=', '补休'),
- ('state', '=', 'validate') # 只处理已验证的分配
- ])
-
- # 累加补休总小时数
- total_comp_hours = sum(alloc.number_of_hours_display for alloc in comp_allocations)
- # 3. 查找或创建8月份的报表记录
- vacation_report = self.search([
- ('employee_id', '=', employee.id),
- ('vacation_date', '=', target_month_str)
+ ('vacation_date', '=', today)
], limit=1)
- self._update_leave_lines(vacation_report, annual_allocations, total_annual_hours)
- self._update_over_lines(vacation_report, comp_allocations, total_comp_hours)
+
+ if not existing_record and not is_resource_user:
+ # 获取上月记录
+ last_month_record = self.search([
+ ('employee_id', '=', employee.id),
+ ('vacation_date', '>=', fields.Date.to_string(last_month_first)),
+ ('vacation_date', '<=', fields.Date.to_string(last_month_last))
+ ], limit=1)
+ inherit_vals = {}
+ if last_month_record:
+ inherit_vals = {
+ 'leave': last_month_record.leave,
+ 'working_overtime': last_month_record.working_overtime,
+ 'medical_fee': last_month_record.medical_fee,
+ }
+
+ # 创建本月报告主记录
+ new_report = self.create({
+ 'employee_id': employee.id,
+ 'vacation_date': today,
+ **inherit_vals
+ })
+ if last_month_record:
+ # 处理年假明细行(继承额度)
+ if last_month_record.leave:
+ leave_hours = last_month_record.leave * 8
+ self._update_leave_lines(new_report, [last_month_record], leave_hours)
+
+ # 处理补休明细行(继承额度)
+ if last_month_record.working_overtime:
+ overtime_hours = last_month_record.working_overtime * 8
+ self._update_over_lines(new_report, [last_month_record], overtime_hours)
def _update_leave_lines(self, report, allocations, number_of_hours_display):
for alloc in allocations:
@@ -503,7 +480,7 @@ class YuthonVacationReports(models.Model):
'update_lines': number_of_hours_display,
'is_void': False,
'allocation_type': 'allocation',
- 'text': f"年假分配"
+ 'text': f"上月额度继承"
})
def _update_over_lines(self, report, allocations, number_of_hours_display):
@@ -518,10 +495,9 @@ class YuthonVacationReports(models.Model):
'legal_day': 0,
'public_holidays': 0,
'meal_number': 0,
- 'text': f"补休分配"
+ 'text': f"上月额度继承"
})
-
def log(self):
return {
"type": "ir.actions.act_window",
diff --git a/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml b/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml
index d2e930ede..290ce2b87 100644
--- a/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml
+++ b/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml
@@ -49,7 +49,7 @@
yuthon.vacation.my.reports.tree
yuthon.vacation.reports
-
+
@@ -96,6 +96,12 @@