Resolved merge conflicts

This commit is contained in:
ONIONZHAOXI
2024-08-06 09:44:31 +08:00
35 changed files with 743 additions and 82 deletions
+15
View File
@@ -711,6 +711,21 @@ msgstr ""
msgid "Trigger Link"
msgstr ""
#. module: soong_workflow
#: model:ir.model.fields.selection,name:soong_workflow.selection__soong_workflow_node_button__action_type__link_action
msgid "Trigger Link Action"
msgstr ""
#. module: soong_workflow
#: model:ir.model.fields.selection,name:soong_workflow.selection__soong_workflow_node_button__action_type__link_action_approve
msgid "Trigger Link Action Approve"
msgstr ""
#. module: soong_workflow
#: model:ir.model.fields.selection,name:soong_workflow.selection__soong_workflow_node_button__action_type__link_action_refuse
msgid "Trigger Link Action Refuse"
msgstr ""
#. module: soong_workflow
#: model:ir.model.fields,field_description:soong_workflow.field_soong_workflow_node__use_custom_colors
msgid "Use Custom Colors"
+15
View File
@@ -723,6 +723,21 @@ msgstr "链接"
msgid "Trigger Link"
msgstr "触发链接"
#. module: soong_workflow
#: model:ir.model.fields.selection,name:soong_workflow.selection__soong_workflow_node_button__action_type__link_action
msgid "Trigger Link Action"
msgstr "触发链接并弹窗审批"
#. module: soong_workflow
#: model:ir.model.fields.selection,name:soong_workflow.selection__soong_workflow_node_button__action_type__link_action_approve
msgid "Trigger Link Action Approve"
msgstr "触发链接并弹窗批准审批"
#. module: soong_workflow
#: model:ir.model.fields.selection,name:soong_workflow.selection__soong_workflow_node_button__action_type__link_action_refuse
msgid "Trigger Link Action Refuse"
msgstr "触发链接并弹窗拒绝审批"
#. module: soong_workflow
#: model:ir.model.fields,field_description:soong_workflow.field_soong_workflow_node__use_custom_colors
msgid "Use Custom Colors"
@@ -28,6 +28,11 @@ class SoongApprovalUsers(models.Model):
approval_user_notice = fields.Char(string='审批意见')
approval_user_sign = fields.Binary(string='审批签署')
approval_user_state = fields.Selection([('will', '待审批')], string='状态')
approval_notice_state = fields.Selection([
('0', '审批已阅'),
('1', '审批通过'),
('2', '审批拒绝'),
], string='意见类型', default='0')
@api.model_create_multi
def create(self, vals_list):
@@ -238,6 +238,9 @@ class SoongWorkflowNodeButton(models.Model):
action_type = fields.Selection(
[
("link", "Trigger Link"),
("link_action", "Trigger Link Action"),
("link_action_approve", "Trigger Link Action Approve"),
("link_action_refuse", "Trigger Link Action Refuse"),
("code", "Python Code"),
("action", "Server Action"),
("win_act", "Window Action"),
@@ -451,6 +454,141 @@ class SoongWorkflowNodeButton(models.Model):
# Trigger link function
return rec.link_id.trigger_link()
def _run_link_action(self):
for rec in self:
# Check Condition Before Executing Action
result = False
cx = self.env.context.copy() or {}
locals_dict = {
"env": self.env,
"model": self.env[cx.get("active_model", False)],
"obj": self.env[cx.get("active_model", False)].browse(
cx.get("active_id", 0)
),
"user": self.env.user,
"datetime": datetime,
"time": time,
"date": date,
"timedelta": timedelta,
"workflow": self.env["soong.workflow"],
"warning": self.warning,
"syslog": self.syslog,
}
try:
safe_eval(
rec.link_id.condition_code,
locals_dict=locals_dict,
mode="exec",
nocopy=True,
)
result = "result" in locals_dict and locals_dict["result"] or False
except ValidationError as ex:
raise ex
except SyntaxError as ex:
raise UserError(
_(
"Wrong python code defined.\n\nError: %s\nLine: %s, Column: %s\n\n%s"
% (ex.args[0], ex.args[1][1], ex.args[1][2], ex.args[1][3])
)
)
if result:
win_act_obj = self.env["ir.actions.act_window"]
# Run Window Action
action = win_act_obj.with_context(cx).browse(self.env.ref('soong_workflow.soong_approval_notice_wizard_action').id).read()[0]
action["context"] = cx
action["context"].update({"default_approval_notice_state": '0'})
# Trigger link function
return action
def _run_link_action_approve(self):
for rec in self:
# Check Condition Before Executing Action
result = False
cx = self.env.context.copy() or {}
locals_dict = {
"env": self.env,
"model": self.env[cx.get("active_model", False)],
"obj": self.env[cx.get("active_model", False)].browse(
cx.get("active_id", 0)
),
"user": self.env.user,
"datetime": datetime,
"time": time,
"date": date,
"timedelta": timedelta,
"workflow": self.env["soong.workflow"],
"warning": self.warning,
"syslog": self.syslog,
}
try:
safe_eval(
rec.link_id.condition_code,
locals_dict=locals_dict,
mode="exec",
nocopy=True,
)
result = "result" in locals_dict and locals_dict["result"] or False
except ValidationError as ex:
raise ex
except SyntaxError as ex:
raise UserError(
_(
"Wrong python code defined.\n\nError: %s\nLine: %s, Column: %s\n\n%s"
% (ex.args[0], ex.args[1][1], ex.args[1][2], ex.args[1][3])
)
)
if result:
win_act_obj = self.env["ir.actions.act_window"]
# Run Window Action
action = win_act_obj.with_context(cx).browse(self.env.ref('soong_workflow.soong_approval_approve_notice_wizard_action').id).read()[0]
action["context"] = cx
action["context"].update({"default_approval_notice_state": '1'})
# Trigger link function
return action
def _run_link_action_refuse(self):
for rec in self:
# Check Condition Before Executing Action
result = False
cx = self.env.context.copy() or {}
locals_dict = {
"env": self.env,
"model": self.env[cx.get("active_model", False)],
"obj": self.env[cx.get("active_model", False)].browse(
cx.get("active_id", 0)
),
"user": self.env.user,
"datetime": datetime,
"time": time,
"date": date,
"timedelta": timedelta,
"workflow": self.env["soong.workflow"],
"warning": self.warning,
"syslog": self.syslog,
}
try:
safe_eval(
rec.link_id.condition_code,
locals_dict=locals_dict,
mode="exec",
nocopy=True,
)
result = "result" in locals_dict and locals_dict["result"] or False
except ValidationError as ex:
raise ex
except SyntaxError as ex:
raise UserError(
_(
"Wrong python code defined.\n\nError: %s\nLine: %s, Column: %s\n\n%s"
% (ex.args[0], ex.args[1][1], ex.args[1][2], ex.args[1][3])
)
)
if result:
win_act_obj = self.env["ir.actions.act_window"]
# Run Window Action
action = win_act_obj.with_context(cx).browse(self.env.ref('soong_workflow.soong_approval_refuse_notice_wizard_action').id).read()[0]
action["context"] = cx
action["context"].update({"default_approval_notice_state": '2'})
# Trigger link function
return action
def warning(self, msg):
if not isinstance(msg, str):
msg = str(msg)
@@ -10,7 +10,8 @@
<field name="res_model" column_invisible="True"/>
<field name="res_id" column_invisible="True"/>
<field name="approval_user_id"/>
<field name="approval_user"/>
<!-- <field name="approval_user"/>-->
<field name="approval_notice_state" widget="badge" decoration-danger="approval_notice_state == '2'" decoration-info="approval_notice_state == '0'" decoration-success="approval_notice_state == '1'"/>
<field name="approval_user_datetime"/>
<field name="approval_user_notice"/>
<field name="approval_user_sign" widget="image" options='{"size": [80, 40]}'/>
@@ -168,7 +168,7 @@
<group>
<field name="action_type" required="1"/>
</group>
<group name="link" invisible="action_type != 'link'">
<group name="link" invisible="action_type not in ['link', 'link_action', 'link_action_approve', 'link_action_refuse']">
<field name="link_id"
domain="[('node_from','=',node_id)]"
options="{'no_open': True, 'no_create': True}"
@@ -1,6 +1,11 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools, _
from datetime import datetime, date, time, timedelta
from odoo.tools.safe_eval import safe_eval
from odoo.exceptions import ValidationError, UserError
import logging
_logger = logging.getLogger(__name__)
class SoongApprovalNoticeWizard(models.TransientModel):
_name = 'soong.approval.notice.wizard'
@@ -8,7 +13,11 @@ class SoongApprovalNoticeWizard(models.TransientModel):
# approval_res_id = fields.Char(string="审批明细行")
# approval_res_model = fields.Char(string="审批明细行")
approval_notice_state = fields.Selection([
('0', '不分类'),
('1', '审批通过'),
('2', '审批拒绝'),
], string='意见类型', default='0')
approval_user_notice = fields.Char(string='审批意见')
approval_user_sign = fields.Binary(string="审批签署", copy=False)
@@ -23,4 +32,9 @@ class SoongApprovalNoticeWizard(models.TransientModel):
'approval_user_id': self.env.user.id,
'approval_user_datetime': fields.datetime.now(),
'approval_user_sign': self.approval_user_sign,
'approval_notice_state': self.approval_notice_state,
})
wkf_btn_obj = self.env["soong.workflow.node.button"]
btn_rec = wkf_btn_obj.search([("btn_key", "=", self.env.context.get("btn_key", False))])
if btn_rec:
btn_rec.link_id.trigger_link()
@@ -4,8 +4,7 @@
<field name="model">soong.approval.notice.wizard</field>
<field name="arch" type="xml">
<form>
<!-- <field name="approval_res_id" invisible="1"/>-->
<!-- <field name="approval_res_model" invisible="1"/>-->
<field name="approval_notice_state" invisible="1"/>
<group>
<field name="approval_user_notice"/>
</group>
@@ -23,12 +22,30 @@
<field name="name">审批意见弹窗</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">soong.approval.notice.wizard</field>
<!-- <field name="context">{-->
<!-- 'default_approval_res_id': active_id,-->
<!-- 'default_approval_res_model': active_model,-->
<!-- }-->
<!-- </field>-->
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">
{"default_approval_notice_state": '0'}
</field>
</record>
<record id="soong_approval_approve_notice_wizard_action" model="ir.actions.act_window">
<field name="name">审批通过弹窗</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">soong.approval.notice.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">
{"default_approval_notice_state": '1'}
</field>
</record>
<record id="soong_approval_refuse_notice_wizard_action" model="ir.actions.act_window">
<field name="name">审批拒绝弹窗</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">soong.approval.notice.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">
{"default_approval_notice_state": '2'}
</field>
</record>
</odoo>
+5
View File
@@ -15,6 +15,11 @@
'security/ir.model.access.csv',
'data/issue_library_code_data.xml',
'views/issue_library_views.xml',
'views/issue_lv_views.xml',
'views/issue_type_views.xml',
'views/issue_approval_party_views.xml',
'views/issue_approval_class_views.xml',
'views/issue_approval_boss_views.xml',
],
'installable': True,
'application': True,
+6 -1
View File
@@ -1,4 +1,9 @@
# -*- coding: utf-8 -*-
# from . import notice_category
from . import issue_library
from . import issue_approval_party
from . import issue_lv
from . import issue_type
from . import issue_approval_class
from . import issue_approval_boss
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
from odoo.exceptions import ValidationError
class IssueApprovalBoss(models.Model):
_name = "issue.approval.boss"
_description = '董事会议题审批'
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin']
_rec_name = 'name'
name = fields.Char(string='名称')
note = fields.Char(string="说明")
user_id = fields.Many2one('res.users', string="经办人")
department_id = fields.Many2one(related='user_id.employee_id.department_id', string="部门")
create_time = fields.Datetime(string='创建时间', default=lambda self: fields.Datetime.now())
company_id = fields.Many2one('res.company', string='公司', index=True, default=lambda self: self.env.company)
documents_ids = fields.Many2many('documents.document', string="附件")
issue_text = fields.Html(string="正文")
issue_library_ids = fields.Many2many('issue.library', string="议题")
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
from odoo.exceptions import ValidationError
class IssueApprovalClass(models.Model):
_name = "issue.approval.class"
_description = '领导班子议题审批'
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin']
_rec_name = 'name'
name = fields.Char(string='名称')
note = fields.Char(string="说明")
user_id = fields.Many2one('res.users', string="经办人")
department_id = fields.Many2one(related='user_id.employee_id.department_id', string="部门")
create_time = fields.Datetime(string='创建时间', default=lambda self: fields.Datetime.now())
company_id = fields.Many2one('res.company', string='公司', index=True, default=lambda self: self.env.company)
documents_ids = fields.Many2many('documents.document', string="附件")
issue_text = fields.Html(string="正文")
issue_library_ids = fields.Many2many('issue.library', string="议题")
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
from odoo.exceptions import ValidationError
class IssueApprovalParty(models.Model):
_name = "issue.approval.party"
_description = '党总支议题审批'
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin']
_rec_name = 'name'
name = fields.Char(string='名称')
note = fields.Char(string="说明")
user_id = fields.Many2one('res.users', string="经办人")
department_id = fields.Many2one(related='user_id.employee_id.department_id', string="部门")
create_time = fields.Datetime(string='创建时间', default=lambda self: fields.Datetime.now())
company_id = fields.Many2one('res.company', string='公司', index=True, default=lambda self: self.env.company)
documents_ids = fields.Many2many('documents.document', string="附件")
issue_text = fields.Html(string="正文")
issue_library_ids = fields.Many2many('issue.library', string="议题")
+4 -4
View File
@@ -10,8 +10,8 @@ class IssueLibrary(models.Model):
_rec_name = 'name'
name = fields.Char(string='议题事项')
issue_id = fields.Many2one('issue.library', string="上级议题", ondelete='cascade')
issue_ids = fields.One2many('issue.library', 'issue_id', string='子议题')
issue_type_id = fields.Many2one('issue.type', string="议题类别")
# issue_ids = fields.One2many('issue.library', 'issue_id', string='子议题')
code = fields.Char(string='编号', required=True, copy=False,
default=lambda self: self.env['ir.sequence'].next_by_code('issue_library_code'))
statu = fields.Selection([('will', '待上会'), ('done', '已上会'), ('cancel', '已取消')], default='will', string="议题状态")
@@ -22,8 +22,8 @@ class IssueLibrary(models.Model):
creart_datetime = fields.Datetime(string="创建时间", default=fields.Datetime.now)
first_party = fields.Many2one('res.partner', string='甲方')
first_b = fields.Many2one('res.partner', string='乙方')
create_performance = fields.Datetime(string='开始履约日期')
end_performance = fields.Datetime(string='结束履约日期')
create_performance = fields.Datetime(string='履约开始日期')
end_performance = fields.Datetime(string='履约结束日期')
urgency = fields.Selection([('ordinary', '普通'),
('normal', '一般'),
('urgent', '紧急')], string="紧急度")
+11
View File
@@ -0,0 +1,11 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
class IssueLv(models.Model):
_name = "issue.lv"
_description = "议题层级管理"
name = fields.Char('层级', required=True)
parent_id = fields.Many2one('issue.lv', string='上级')
child_ids = fields.One2many('issue.lv', 'parent_id', string='子集')
+10
View File
@@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
class IssueType(models.Model):
_name = "issue.type"
_description = "议题类别"
name = fields.Char(string='类别')
note = fields.Char(string='说明')
@@ -1,3 +1,9 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_issue_library,issue_library,model_issue_library,base.group_user,1,1,1,1
access_issue_lv,issue_lv,model_issue_lv,base.group_user,1,1,1,1
access_payment_methods,payment_methods,model_payment_methods,base.group_user,1,1,1,1
access_issue_type,issue_type,model_issue_type,base.group_user,1,1,1,1
access_issue_approval_party,issue_approval_party,model_issue_approval_party,base.group_user,1,1,1,1
access_issue_approval_class,issue_approval_class,model_issue_approval_class,base.group_user,1,1,1,1
access_issue_approval_boss,issue_approval_boss,model_issue_approval_boss,base.group_user,1,1,1,1
>>>>>>> d636cbee0d3b80a35bfaeb0a9ae6d1c40db356b7
1 id id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_issue_library access_issue_library,issue_library,model_issue_library,base.group_user,1,1,1,1 issue_library model_issue_library base.group_user 1 1 1 1
3 access_issue_lv,issue_lv,model_issue_lv,base.group_user,1,1,1,1
4 access_payment_methods access_payment_methods,payment_methods,model_payment_methods,base.group_user,1,1,1,1 payment_methods model_payment_methods base.group_user 1 1 1 1
5 access_issue_type,issue_type,model_issue_type,base.group_user,1,1,1,1
6 access_issue_approval_party,issue_approval_party,model_issue_approval_party,base.group_user,1,1,1,1
7 access_issue_approval_class,issue_approval_class,model_issue_approval_class,base.group_user,1,1,1,1
8 access_issue_approval_boss,issue_approval_boss,model_issue_approval_boss,base.group_user,1,1,1,1
9 >>>>>>> d636cbee0d3b80a35bfaeb0a9ae6d1c40db356b7
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_issue_approval_boss_tree" model="ir.ui.view">
<field name="name">issue.approval.boss.tree</field>
<field name="model">issue.approval.boss</field>
<field name="arch" type="xml">
<tree string="议题审批">
<field name="name"/>
<field name="create_time"/>
<field name="company_id"/>
</tree>
</field>
</record>
<record id="view_issue_approval_boss_form" model="ir.ui.view">
<field name="name">issue.approval.boss.form</field>
<field name="model">issue.approval.boss</field>
<field name="arch" type="xml">
<form string="议题审批">
<sheet>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group>
<group>
<field name="note"/>
<field name="user_id"/>
<field name="department_id"/>
<field name="create_time"/>
<field name="documents_ids">
<tree>
<field name="name"/>
</tree>
</field>
</group>
<group>
<field name="company_id"/>
<field name="issue_library_ids">
<tree>
<field name="name"/>
</tree>
</field>
</group>
</group>
<group>
<field name="issue_text" widget="tinymce"/>
</group>
</sheet>
<div class="o_attachment_preview"/>
<div class="oe_chatter">
<field name="message_follower_ids" groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="issue_approval_boss_action" model="ir.actions.act_window">
<field name="name">党总支议题审批</field>
<field name="res_model">issue.approval.boss</field>
<field name="view_mode">tree,form</field>
<!-- <field name="search_view_id" ref="view_issue_approval_filter"/>-->
</record>
<menuitem
id="issue_approval_boss_menu"
parent="issue_approval_menu"
name="董事会议题审批"
action="issue_approval_boss_action"
sequence="30"/>
</odoo>
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_issue_approval_class_tree" model="ir.ui.view">
<field name="name">issue.approval.class.tree</field>
<field name="model">issue.approval.class</field>
<field name="arch" type="xml">
<tree string="议题审批">
<field name="name"/>
<field name="create_time"/>
<field name="company_id"/>
</tree>
</field>
</record>
<record id="view_issue_approval_class_form" model="ir.ui.view">
<field name="name">issue.approval.class.form</field>
<field name="model">issue.approval.class</field>
<field name="arch" type="xml">
<form string="议题审批">
<sheet>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group>
<group>
<field name="note"/>
<field name="user_id"/>
<field name="department_id"/>
<field name="create_time"/>
<field name="documents_ids">
<tree>
<field name="name"/>
</tree>
</field>
</group>
<group>
<field name="company_id"/>
<field name="issue_library_ids">
<tree>
<field name="name"/>
</tree>
</field>
</group>
</group>
<group>
<field name="issue_text" widget="tinymce"/>
</group>
</sheet>
<div class="o_attachment_preview"/>
<div class="oe_chatter">
<field name="message_follower_ids" groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="issue_approval_class_action" model="ir.actions.act_window">
<field name="name">党总支议题审批</field>
<field name="res_model">issue.approval.class</field>
<field name="view_mode">tree,form</field>
<!-- <field name="search_view_id" ref="view_issue_approval_filter"/>-->
</record>
<menuitem
id="issue_approval_class_menu"
parent="issue_approval_menu"
name="领导班子议题审批"
action="issue_approval_class_action"
sequence="20"/>
</odoo>
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_issue_approval_party_tree" model="ir.ui.view">
<field name="name">issue.approval.party.tree</field>
<field name="model">issue.approval.party</field>
<field name="arch" type="xml">
<tree string="议题审批">
<field name="name"/>
<field name="create_time"/>
<field name="company_id"/>
</tree>
</field>
</record>
<record id="view_issue_approval_party_form" model="ir.ui.view">
<field name="name">issue.approval.party.form</field>
<field name="model">issue.approval.party</field>
<field name="arch" type="xml">
<form string="议题审批">
<sheet>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" required="1"/>
</h1>
</div>
<group>
<group>
<field name="note"/>
<field name="user_id"/>
<field name="department_id"/>
<field name="create_time"/>
<field name="documents_ids">
<tree>
<field name="name"/>
</tree>
</field>
</group>
<group>
<field name="company_id"/>
<field name="issue_library_ids">
<tree>
<field name="name"/>
</tree>
</field>
</group>
</group>
<group>
<field name="issue_text" widget="tinymce"/>
</group>
</sheet>
<div class="o_attachment_preview"/>
<div class="oe_chatter">
<field name="message_follower_ids" groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="issue_approval_party_action" model="ir.actions.act_window">
<field name="name">党总支议题审批</field>
<field name="res_model">issue.approval.party</field>
<field name="view_mode">tree,form</field>
<!-- <field name="search_view_id" ref="view_issue_approval_filter"/>-->
</record>
<menuitem
id="issue_approval_party_menu"
parent="issue_approval_menu"
name="党总支议题审批"
action="issue_approval_party_action"
sequence="10"/>
</odoo>
+7 -4
View File
@@ -10,7 +10,6 @@
decoration-muted="statu == 'cancel'">
<field name="name"/>
<field name="code"/>
<field name="issue_id"/>
<field name="is_party"/>
<field name="is_class"/>
<field name="is_boss"/>
@@ -41,8 +40,6 @@
<group>
<group>
<field name="code"/>
<field name="issue_id"/>
<field name="issue_ids" invisible="1"/>
<field name="first_party"/>
<field name="first_b"/>
<field name="employee_person"/>
@@ -104,7 +101,7 @@
<filter name="group_manager" string="会议状态" domain="[]" context="{'group_by': 'statu'}"/>
</group>
<searchpanel>
<field name="issue_id" string="议题" enable_counters="1"/>
<field name="issue_type_id" string="议题类别" enable_counters="1"/>
</searchpanel>
</search>
</field>
@@ -137,4 +134,10 @@
name="议题库"
action="issue_library_action"
sequence="5"/>
<menuitem
id="issue_approval_menu"
parent="tianhe_issue_library_menu_root"
name="议题审批"
action="issue_library_action"
sequence="10"/>
</odoo>
+27
View File
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_issue_lv_tree" model="ir.ui.view">
<field name="name">issue.lv.tree</field>
<field name="model">issue.lv</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="name"/>
<field name="parent_id"/>
<field name="child_ids" column_invisible="1"/>
</tree>
</field>
</record>
<record id="issue_lv_action" model="ir.actions.act_window">
<field name="name">议题库</field>
<field name="res_model">issue.lv</field>
<field name="view_mode">tree</field>
</record>
<!-- <menuitem-->
<!-- id="tianhe_issue_lv_menu"-->
<!-- parent="tianhe_issue_library_menu_root"-->
<!-- name="议题层级管理"-->
<!-- action="issue_lv_action"-->
<!-- sequence="7"/>-->
</odoo>
+26
View File
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_issue_type_tree" model="ir.ui.view">
<field name="name">issue.type.tree</field>
<field name="model">issue.type</field>
<field name="arch" type="xml">
<tree editable="bottom">
<field name="name"/>
<field name="note"/>
</tree>
</field>
</record>
<record id="issue_type_action" model="ir.actions.act_window">
<field name="name">议题库</field>
<field name="res_model">issue.type</field>
<field name="view_mode">tree</field>
</record>
<menuitem
id="tianhe_issue_type_menu"
parent="tianhe_issue_library_menu_root"
name="议题类别管理"
action="issue_type_action"
sequence="5"/>
</odoo>
+2 -2
View File
@@ -14,8 +14,8 @@
'data': [
'security/ir.model.access.csv',
'data/notice_code_data.xml',
'views/yuthon_ntice_views.xml',
'views/yuthon_ntice_type_views.xml',
'views/yuthon_notice_views.xml',
'views/yuthon_notice_type_views.xml',
'views/yuthon_confirm_users_views.xml',
'report/notice_report.xml',
],
@@ -7,9 +7,9 @@
<tree string="公告管理">
<field name="name"/>
<field name="user_id"/>
<field name="department_ids" optional="hidden"/>
<field name="employee_ids" optional="hidden"/>
<field name="users_role_ids" optional="hidden"/>
<field name="department_ids" optional="hidden" widget="many2many_tags"/>
<field name="employee_ids" optional="hidden" widget="many2many_tags"/>
<field name="users_role_ids" optional="hidden" widget="many2many_tags"/>
<field name="notice_type_id"/>
<field name="create_date"/>
<field name="start_date"/>
@@ -110,9 +110,9 @@
<tree string="公告管理">
<field name="name"/>
<field name="user_id"/>
<field name="department_ids" optional="hidden"/>
<field name="employee_ids" optional="hidden"/>
<field name="users_role_ids" optional="hidden"/>
<field name="department_ids" optional="hidden" widget="many2many_tags"/>
<field name="employee_ids" optional="hidden" widget="many2many_tags"/>
<field name="users_role_ids" optional="hidden" widget="many2many_tags"/>
<field name="notice_type_id"/>
<field name="create_date"/>
<field name="start_date"/>
+2
View File
@@ -12,8 +12,10 @@
'license': 'LGPL-3',
'depends': ['base', 'account', 'contacts'],
'data': [
'data/tenant.industry.csv',
'security/ir.model.access.csv',
'views/yuthon_res_partner_views.xml',
'views/tenant_industry.xml',
'views/contacts_inherit_menu_views.xml',
],
'installable': True,
@@ -0,0 +1,52 @@
"name","note"
"商务服务业","",
"贸易","",
"餐饮","",
"科技","",
"咨询","",
"酒店","",
"批发业","",
"专业技术服务业","",
"研究和试验发展","",
"培训","",
"信息技术","",
"个人","",
"制造业","",
"建筑业","",
"医疗卫生","",
"零售业","",
"住宿业","",
"居民服务业","",
"货币金融服务","",
"建筑安装业","",
"文化艺术业","",
"卫生","",
"社会工作","",
"电气机械和器材制造业","",
"音乐、美术、舞蹈培训","",
"科技推广和应用服务业","",
"橡胶和塑料制品业","",
"通用设备制造业","",
"建筑装饰、装修和其他建筑业","",
"计算机、通信和其他电子设备制造业","",
"房地产业","",
"教育","",
"纺织品、针织品及原料批发","",
"建筑装饰和装修业","",
"信息技术咨询服务","",
"房地产中介服务","",
"汽车修理与维护","",
"化学原料和化学制品制造业","",
"基他服务业","",
"工程和技术研究和试验发展","",
"电阳电容电感元件制造","",
"其他未列明信息技术服务业","",
"公共设施管理业","",
"咨询与调查","",
"其他专用设备制造","",
"信息传输、软件和信息技术服务业","",
"软件开发","",
"其他科技推广服务业","",
"其他未列明专业技术服务业","",
"法律服务","",
"其他制造业","",
1 name note
2 商务服务业
3 贸易
4 餐饮
5 科技
6 咨询
7 酒店
8 批发业
9 专业技术服务业
10 研究和试验发展
11 培训
12 信息技术
13 个人
14 制造业
15 建筑业
16 医疗卫生
17 零售业
18 住宿业
19 居民服务业
20 货币金融服务
21 建筑安装业
22 文化艺术业
23 卫生
24 社会工作
25 电气机械和器材制造业
26 音乐、美术、舞蹈培训
27 科技推广和应用服务业
28 橡胶和塑料制品业
29 通用设备制造业
30 建筑装饰、装修和其他建筑业
31 计算机、通信和其他电子设备制造业
32 房地产业
33 教育
34 纺织品、针织品及原料批发
35 建筑装饰和装修业
36 信息技术咨询服务
37 房地产中介服务
38 汽车修理与维护
39 化学原料和化学制品制造业
40 基他服务业
41 工程和技术研究和试验发展
42 电阳电容电感元件制造
43 其他未列明信息技术服务业
44 公共设施管理业
45 咨询与调查
46 其他专用设备制造
47 信息传输、软件和信息技术服务业
48 软件开发
49 其他科技推广服务业
50 其他未列明专业技术服务业
51 法律服务
52 其他制造业
+1
View File
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
from . import yuthon_res_partner
from . import tenant_industry
@@ -0,0 +1,12 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, api, exceptions, _
class TenantIndustry(models.Model):
_name = 'tenant.industry'
_description = '承租方行业'
name = fields.Char(string="行业")
note = fields.Char(string="说明")
@@ -9,7 +9,7 @@ class ResPartner(models.Model):
_description = '联系人客户字段增加'
partner_type = fields.Selection([('tenant', '承租方'), ('employee', '员工'), ('company', '公司')], default='employee', string="客户类型")
tenant_type = fields.Selection([], string="租户类型")
juridical_person = fields.Char(string="法人")
tenant_user_card = fields.Char(string="身份证")
tenant_scope = fields.Char(string="经营范围")
@@ -21,9 +21,14 @@ class ResPartner(models.Model):
billing_type = fields.Char(string="开票类型")
partner_name = fields.Char(string="联系人")
partner_address = fields.Char(string="承送达地址")
partner_address = fields.Char(string="送达地址")
partner_type2 = fields.Char(string="承租方类型")
tenant_name = fields.Char(string="承租方名称")
cell_phone = fields.Char(string='座机')
tax_number = fields.Char(string='税号')
tenant_industry = fields.Many2one('tenant.industry', string='行业')
@@ -1,4 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_tenant_industry,tenant_industry,model_tenant_industry,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_tenant_industry tenant_industry model_tenant_industry base.group_user 1 1 1 1
3
4
5
@@ -7,14 +7,6 @@
<field name="search_view_id" ref="base.view_res_partner_filter"/>
<field name="context">{'default_is_company': True}</field>
<field name="domain">[('partner_type', '=', 'company')]</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Contact in your address book
</p>
<p>
Odoo helps you track all activities related to your contacts.
</p>
</field>
</record>
<record id="action_employee" model="ir.actions.act_window">
<field name="name">员工</field>
@@ -23,14 +15,6 @@
<field name="search_view_id" ref="base.view_res_partner_filter"/>
<field name="domain">[('partner_type', '=', 'employee')]</field>
<field name="context">{'default_is_company': True}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Contact in your address book
</p>
<p>
Odoo helps you track all activities related to your contacts.
</p>
</field>
</record>
<record id="action_tenant" model="ir.actions.act_window">
<field name="name">承租方</field>
@@ -39,14 +23,8 @@
<field name="search_view_id" ref="base.view_res_partner_filter"/>
<field name="domain">[('partner_type', '=', 'tenant')]</field>
<field name="context">{'default_is_company': True}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Contact in your address book
</p>
<p>
Odoo helps you track all activities related to your contacts.
</p>
</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_res_partner.yuthon_res_partner_views_tree2')})]"/>
</record>
<menuitem id="res_partner_menu_company"
@@ -60,10 +38,14 @@
action="action_employee"
parent="contacts.res_partner_menu_contacts"
sequence="3"/>
<menuitem id="res_partner_menu_tenant"
name="承租方"
action="action_tenant"
parent="contacts.res_partner_menu_contacts"
sequence="7"/>
<menuitem id="res_partner_menu_tenant_industry"
name="承租方行业"
action="res_partner_window_tenant_industry"
parent="contacts.res_partner_menu_config"
sequence="4"/>
</odoo>
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="res_partner_tenant_industry_tree" model="ir.ui.view">
<field name="name">tenant.industry.tree</field>
<field name="model">tenant.industry</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="note"/>
</tree>
</field>
</record>
<record id="res_partner_window_tenant_industry" model="ir.actions.act_window">
<field name="name">承租方行业</field>
<field name="res_model">tenant.industry</field>
<field name="view_mode">tree</field>
</record>
</odoo>
@@ -5,43 +5,47 @@
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='category_id']" position="after">
<field name="juridical_person" invisible="partner_type != 'tenant'"/>
<field name="billing_type" invisible="partner_type != 'tenant'"/>
<field name="tenant_start_time" invisible="partner_type != 'tenant'"/>
<field name="tenant_end_time" invisible="partner_type != 'tenant'"/>
<field name="partner_type2" invisible="partner_type != 'tenant'"/>
<field name="is_new" invisible="partner_type != 'tenant'"/>
<field name="tenant_industry" invisible="partner_type != 'tenant'"/>
</xpath>
<xpath expr="//field[@name='vat']" position="after">
<field name="partner_type"/>
<field name="tenant_type"/>
<field name="tenant_name" invisible="partner_type != 'tenant'"/>
<field name="tenant_user_card" invisible="partner_type != 'tenant'"/>
<field name="tenant_scope" invisible="partner_type != 'tenant'"/>
<field name="billing_name" invisible="partner_type != 'tenant'"/>
<field name="cell_phone" invisible="partner_type != 'tenant'"/>
<field name="tax_number" invisible="partner_type != 'tenant'"/>
</xpath>
</field>
</record>
<record id="yuthon_res_partner_views_tree2" model="ir.ui.view">
<field name="name">yuthon.res.partner.views.tree</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<tree string="承租方" sample="1" multi_edit="1">
<field name="tenant_name"/>
<field name="partner_type2"/>
<field name="juridical_person"/>
<field name="partner_name"/>
<field name="tenant_user_card"/>
<field name="mobile" widget="phone"/>
<field name="cell_phone"/>
<field name="email"/>
<field name="tenant_scope"/>
<field name="partner_address"/>
<field name="billing_name"/>
<field name="tax_number"/>
<field name="billing_type"/>
<field name="tenant_start_time"/>
<field name="tenant_end_time"/>
<field name="is_new"/>
</xpath>
</field>
</record>
<record id="yuthon_res_partner_views_tree" model="ir.ui.view">
<field name="name">yuthon.res.partner.views.tree</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_tree"/>
<field name="arch" type="xml">
<xpath expr="//tree" position="replace">
<tree string="承租方" sample="1" multi_edit="1">
<field name="display_name"/>
<field name="vat"/>
<field name="billing_type"/>
<field name="partner_name"/>
<field name="tenant_user_card"/>
<field name="mobile" widget="phone"/>
<field name="phone" widget="phone"/>
<field name="email"/>
<field name="tenant_scope"/>
<field name="partner_address"/>
<field name="juridical_person"/>
<field name="partner_type2"/>
<field name="tenant_start_time"/>
<field name="tenant_end_time"/>
</tree>
</xpath>
</tree>
</field>
</record>
</odoo>