@@ -1,6 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record forcecreate="True" id="task_reminders_record_task" model="ir.cron">
|
||||
<field name="name">定时任务:催办提醒</field>
|
||||
<field name="model_id" ref="model_soong_workflow"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.task_reminders_record()</field>
|
||||
<field eval="False" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now()).strftime('%Y-%m-%d 09:30:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
<record forcecreate="True" id="soong_workflow_start_end_time" model="ir.cron">
|
||||
<field name="name">定时任务:工作流的结束时间</field>
|
||||
<field name="model_id" ref="model_soong_workflow"/>
|
||||
|
||||
@@ -586,6 +586,10 @@ class SoongWorkflowRecord(models.Model):
|
||||
res = super(SoongWorkflowRecord, self).unlink()
|
||||
return res
|
||||
|
||||
def task_reminders_record(self):
|
||||
rec_ids = self.env["soong.workflow.record"].search([('approve_state', '=', 'pending')])
|
||||
for rec in rec_ids:
|
||||
rec.reminders_record()
|
||||
|
||||
# 催办
|
||||
def reminders_record(self):
|
||||
|
||||
@@ -399,9 +399,13 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
"lase_click_date": fields.Datetime.now()
|
||||
})
|
||||
# 检查是否为并审模式
|
||||
if self.approval_concatenation == 'bing': # 并审模式
|
||||
if self.approval_concatenation == 'bing': # 并审模式考勤异常
|
||||
# 获取当前节点应该审批的所有员工
|
||||
expected_employees = self.employee_ids
|
||||
if record_id.log_ids2:
|
||||
log_employee_id = record_id.log_ids2.mapped('done_by').employee_id.id
|
||||
if log_employee_id in expected_employees.ids:
|
||||
raise UserError('该员工已传阅,请勿重复转交')
|
||||
|
||||
# 查找下一个节点
|
||||
next_node_id = record_id.workflow_id.node_ids.search([
|
||||
|
||||
@@ -53,6 +53,7 @@ class HrContract(models.Model):
|
||||
]
|
||||
)
|
||||
is_probation = fields.Boolean(string="试用期")
|
||||
is_copy = fields.Boolean(string='是否为复制合同', default=False)
|
||||
start_date = fields.Date(
|
||||
string="试用开始日期", required=True, default=fields.Date.today
|
||||
)
|
||||
@@ -116,18 +117,36 @@ class HrContract(models.Model):
|
||||
'default_employee_id': contract_ids.employee_id.id
|
||||
}}
|
||||
|
||||
@api.depends("contract_type_id", "employee_id", "is_copy")
|
||||
def _compute_name(self):
|
||||
for record in self:
|
||||
if record.contract_type_id and record.employee_id:
|
||||
base_name = record.employee_id.name + record.contract_type_id.name + "合同"
|
||||
else:
|
||||
base_name = "未完善合同信息"
|
||||
|
||||
if record.is_copy:
|
||||
record.name = f"{base_name}(副本)"
|
||||
else:
|
||||
record.name = base_name
|
||||
|
||||
record.is_internship = record.contract_type_id.name == "实习协议" if record.contract_type_id else False
|
||||
|
||||
@api.returns('self', lambda value: value.id)
|
||||
def copy(self, default=None):
|
||||
self.ensure_one()
|
||||
default = dict(default or {})
|
||||
if 'name' not in default:
|
||||
original_name = self.name or ""
|
||||
clean_name = original_name.replace("(copy)", "").replace("(副本)", "").strip()
|
||||
default['name'] = ("%s(副本)", clean_name)
|
||||
|
||||
default['is_copy'] = True
|
||||
default['date_start'] = fields.Date.today()
|
||||
default['date_end'] = False
|
||||
return super(HrContract, self).copy(default=default)
|
||||
version_str = self.version.lstrip('V')
|
||||
main_version = version_str.split('.')[0]
|
||||
new_main_version = int(main_version) + 1
|
||||
new_version = f"V{new_main_version}.0"
|
||||
default['version'] = new_version
|
||||
new_record = super(HrContract, self).copy(default=default)
|
||||
return new_record
|
||||
|
||||
@api.depends("date_start", "date_end")
|
||||
def _compute_current_contract(self):
|
||||
@@ -314,25 +333,6 @@ class HrContract(models.Model):
|
||||
else:
|
||||
record.is_internship = False
|
||||
|
||||
@api.depends("contract_type_id")
|
||||
def _compute_name(self):
|
||||
for record in self:
|
||||
has_copy_suffix = "(副本)" in (record.name or "")
|
||||
if record.contract_type_id and record.employee_id:
|
||||
new_name = record.employee_id.name + record.contract_type_id.name + "合同"
|
||||
else:
|
||||
new_name = " "
|
||||
|
||||
if has_copy_suffix:
|
||||
record.name = new_name + "(副本)"
|
||||
else:
|
||||
record.name = new_name
|
||||
|
||||
if record.contract_type_id:
|
||||
record.is_internship = record.contract_type_id.name == "实习协议"
|
||||
else:
|
||||
record.is_internship = False
|
||||
|
||||
def action_hr_contract(self):
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
|
||||
@@ -261,7 +261,6 @@ class HrAttendance(models.Model):
|
||||
|
||||
# 搜索本月的考勤记录
|
||||
attendance_records = self.env['hr.attendance'].search([
|
||||
('employee_id.name', '=', '叶华锋'),
|
||||
('current_data', '>=', first_day),
|
||||
('current_data', '<=', last_day),
|
||||
('shift_name', '!=', '休息')
|
||||
|
||||
@@ -59,22 +59,22 @@ class YuthonVacationReports(models.Model):
|
||||
leave = fields.Float(string='剩余年假', compute='_compute_leave', store=True, digits=(16, 3), group_operator=None)
|
||||
working_overtime = fields.Float(string='剩余补休', compute='_compute_working_overtime', store=True,
|
||||
digits=(16, 3), group_operator=None)
|
||||
meal_fee = fields.Integer(string="误餐次数", compute='_compute_meal_fee', store=True, group_operator=None)
|
||||
meal_fee = fields.Float(string="误餐次数", compute='_compute_meal_fee', store=True, group_operator=None)
|
||||
medical_fee = fields.Float(string="体检费", compute='_compute_medical_fee', store=True, group_operator=None)
|
||||
compensatory_leave = fields.Integer(string="调休", compute='_compute_other_leave', store=True, group_operator=None)
|
||||
compensatory_leave = fields.Float(string="调休", compute='_compute_other_leave', store=True, group_operator=None)
|
||||
leave_of_absence = fields.Float(string="事假", digits=(16, 3), compute='_compute_other_leave', store=True,
|
||||
group_operator=None)
|
||||
statutory_leave = fields.Integer(string="加班时(法定)", compute='_compute_other_leave', store=True, group_operator=None, digits=(16, 3))
|
||||
statutory_leave = fields.Float(string="加班时(法定)", compute='_compute_other_leave', store=True, group_operator=None, digits=(16, 3))
|
||||
cop_leave = fields.Float(string='补休', digits=(16, 3), store=True, compute='_compute_working_overtime',
|
||||
group_operator=None)
|
||||
duty_off_leave = fields.Integer(string='值班调休', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
marriage_leave = fields.Integer(string='婚假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
maternity_leave = fields.Integer(string='产假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
paternity_leave = fields.Integer(string='陪产假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
family_planning_leave = fields.Integer(string='计生假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
duty_off_leave = fields.Float(string='值班调休', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
marriage_leave = fields.Float(string='婚假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
maternity_leave = fields.Float(string='产假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
paternity_leave = fields.Float(string='陪产假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
family_planning_leave = fields.Float(string='计生假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
bereavement_leave = fields.Float(string='丧假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
home_visit_leave = fields.Integer(string='探亲假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
parents_meeting_leave = fields.Integer(string='家长会假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
home_visit_leave = fields.Float(string='探亲假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
parents_meeting_leave = fields.Float(string='家长会假', compute='_compute_other_leave', store=True, group_operator=None)
|
||||
general_sick_leave = fields.Float(string='病假(普通)', digits=(16, 3), compute='_compute_other_leave', store=True, group_operator=None)
|
||||
hospital_sick_leave = fields.Float(string='病假(住院期)', digits=(16, 3), compute='_compute_other_leave', store=True, group_operator=None)
|
||||
recovery_sick_leave = fields.Float(string='病假(出院恢复期)', digits=(16, 3), compute='_compute_other_leave', store=True, group_operator=None)
|
||||
@@ -549,7 +549,7 @@ class YuthonVacationReports(models.Model):
|
||||
self._context.get('active_ids', self._context.get('active_id', self.ids))
|
||||
)
|
||||
for record in records:
|
||||
record._compute_working_overtime()
|
||||
record.number_card = 4
|
||||
|
||||
@api.depends('vacation_date')
|
||||
def _compute_display_date(self):
|
||||
@@ -937,6 +937,8 @@ class YuthonVacationReports(models.Model):
|
||||
if rec.working_overtime:
|
||||
overtime_hours = rec.working_overtime * 8
|
||||
self._update_over_lines(rec, [rec], overtime_hours)
|
||||
if rec.employee_id.company_id.name == '集团本部':
|
||||
rec.number_card = 4
|
||||
if rec.remaining_parental_leave and last_month_record.parenting_line_ids:
|
||||
update_date = last_month_record.parenting_line_ids[0].update_date
|
||||
end_date = last_month_record.parenting_line_ids[0].end_date
|
||||
|
||||
Reference in New Issue
Block a user