From bfc6fe7ed50a36e5098aa93d6900cc5a1bb833fb 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: Mon, 2 Feb 2026 17:23:39 +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 --- room/data/room_meeting_type_data.xml | 2 +- room/models/room_booking.py | 1 + room/views/room_booking_views.xml | 3 +- yuthon_issue/models/inherit_room_booking.py | 15 +++- yuthon_issue/models/issue_library.py | 78 +++++++++++++++++++-- yuthon_issue/views/inherit_room_booking.xml | 5 +- 6 files changed, 95 insertions(+), 9 deletions(-) diff --git a/room/data/room_meeting_type_data.xml b/room/data/room_meeting_type_data.xml index 28cae1a11..f4fc2cce3 100644 --- a/room/data/room_meeting_type_data.xml +++ b/room/data/room_meeting_type_data.xml @@ -1,7 +1,7 @@ - 党委会 + 党总支 班子会 diff --git a/room/models/room_booking.py b/room/models/room_booking.py index 527a97d71..2ab0963c1 100644 --- a/room/models/room_booking.py +++ b/room/models/room_booking.py @@ -56,6 +56,7 @@ class RoomBooking(models.Model): other_company_id = fields.Many2one('res.partner', string="外部公司") host = fields.Many2one('hr.employee', string="主持人") stationed_group = fields.Boolean(string="派驻组") + recorder_ids = fields.Many2many('hr.employee', string='记录员') other_company_user_ids = fields.Many2many('other.meet.employee', string="其他人员") fleet_id = fields.Many2one('fleet.vehicle', string="车辆") meeting_place = fields.Char(string="会议地点") diff --git a/room/views/room_booking_views.xml b/room/views/room_booking_views.xml index ad4c71ef1..559936b10 100644 --- a/room/views/room_booking_views.xml +++ b/room/views/room_booking_views.xml @@ -202,7 +202,8 @@ - + + diff --git a/yuthon_issue/models/inherit_room_booking.py b/yuthon_issue/models/inherit_room_booking.py index ed55e33c9..9ecdf6642 100644 --- a/yuthon_issue/models/inherit_room_booking.py +++ b/yuthon_issue/models/inherit_room_booking.py @@ -108,7 +108,20 @@ class IssueMeetingLine(models.Model): issue_library_id = fields.Many2one('issue.library', string='议题') issue_library_name = fields.Char(related='issue_library_id.name', string='议题') employee_id = fields.Many2one('hr.employee', string='传达人') - attendees = fields.Char(string='列席人员') + designated_person_ids = fields.Many2many( + 'hr.employee', + 'issue_meeting_line_designated_person_rel' + 'line_id', + 'employee_id', + string='指定人员' + ) + attendees_ids = fields.Many2many( + 'hr.employee', + 'issue_meeting_line_attendees_rel', + 'line_id', + 'employee_id', + string='列席人员' + ) is_sanda = fields.Boolean(string="三重一大") decision_results = fields.Selection([('agree', '通过'), ('disagree', '重新上会'), ('rejected', '驳回')], string="决策结果") decision_details = fields.Text(string="决策详情") diff --git a/yuthon_issue/models/issue_library.py b/yuthon_issue/models/issue_library.py index 0ea378b2a..9100a6d0f 100644 --- a/yuthon_issue/models/issue_library.py +++ b/yuthon_issue/models/issue_library.py @@ -491,24 +491,94 @@ class IssueLibrary(models.Model): self.write({"issue_state": "cancel"}) def all_meeting_issue(self): - issue_active_ids = self.env["issue.library"].browse(self._context.get('active_ids', self._context.get('active_id'))) + issue_active_ids = self.env["issue.library"].browse( + self._context.get('active_ids', self._context.get('active_id', [])) + ) + current_user = self.env.user + user_company_name = current_user.company_id.name if current_user.company_id else "" for record in issue_active_ids: if record.issue_state != 'will': - raise UserError("当前状态不允许上会") + raise UserError( + f"事项【{record.name or record.id}】状态为{record.issue_state},非待上会状态,不允许上会!") + issue_details = [] + target_meeting_type_id = False + meeting_priority = [ + ('is_party', 'is_party_passed', None), # 党总支:动态匹配名称(集团本部=党总支/其他=党支委) + ('is_class', 'is_class_passed', '班子'), # 班子会:匹配含「班子」的名称 + ('is_boss', 'is_boss_passed', '董事'), # 董事会:匹配含「董事」的名称 + ] + def get_all_sub_departments(department): + dept_ids = [department.id] + sub_depts = self.env['hr.department'].search([('parent_id', '=', department.id)]) + for sub_dept in sub_depts: + dept_ids += get_all_sub_departments(sub_dept) + return dept_ids + + all_dept_ids = get_all_sub_departments(self.department_id) + target_employees = self.env['hr.employee'].search([ + ('department_id', 'in', all_dept_ids), + ('active', '=', True) + ]) + manager_employee = self.env['hr.employee'].search([ + ('id', 'in', target_employees.ids), + ('user_role_id.name', '=', '部门经理') + ], limit=1) for issue in issue_active_ids: issue_details.append((0, 0, { 'issue_library_id': issue.id, + 'employee_id': manager_employee.id, + 'designated_person_ids': [(6, 0, target_employees.ids)], })) - form_id = self.env.ref("room.room_booking_view_form").id + if target_meeting_type_id: + continue + + # 按「党→班子→董事」优先级匹配 + for idx, (field_flag, field_passed, keyword) in enumerate(meeting_priority): + # 跳过未勾选的会议类型 + if not getattr(issue, field_flag, False): + continue + passed_result = getattr(issue, field_passed, '') + # 逻辑:空/未通过 → 匹配对应会议类型;已通过 → 继续匹配下一级 + if passed_result in (False, 'reject'): + if idx == 0: + if user_company_name == "集团本部": + party_meeting_name = "党总支" + else: + party_meeting_name = "党支委" + meeting_type = self.env['room.meeting.type'].search([ + ('name', 'ilike', party_meeting_name) + ], limit=1) + else: + meeting_type = self.env['room.meeting.type'].search([ + ('name', 'ilike', keyword) + ], limit=1) + if meeting_type: + target_meeting_type_id = meeting_type.id + break + elif passed_result == 'pass': + continue + host_role_id = meeting_type.host_id.id + host_employee = self.env['hr.employee'].search([ + ('user_role_ids', 'in', host_role_id), + ], limit=1) + room_user_role_ids = meeting_type.room_users_ids.ids + room_employees = self.env['hr.employee'].search([ + ('user_role_ids', 'in', room_user_role_ids), + ]) + room_user_ids = room_employees.mapped('user_id.id') + form_id = self.env.ref("room.room_booking_view_form", raise_if_not_found=False) return { "type": "ir.actions.act_window", "name": "批量上会", "res_model": "room.booking", - "views": [[form_id, "form"]], + "views": [[form_id.id, "form"]], "context": { 'default_is_issue': True, 'default_state': '申请人', + 'default_host': host_employee.id, + 'default_room_users_ids': [(6, 0, room_user_ids)], + 'default_meeting_type_id': target_meeting_type_id, 'default_start_datetime': fields.Datetime.now() + timedelta(hours=8), 'default_issue_meeting_line_ids': issue_details, } diff --git a/yuthon_issue/views/inherit_room_booking.xml b/yuthon_issue/views/inherit_room_booking.xml index c036e58df..9c82e856c 100644 --- a/yuthon_issue/views/inherit_room_booking.xml +++ b/yuthon_issue/views/inherit_room_booking.xml @@ -24,8 +24,9 @@ - - + + +