pengyuthon

This commit is contained in:
李鹏宇
2024-09-30 16:15:01 +08:00
parent 2e6e1fe385
commit 5c3b3eef50
9 changed files with 121 additions and 147 deletions
+4 -6
View File
@@ -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,
+22 -45
View File
@@ -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()
+1
View File
@@ -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="审核人")
+3 -2
View File
@@ -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"/>
+6 -6
View File
@@ -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"
+83 -83
View File
@@ -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')})]"/>-->
<!-- &lt;!&ndash; <field name="context">{'search_default_group_by_is_notice_roger': True,}</field>&ndash;&gt;-->
<!-- </record>-->
</odoo>