添加功能
This commit is contained in:
@@ -19,6 +19,7 @@ class SoongWorkflowLog(models.Model):
|
||||
|
||||
workflow_id = fields.Many2one(comodel_name="soong.workflow")
|
||||
node_id = fields.Many2one(comodel_name="soong.workflow.node")
|
||||
msg_id = fields.Char(string="Msg_id")
|
||||
node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button", string="动作名称")
|
||||
node_btn_name = fields.Selection([('0', ' '), ('1', '退回'), ('2', '加签'), ('3', '串'), ('4', '并'), ('5', '董事长'), ('6', '承办')], store=True, string='节点功能', default='0')
|
||||
done_by = fields.Many2one(comodel_name="res.users", string="审批人")
|
||||
@@ -78,7 +79,7 @@ class SoongWorkflowLog2(models.Model):
|
||||
res_id = fields.Integer(string="Related Document ID", index=True, required=True)
|
||||
node_id = fields.Many2one(comodel_name="soong.workflow.node")
|
||||
node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button", string="动作名称")
|
||||
|
||||
msg_id = fields.Char(string="Msg_id")
|
||||
sequence = fields.Integer(string="序号", compute="_compute_sequence")
|
||||
done_by = fields.Many2one(comodel_name="res.users", string="审批人")
|
||||
name = fields.Char(string="节点名称", compute="_compute_name", store=True)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
</field>
|
||||
</page>
|
||||
<page string="审批详情" invisible="not work_end">
|
||||
<field name="log_ids" style="width:100%; margin-top: 10px;" domain="[('node_btn_name', '!=', '1')]">
|
||||
<field name="log_ids" style="width:100%; margin-top: 10px;" domain="[('node_btn_name', '!=', '1')]" context="{'kanban_view_ref':'soong_workflow.soong_workflow_log_kanban'}">
|
||||
<tree editable="bottom">
|
||||
<field name="sequence" string="" widget="handle"
|
||||
groups="soong_workflow.group_soong_workflow_manager"/>
|
||||
@@ -32,9 +32,9 @@
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="抄送/传阅记录" invisible="not log_ids2">
|
||||
<page string="抄送/传阅记录" invisible="not log_ids2" mode="kanban,tree" context="{'kanban_view_ref':'soong_workflow.soong_workflow_log2_kanban'}">
|
||||
<field name="log_ids2" style="width:100%; margin-top: 10px;">
|
||||
<tree editable="bottom">
|
||||
<tree editable="bottom" >
|
||||
<field name="done_by" string=""/>
|
||||
<field name="commit" string=""/>
|
||||
<!-- <field name="name" string=""/>-->
|
||||
@@ -85,7 +85,7 @@
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="抄送/传阅记录" invisible="not log_ids2">
|
||||
<page string="抄送/传阅记录" invisible="not log_ids2" context="{'kanban_view_ref':'soong_workflow.soong_workflow_log2_kanban'}">
|
||||
<field name="log_ids2" style="width:100%%; margin-top: 10px;">
|
||||
<tree create="false" edit="false" delete="false" editable="bottom">
|
||||
<field name="done_by" string=""/>
|
||||
@@ -120,4 +120,91 @@
|
||||
</page>
|
||||
</notebook>
|
||||
</template>
|
||||
<record id="soong_workflow_log_kanban" model="ir.ui.view">
|
||||
<field name="name">soong.workflow.log.kanban</field>
|
||||
<field name="model">soong.workflow.log</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="name"/>
|
||||
<field name="comment"/>
|
||||
<field name="done_by"/>
|
||||
<field name="lase_click_date"/>
|
||||
<field name="approval_state"/>
|
||||
<field name="node_btn_name"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="o_kanban_record d-md-none card h-100">
|
||||
<div class="card-body">
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
节点:<field name="name" />
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
状态:<field name="approval_state"/>
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
经办人:<field name="done_by"/>
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
意见:<field name="comment"/>
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
附件:<field name="document_ids" widget="preview_many2many"/>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
<record id="soong_workflow_log2_kanban" model="ir.ui.view">
|
||||
<field name="name">soong.workflow.log2.kanban</field>
|
||||
<field name="model">soong.workflow.log2</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="done_by"/>
|
||||
<field name="commit"/>
|
||||
<field name="approval_state"/>
|
||||
<field name="lase_click_date"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="o_kanban_record d-md-none card h-100">
|
||||
<div class="card-body">
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
姓名:<field name="done_by" />
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
意见:<field name="commit"/>
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
状态:<field name="approval_state"/>
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
时间:<field name="lase_click_date"/>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -1,52 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="soong_workflow_log_kanban" model="ir.ui.view">
|
||||
<field name="name">soong.workflow.log.kanban</field>
|
||||
<field name="model">soong.workflow.log</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="name"/>
|
||||
<field name="comment"/>
|
||||
<field name="done_by"/>
|
||||
<field name="lase_click_date"/>
|
||||
<field name="approval_state"/>
|
||||
<field name="node_btn_name"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="o_kanban_record d-md-none card h-100">
|
||||
<div class="card-body">
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
节点:<field name="name" />
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
状态:<field name="approval_state"/>
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
经办人:<field name="done_by"/>
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
意见:<field name="comment"/>
|
||||
</small>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<small>
|
||||
附件:<field name="document_ids" widget="preview_many2many"/>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
<!-- Views -->
|
||||
<record id="view_soong_workflow_log_tree" model="ir.ui.view">
|
||||
<field name="name">soong.workflow.log.tree</field>
|
||||
@@ -59,6 +12,7 @@
|
||||
<field name="workflow_id" string="审批类型"/>
|
||||
<field name="node_btn_id"/>
|
||||
<field name="done_by"/>
|
||||
<field name="msg_id"/>
|
||||
<field name="lase_click_date"/>
|
||||
<field name="comment"/>
|
||||
<field name="active" column_invisible="1"/>
|
||||
@@ -82,6 +36,7 @@
|
||||
<field name="workflow_id" string="审批类型"/>
|
||||
<field name="node_btn_id"/>
|
||||
<field name="done_by"/>
|
||||
<field name="msg_id"/>
|
||||
<field name="lase_click_date"/>
|
||||
<field name="commit"/>
|
||||
</tree>
|
||||
|
||||
@@ -176,8 +176,8 @@
|
||||
<field name="soong_state"/>
|
||||
<field name="is_manager" column_invisible="1"/>
|
||||
<field name="is_unlink" column_invisible="1"/>
|
||||
<button name="delete_record" type="object" string="删除" class="btn-primary" confirm="你确定要删除吗?"
|
||||
invisible="not is_unlink"/>
|
||||
<!-- <button name="delete_record" type="object" string="删除" class="btn-primary" confirm="你确定要删除吗?"-->
|
||||
<!-- invisible="not is_unlink"/>-->
|
||||
<button name="reminders_record" type="object" string="催办" class="btn-primary" invisible="soong_state != 'done' or create_uid != uid or approve_state == 'end'"/>
|
||||
<button name="revoke_record" type="object" string="撤销" class="btn-primary"
|
||||
groups="soong_workflow.group_soong_workflow_manager"/>
|
||||
|
||||
@@ -43,8 +43,12 @@ class SoongBouncedWizard(models.Model):
|
||||
"users_ids": [(6, 0, done_by_list)],
|
||||
'soong_state': 'to_do'
|
||||
})
|
||||
for log_delete in log_to_delete:
|
||||
self.sudo().env["wecom.apps"].back_message(log_delete.msg_id, category='approval')
|
||||
log_to_delete.unlink()
|
||||
if record.log_ids2:
|
||||
for log_id2 in record.log_ids2:
|
||||
self.sudo().env["wecom.apps"].back_message(log_id2.msg_id, category='approval')
|
||||
record.log_ids2.unlink()
|
||||
prev_log.write({'approval_state': '1'})
|
||||
record.write({'state': prev_log.name,
|
||||
|
||||
@@ -415,7 +415,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
|
||||
if not next_node_employee_log:
|
||||
# 创建初步记录,状态为"待审批"
|
||||
next_node_employee_log = self.sudo().env["soong.workflow.log"].create({
|
||||
self.sudo().env["soong.workflow.log"].create({
|
||||
"code": self.code,
|
||||
"model": self.res_model,
|
||||
"res_id": self.res_id,
|
||||
@@ -439,14 +439,18 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
action_id = self.env['ir.actions.act_window'].search([('res_model', '=', self.res_model)])[0]
|
||||
url = f'https://oa.thtzjt.com/web#id={record_id.id}&cids=2&active_id={action_id.id}&model={record_id._name}&view_type=form'
|
||||
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
user_id='18562027762',
|
||||
title=record_id._description,
|
||||
description="标题: {}\n".format(
|
||||
record_id.name) + self.env.user.name + ' ' + str(
|
||||
fields.Datetime.now() + timedelta(
|
||||
hours=8)),
|
||||
url=url, btntxt="查看详情")
|
||||
# next_node_employee_log.msg_id = result_data[1]['msgid']
|
||||
msg_id = result_data[-1]['msgid']
|
||||
target_logs = record_id.log_ids.filtered(lambda l: l.done_by == employee.user_id.id)
|
||||
if target_logs:
|
||||
target_logs.msg_id = msg_id
|
||||
|
||||
else: # 串审模式 (沿用原有逻辑)
|
||||
# 查找下一个节点
|
||||
next_node_id = record_id.workflow_id.node_ids.search([
|
||||
@@ -675,7 +679,11 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
"done_by": self.employee_ids.user_id.id,
|
||||
"node_btn_name": "0",
|
||||
})
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=self.employee_ids.wecom_userid, title=record_id._description, description=description, url=url, btntxt="查看详情")
|
||||
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id='18562027762', title=record_id._description, description=description, url=url, btntxt="查看详情")
|
||||
msg_id = result_data[-1]['msgid']
|
||||
target_logs = record_id.log_ids.filtered(lambda l: l.done_by == employee.user_id.id)
|
||||
if target_logs:
|
||||
target_logs.msg_id = msg_id
|
||||
for emp in self.dep_manager_employee_ids:
|
||||
workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.dep_manager_employee_ids if employee.user_id]
|
||||
next_node_id = record_id.workflow_id.node_ids.search([('name', '=', '承办'), ('workflow_id', '=', record_id.workflow_id.id)])
|
||||
@@ -688,7 +696,11 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
"done_by": emp.user_id.id,
|
||||
"node_btn_name": "0",
|
||||
})
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=emp.wecom_userid, title=record_id._description + "承办", description=description, url=url, btntxt="查看详情")
|
||||
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=emp.wecom_userid, title=record_id._description + "承办", description=description, url=url, btntxt="查看详情")
|
||||
msg_id = result_data[-1]['msgid']
|
||||
target_logs = record_id.log_ids.filtered(lambda l: l.done_by == employee.user_id.id)
|
||||
if target_logs:
|
||||
target_logs.msg_id = msg_id
|
||||
for employee in self.circulated_employee_ids:
|
||||
workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.circulated_employee_ids if employee.user_id]
|
||||
record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
|
||||
@@ -711,7 +723,11 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
"node_btn_id": self.node_btn_id.id,
|
||||
"approval_state": "0",
|
||||
})
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid, title=record_id._description + "传阅/抄送",description=description, url=url, btntxt="查看详情")
|
||||
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id='18562027762', title=record_id._description + "传阅/抄送",description=description, url=url, btntxt="查看详情")
|
||||
msg_id = result_data[-1]['msgid']
|
||||
target_logs = record_id.log_ids2.filtered(lambda l: l.done_by == employee.user_id.id)
|
||||
if target_logs:
|
||||
target_logs.msg_id = msg_id
|
||||
workflow_record_id.employee_ids = self.dep_manager_employee_ids + self.employee_ids + self.circulated_employee_ids
|
||||
record_id.log_ids[-1].write({"comment": self.comment, "approval_state": "2", "lase_click_date": fields.Datetime.now()})
|
||||
if self.node_btn_name == "收回":
|
||||
@@ -749,4 +765,4 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
related_record = self.env[self.res_model].browse(self.res_id)
|
||||
if hasattr(related_record, 'self_users_ids'):
|
||||
user_ids = [employee.user_id.id for employee in self.employee_ids if employee.user_id]
|
||||
related_record.self_users_ids = [(6, 0, user_ids)] if user_ids else [(5,)]
|
||||
related_record.self_users_ids = [(6, 0, user_ids)] if user_ids else [(5,)]
|
||||
|
||||
@@ -103,6 +103,11 @@ class WeComApps(models.Model):
|
||||
data = {'msgid': msg_id}
|
||||
url = f'https://qyapi.weixin.qq.com/cgi-bin/message/recall?access_token={token}'
|
||||
requests.post(url=url, data=json.dumps(data))
|
||||
if category == 'approval':
|
||||
token = self.env['wecom.apps'].search([('name', '=', '审批消息通知')])['access_token']
|
||||
data = {'msgid': msg_id}
|
||||
url = f'https://qyapi.weixin.qq.com/cgi-bin/message/recall?access_token={token}'
|
||||
requests.post(url=url, data=json.dumps(data))
|
||||
|
||||
def sync_send_message_textcard(self, content_item='', touser='', category='default', user_id=None, title="", description="", url="", btntxt="详情"):
|
||||
"""
|
||||
|
||||
@@ -204,7 +204,7 @@ class YuthonWillTask(models.Model):
|
||||
title="日程事项提醒", description=data, url=url, btntxt="详细信息")
|
||||
test_msg_id = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='task', user_id="18562027762",
|
||||
title="日程事项提醒", description=data, url=url, btntxt="详细信息")
|
||||
# self.write({'msg_id': test_msg_id[-1]['msgid']})
|
||||
self.write({'msg_id': test_msg_id[-1]['msgid']})
|
||||
return {
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'display_notification',
|
||||
|
||||
Reference in New Issue
Block a user