pengyuthon wechat
This commit is contained in:
@@ -28,7 +28,7 @@
|
||||
</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"
|
||||
<a t-att-href="access_link" t-att-data-oe-model="object.res_model" t-att-data-oe-id="object.res_id"
|
||||
style="background-color:#2C65F7; padding: 10px; text-decoration: none; color: #fff; border-radius: 5px;">
|
||||
查看
|
||||
<t t-esc="model_description or 'document'"/>
|
||||
|
||||
@@ -68,7 +68,8 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
string="审批明细")
|
||||
approval_sign_ids = fields.Many2many('res.users', string="加签人员")
|
||||
|
||||
workflow_approver_ids = fields.One2many('soong.workflow.log', 'w_res_id', string="审批记录", compute='_compute_workflow_approver_ids')
|
||||
workflow_approver_ids = fields.One2many('soong.workflow.log', 'w_res_id', string="审批记录",
|
||||
compute='_compute_workflow_approver_ids')
|
||||
|
||||
def _compute_workflow_approver_ids(self):
|
||||
wkf_obj = self.env["soong.workflow"]
|
||||
@@ -111,7 +112,6 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
# Get Workflow
|
||||
rec.workflow_id = wkf_obj.search([("model_id", "=", rec_model), ('is_enable', '=', True)])
|
||||
|
||||
|
||||
node_id = fields.Many2one(
|
||||
comodel_name="soong.workflow.node",
|
||||
string="Workflow Node Ref.",
|
||||
@@ -166,7 +166,8 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
"lase_click_date": fields.Datetime.now(),
|
||||
}
|
||||
)
|
||||
record_obj.update({"workflow_id": btn_rec.workflow_id.id, "node_btn_id": btn_rec.id, "done_by": self.env.uid, "lase_click_date": fields.Datetime.now()})
|
||||
record_obj.update({"workflow_id": btn_rec.workflow_id.id, "node_btn_id": btn_rec.id, "done_by": self.env.uid,
|
||||
"lase_click_date": fields.Datetime.now()})
|
||||
return record_obj
|
||||
|
||||
def btn_exec_action(self):
|
||||
@@ -200,19 +201,25 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
('user_role_ids', 'in', next_state.users_role_id.id)])
|
||||
# 自动匹配
|
||||
employee_user_role_id = self.env['hr.employee'].search(
|
||||
[('user_role_id', '=', next_state.users_role_id.id), '|',
|
||||
('department_id', '=', self.department_id.id),
|
||||
('department_ids', 'in', self.department_id.id)])
|
||||
['|', ('user_role_id', '=', next_state.users_role_id.id),
|
||||
('user_role_ids', 'in', next_state.users_role_id.id), '|', '&',
|
||||
('department_id', '=', self.department_id.id),
|
||||
('department_ids', 'in', self.department_id.id),
|
||||
('yuthon_company', '=', self.create_uid.employee_id.yuthon_company)])
|
||||
employee_ids = employee_user_role_ids if not next_state.is_automatic else employee_user_role_id
|
||||
url = 'https://oa.thtzjt.com/mail/view?model={}&res_id={}'.format(self._name, self.id)
|
||||
for employee in employee_ids:
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=self._description,
|
||||
description="您有新的审批单 {} 请及时处理\n".format(self.name) + self.env.user.name + ' ' + str(fields.Datetime.now() + timedelta(hours=8)),
|
||||
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')
|
||||
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()
|
||||
|
||||
def _add_comment(self, logs, btn_rec):
|
||||
@@ -263,9 +270,11 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
('user_role_ids', 'in', next_state.users_role_id.id)])
|
||||
# 自动匹配
|
||||
employee_user_role_id = self.env['hr.employee'].search(
|
||||
[('user_role_id', '=', next_state.users_role_id.id), '|',
|
||||
['|', ('user_role_id', '=', next_state.users_role_id.id),
|
||||
('user_role_id', '=', next_state.users_role_id.id), '|', '&',
|
||||
('department_id', '=', self.department_id.id),
|
||||
('department_ids', 'in', self.department_id.id)])
|
||||
('department_ids', 'in', self.department_id.id),
|
||||
('yuthon_company', '=', self.create_uid.employee_id.yuthon_company)])
|
||||
|
||||
employee_ids = employee_user_role_ids.ids if not next_state.is_automatic else employee_user_role_id.ids
|
||||
if not employee_ids:
|
||||
@@ -520,7 +529,9 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
if self.env.user not in button.reviewer_group_id.users:
|
||||
continue
|
||||
elif button.review_type == 'user_role':
|
||||
user_role_id = self.env['res.users'].search([('employee_id.user_role_id', '=', button.users_role_id.id)])
|
||||
user_role_id = self.env['res.users'].search(
|
||||
['|', ('employee_id.user_role_id', '=', button.users_role_id.id),
|
||||
('employee_id.user_role_ids', 'in', button.users_role_id.id)])
|
||||
if self.env.user not in user_role_id:
|
||||
continue
|
||||
# 如果是隐藏条件拼接隐藏条件
|
||||
@@ -724,7 +735,6 @@ class SoongWorkflowMixin(models.AbstractModel):
|
||||
res["arch"] = etree.tostring(arch, encoding="unicode").replace("\t", "")
|
||||
return res
|
||||
|
||||
|
||||
def _update_fields_view(self, view_type, res):
|
||||
"""
|
||||
Updates fields attributes.
|
||||
|
||||
@@ -9,7 +9,8 @@ _logger = logging.getLogger(__name__)
|
||||
|
||||
class SoongWorkflowRecord(models.Model):
|
||||
_name = "soong.workflow.record"
|
||||
_description = "Soong Workflow Record"
|
||||
_description = "工作流记录"
|
||||
_order = 'write_date'
|
||||
|
||||
@api.depends("res_model", "res_id")
|
||||
def compute_name(self):
|
||||
|
||||
@@ -7,8 +7,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="WorkFollow Record">
|
||||
<field name="name"/>
|
||||
<field name="workflow_id"/>
|
||||
<field name="node_id"/>
|
||||
<field name="workflow_id" string="审批类型"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
@@ -55,6 +54,7 @@
|
||||
<field name="res_model">soong.workflow.record</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('users_ids', 'in', [uid]), ('reclaim_state', '=', False)]</field>
|
||||
<field name="search_view_id" ref="soong_workflow_record_search"/>
|
||||
</record>
|
||||
|
||||
<record id="soong_workflow_record_action_reclaim" model="ir.actions.act_window">
|
||||
@@ -63,6 +63,7 @@
|
||||
<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="search_view_id" ref="soong_workflow_record_search"/>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('soong_workflow.soong_workflow_record_tree_restore')})]"/>
|
||||
</record>
|
||||
|
||||
@@ -52,7 +52,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
def onchange_employee_ids(self):
|
||||
record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
|
||||
for ret in self.return_link_id:
|
||||
if ret.name == '拟办':
|
||||
if ret.name in ['拟办', '申请人']:
|
||||
self.employee_ids = record_id.users_id.employee_id
|
||||
elif self.node_btn_name == '退回':
|
||||
next_list = []
|
||||
@@ -79,10 +79,23 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
def onchange_trans_employee_ids(self):
|
||||
record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
|
||||
for ret in self.trans_link_id:
|
||||
workflow_id = self.trans_link_id.node_button_id.workflow_id
|
||||
state_list = ['拟办' if i.node_name == 'start' else i.node_name for i in workflow_id.node_ids]
|
||||
link_users_id = workflow_id.node_ids.search([('name', '=', self.trans_link_id.name), ('workflow_id', '=', workflow_id.id)]).button_ids[0].users_role_id
|
||||
next_is_automatic = workflow_id.node_ids.search([('name', '=', self.trans_link_id.name), ('workflow_id', '=', workflow_id.id)]).button_ids[0].is_automatic
|
||||
# 不自动匹配
|
||||
employee_user_role_ids = self.env['hr.employee'].search(
|
||||
['|', ('user_role_id', '=', link_users_id.id), ('user_role_ids', 'in', link_users_id.id)])
|
||||
# 自动匹配
|
||||
employee_user_role_id = self.env['hr.employee'].search(
|
||||
['|', ('user_role_id', '=', link_users_id.id),
|
||||
('user_role_ids', 'in', link_users_id.id), '|', '&',
|
||||
('department_id', '=', record_id.department_id.id),
|
||||
('department_ids', 'in', record_id.department_id.id),
|
||||
('yuthon_company', '=', record_id.create_uid.employee_id.yuthon_company)])
|
||||
self.employee_ids = employee_user_role_ids if not next_is_automatic else employee_user_role_id
|
||||
if self.node_btn_name == '退回':
|
||||
next_list = []
|
||||
workflow_id = self.trans_link_id.node_button_id.workflow_id
|
||||
state_list = ['拟办' if i.node_name == 'start' else i.node_name for i in workflow_id.node_ids]
|
||||
self_state = state_list.index(ret.name)
|
||||
button_ids = workflow_id.node_ids[self_state].button_ids
|
||||
for btn in button_ids:
|
||||
@@ -116,7 +129,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=record_id._description,
|
||||
description="您有新的抄送审批单 {} 请及时查看\n".format(
|
||||
description="标题: {}\n".format(
|
||||
record_id.name) + self.env.user.name + ' ' + str(
|
||||
fields.Datetime.now() + timedelta(hours=8)),
|
||||
url=url, btntxt="查看详情")
|
||||
@@ -134,7 +147,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=record_id._description,
|
||||
description="您有新的审批单 {} 请及时查看\n".format(
|
||||
description="标题: {}\n".format(
|
||||
record_id.name) + self.env.user.name + ' ' + str(
|
||||
fields.Datetime.now() + timedelta(
|
||||
hours=8)),
|
||||
@@ -149,7 +162,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=record_id._description,
|
||||
description="您有新的审批单 {} 被退回请及时查看\n".format(
|
||||
description="标题: {}\n".format(
|
||||
record_id.name) + self.env.user.name + ' ' + str(
|
||||
fields.Datetime.now() + timedelta(
|
||||
hours=8)),
|
||||
@@ -170,7 +183,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=record_id._description,
|
||||
description="您有新的传阅审批单 {} 请及时查看\n".format(
|
||||
description="标题: {}\n".format(
|
||||
record_id.name) + self.env.user.name + ' ' + str(
|
||||
fields.Datetime.now() + timedelta(hours=8)),
|
||||
url=url, btntxt="查看详情")
|
||||
|
||||
@@ -44,9 +44,6 @@ class YuthonWillTask(models.Model):
|
||||
min_start = start_time.minute
|
||||
if day_now == day_start and hour_now == hour_start and min_now == min_start:
|
||||
task.add_comment()
|
||||
else:
|
||||
if now.day == start_time.day and now.hour == start_time.hour and now.minute == start_time.minute:
|
||||
task.add_comment()
|
||||
|
||||
def _compute_duration(self, task_time):
|
||||
if task_time.task_unit == 'min':
|
||||
@@ -65,7 +62,7 @@ class YuthonWillTask(models.Model):
|
||||
raise UserError("请同步{}的企业微信".format(employee_id.name))
|
||||
url = "https://oa.thtzjt.com/mail/view?model={}&res_id={}".format(self._name, self.id)
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='task', user_id=employee_id.wecom_userid,
|
||||
title="日程事项提醒", description=self.task_content,
|
||||
title="日程事项提醒", description="事项名称: " + self.task_content + '\t' + self.start_time,
|
||||
url=url, btntxt="详细信息")
|
||||
for record in self:
|
||||
partner_ids = record.employee_ids.user_id.partner_id.ids
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<field name='priority'/>
|
||||
<field name='end_time' optional="hide" />
|
||||
<field name='creation_time' optional="hide"/>
|
||||
<field name='task_time_ids' widget="many2many_tags"/>
|
||||
<field name='task_time_ids' widget="many2many_tags" required="1"/>
|
||||
<field name='remarks'/>
|
||||
<button name="button_add_comment" string="提醒" type="object" class="oe_highlight"/>
|
||||
</tree>
|
||||
@@ -52,7 +52,7 @@
|
||||
<field name="priority"/>
|
||||
<field name="start_time"/>
|
||||
<field name="end_time"/>
|
||||
<field name="task_time_ids" widget="many2many_tags"/>
|
||||
<field name="task_time_ids" widget="many2many_tags" required="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
|
||||
Reference in New Issue
Block a user