# -*- 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 = "公告确认信息" _order = "employee_number asc" 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") # 从员工带出的字段 company_id = fields.Many2one(related='employee_id.company_id', string='公司', store=True) department_id = fields.Many2one(related='employee_id.department_id', string='部门', store=True) employee_number = fields.Char(related='employee_id.number', string='序号', store=True) def withdrawn(self): if self.state == 'to_sent': raise UserError('该通知还未发送,无法撤回') if self.msg_id: self.sudo().env["wecom.apps"].back_message(self.msg_id, category='notice') self.state = 'to_sent' self.msg_id = '已撤回' 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_id.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=f"您有一条【{record.notice_id.name}】的通知公告请尽快确认", 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: 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=f"您有一条【{rec.notice_id.name}】的通知公告请尽快确认", 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="详细信息") def reminders_notice_send(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: 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=f"您有一条【{rec.notice_id.name}】待确认的通知公告请尽快确认", 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="详细信息")