From 3d78c8df8c71d94eb9ae16770f65fef81b7d3fb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= <9664676+pengyuthon@user.noreply.gitee.com> Date: Wed, 14 Jan 2026 18:43:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/yuthon_renewal_approval.py | 6 +- yuthon_issue/__manifest__.py | 3 + yuthon_issue/data/issue_library_code_data.xml | 21 +++++ yuthon_issue/models/__init__.py | 3 + yuthon_issue/models/issue_approval.py | 2 +- yuthon_issue/models/issue_boss_approval.py | 59 +++++++++++++ yuthon_issue/models/issue_class_approval.py | 55 ++++++++++++ yuthon_issue/models/issue_library.py | 83 ++++++++++++++++++- yuthon_issue/models/issue_party_approval.py | 53 ++++++++++++ yuthon_issue/security/ir.model.access.csv | 8 ++ .../views/issue_boss_approval_views.xml | 51 ++++++++++++ .../views/issue_class_approval_views.xml | 51 ++++++++++++ yuthon_issue/views/issue_library_views.xml | 7 ++ .../views/issue_party_approval_views.xml | 51 ++++++++++++ 14 files changed, 448 insertions(+), 5 deletions(-) create mode 100644 yuthon_issue/models/issue_boss_approval.py create mode 100644 yuthon_issue/models/issue_class_approval.py create mode 100644 yuthon_issue/models/issue_party_approval.py create mode 100644 yuthon_issue/views/issue_boss_approval_views.xml create mode 100644 yuthon_issue/views/issue_class_approval_views.xml create mode 100644 yuthon_issue/views/issue_party_approval_views.xml diff --git a/yuthon_hr_employee_approval/models/yuthon_renewal_approval.py b/yuthon_hr_employee_approval/models/yuthon_renewal_approval.py index 70ca9f984..0b5f31273 100644 --- a/yuthon_hr_employee_approval/models/yuthon_renewal_approval.py +++ b/yuthon_hr_employee_approval/models/yuthon_renewal_approval.py @@ -25,9 +25,9 @@ class YuthonRenewalApproval(models.Model): department1_id = fields.Many2one('hr.department', string="续签部门") user_sex = fields.Selection(related='employee_id.user_sex', string="性别") degree = fields.Char(related='employee_id.high_degree', string="学历") - onboard_time = fields.Date(related='employee_id.contract_id.date_end', string='入职时间') - current_status = fields.Date(string='合同到期日') - + onboard_time = fields.Date(related='employee_id.contract_id.date_of_entry', string='入职时间') + current_status = fields.Date(related='employee_id.contract_id.date_end',string='合同到期日') + renewal_date = fields.Date(string="续签日期") contract = fields.Char(string="劳动合同签订情况") condition_review = fields.Text(string="续期条件审核") job_id = fields.Many2one('hr.job', string="续签劳动合同岗位") diff --git a/yuthon_issue/__manifest__.py b/yuthon_issue/__manifest__.py index 24515ccb8..ce88d93b8 100644 --- a/yuthon_issue/__manifest__.py +++ b/yuthon_issue/__manifest__.py @@ -21,7 +21,10 @@ 'views/inherit_room_booking.xml', 'views/issue_approval_decision_views.xml', 'views/issue_approval_decision_type_views.xml', + 'views/issue_class_approval_views.xml', + 'views/issue_boss_approval_views.xml', 'views/issue_meeting_minutes_views.xml', + 'views/issue_party_approval_views.xml', 'views/issue_library_type_views.xml', 'wizard/issue_line_add_wizard.xml', 'report/meeting_minutes_report.xml', diff --git a/yuthon_issue/data/issue_library_code_data.xml b/yuthon_issue/data/issue_library_code_data.xml index e72b0e967..d39ea04b1 100644 --- a/yuthon_issue/data/issue_library_code_data.xml +++ b/yuthon_issue/data/issue_library_code_data.xml @@ -1,5 +1,26 @@ + + 党议题审批编号 + issue_party_approval_code + DYT%(y)s%(month)s%(day)s + 3 + + + + 班子议题编号 + issue_class_approval_code + BZYT%(y)s%(month)s%(day)s + 3 + + + + 董事议题编号 + issue_boss_approval_code + TSYT%(y)s%(month)s%(day)s + 3 + + 议题编号 issue_library_code diff --git a/yuthon_issue/models/__init__.py b/yuthon_issue/models/__init__.py index 13aa50667..1bb36d639 100644 --- a/yuthon_issue/models/__init__.py +++ b/yuthon_issue/models/__init__.py @@ -8,4 +8,7 @@ from . import inherit_room_booking from . import issue_approval from . import issue_meeting_minutes from . import issue_library_type +from . import issue_party_approval +from . import issue_class_approval +from . import issue_boss_approval diff --git a/yuthon_issue/models/issue_approval.py b/yuthon_issue/models/issue_approval.py index aafe77515..a12b382c0 100644 --- a/yuthon_issue/models/issue_approval.py +++ b/yuthon_issue/models/issue_approval.py @@ -78,7 +78,7 @@ class IssueApproval(models.Model): for rec in self: if rec.issue_approval_ids: for issue_library in rec.issue_approval_ids: - issue_library.issue_library_id.write({'issue_state': 'will'}) + issue_library.issue_library_id.write({'issue_state': 'to_approval'}) if rec.code: self.env['issue.library.approval.line'].create({ 'issue_library_id': issue_library.issue_library_id.id, diff --git a/yuthon_issue/models/issue_boss_approval.py b/yuthon_issue/models/issue_boss_approval.py new file mode 100644 index 000000000..64c997d57 --- /dev/null +++ b/yuthon_issue/models/issue_boss_approval.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +from odoo import api, fields, models +from datetime import datetime, timedelta, date + + +class IssueBossApproval(models.Model): + _name = 'issue.boss.approval' + _description = '董事议题审批' + _inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin'] + + name = fields.Char(string='标题', required=True) + code = fields.Char(string='编号', required=True, copy=False, + default=lambda self: self.env['ir.sequence'].next_by_code('issue_boss_approval_code')) + urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度', + default='normal') + users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id) + department_id = fields.Many2one(related='users_id.employee_ids.department_id', string="部门") + company_id = fields.Many2one(related='users_id.employee_ids.company_id', string="公司") + work_end = fields.Boolean(string="结束") + line_ids = fields.One2many('issue.boss.approval.line', 'boss_approval_id', string="审批流程") + + def _get_default_name_title(self): + return self._description if self._description else self._name + + name_title = fields.Char(default=_get_default_name_title) + self_users_ids = fields.Many2many('res.users', string="当前经办人", default=lambda self: [(6, 0, [self.env.user.id])]) + + def end_approval(self): + for record in self: + if record.line_ids: + for line in record.line_ids: + line.issue_state = 'will' + + +class IssueBossApprovalLine(models.Model): + _name = 'issue.boss.approval.line' + _description = '议题审批流程' + _order = 'sequence' + + boss_approval_id = fields.Many2one('issue.boss.approval', string="关联议题审批") + issue_id = fields.Many2one('issue.library', string="议题") + name = fields.Char(string='议题名称') + will_based = fields.Text(string='上会依据') + department_id = fields.Many2one('hr.department', string="部门") + + def open_record(self): + form_id = self.env.ref('yuthon_issue.view_issue_library_form').id + return { + 'type': 'ir.actions.act_window', + 'name': '议题详情', + 'res_model': 'issue.library', + 'view_mode': 'form', + 'views': [(form_id, 'form')], + 'res_id': self.issue_id.id, + } + + + + diff --git a/yuthon_issue/models/issue_class_approval.py b/yuthon_issue/models/issue_class_approval.py new file mode 100644 index 000000000..02c159b0b --- /dev/null +++ b/yuthon_issue/models/issue_class_approval.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +from odoo import api, fields, models +from datetime import datetime, timedelta, date + + +class IssueClassApproval(models.Model): + _name = 'issue.class.approval' + _description = '班子议题审批' + _inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin'] + + name = fields.Char(string='标题', required=True) + code = fields.Char(string='编号', required=True, copy=False, + default=lambda self: self.env['ir.sequence'].next_by_code('issue_class_approval_code')) + urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度', + default='normal') + users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id) + department_id = fields.Many2one(related='users_id.employee_ids.department_id', string="部门") + company_id = fields.Many2one(related='users_id.employee_ids.company_id', string="公司") + work_end = fields.Boolean(string="结束") + line_ids = fields.One2many('issue.class.approval.line', 'class_approval_id', string="审批流程") + + def _get_default_name_title(self): + return self._description if self._description else self._name + + name_title = fields.Char(default=_get_default_name_title) + self_users_ids = fields.Many2many('res.users', string="当前经办人",default=lambda self: [(6, 0, [self.env.user.id])]) + + def end_approval(self): + for record in self: + if record.line_ids: + for line in record.line_ids: + line.issue_state = 'will' + +class IssueClassApprovalLine(models.Model): + _name = 'issue.class.approval.line' + _description = '议题审批行' + + class_approval_id = fields.Many2one('issue.class.approval', string="关联议题审批") + issue_id = fields.Many2one('issue.library', string="议题") + name = fields.Char(string='议题名称') + will_based = fields.Text(string='上会依据') + department_id = fields.Many2one('hr.department', string="部门") + + def open_record(self): + form_id = self.env.ref('yuthon_issue.view_issue_library_form').id + return { + 'type': 'ir.actions.act_window', + 'name': '议题详情', + 'res_model': 'issue.library', + 'view_mode': 'form', + 'views': [(form_id, 'form')], + 'res_id': self.issue_id.id, + } + + diff --git a/yuthon_issue/models/issue_library.py b/yuthon_issue/models/issue_library.py index f7a39916d..4c50530ee 100644 --- a/yuthon_issue/models/issue_library.py +++ b/yuthon_issue/models/issue_library.py @@ -20,7 +20,7 @@ class IssueLibrary(models.Model): is_invisible_workflow = fields.Boolean(string="流程隐藏的判断") code = fields.Char(string='编号', required=True, copy=False, default=lambda self: self.env['ir.sequence'].next_by_code('issue_library_code')) - issue_state = fields.Selection([('draft', '待提交'), ('approval', '审批中'), ('on_approval', '已审批'), + issue_state = fields.Selection([('draft', '待申报'), ('to_approval', '待审批'), ('approval', '审批中'), ('on_approval', '已审批'), ('will', '待上会'), ('on_meet', '已上会'), ('cancel', '已取消')], default='draft', string="议题状态") is_party = fields.Boolean(string="党总支", store=True) @@ -75,6 +75,87 @@ class IssueLibrary(models.Model): is_push_boss = fields.Boolean(string="董事推送") is_push_depart = fields.Boolean(string="部门推送") + def issue_party_approval(self): + issue_active_ids = self.env["issue.library"].browse( + self._context.get('active_ids', self._context.get('active_id')) + ) + line_list = [] + for record in issue_active_ids: + if record.issue_state != 'to_approval': + raise UserError("该议题状态不能审批") + record.issue_state = 'approval' + line_list.append((0, 0, { + 'issue_id': record.id, + 'name': record.name, + 'will_based': record.will_based, + 'department_id': record.department_id.id, + })) + return { + 'type': 'ir.actions.act_window', + 'name': '党议题审批', + "target": "current", + 'res_model': 'issue.party.approval', + 'view_mode': 'form', + 'context': { + 'default_state':'申请人', + 'default_line_ids': line_list, + } + } + + def issue_class_approval(self): + issue_active_ids = self.env["issue.library"].browse( + self._context.get('active_ids', self._context.get('active_id')) + ) + line_list = [] + for record in issue_active_ids: + if record.issue_state != 'to_approval': + raise UserError("该议题状态不能审批") + record.issue_state = 'approval' + line_list.append((0, 0, { + 'issue_id': record.id, + 'name': record.name, + 'will_based': record.will_based, + 'department_id': record.department_id.id, + })) + return { + 'type': 'ir.actions.act_window', + 'name': '班子议题审批', + "target": "current", + 'res_model': 'issue.class.approval', + 'view_mode': 'form', + 'context': { + 'default_state': '申请人', + 'default_line_ids': line_list, + } + } + + def issue_boss_approval(self): + issue_active_ids = self.env["issue.library"].browse( + self._context.get('active_ids', self._context.get('active_id')) + ) + line_list = [] + for record in issue_active_ids: + if record.issue_state != 'to_approval': + raise UserError("该议题状态不能审批") + record.issue_state = 'approval' + line_list.append((0, 0, { + 'issue_id': record.id, + 'name': record.name, + 'will_based': record.will_based, + 'department_id': record.department_id.id, + })) + return { + 'type': 'ir.actions.act_window', + 'name': '董事议题审批', + "target": "current", + 'res_model': 'issue.boss.approval', + 'view_mode': 'form', + 'context': { + 'default_state': '申请人', + 'default_line_ids': line_list, + } + } + @api.depends( 'is_party', 'is_class', 'is_boss', 'is_push_party', 'is_party_passed', diff --git a/yuthon_issue/models/issue_party_approval.py b/yuthon_issue/models/issue_party_approval.py new file mode 100644 index 000000000..85eb0ded8 --- /dev/null +++ b/yuthon_issue/models/issue_party_approval.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +from odoo import api, fields, models +from datetime import datetime, timedelta, date + + +class IssuePartyApproval(models.Model): + _name = 'issue.party.approval' + _description = '党议题审批' + _inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin'] + + name = fields.Char(string='标题', required=True) + code = fields.Char(string='编号', required=True, copy=False, + default=lambda self: self.env['ir.sequence'].next_by_code('issue_party_approval_code')) + urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度', + default='normal') + users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id) + department_id = fields.Many2one(related='users_id.employee_ids.department_id', string="部门") + company_id = fields.Many2one(related='users_id.employee_ids.company_id', string="公司") + work_end = fields.Boolean(string="结束") + line_ids = fields.One2many('issue.party.approval.line', 'party_approval_id', string="审批流程") + + def _get_default_name_title(self): + return self._description if self._description else self._name + + name_title = fields.Char(default=_get_default_name_title) + self_users_ids = fields.Many2many('res.users', string="当前经办人", default=lambda self: [(6, 0, [self.env.user.id])]) + + def end_approval(self): + for record in self: + if record.line_ids: + for line in record.line_ids: + line.issue_state = 'will' + +class IssuePartyApprovalLine(models.Model): + _name = 'issue.party.approval.line' + _description = '议题审批行' + + party_approval_id = fields.Many2one('issue.party.approval', string="关联议题审批") + issue_id = fields.Many2one('issue.library', string="议题") + name = fields.Char(string='议题名称') + will_based = fields.Text(string='上会依据') + department_id = fields.Many2one('hr.department', string="部门") + + def open_record(self): + form_id = self.env.ref('yuthon_issue.view_issue_library_form').id + return { + 'type': 'ir.actions.act_window', + 'name': '议题详情', + 'res_model': 'issue.library', + 'view_mode': 'form', + 'views': [(form_id, 'form')], + 'res_id': self.issue_id.id, + } \ No newline at end of file diff --git a/yuthon_issue/security/ir.model.access.csv b/yuthon_issue/security/ir.model.access.csv index 07340576f..4960211a4 100644 --- a/yuthon_issue/security/ir.model.access.csv +++ b/yuthon_issue/security/ir.model.access.csv @@ -12,3 +12,11 @@ access_issue_meeting_line,issue_meeting_line,model_issue_meeting_line,base.group access_issue_library_room_line,issue_library_room_line,model_issue_library_room_line,base.group_user,1,1,1,1 access_issue_library_type,issue_library_type,model_issue_library_type,base.group_user,1,1,1,1 access_issue_line_add_wizard,issue_line_add_wizard,model_issue_line_add_wizard,base.group_user,1,1,1,1 +access_issue_party_approval,issue_party_approval,model_issue_party_approval,base.group_user,1,1,1,1 +access_issue_party_approval_line,issue_party_approval_line,model_issue_party_approval_line,base.group_user,1,1,1,1 + +access_issue_class_approval,issue_class_approval,model_issue_class_approval,base.group_user,1,1,1,1 +access_issue_class_approval_line,issue_class_approval_line,model_issue_class_approval_line,base.group_user,1,1,1,1 + +access_issue_boss_approval,issue_boss_approval,model_issue_boss_approval,base.group_user,1,1,1,1 +access_issue_boss_approval_line,issue_boss_approval_line,model_issue_boss_approval_line,base.group_user,1,1,1,1 diff --git a/yuthon_issue/views/issue_boss_approval_views.xml b/yuthon_issue/views/issue_boss_approval_views.xml new file mode 100644 index 000000000..037799a4e --- /dev/null +++ b/yuthon_issue/views/issue_boss_approval_views.xml @@ -0,0 +1,51 @@ + + + + issue.boss.approval.form + issue.boss.approval + +
+ + + + + + + + + + + + + +
+

+ +

+
+ + + + + + + + + + + + + + + +