添加功能

This commit is contained in:
李鹏宇
2026-01-14 18:43:00 +08:00
parent af35a845ae
commit 3d78c8df8c
14 changed files with 448 additions and 5 deletions
+3
View File
@@ -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',
@@ -1,5 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="issue_party_approval_num_sequence" model="ir.sequence">
<field name="name">党议题审批编号</field>
<field name="code">issue_party_approval_code</field>
<field name="prefix">DYT%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
<field name="company_id" eval="False"/>
</record>
<record id="issue_class_approval_num_sequence" model="ir.sequence">
<field name="name">班子议题编号</field>
<field name="code">issue_class_approval_code</field>
<field name="prefix">BZYT%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
<field name="company_id" eval="False"/>
</record>
<record id="issue_boss_approval_num_sequence" model="ir.sequence">
<field name="name">董事议题编号</field>
<field name="code">issue_boss_approval_code</field>
<field name="prefix">TSYT%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
<field name="company_id" eval="False"/>
</record>
<record id="issue_library_code_num_sequence" model="ir.sequence">
<field name="name">议题编号</field>
<field name="code">issue_library_code</field>
+3
View File
@@ -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
+1 -1
View File
@@ -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,
@@ -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,
}
@@ -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,
}
+82 -1
View File
@@ -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',
@@ -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,
}
@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
12 access_issue_library_room_line issue_library_room_line model_issue_library_room_line base.group_user 1 1 1 1
13 access_issue_library_type issue_library_type model_issue_library_type base.group_user 1 1 1 1
14 access_issue_line_add_wizard issue_line_add_wizard model_issue_line_add_wizard base.group_user 1 1 1 1
15 access_issue_party_approval issue_party_approval model_issue_party_approval base.group_user 1 1 1 1
16 access_issue_party_approval_line issue_party_approval_line model_issue_party_approval_line base.group_user 1 1 1 1
17 access_issue_class_approval issue_class_approval model_issue_class_approval base.group_user 1 1 1 1
18 access_issue_class_approval_line issue_class_approval_line model_issue_class_approval_line base.group_user 1 1 1 1
19 access_issue_boss_approval issue_boss_approval model_issue_boss_approval base.group_user 1 1 1 1
20 access_issue_boss_approval_line issue_boss_approval_line model_issue_boss_approval_line base.group_user 1 1 1 1
21
22
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_issue_boss_approval_form" model="ir.ui.view">
<field name="name">issue.boss.approval.form</field>
<field name="model">issue.boss.approval</field>
<field name="arch" type="xml">
<form string="董事议题审批">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
</group>
<group>
<field name="urgency_level" readonly="1"/>
</group>
<group/>
</group>
<div class="col-12 text-center">
<h1>
<field name="name_title" readonly="1"/>
</h1>
</div>
<group>
<field name="name"/>
<field name="is_back" invisible="1"/>
<field name="users_id" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="department_id" invisible="1"/>
<field name="work_end" invisible="1"/>
</group>
<field name="line_ids" readonly="1">
<tree editable="bottom">
<field name="boss_approval_id" column_invisible="1"/>
<field name="issue_id" column_invisible="1"/>
<field name="name"/>
<field name="will_based"/>
<field name="department_id"/>
<button name="open_record" type="object" string="详情" class="btn-primary"/>
</tree>
</field>
</sheet>
</form>
</field>
</record>
</odoo>
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_issue_class_approval_form" model="ir.ui.view">
<field name="name">issue.class.approval.form</field>
<field name="model">issue.class.approval</field>
<field name="arch" type="xml">
<form string="班子议题审批">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
</group>
<group>
<field name="urgency_level" readonly="1"/>
</group>
<group/>
</group>
<div class="col-12 text-center">
<h1>
<field name="name_title" readonly="1"/>
</h1>
</div>
<group>
<field name="name"/>
<field name="is_back" invisible="1"/>
<field name="users_id" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="department_id" invisible="1"/>
<field name="work_end" invisible="1"/>
</group>
<field name="line_ids" readonly="1">
<tree editable="bottom">
<field name="class_approval_id" column_invisible="1"/>
<field name="issue_id" column_invisible="1"/>
<field name="name"/>
<field name="will_based"/>
<field name="department_id"/>
<button name="open_record" type="object" string="详情" class="btn-primary"/>
</tree>
</field>
</sheet>
</form>
</field>
</record>
</odoo>
@@ -160,6 +160,7 @@
<!-- <field name="will_based" readonly="issue_state not in ['draft', 'cancel']"/>-->
<field name="is_legal_trial" readonly="issue_state not in ['draft', 'cancel']"/>
<field name="department_personnel_ids" widget="many2many_tags" invisible="1"/>
<field name="issue_state" groups="soong_workflow.group_soong_workflow_manager"/>
<field name="workflow_id" invisible="is_legal_trial == 'no'" domain="[('res_model', '=', 'contract.review.approval'), ('create_uid', 'in', department_personnel_ids)]" readonly="issue_state not in ['draft', 'cancel']"/>
<!--<field name="documents_ids" widget="preview_many2many" invisible="is_invisible_workflow" readonly="issue_state not in ['draft', 'cancel']"/>-->
<field name="is_invisible_workflow" invisible="1"/>
@@ -300,6 +301,7 @@
decoration-muted="issue_state == 'cancel'">
<header>
<button name="all_meeting_issue" type="object" string="批量上会" class="oe_highlight"/>
<button name="issue_party_approval" type="object" string="批量审批" class="oe_highlight"/>
</header>
<field name="name"/>
<field name="department_id"/>
@@ -351,6 +353,7 @@
<field name="company_id" invisible="1"/>
<field name="approval_decision_sequence" invisible="1"/>
<field name="creart_datetime" invisible="1"/>
<field name="issue_state" groups="soong_workflow.group_soong_workflow_manager"/>
<field name="topic_content" readonly="issue_state not in ['draft', 'cancel']"/>
<field name="documents_ids" widget="preview_many2many" readonly="issue_state not in ['draft', 'cancel']"/>
</group>
@@ -458,6 +461,7 @@
decoration-muted="issue_state == 'cancel'">
<header>
<button name="all_meeting_issue" type="object" string="批量上会" class="oe_highlight"/>
<button name="issue_class_approval" type="object" string="批量审批" class="oe_highlight"/>
</header>
<field name="name"/>
<field name="department_id"/>
@@ -509,6 +513,7 @@
<field name="approval_decision_sequence" invisible="1"/>
<field name="creart_datetime" invisible="1"/>
<field name="topic_content" readonly="issue_state not in ['draft', 'cancel']"/>
<field name="issue_state" groups="soong_workflow.group_soong_workflow_manager"/>
<field name="documents_ids" widget="preview_many2many" readonly="issue_state not in ['draft', 'cancel']"/>
</group>
<group>
@@ -603,6 +608,7 @@
decoration-muted="issue_state == 'cancel'">
<header>
<button name="all_meeting_issue" type="object" string="批量上会" class="oe_highlight"/>
<button name="issue_boss_approval" type="object" string="批量审批" class="oe_highlight"/>
</header>
<field name="name"/>
<field name="department_id"/>
@@ -654,6 +660,7 @@
<field name="approval_decision_sequence" invisible="1"/>
<field name="creart_datetime" invisible="1"/>
<field name="topic_content" readonly="issue_state not in ['draft', 'cancel']"/>
<field name="issue_state" groups="soong_workflow.group_soong_workflow_manager"/>
<field name="documents_ids" widget="preview_many2many" readonly="issue_state not in ['draft', 'cancel']"/>
</group>
<group>
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_issue_party_approval_form" model="ir.ui.view">
<field name="name">issue.party.approval.form</field>
<field name="model">issue.party.approval</field>
<field name="arch" type="xml">
<form string="党议题审批">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="3">
<group>
<field name="code" string="流水号" readonly="1"/>
</group>
<group>
<field name="urgency_level" readonly="1"/>
</group>
<group/>
</group>
<div class="col-12 text-center">
<h1>
<field name="name_title" readonly="1"/>
</h1>
</div>
<group>
<field name="name"/>
<field name="is_back" invisible="1"/>
<field name="users_id" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="department_id" invisible="1"/>
<field name="work_end" invisible="1"/>
</group>
<field name="line_ids" readonly="1">
<tree editable="bottom">
<field name="party_approval_id" column_invisible="1"/>
<field name="issue_id" column_invisible="1"/>
<field name="name"/>
<field name="will_based"/>
<field name="department_id"/>
<button name="open_record" type="object" string="详情" class="btn-primary"/>
</tree>
</field>
</sheet>
</form>
</field>
</record>
</odoo>