# -*- coding: utf-8 -*- from odoo import api, fields, models, tools from odoo.exceptions import UserError, ValidationError class IssueLibrary(models.Model): _name = "issue.library" _description = '议题库' _inherit = ['mail.thread.main.attachment', 'mail.activity.mixin'] _rec_name = 'name' name = fields.Char(string='议题事项') code = fields.Char(string='编号', required=True, copy=False, default=lambda self: self.env['ir.sequence'].next_by_code('issue_library_code')) state = fields.Selection([('draft', '待提交'), ('approval', '审批中'), ('will', '待上会'), ('on_meet', '已上会'), ('cancel', '已取消')], default='draft', string="议题状态") is_party = fields.Boolean(string="党之委会", default=False, compute='_compute_issue_library_line_ids') is_class = fields.Boolean(string="班子会", default=False, compute='_compute_issue_library_line_ids') is_boss = fields.Boolean(string="董事会", default=False, compute='_compute_issue_library_line_ids') is_note = fields.Boolean(string="上级单位", default=False, compute='_compute_issue_library_line_ids') creart_datetime = fields.Date(string="创建日期", default=fields.Datetime.now) notice_documents_ids = fields.Many2many('ir.attachment', string='议题附件') issue_type_id = fields.Many2one('issue.type', string="议题类型") relevancy_type = fields.Selection([('none', '无')], string="关联流程类型") issue_approval_id = fields.Many2one('issue.approval', string="关联议题审批") issue_library_line_ids = fields.One2many('issue.library.line', 'issue_library_id', string="决策明细") issue_library_approval_line_ids = fields.One2many('issue.library.approval.line', 'issue_approval_id', string='流程记录') room_booking_id = fields.Many2one('room.booking', string="会议室") approval_decision_sequence = fields.Char(string="决策清单事项") decision_results = fields.Selection([('agree', '通过'), ('disagree', '未通过')], string="决策结果") decision_details = fields.Text(string="决策详情") # 权限相关隐藏字段 employee_id = fields.Many2one('hr.employee', string='创建人', default=lambda self: self.env.user.employee_id) department_id = fields.Many2one('hr.department', string='部门', related='employee_id.department_id') yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'), ('thlc', '天河粮储'), ('tctj', '天投城建')], string="所属公司", related='employee_id.yuthon_company') users_role_ids = fields.Many2many('soong.user.role', string='角色范围', related='employee_id.user_role_ids') meeting_place = fields.Char(string="会议地点") meeting_name = fields.Char(string="会议名称") @api.onchange('issue_library_line_ids') def onchange_approval_decision_sequence(self): for dec in self: specifics_list = [] for line in dec.issue_library_line_ids: if line.issue_approval_decision_id: specifics_list.append(line.issue_approval_decision_id.specifics) dec.approval_decision_sequence = ';'.join(specifics_list) if specifics_list else '' def all_issue_pull(self): for record in self: if record.state in ['approval', 'cancel']: raise UserError("当前状态不允许提交") issue_active_ids = self.env["issue.library"].browse(self._context.get('active_ids', self._context.get('active_id'))) form_id = self.env.ref("yuthon_issue.issue_library_approval_form").id issue_decision_lines = [] if not issue_active_ids: issue_active_ids = self for issue_record in issue_active_ids: issue_record.write({"state": "approval"}) issue_decision_lines.append((0, 0, { 'issue_library_id': issue_record.id, 'approval_decision_sequence': issue_record.approval_decision_sequence, 'is_party':issue_record.is_party, 'is_class': issue_record.is_class, 'is_boss': issue_record.is_boss, 'is_note': issue_record.is_note })) return { "type": "ir.actions.act_window", "name": "批量提交", "res_model": "issue.approval", "views": [[form_id, "form"]], "context": { "default_issue_approval_ids": issue_decision_lines, } } def issue_cancel(self): self.write({"state": "cancel"}) def all_meeting_issue(self): for meet in self: if meet.state == 'on_meet': raise UserError('不可重复上会') meet.write({"state": "on_meet"}) issue_active_ids = self.env["issue.library"].browse( self._context.get('active_ids', self._context.get('active_id'))) form_id = self.env.ref("room.room_booking_view_form").id return { "type": "ir.actions.act_window", "name": "批量上会", "res_model": "room.booking", "views": [[form_id, "form"]], "context": { 'default_name': '', 'default_room_booking_library_ids': [(6, 0, issue_active_ids.ids)], } } @api.depends('issue_library_line_ids') def _compute_issue_library_line_ids(self): for line in self: line.is_party = bool(line.issue_library_line_ids.filtered('council')) line.is_class = bool(line.issue_library_line_ids.filtered('team_meet')) line.is_boss = bool(line.issue_library_line_ids.filtered('board_meet')) line.is_note = bool(line.issue_library_line_ids.filtered('district_bureau')) def unlink(self): for i in self: if i.state == 'on_meet': raise UserError('议题已上会,不能删除') return super().unlink() class IssueLibraryLine(models.Model): _name = "issue.library.line" _description = '决策清单' issue_library_id = fields.Many2one('issue.library') issue_approval_decision_id = fields.Many2one('issue.approval.decision', string="决策清单") council = fields.Selection(related='issue_approval_decision_id.council', string='党总委员会') team_meet = fields.Selection(related='issue_approval_decision_id.team_meet', string='经营班子会') board_meet = fields.Selection(related='issue_approval_decision_id.board_meet', string='董事会') district_bureau = fields.Selection(related='issue_approval_decision_id.district_bureau', string='上级单位') class IssueLibraryApprovalLine(models.Model): _name = "issue.library.approval.line" _description = '关联流程明细' issue_approval_id = fields.Many2one('issue.library') workflow_record_id = fields.Many2one('soong.workflow.record', string="标题") code = fields.Char(string="流程编号") approval_type = fields.Many2one(related="workflow_record_id.workflow_id", string="类型") approval_date = fields.Datetime(related="workflow_record_id.write_date", string="创建日期") def open_record(self): return { "type": "ir.actions.act_window", "res_model": self.workflow_record_id.res_model, "res_id": self.workflow_record_id.res_id, "name": self.workflow_record_id.name, "view_mode": "form", }