Merge pull request !8732 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2026-02-06 04:00:19 +00:00
committed by Gitee
6 changed files with 136 additions and 41 deletions
+55 -9
View File
@@ -11,7 +11,22 @@ class YuthonConfirmUsers(models.Model):
notice_id = fields.Many2one('yuthon.notice', string="公告名称")
notice_code = fields.Char(string="公告编号")
notice_name = fields.Char(string="公告名称")
state = fields.Selection([('no', '未确认'), ('yes', '已确认')], 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):
menu_id = self.env['ir.ui.menu'].search([('name', '=', '通知公告')])
@@ -23,16 +38,47 @@ class YuthonConfirmUsers(models.Model):
description="您有待确认的通知公告请尽快确认", url=url, btntxt="详细信息")
def reminders_notice(self):
for rem in self:
if rem.state == 'yes':
raise UserError('已确认不可催办')
confirm_noice_ids = self.env["yuthon.confirm.users"].browse(self._context.get('active_ids', self._context.get('active_id')))
for rec in confirm_noice_ids:
menu_id = self.env['ir.ui.menu'].search([('name', '=', '通知公告')])
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=yuthon.notice&view_type=list&menu_id={menu_id.id}'
if rec.state in ['yes', 'to_sent']:
raise UserError('该通知已确认或未发送,不可催办')
# menu_id = self.env['ir.ui.menu'].search([('name', '=', '通知公告')])
url = f'http://oa.thtzjt.com/webh5#/notice?id={rec.notice_id.id}'
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice', user_id=rec.employee_id.wecom_userid,
title="通知公告(催办)", description="您有待确认的通知公告请尽快确认",
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')
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='notice',
user_id='18562027762',
title="通知公告(催办)",
description="您有待确认的通知公告请尽快确认",
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':
raise UserError(f'该通知已发送,请选择催办')
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'http://oa.thtzjt.com/webh5#/notice?id={rec.notice_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,
}
}
+71 -30
View File
@@ -134,6 +134,31 @@ class YuthonNotice(models.Model):
)
notice.with_context(skip_constrains=True).users_ids = [(6, 0, list(all_users))]
if notice.users_ids and notice.is_change_notice:
conf_old = self.env['yuthon.confirm.users'].search([('notice_id', '=', notice.id)])
old_employee_ids = conf_old.mapped('employee_id.id')
new_employee_ids = notice.users_ids.mapped('employee_ids.id')
add_employee_ids = list(set(new_employee_ids) - set(old_employee_ids))
del_employee_ids = list(set(old_employee_ids) - set(new_employee_ids))
# 3. 处理删除:
if del_employee_ids:
del_conf = conf_old.filtered(lambda c: c.employee_id.id in del_employee_ids)
del_conf.unlink()
if add_employee_ids:
add_users = self.users_ids.filtered(lambda u: u.employee_ids[0].id in add_employee_ids)
for user in add_users:
self.env['yuthon.confirm.users'].create({
'notice_id': self.id,
'employee_id': user.employee_ids[0].id,
'notice_code': self.code,
'notice_name': self.name,
'release_date': self.create_date1,
'state': 'to_sent',
})
def get_no_read_count(self):
return self.search_count([('is_notice_roger', '=', 'no'), ('notice_state', '=', 'yes')])
@@ -171,43 +196,59 @@ class YuthonNotice(models.Model):
def notice_publish(self):
if self.is_change_notice:
conf_old = self.env['yuthon.confirm.users'].search([('notice_id', '=', self.id), ('employee_id', 'in', self.users_ids.ids)])
for user_id in self.users_ids:
if conf_old:
for co in conf_old:
co.write({'state': 'no'})
else:
self.env['yuthon.confirm.users'].create({
'notice_id': self.id,
'employee_id': user_id.employee_ids.id,
'notice_code': self.code,
'notice_name': self.name,
'state': 'no',
})
self.notice_state = 'yes'
conf_old = self.env['yuthon.confirm.users'].search(
[('notice_id', '=', self.id), ('employee_id', 'in', self.users_ids.mapped('employee_ids.id'))]
)
if conf_old:
conf_old.write({'state': 'no'})
user_wecom_mapping = []
we_id_list = []
for user_id in self.users_ids:
employee = user_id.employee_ids
if employee and employee.wecom_userid:
we_id_list.append(employee.wecom_userid)
if not employee:
continue
emp_id = employee.id
wecom_id = employee.wecom_userid
user_wecom_mapping.append({'emp_id': emp_id, 'user_id': user_id})
if wecom_id:
we_id_list.append(wecom_id)
msg_id = False
touser = "|".join(we_id_list) if we_id_list else ""
url = f'http://oa.thtzjt.com/webh5#/notice?id={self.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.write({"notice_state": 'yes'})
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'type': 'success',
'message': '通知公告已经发布',
'sticky': False,
}
}
if touser:
url = f'http://oa.thtzjt.com/webh5#/notice?id={self.id}'
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(
category='notice',
touser=touser,
title="通知公告",
description=self.name + '发布人:' + self.users_id.name,
url=url,
btntxt="详细信息"
)
if result_data and isinstance(result_data, list) and 'msgid' in result_data[-1]:
msg_id = result_data[-1]['msgid']
for mapping in user_wecom_mapping:
emp_id = mapping['emp_id']
is_exist = self.env['yuthon.confirm.users'].search(
[('notice_id', '=', self.id), ('employee_id', '=', emp_id)],
limit=1
)
if not is_exist:
self.env['yuthon.confirm.users'].create({
'notice_id': self.id,
'employee_id': emp_id,
'notice_code': self.code,
'notice_name': self.name,
'release_date': self.create_date1,
'state': 'no',
'msg_id': msg_id,
})
else:
raise UserError('该公告不允许通知,请勾选通知')
def look_up_notice_users(self):
return {
"type": "ir.actions.act_window",
@@ -8,11 +8,17 @@
string="公告确认信息" js_class="custom_notice_tree_button" editable="bottom">
<header>
<button class="oe_stat_button" name="reminders_notice" string="批量催办" type="object" icon="fa-bars"/>
<button name="withdrawn" string="批量撤回" type="object" icon="fa-bars" lass="oe_stat_button" confirm="确认要撤回吗?"/>
<button name="notice_publish" string="批量发送" type="object" icon="fa-bars" lass="oe_stat_button"/>
</header>
<field name="employee_id" widget="ztree_select"/>
<field name="notice_id"/>
<field name="notice_code"/>
<field name="state"/>
<field name="release_date"/>
<field name="create_time"/>
<field name="msg_id"/>
<button name="withdrawn" string="撤回" type="object" class="oe_highlight" confirm="确认要撤回吗?" invisible="state == 'to_sent'"/>
</tree>
</field>
</record>
+1 -1
View File
@@ -191,7 +191,7 @@
<record id="approval_notice_action" model="ir.actions.act_window">
<field name="name">通知公告</field>
<field name="domain">[('is_company', '=', True)]</field>
<field name="domain">[('is_company', '=', True),('users_ids','in',uid),('notice_state','=','yes')]</field>
<field name="res_model">yuthon.notice</field>
<field name="view_mode">tree,form</field>
<!-- <field name="domain">[('notice_state', '=', 'yes'),('users_ids', 'in', [uid])]</field>-->
+2
View File
@@ -102,6 +102,8 @@ class WeComApps(models.Model):
token = ''
if category == 'task':
token = self.env['wecom.apps'].search([('name', '=', '日程消息通知')])['access_token']
if category == 'notice':
token = self.env['wecom.apps'].search([('name', '=', '通知公告消息通知')])['access_token']
if category == 'approval':
token = self.env['wecom.apps'].search([('name', '=', '审批消息通知')])['access_token']
data = {'msgid': msg_id}
+1 -1
View File
@@ -242,7 +242,7 @@ class YuthonWillTask(models.Model):
return res
def _sync_dates_task(self):
reminder_employees = self.employee_ids | self.employee_ids2
reminder_employees = self.employee_ids | self.employee_ids2 | self.employee_id
if not reminder_employees:
return
old_tasks = self.env['yuthon.dates.task'].search([('yuthon_will_task_id', '=', self.id), ('task_state', '=', 'to_do')])