216 lines
10 KiB
Python
216 lines
10 KiB
Python
# -*- 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='议题事项')
|
|
name_text = fields.Text(string='议题事项', compute='_compute_name', readonly=False)
|
|
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', '审批中'), ('on_approval', '已审批'),
|
|
('will', '待上会'), ('on_meet', '已上会'), ('cancel', '已取消')],
|
|
default='draft', string="议题状态")
|
|
is_party = fields.Boolean(string="党之委会", default=False, compute='_compute_issue_library_line_ids', store=True)
|
|
is_class = fields.Boolean(string="班子会", default=False, compute='_compute_issue_library_line_ids', store=True)
|
|
is_boss = fields.Boolean(string="董事会", default=False, compute='_compute_issue_library_line_ids', store=True)
|
|
is_note = fields.Boolean(string="上级单位", default=False, compute='_compute_issue_library_line_ids', store=True)
|
|
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_library_id', string='流程记录')
|
|
approval_decision_sequence = fields.Char(string="决策清单事项")
|
|
is_booking = fields.Boolean(string="是否上会")
|
|
cs_party = fields.Char(string='党支委')
|
|
cs_class = fields.Char(string='班子会')
|
|
cs_boss = fields.Char(string='董事会')
|
|
issue_library_room_line_ids = fields.One2many('issue.library.room.line', 'issue_library_id', 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', '天河粮储')], string="所属公司", related='employee_id.yuthon_company')
|
|
users_role_ids = fields.Many2many('soong.user.role', string='角色范围', related='employee_id.user_role_ids')
|
|
approval_name = fields.Char(string="审批标题")
|
|
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):
|
|
issue_active_ids = self.env["issue.library"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
|
if not issue_active_ids:
|
|
if self.state != 'draft':
|
|
raise UserError("当前状态不允许提交")
|
|
else:
|
|
for i in issue_active_ids:
|
|
if i.state != 'draft':
|
|
raise UserError("当前状态不允许提交")
|
|
form_id = self.env.ref("yuthon_issue.issue_library_approval_form").id
|
|
issue_decision_lines = []
|
|
specifics_list = []
|
|
if not issue_active_ids:
|
|
issue_active_ids = self
|
|
for issue_record in issue_active_ids:
|
|
specifics_list.append(issue_record.name)
|
|
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,
|
|
'employee_id': issue_record.employee_id.id
|
|
}))
|
|
if len(specifics_list)>1:
|
|
name = ','.join(specifics_list)
|
|
else:
|
|
name = self.name
|
|
issue_approval_id = self.env['issue.approval'].create({
|
|
'issue_approval_ids': issue_decision_lines,
|
|
'name': name,
|
|
'employee_id': self.employee_id.id,
|
|
})
|
|
self.issue_approval_id = issue_approval_id
|
|
return {
|
|
"type": "ir.actions.act_window",
|
|
"name": "批量提交",
|
|
"res_model": "issue.approval",
|
|
"views": [[form_id, "form"]],
|
|
"res_id": issue_approval_id.id,
|
|
"context": {
|
|
"id": issue_approval_id.id,
|
|
"is_issue": True,
|
|
}
|
|
}
|
|
|
|
def issue_cancel(self):
|
|
self.write({"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')))
|
|
# for record in issue_active_ids:
|
|
# if record.state != 'will':
|
|
# raise UserError("当前状态不允许上会")
|
|
for meet in self:
|
|
meet.write({"state": "on_meet"})
|
|
issue_details = []
|
|
for issue in issue_active_ids:
|
|
issue_details.append((0, 0, {
|
|
'issue_library_id': issue.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_is_issue': True,
|
|
'default_issue_meeting_line_ids': issue_details,
|
|
}
|
|
}
|
|
|
|
def approval_details(self):
|
|
self.ensure_one()
|
|
for record in self:
|
|
if not record.issue_approval_id:
|
|
raise UserError('请提交审批后查看')
|
|
form_id = self.env.ref("yuthon_issue.issue_library_approval_form").id
|
|
return{
|
|
"type": "ir.actions.act_window",
|
|
"name": "审批详情",
|
|
"res_model": "issue.approval",
|
|
"views": [[form_id, "form"]],
|
|
"res_id": self.issue_approval_id.id
|
|
}
|
|
|
|
@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()
|
|
|
|
@api.depends('name')
|
|
def _compute_name(self):
|
|
for record in self:
|
|
record.name_text = record.name
|
|
|
|
@api.onchange('issue_library_room_line_ids')
|
|
def _onchange_issue_library_room_line_ids(self):
|
|
for record in self.issue_library_room_line_ids:
|
|
if record.meeting_type_id.name == '党委会':
|
|
self.cs_party = record.room_booking_id.name
|
|
elif record.meeting_type_id.name == '班子会':
|
|
self.cs_class = record.room_booking_id.name
|
|
elif record.meeting_type_id.name == '董事会':
|
|
self.cs_boss = record.room_booking_id.name
|
|
|
|
|
|
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='上级单位')
|
|
ordinal = fields.Char(related='issue_approval_decision_id.sequence', string='序号')
|
|
|
|
|
|
class IssueLibraryApprovalLine(models.Model):
|
|
_name = "issue.library.approval.line"
|
|
_description = '关联流程明细'
|
|
|
|
issue_library_id = fields.Many2one('issue.library', string="关联议题")
|
|
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",
|
|
}
|
|
|
|
|
|
class IssueLibraryRoomLine(models.Model):
|
|
_name = "issue.library.room.line"
|
|
_description = '关联会议明细'
|
|
|
|
issue_library_id = fields.Many2one('issue.library', string="关联议题")
|
|
room_booking_id = fields.Many2one('room.booking', string="会议名称")
|
|
room_id = fields.Many2one('room.room', string="会议地点")
|
|
meeting_type_id = fields.Many2one('room.meeting.type', string="会议类型")
|
|
approval_date = fields.Datetime(related="room_booking_id.write_date", string="创建日期")
|