Files
gzth/yuthon_notice/models/yuthon_confirm_users.py
T
2026-03-04 23:06:49 +08:00

91 lines
5.4 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools
from odoo.exceptions import UserError, ValidationError
class YuthonConfirmUsers(models.Model):
_name = "yuthon.confirm.users"
_description = "公告确认信息"
employee_id = fields.Many2one('hr.employee', string='员工')
notice_id = fields.Many2one('yuthon.notice', string="公告名称")
notice_code = fields.Char(string="公告编号")
notice_name = fields.Char(string="公告名称")
state = fields.Selection([('to_sent', '待发送'), ('no', '待确认'), ('yes', '已确认')], string="状态")
create_time = fields.Datetime(string='创建时间', default=fields.Datetime.now)
release_date = fields.Date(string="发布日期")
msg_id = fields.Char(string="Msg_id")
def withdrawn(self):
if self.msg_id:
self.sudo().env["wecom.apps"].back_message(self.msg_id, category='approval')
self.unlink()
def all_withdrawn(self):
confirm_noice_ids = self.env["yuthon.confirm.users"].browse(self._context.get('active_ids', self._context.get('active_id')))
for record in confirm_noice_ids:
if record.state == 'state':
raise UserError(f'{record.notice_name}通知还未发送,无法撤回')
record.withdrawn()
def sync_confirm_users_notices(self):
for record in self.search([('state', '=', 'no')]):
partner_ids = record.employee_id.user_id.partner_id.id
record.with_context(lang=record.env.lang)._message_auto_subscribe_notify(partner_ids, 'yuthon_notice.message_yuthon_confirm_users_data')
url = f'https://phone.thtzjt.com/phone/Notice/{self.notice_id.id}?employee_id={record.employee_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser=record.employee_id.wecom_userid, title="通知公告",
description="您有待确认的通知公告请尽快确认", url=url, btntxt="详细信息")
def reminders_notice(self):
confirm_noice_ids = self.env["yuthon.confirm.users"].browse(self._context.get('active_ids', self._context.get('active_id')))
i = 0
for rec in confirm_noice_ids:
# if rec.state in ['yes', 'to_sent']:
# continue
url = f'https://phone.thtzjt.com/phone/Notice/{self.notice_id.id}?employee_id={rec.employee_id.id}'
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser=rec.employee_id.wecom_userid,
title="通知公告", description="您有待确认的通知公告请尽快确认",
url=url, btntxt="详细信息")
if result_data:
res_dict = result_data[1]
rec.write({'msg_id': res_dict.get('msgid')})
if res_dict.get('errmsg') == 'ok':
i = i + 1
url = f'https://phone.thtzjt.com/phone/Notice/{self.notice_id.id}?employee_id=298'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice',
touser='18562027762',
title="通知公告",
description="成功发送消息通知" + str(i),
url=url, btntxt="详细信息")
# partner_ids = rec.employee_id.user_id.partner_id.id
# rec.with_context(lang=rec.env.lang)._message_auto_subscribe_notify(partner_ids,'yuthon_notice.message_yuthon_confirm_users_data')
def notice_publish(self):
confirm_noice_ids = self.env["yuthon.confirm.users"].browse(
self._context.get('active_ids', self._context.get('active_id')))
we_id_list = []
for rec in confirm_noice_ids:
if rec.state != 'to_sent':
continue
rec.write({'state': 'no'})
if rec.employee_id.wecom_userid:
we_id_list.append(rec.employee_id.wecom_userid)
touser = "|".join(we_id_list) if we_id_list else ""
url = f'https://phone.thtzjt.com/phone/Notice/{self.notice_id.id}?employee_id={self.users_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser=touser, title="通知公告",
description=self.name + '发布人:' + self.users_id.name,
url=url, btntxt="详细信息")
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', touser='18562027762', title="通知公告",
description=self.name + '发布人:' + self.users_id.name,
url=url, btntxt="详细信息")
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'type': 'success',
'message': '通知公告已经发布',
'sticky': False,
}
}