pengyuthon wechat
This commit is contained in:
@@ -111,7 +111,7 @@
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: #f6f6f6;
|
||||
background-color: #b8d7f3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"author": "soong bo",
|
||||
"license": "AGPL-3",
|
||||
"version": "17.0.0.1.0",
|
||||
"depends": ["base", "crnd_web_diagram_plus", "hr"],
|
||||
"depends": ["base", "crnd_web_diagram_plus", "hr", 'mail'],
|
||||
"data": [
|
||||
"data/soong_workflow_note_data.xml",
|
||||
"data/soong_workflow_inspector_code.xml",
|
||||
|
||||
@@ -17,4 +17,22 @@
|
||||
</a>
|
||||
</p>
|
||||
</template>
|
||||
|
||||
<template id="message_soong_workflow_distribute">
|
||||
<p style="margin: 0px;">
|
||||
<span>尊敬的用户,</span>
|
||||
<br/>
|
||||
<span style="margin-top: 8px;">您有一条新的审批消息请及时查看
|
||||
<t t-esc="object.name"/>
|
||||
请查看详情。
|
||||
</span>
|
||||
</p>
|
||||
<p style="margin-top: 24px; margin-bottom: 16px;">
|
||||
<a t-att-href="access_link" t-att-data-oe-model="object.res_model" t-att-data-oe-id="object.id"
|
||||
style="background-color:#2C65F7; padding: 10px; text-decoration: none; color: #fff; border-radius: 5px;">
|
||||
查看
|
||||
<t t-esc="model_description or 'document'"/>
|
||||
</a>
|
||||
</p>
|
||||
</template>
|
||||
</odoo>
|
||||
@@ -208,10 +208,9 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
for employee in employee_ids:
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=self.name,
|
||||
description="您有新的审批单{}请及时处理".format(
|
||||
self.name),
|
||||
url=url, btntxt="详情")
|
||||
title=self._description,
|
||||
description="您有新的审批单 {} 请及时处理\n".format(self.name) + self.env.user.name + ' ' + str(fields.Datetime.now() + timedelta(hours=8)),
|
||||
url=url, btntxt="查看详情")
|
||||
partner_ids = employee_ids.user_id.partner_id.ids
|
||||
self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'soong_workflow.message_soong_workflow_users_data')
|
||||
return btn_rec.with_context(cx).run()
|
||||
|
||||
@@ -25,7 +25,16 @@ class SoongWorkflowRecord(models.Model):
|
||||
users_ids = fields.Many2many('res.users', string="用户")
|
||||
workflow_id = fields.Many2one(comodel_name="soong.workflow", string="审批类型", ondelete="restrict")
|
||||
node_id = fields.Many2one(comodel_name="soong.workflow.node", string="当前节点")
|
||||
approve_state = fields.Selection([("start", "开始"), ("pending", "审批中"), ("end", "结束")], default="start", string="审批状态", compute="_compute_node_id",)
|
||||
approve_state = fields.Selection([("start", "开始"), ("pending", "审批中"), ("end", "结束")], default="start", string="审批状态", compute="_compute_node_id")
|
||||
reclaim_state = fields.Boolean(string="回收")
|
||||
|
||||
def reclaim_record(self):
|
||||
for rec in self:
|
||||
rec.reclaim_state = True
|
||||
|
||||
def restore_record(self):
|
||||
for rec in self:
|
||||
rec.reclaim_state = False
|
||||
|
||||
@api.depends("node_id")
|
||||
def _compute_node_id(self):
|
||||
|
||||
@@ -2,24 +2,32 @@
|
||||
|
||||
<odoo>
|
||||
<data>
|
||||
<!--
|
||||
Root Menu
|
||||
-->
|
||||
<menuitem id="menu_soong_workflow_root"
|
||||
name="Workflow"
|
||||
web_icon="soong_workflow,static/description/icon.png"
|
||||
sequence="200"/>
|
||||
|
||||
<menuitem id="menu_workflow_approval_request_selector"
|
||||
name="流程查询"
|
||||
parent="menu_soong_workflow_root"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem id="menu_workflow_approval_request_my"
|
||||
name="我的流程"
|
||||
parent="menu_workflow_approval_request_selector"
|
||||
action="soong_workflow_record_action"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem id="menu_workflow_approval_request_recycle"
|
||||
name="流程回收站"
|
||||
parent="menu_workflow_approval_request_selector"
|
||||
action="soong_workflow_record_action_reclaim"
|
||||
sequence="3"/>
|
||||
|
||||
<menuitem id="menu_workflow_approval_request_new"
|
||||
name="新的流程"
|
||||
parent="menu_soong_workflow_root"
|
||||
action="action_kklw_workflow_approval_request"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem id="menu_workflow_approval_request_my"
|
||||
name="流程查询"
|
||||
parent="menu_soong_workflow_root"
|
||||
action="soong_workflow_record_action"
|
||||
sequence="3"/>
|
||||
|
||||
<menuitem id="menu_soong_workflow_entrust"
|
||||
|
||||
@@ -17,12 +17,34 @@
|
||||
<field name="name">soong.workflow.record.tree</field>
|
||||
<field name="model">soong.workflow.record</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="WorkFollow Record" action="open_record" type="object" decoration-muted="approve_state == 'end'" decoration-warning="approve_state != 'end'" create="false">
|
||||
<tree string="WorkFollow Record" action="open_record" delete="false" type="object"
|
||||
decoration-muted="approve_state == 'end'" decoration-warning="approve_state != 'end'"
|
||||
create="false">
|
||||
<field name="name"/>
|
||||
<field name="workflow_id" string="审批类型"/>
|
||||
<field name="node_id" string="当前节点"/>
|
||||
<field name="approve_state" string="审批状态"/>
|
||||
<field name="write_date"/>
|
||||
<field name="reclaim_state" column_invisible="1"/>
|
||||
<button name="reclaim_record" type="object" string="回收" class="btn-primary"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="soong_workflow_record_tree_restore" model="ir.ui.view">
|
||||
<field name="name">soong.workflow.record.tree.restore</field>
|
||||
<field name="model">soong.workflow.record</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="WorkFollow Record" action="open_record" type="object"
|
||||
decoration-muted="approve_state == 'end'" decoration-warning="approve_state != 'end'"
|
||||
create="false">
|
||||
<field name="name"/>
|
||||
<field name="workflow_id" string="审批类型"/>
|
||||
<field name="node_id" string="当前节点"/>
|
||||
<field name="approve_state" string="审批状态"/>
|
||||
<field name="write_date"/>
|
||||
<field name="reclaim_state" column_invisible="1"/>
|
||||
<button name="restore_record" type="object" string="还原" class="btn-primary" groups="soong_workflow.group_soong_workflow_manager"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -32,13 +54,19 @@
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">soong.workflow.record</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('users_ids', 'in', [uid])]</field>
|
||||
<field name="domain">[('users_ids', 'in', [uid]), ('reclaim_state', '=', False)]</field>
|
||||
</record>
|
||||
|
||||
<!-- <menuitem id="soong_workflow_record_menu"-->
|
||||
<!-- name="WorkFollow Record"-->
|
||||
<!-- parent="menu_soong_workflow_root"-->
|
||||
<!-- action="soong_workflow_record_action"-->
|
||||
<!-- sequence="3"/>-->
|
||||
<record id="soong_workflow_record_action_reclaim" model="ir.actions.act_window">
|
||||
<field name="name">工作流回收站</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">soong.workflow.record</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('users_ids', 'in', [uid]), ('reclaim_state', '=', True)]</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('soong_workflow.soong_workflow_record_tree_restore')})]"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
from odoo import fields, models, api
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
from datetime import datetime, date, time, timedelta
|
||||
|
||||
|
||||
class SoongApprovalNoticeWizard(models.TransientModel):
|
||||
@@ -13,7 +14,9 @@ class SoongApprovalNoticeWizard(models.TransientModel):
|
||||
class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
_name = "soong.workflow.comment.wizard"
|
||||
_description = "Soong Workflow Comment Wizard"
|
||||
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin']
|
||||
|
||||
name = fields.Char(string="name")
|
||||
res_model = fields.Char()
|
||||
res_id = fields.Integer()
|
||||
log_ids = fields.Many2many(comodel_name="soong.workflow.log")
|
||||
@@ -112,11 +115,13 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
url = "https://oa.thtzjt.com/mail/view?model={}&res_id={}".format(self.res_model, record_id.id)
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=record_id.name + "审批抄送提醒",
|
||||
description="您有新的抄送提醒请及时查看",
|
||||
url=url, btntxt="详细信息")
|
||||
title=record_id._description,
|
||||
description="您有新的抄送审批单 {} 请及时查看\n".format(
|
||||
record_id.name) + self.env.user.name + ' ' + str(
|
||||
fields.Datetime.now() + timedelta(hours=8)),
|
||||
url=url, btntxt="查看详情")
|
||||
partner_ids = self_node_id.employee_ids.user_id.partner_id.ids
|
||||
self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'soong_workflow.message_soong_workflow_users_data')
|
||||
self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'soong_workflow.message_soong_workflow_distribute')
|
||||
# 转交逻辑--单线
|
||||
if not self.node_link_len:
|
||||
state = self.node_btn_id.node_id.out_link_ids.name.split('-> ')[-1]
|
||||
@@ -126,23 +131,31 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
record_id.write({'state': 'end' if self.trans_link_id.name == '结束' else self.trans_link_id.name})
|
||||
url = 'https://oa.thtzjt.com/mail/view?model={}&res_id={}'.format(self.res_model, self.res_id)
|
||||
for employee in self.employee_ids:
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid,
|
||||
title=record_id.name,
|
||||
description="您有新的审批单请及时处理",
|
||||
url=url, btntxt="详情")
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=record_id._description,
|
||||
description="您有新的审批单 {} 请及时查看\n".format(
|
||||
record_id.name) + self.env.user.name + ' ' + str(
|
||||
fields.Datetime.now() + timedelta(
|
||||
hours=8)),
|
||||
url=url, btntxt="查看详情")
|
||||
partner_ids = self.employee_ids.user_id.partner_id.ids
|
||||
self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'soong_workflow.message_soong_workflow_users_data')
|
||||
self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'soong_workflow.message_soong_workflow_distribute')
|
||||
return self.node_btn_id.with_context(cx).run()
|
||||
if self.node_btn_name == '退回':
|
||||
record_id.write({'state': 'start' if self.return_link_id.name == '拟办' else self.return_link_id.name})
|
||||
url = 'https://oa.thtzjt.com/mail/view?model={}&res_id={}'.format(self.res_model, self.res_id)
|
||||
for employee in self.employee_ids:
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid,
|
||||
title=record_id.name,
|
||||
description="您的审批单已被退回,请查看详情",
|
||||
url=url, btntxt="详情")
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=record_id._description,
|
||||
description="您有新的审批单 {} 被退回请及时查看\n".format(
|
||||
record_id.name) + self.env.user.name + ' ' + str(
|
||||
fields.Datetime.now() + timedelta(
|
||||
hours=8)),
|
||||
url=url, btntxt="查看详情")
|
||||
partner_ids = self.employee_ids.user_id.partner_id.ids
|
||||
self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'soong_workflow.message_soong_workflow_users_data')
|
||||
self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'soong_workflow.message_soong_workflow_distribute')
|
||||
return self.node_btn_id.with_context(cx).run()
|
||||
# 填写审批记录
|
||||
if self.node_btn_name != '加签':
|
||||
@@ -156,12 +169,13 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
for employee in self.circulated_employee_ids:
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=record_id.name,
|
||||
description="传阅审批单,请知晓",
|
||||
url=url, btntxt="详情")
|
||||
title=record_id._description,
|
||||
description="您有新的传阅审批单 {} 请及时查看\n".format(
|
||||
record_id.name) + self.env.user.name + ' ' + str(
|
||||
fields.Datetime.now() + timedelta(hours=8)),
|
||||
url=url, btntxt="查看详情")
|
||||
partner_ids = self.circulated_employee_ids.user_id.partner_id.ids
|
||||
self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids,'soong_workflow.message_soong_workflow_users_data')
|
||||
|
||||
self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids,'soong_workflow.message_soong_workflow_distribute')
|
||||
if self.employee_ids:
|
||||
state = self.node_btn_id.node_id.out_link_ids.name.split('-> ')[-1]
|
||||
record_id.write({'state': 'end' if state == '结束' else state})
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="意见">
|
||||
<group invisible="node_btn_name == '分发'">
|
||||
<field name="comment_note_id"/>
|
||||
<field name="node_btn_id" invisible="1"/>
|
||||
<field name="node_btn_name" invisible="1"/>
|
||||
<field name="node_link_len" invisible="1"/>
|
||||
@@ -18,7 +19,6 @@
|
||||
<field name="return_link_id" invisible="node_btn_name != '退回'" string="退回节点"/>
|
||||
<!-- 转交人员 -->
|
||||
<field name="trans_link_id" invisible="not node_link_len" string="转交节点"/>
|
||||
<field name="comment_note_id"/>
|
||||
<field name="employee_ids" widget="many2many_tags" string="人员范围"/>
|
||||
</group>
|
||||
<group string="流程选择" invisible="node_btn_name != '分发'">
|
||||
|
||||
@@ -32,7 +32,7 @@ class YuthonOfficialIncomingParty(models.Model):
|
||||
string="状态", default='drft')
|
||||
deadline = fields.Date(string="办理期限")
|
||||
red_suit = fields.Char(string="套红")
|
||||
official_documents_ids = fields.Many2many('documents.document', string="附件")
|
||||
official_documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
is_issues = fields.Boolean(string="是否上会")
|
||||
related_issues_id = fields.Many2one('issue.library', string="关联议题")
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ class YuthonOfficial(models.Model):
|
||||
is_official_incoming = fields.Boolean(string="是否收文")
|
||||
|
||||
red_suit = fields.Char(string="套红")
|
||||
official_documents_ids = fields.Many2many('documents.document', string="发文附件")
|
||||
official_documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
|
||||
is_supervising = fields.Boolean(string="是否督办")
|
||||
deadline = fields.Date(string="办理期限")
|
||||
|
||||
@@ -32,7 +32,7 @@ class YuthonOfficialIncomingLabor(models.Model):
|
||||
string="状态", default='drft')
|
||||
deadline = fields.Date(string="办理期限")
|
||||
red_suit = fields.Char(string="套红")
|
||||
official_documents_ids = fields.Many2many('documents.document', string="附件")
|
||||
official_documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
is_issues = fields.Boolean(string="是否上会")
|
||||
related_issues_id = fields.Many2one('issue.library', string="关联议题")
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ from odoo.exceptions import ValidationError, UserError
|
||||
class YuthonOfficialIncomingNormal(models.Model):
|
||||
_name = 'yuthon.official.incoming.normal'
|
||||
_description = '行政收文'
|
||||
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
|
||||
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin', 'soong.workflow.mixin']
|
||||
_rec_name = 'name'
|
||||
|
||||
name = fields.Char(string="标题")
|
||||
@@ -37,7 +37,7 @@ class YuthonOfficialIncomingNormal(models.Model):
|
||||
deadline = fields.Date(string="办理期限")
|
||||
done_date = fields.Date(string="完成时间")
|
||||
is_official_incoming = fields.Boolean(string="是否收文")
|
||||
official_documents_ids = fields.Many2many('documents.document', string="附件")
|
||||
official_documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
|
||||
workflow_inspector_ids = fields.One2many('soong.workflow.inspector', 'incoming_normal_id', string="督办事项")
|
||||
room_booking_ids = fields.One2many('room.booking', 'incoming_normal_id', string="会议关联")
|
||||
|
||||
@@ -12,24 +12,17 @@ class YuthonOfficialLabor(models.Model):
|
||||
name = fields.Char(string="名称")
|
||||
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('official_code'))
|
||||
official_type_id = fields.Many2one('official.type', string="公文种类")
|
||||
# official_type = fields.Selection([('go', '发文'), ('come', '收文')], string="公文类型")
|
||||
reference_cold = fields.Integer(string="公文字号")
|
||||
major_event_category = fields.Integer(string="重大事项所属类别")
|
||||
# official_partner_id = fields.Many2one('official.partner', string="来文单位")
|
||||
remarks = fields.Char(string="备注事项")
|
||||
main_text = fields.Html(string='正文')
|
||||
# come_file_id = fields.Char(string="来文编号")
|
||||
# incoming_file_id = fields.Char(string="收文编号")
|
||||
main_flats = fields.Char(string="主送")
|
||||
copy_flats = fields.Char(string="抄送")
|
||||
servings_number = fields.Integer(string="份数")
|
||||
# urgency = fields.Selection([('normal', '一般'), ('urgent', '紧急'), ('extra_urgent', '特急')], string="紧急程度")
|
||||
# secret_level = fields.Selection([('normal', '一般'), ('urgent', '秘密'), ('secret', '机密'), ('so_secret', '绝密')],
|
||||
# string="密级")
|
||||
date = fields.Datetime(string="日期", default=fields.Datetime.now)
|
||||
department_id = fields.Many2one('hr.department', string="申请人部门")
|
||||
statu = fields.Selection([('drft', '草稿'), ('going', '执行中'), ('cancel', '已取消'), ('done', '已完成')],
|
||||
string="状态", default='drft')
|
||||
deadline = fields.Date(string="办理期限")
|
||||
red_suit = fields.Char(string="套红")
|
||||
official_documents_ids = fields.Many2many('documents.document', string="公文相关文件")
|
||||
official_documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
<field name="secret_level"/>
|
||||
<field name="is_issues"/>
|
||||
<field name="related_issues_id" invisible="not is_issues"/>
|
||||
<field name="remarks"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="department_id"/>
|
||||
@@ -46,9 +47,6 @@
|
||||
<field name="date"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="remarks"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
<field name="time_date"/>
|
||||
<field name="is_issues"/>
|
||||
<field name="related_issues_id" invisible="not is_issues"/>
|
||||
<field name="remarks"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
@@ -42,9 +43,6 @@
|
||||
<field name="deadline" invisible="not is_supervising"/>
|
||||
<field name="done_date" invisible="not is_supervising"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="remarks"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="督办事项" invisible="not is_supervising">
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
<field name="secret_level"/>
|
||||
<field name="is_issues"/>
|
||||
<field name="related_issues_id" invisible="not is_issues"/>
|
||||
<field name="remarks"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="date"/>
|
||||
@@ -45,9 +46,6 @@
|
||||
<field name="deadline"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="remarks"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -35,11 +35,7 @@
|
||||
<field name="major_event_category"/>
|
||||
<field name="date"/>
|
||||
<field name="deadline"/>
|
||||
<field name="official_documents_ids">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="official_documents_ids" widget="preview_many2many"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="department_id"/>
|
||||
|
||||
@@ -43,11 +43,7 @@
|
||||
<field name="copy_flats"/>
|
||||
<field name="servings_number"/>
|
||||
<field name="deadline"/>
|
||||
<field name="official_documents_ids">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="official_documents_ids" widget="preview_many2many"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
|
||||
@@ -135,17 +135,32 @@ class WeComApps(models.Model):
|
||||
:return:
|
||||
"""
|
||||
wecom_app = self.sudo().env["wecom.apps.config"].search([("wecom_apps_type", "=", "message_send"), ("wecom_apps_category", "=", category)], limit=1).wecom_apps_id
|
||||
data = {
|
||||
'touser': user_id,
|
||||
'msgtype': 'textcard',
|
||||
'agentid': wecom_app.agent_id,
|
||||
"textcard": {
|
||||
"title": title,
|
||||
"description": description,
|
||||
"url": url,
|
||||
"btntxt": btntxt
|
||||
},
|
||||
}
|
||||
# 类型,标题
|
||||
# 人名:时间
|
||||
if category == 'oa':
|
||||
data = {
|
||||
'touser': user_id,
|
||||
'msgtype': 'textcard',
|
||||
'agentid': wecom_app.agent_id,
|
||||
"textcard": {
|
||||
"title": title,
|
||||
"description": description,
|
||||
"url": url,
|
||||
"btntxt": btntxt
|
||||
},
|
||||
}
|
||||
else:
|
||||
data = {
|
||||
'touser': user_id,
|
||||
'msgtype': 'textcard',
|
||||
'agentid': wecom_app.agent_id,
|
||||
"textcard": {
|
||||
"title": title,
|
||||
"description": description,
|
||||
"url": url,
|
||||
"btntxt": btntxt
|
||||
},
|
||||
}
|
||||
result_data = self.sync_function_api("message_send", "MESSAGE_SEND", data, category)
|
||||
if result_data.get("errcode", None) == 0:
|
||||
return True, result_data
|
||||
|
||||
Reference in New Issue
Block a user