pengyuthon
This commit is contained in:
@@ -39,15 +39,13 @@ class SoongWorkflow(models.Model):
|
||||
]
|
||||
|
||||
name = fields.Char(string="Name", help="Give workflow a name.")
|
||||
model_id = fields.Many2one("ir.model", string="Model", domain=MODEL_DOMAIN,
|
||||
help="Enter business model you would like to modify its workflow.", )
|
||||
model_id = fields.Many2one("ir.model", string="Model", domain=MODEL_DOMAIN, help="Enter business model you would like to modify its workflow.", )
|
||||
node_ids = fields.One2many(comodel_name="soong.workflow.node", inverse_name="workflow_id", string="Nodes")
|
||||
link_ids = fields.One2many(comodel_name="soong.workflow.link", inverse_name="workflow_id", string="Links")
|
||||
remove_default_btn_until_end = fields.Boolean(string="是否覆盖表头按钮状态", default=False)
|
||||
current_stage_highlight_color = fields.Char(default="rgb(0, 255, 255)",
|
||||
help="The color to highlight the current stage on flow", )
|
||||
current_stage_highlight_color = fields.Char(default="rgb(0, 255, 255)", help="The color to highlight the current stage on flow", )
|
||||
start_date = fields.Date(string="生效日期", copy=False, default=fields.Date.today())
|
||||
end_date = fields.Date(string="失效日期", copy=False)
|
||||
end_date = fields.Date(string="失效日期", copy=False, default=fields.Date.from_string('2099-01-01'))
|
||||
is_enable = fields.Boolean(string="是否启用", default="False", compute="compute_is_enable", store=True)
|
||||
is_enable_return_button = fields.Boolean(string="是否启用收回", default=True)
|
||||
is_enable_transmitted_button = fields.Boolean(string="是否启用转交", default=True)
|
||||
@@ -149,7 +147,7 @@ class SoongWorkflow(models.Model):
|
||||
if not val["node_ids"]:
|
||||
val["node_ids"] = [
|
||||
(0, 0, {
|
||||
"name": _("经办人"),
|
||||
"name": _("拟办"),
|
||||
"sequence": 1,
|
||||
"node_name": "start",
|
||||
"flow_start": True,
|
||||
|
||||
@@ -152,9 +152,9 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
def _add_comment(self, logs, btn_rec):
|
||||
wizard = self.env.ref("soong_workflow.view_soong_workflow_comment_wizard")
|
||||
# 状态列表
|
||||
state_list = ['经办人' if i.node_name == 'start' else i.node_name for i in btn_rec.node_id.workflow_id.node_ids]
|
||||
state_list = ['拟办' if i.node_name == 'start' else i.node_name for i in btn_rec.node_id.workflow_id.node_ids]
|
||||
# 当前节点状态
|
||||
self_state = state_list.index('经办人' if self.state == 'start' else self.state)
|
||||
self_state = state_list.index('拟办' if self.state == 'start' else self.state)
|
||||
self.env['trans.link'].search([]).unlink()
|
||||
if btn_rec.name == '转交' and len(btn_rec.node_id.out_link_ids) > 1:
|
||||
for state in btn_rec.node_id.out_link_ids:
|
||||
@@ -266,54 +266,31 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
|
||||
# 收回
|
||||
def action_withdraw(self):
|
||||
# 收回目前只支持指定用户和指定角色
|
||||
for record in self:
|
||||
# 角色
|
||||
employee_id = self.env['hr.employee']
|
||||
result_dict = {}
|
||||
# 获得到每一条记录的按钮权限
|
||||
i = 1
|
||||
for user in record.workflow_id.node_ids:
|
||||
user_list = []
|
||||
transmitted = user.button_ids.search([('name', '=', '转交'), ('node_id', '=', user.id)])
|
||||
if transmitted.review_type == 'individual': # 指定用户
|
||||
user_list.append(transmitted.reviewer_id.id)
|
||||
if transmitted.review_type == 'user_role': # 指定角色
|
||||
# 全局角色
|
||||
if transmitted.users_role_id.user_type == 'system_global_user':
|
||||
# 所有的部门经理(全局角色)
|
||||
role_user_ids = employee_id.search([('user_role_id', '=', transmitted.users_role_id.id)])
|
||||
for role_user in role_user_ids:
|
||||
if self.env.user.employee_id.department_id.id == role_user.department_id.id:
|
||||
user_list.append(role_user.user_id.id) # 角色的用户id
|
||||
else: # 部门私有角色
|
||||
user_id = employee_id.search([('user_role_id', '=', transmitted.users_role_id.id)]).user_id.id
|
||||
user_list.append(user_id)
|
||||
user_name_i = f"{user.name}_{i}"
|
||||
if user.name in result_dict:
|
||||
result_dict[user_name_i].extend(user_list)
|
||||
state_list = []
|
||||
for state in record.workflow_id.node_ids:
|
||||
if state.name == '拟办':
|
||||
state_list.append('start')
|
||||
elif state.name == '结束':
|
||||
state_list.append('end')
|
||||
else:
|
||||
result_dict[user_name_i] = user_list
|
||||
i += 1
|
||||
# 判断当前用户所在节点,与现在单据所在节点的位置,只有在等于1的时候,返回上一个状态,否则禁止操作
|
||||
for key in result_dict:
|
||||
if key.startswith(self.state):
|
||||
# 当前单据状态所在的位置
|
||||
record_number = key.split('_')[1]
|
||||
for key, values in result_dict.items():
|
||||
if values != [False]:
|
||||
if self.env.user.id in values:
|
||||
# 当前用户所在节点
|
||||
user_number = key.split('_')[1]
|
||||
user_key = key
|
||||
state_list.append(state.name)
|
||||
self_node_id = record.workflow_id.node_ids.search([('name', '=', self.state)])
|
||||
transmitted = self_node_id.button_ids.search([('name', '=', '转交'), ('node_id', '=', self_node_id.id)])
|
||||
if transmitted.btn_hide:
|
||||
if transmitted.review_type == 'user_role':
|
||||
user_ids_list = employee_id.search(['|', ('user_role_id', '=', transmitted.users_role_id.id),
|
||||
('user_role_ids', 'in', [transmitted.users_role_id.id])]).ids
|
||||
if self.env.user.employee_id.id in user_ids_list:
|
||||
raise UserError('当前节点不允许收回')
|
||||
else:
|
||||
state_index = state_list.index(self.state)
|
||||
self.write({'state': state_list[state_index-1]})
|
||||
else:
|
||||
raise UserError('请配置节点的人员')
|
||||
number = int(record_number) - int(user_number)
|
||||
if number == 1:
|
||||
self.write({'state': user_key.split('_')[0]})
|
||||
raise UserError('请配置节点角色')
|
||||
else:
|
||||
raise UserError('不可收回')
|
||||
|
||||
raise UserError('当前节点不允许收回')
|
||||
|
||||
def _remove_default_header(self, view_type, res):
|
||||
"""
|
||||
|
||||
@@ -94,8 +94,6 @@ class SoongWorkflowNode(models.Model):
|
||||
"name": _("转交"),
|
||||
"workflow_id": val['workflow_id'],
|
||||
"sequence": 1,
|
||||
"action_type": "code",
|
||||
"has_comment": True,
|
||||
},),
|
||||
(0, 0, {
|
||||
"name": _("收回"),
|
||||
@@ -369,7 +367,6 @@ class SoongWorkflowNodeButton(models.Model):
|
||||
# Run Proper Action
|
||||
func = getattr(self, "_run_%s" % rec.action_type)
|
||||
func_result = func()
|
||||
# todo 触发下个流程消息发送 (写完未测试)
|
||||
try:
|
||||
user_ids = []
|
||||
button_ids = rec.link_id.node_to.button_ids
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</group>
|
||||
<group>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date" required="1"/>
|
||||
<field name="end_date"/>
|
||||
<field name="is_enable"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -68,7 +68,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
if self.node_link_len:
|
||||
record_id.write({'state': 'end' if self.trans_link_id.name == '结束' else self.trans_link_id.name})
|
||||
if self.node_btn_name == '退回':
|
||||
record_id.write({'state': 'start' if self.return_link_id.name == '经办人' else self.return_link_id.name})
|
||||
record_id.write({'state': 'start' if self.return_link_id.name == '拟办' else self.return_link_id.name})
|
||||
# 填写审批记录
|
||||
self.log_ids.write({"comment": self.comment_note_id.name})
|
||||
return self.node_btn_id.with_context(cx).run()
|
||||
|
||||
@@ -27,6 +27,7 @@ class YuthonNotice(models.Model):
|
||||
notice_documents_ids = fields.Many2many('documents.document', string="附件")
|
||||
is_notice_roger = fields.Selection([('yes', '已读'), ('no', '未读')], default='no', string="确认状态")
|
||||
is_change_notice = fields.Boolean(string="是否发送通知", default=True)
|
||||
attn_notice = fields.Html(string="经办人意见")
|
||||
notice_text = fields.Html(string="正文")
|
||||
read_number = fields.Integer(string='阅读量', compute="_compute_read_number", store=True)
|
||||
approval_user_id = fields.Many2one('res.users', string="审核人")
|
||||
|
||||
@@ -47,12 +47,13 @@
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="user_id"/>
|
||||
<field name="department_id"/>
|
||||
<field name="company_page"/>
|
||||
<field name="department_id" invisible="1"/>
|
||||
<field name="company_page" invisible="1"/>
|
||||
<field name="department_ids" widget="many2many_tags"/>
|
||||
<field name="employee_ids" widget="many2many_tags"/>
|
||||
<field name="users_role_ids" widget="many2many_tags"/>
|
||||
<field name="is_change_notice"/>
|
||||
<field name="attn_notice"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="create_date"/>
|
||||
|
||||
@@ -44,12 +44,12 @@
|
||||
action="official_type_action"
|
||||
sequence="15"/>
|
||||
|
||||
<menuitem
|
||||
id="yuthon_official_my_admin"
|
||||
parent="yuthon_official_my_menu"
|
||||
name="行政收文"
|
||||
action="send_receive_messages_management_action2"
|
||||
sequence="5"/>
|
||||
<!-- <menuitem-->
|
||||
<!-- id="yuthon_official_my_admin"-->
|
||||
<!-- parent="yuthon_official_my_menu"-->
|
||||
<!-- name="行政收文"-->
|
||||
<!-- action="send_receive_messages_management_action2"-->
|
||||
<!-- sequence="5"/>-->
|
||||
|
||||
<menuitem
|
||||
id="yuthon_official_my_labor"
|
||||
|
||||
@@ -94,95 +94,95 @@
|
||||
</record>
|
||||
|
||||
<record id="send_receive_messages_management_action" model="ir.actions.act_window">
|
||||
<field name="name">收发文管理</field>
|
||||
<field name="name">行政收文</field>
|
||||
<field name="res_model">yuthon.official</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<record id="send_receive_messages_management_tree2" model="ir.ui.view">
|
||||
<field name="name">yuthon.official.tree</field>
|
||||
<field name="model">yuthon.official</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="department_id"/>
|
||||
<field name="official_partner_id"/>
|
||||
<field name="date"/>
|
||||
<field name="statu"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<!-- <record id="send_receive_messages_management_tree2" model="ir.ui.view">-->
|
||||
<!-- <field name="name">yuthon.official.tree</field>-->
|
||||
<!-- <field name="model">yuthon.official</field>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <tree>-->
|
||||
<!-- <field name="name"/>-->
|
||||
<!-- <field name="department_id"/>-->
|
||||
<!-- <field name="official_partner_id"/>-->
|
||||
<!-- <field name="date"/>-->
|
||||
<!-- <field name="statu"/>-->
|
||||
<!-- </tree>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
|
||||
<record id="send_receive_messages_management_form2" model="ir.ui.view">
|
||||
<field name="name">yuthon.official.form</field>
|
||||
<field name="model">yuthon.official</field>
|
||||
<field name="arch" type="xml">
|
||||
<form create="false" edit="false" string="我的行政公文">
|
||||
<sheet>
|
||||
<div class="col-12 text-center">
|
||||
<h1>
|
||||
<field name="name" required="1"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="official_partner_id"/>
|
||||
<field name="reference_cold"/>
|
||||
<field name="major_event_category"/>
|
||||
<field name="urgency"/>
|
||||
<field name="secret_level"/>
|
||||
<field name="date"/>
|
||||
<field name="deadline"/>
|
||||
<field name="official_documents_ids">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
<group>
|
||||
<field name="department_id"/>
|
||||
<field name="come_file_id"/>
|
||||
<field name="incoming_file_id"/>
|
||||
<field name="main_flats"/>
|
||||
<field name="copy_flats"/>
|
||||
<field name="servings_number"/>
|
||||
<field name="department_ids" widget="many2many_tags"/>
|
||||
<field name="employee_ids" widget="many2many_tags"/>
|
||||
<field name="users_role_ids" widget="many2many_tags"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="main_text" widget="tinymce"/>
|
||||
<field name="remarks"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<!-- <record id="send_receive_messages_management_form2" model="ir.ui.view">-->
|
||||
<!-- <field name="name">yuthon.official.form</field>-->
|
||||
<!-- <field name="model">yuthon.official</field>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <form create="false" edit="false" string="我的行政公文">-->
|
||||
<!-- <sheet>-->
|
||||
<!-- <div class="col-12 text-center">-->
|
||||
<!-- <h1>-->
|
||||
<!-- <field name="name" required="1"/>-->
|
||||
<!-- </h1>-->
|
||||
<!-- </div>-->
|
||||
<!-- <group>-->
|
||||
<!-- <group>-->
|
||||
<!-- <field name="code"/>-->
|
||||
<!-- <field name="official_partner_id"/>-->
|
||||
<!-- <field name="reference_cold"/>-->
|
||||
<!-- <field name="major_event_category"/>-->
|
||||
<!-- <field name="urgency"/>-->
|
||||
<!-- <field name="secret_level"/>-->
|
||||
<!-- <field name="date"/>-->
|
||||
<!-- <field name="deadline"/>-->
|
||||
<!-- <field name="official_documents_ids">-->
|
||||
<!-- <tree>-->
|
||||
<!-- <field name="name"/>-->
|
||||
<!-- </tree>-->
|
||||
<!-- </field>-->
|
||||
<!-- </group>-->
|
||||
<!-- <group>-->
|
||||
<!-- <field name="department_id"/>-->
|
||||
<!-- <field name="come_file_id"/>-->
|
||||
<!-- <field name="incoming_file_id"/>-->
|
||||
<!-- <field name="main_flats"/>-->
|
||||
<!-- <field name="copy_flats"/>-->
|
||||
<!-- <field name="servings_number"/>-->
|
||||
<!-- <field name="department_ids" widget="many2many_tags"/>-->
|
||||
<!-- <field name="employee_ids" widget="many2many_tags"/>-->
|
||||
<!-- <field name="users_role_ids" widget="many2many_tags"/>-->
|
||||
<!-- </group>-->
|
||||
<!-- </group>-->
|
||||
<!-- <group>-->
|
||||
<!-- <field name="main_text" widget="tinymce"/>-->
|
||||
<!-- <field name="remarks"/>-->
|
||||
<!-- </group>-->
|
||||
<!-- </sheet>-->
|
||||
<!-- </form>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
|
||||
<record id="send_receive_messages_management_search2" model="ir.ui.view">
|
||||
<field name="name">send.receive.messages.management.search</field>
|
||||
<field name="model">yuthon.official</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<filter string="草稿" name="Drft " domain="[('statu', '=', 'drft')]"/>
|
||||
<filter string="执行中" name="Going " domain="[('statu', '=', 'going')]"/>
|
||||
<filter string="已取消" name="Cancel " domain="[('statu', '=', 'cancel')]"/>
|
||||
<filter string="已完成" name="Done " domain="[('statu', '=', 'done')]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<!-- <record id="send_receive_messages_management_search2" model="ir.ui.view">-->
|
||||
<!-- <field name="name">send.receive.messages.management.search</field>-->
|
||||
<!-- <field name="model">yuthon.official</field>-->
|
||||
<!-- <field name="arch" type="xml">-->
|
||||
<!-- <search>-->
|
||||
<!-- <filter string="草稿" name="Drft " domain="[('statu', '=', 'drft')]"/>-->
|
||||
<!-- <filter string="执行中" name="Going " domain="[('statu', '=', 'going')]"/>-->
|
||||
<!-- <filter string="已取消" name="Cancel " domain="[('statu', '=', 'cancel')]"/>-->
|
||||
<!-- <filter string="已完成" name="Done " domain="[('statu', '=', 'done')]"/>-->
|
||||
<!-- </search>-->
|
||||
<!-- </field>-->
|
||||
<!-- </record>-->
|
||||
|
||||
<record id="send_receive_messages_management_action2" model="ir.actions.act_window">
|
||||
<field name="name">我的行政收文</field>
|
||||
<field name="res_model">yuthon.official</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="search_view_id" ref="send_receive_messages_management_search2"/>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_official.send_receive_messages_management_tree2')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_official.send_receive_messages_management_form2')})]"/>
|
||||
<!-- <field name="context">{'search_default_group_by_is_notice_roger': True,}</field>-->
|
||||
</record>
|
||||
<!-- <record id="send_receive_messages_management_action2" model="ir.actions.act_window">-->
|
||||
<!-- <field name="name">我的行政收文</field>-->
|
||||
<!-- <field name="res_model">yuthon.official</field>-->
|
||||
<!-- <field name="view_mode">tree,form</field>-->
|
||||
<!-- <field name="search_view_id" ref="send_receive_messages_management_search2"/>-->
|
||||
<!-- <field name="view_ids" eval="[(5, 0, 0),-->
|
||||
<!-- (0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_official.send_receive_messages_management_tree2')}),-->
|
||||
<!-- (0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_official.send_receive_messages_management_form2')})]"/>-->
|
||||
<!-- <!– <field name="context">{'search_default_group_by_is_notice_roger': True,}</field>–>-->
|
||||
<!-- </record>-->
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user