diff --git a/tianhe_approvals/models/__init__.py b/tianhe_approvals/models/__init__.py index c64a4e2bc..c8a779511 100644 --- a/tianhe_approvals/models/__init__.py +++ b/tianhe_approvals/models/__init__.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from . import inherit_approval_category from . import inherit_approval_request +from . import overtime_approval from . import tianhe_construction_business_approval from . import tianhe_process_change_approval from . import tianhe_contentious_matter_approval diff --git a/tianhe_approvals/models/inherit_approval_request.py b/tianhe_approvals/models/inherit_approval_request.py index e515a5e0e..669396311 100644 --- a/tianhe_approvals/models/inherit_approval_request.py +++ b/tianhe_approvals/models/inherit_approval_request.py @@ -54,9 +54,8 @@ class ApprovalRequest(models.Model): ], string="用章类别") creation_time = fields.Datetime(string='创建时间', default=lambda self: fields.Datetime.now()) department_id = fields.Many2one('hr.department', related="request_owner_id.employee_id.department_id", string="申请人部门") - overtime_department_id = fields.Many2one('hr.department', string="加班部门") approval_request_ids = fields.One2many('approval.request.line', 'approval_request_id', string="审批明细行") - overtime_user_ids = fields.One2many('overtime.user.line', 'approval_request_id', string="审批明细行") + class ApprovalRequestLine(models.Model): @@ -101,19 +100,5 @@ class ApprovalRequestLine(models.Model): # 加班 -class OvertimeUserLine(models.Model): - _name = 'overtime.user.line' - _rec_name = 'approval_request_id' - approval_request_id = fields.Many2one('approval.request', string="关联审批单") - - user_id = fields.Many2one('res.users', string="请假人员") - start_time = fields.Datetime(string="开始时间") - end_time = fields.Datetime(string="结束时间") - overtime_hours = fields.Float(string="加班时长") - type_overtime = fields.Selection([('work', '工作日',), ('rest', '休息日',), ('holiday', '节假日')], - string="加班类型", default="work") - compensation_mode = fields.Selection([('salary', '薪资',), ('rest', '调休',)], string="补偿方式") - is_male_pay = fields.Boolean(string="加班餐费") - user_attendance = fields.Char(string="考勤信息") diff --git a/tianhe_approvals/models/overtime_approval.py b/tianhe_approvals/models/overtime_approval.py new file mode 100644 index 000000000..2ddc14365 --- /dev/null +++ b/tianhe_approvals/models/overtime_approval.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +from odoo import api, fields, models, tools, _ +from datetime import datetime, time, timedelta + + +class OvertimeApprovals(models.Model): + _inherit = 'approval.request' + _description = "加班审批" + + overtime_department_id = fields.Many2one('hr.department', string="加班部门") + overtime_user_ids = fields.One2many('overtime.user.line', 'approval_request_id', string="审批明细行") + + @api.onchange('overtime_department_id') + def onchange_overtime_users(self): + if self.approval_category_name == 'overtime_approval': + users_data_list = [] + default_datetime = datetime.combine(datetime.now().date(), time(hour=17, minute=30)) - timedelta(hours=8), + for over in self: + if not over.overtime_department_id: + users_data_list.append((0, 0, { + 'approval_request_id': over.id, + 'user_id': over.request_owner_id.id, + 'start_time': default_datetime[0], + 'type_overtime': 'work', + 'compensation_mode': 'salary', + })) + else: + employee_ids = self.env['hr.employee'].search([('department_id', '=', self.overtime_department_id.id)]) + for user in employee_ids: + users_data_list.append((0, 0, { + 'approval_request_id': over.id, + 'user_id': user.user_id.id, + 'start_time': default_datetime[0], + 'type_overtime': 'work', + 'compensation_mode': 'salary', + })) + over.overtime_user_ids = users_data_list + + +class OvertimeUserLine(models.Model): + _name = 'overtime.user.line' + _rec_name = 'approval_request_id' + _description = "加班明细行" + + default_date = datetime.combine(datetime.now().date(), time(hour=17, minute=30)) + approval_request_id = fields.Many2one('approval.request', string="关联审批单") + user_id = fields.Many2one('res.users', string="请假人员") + start_time = fields.Datetime(string="开始时间", default=default_date) + end_time = fields.Datetime(string="结束时间") + overtime_hours = fields.Float(string="加班时长") + type_overtime = fields.Selection([('work', '工作日',), ('rest', '休息日',), ('holiday', '节假日')], + string="加班类型", default="work") + compensation_mode = fields.Selection([('salary', '薪资',), ('rest', '调休',)], string="补偿方式", default="salary") + is_male_pay = fields.Boolean(string="加班餐费") + user_attendance = fields.Char(string="考勤信息")