Merge pull request !10031 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2026-03-20 12:44:17 +00:00
committed by Gitee
2 changed files with 57 additions and 24 deletions
+39 -16
View File
@@ -657,22 +657,45 @@ class SoongWorkflowRecord(models.Model):
@api.model
def get_view(self, view_id=None, view_type='form', **options):
current_user_id = self.env.user.id
current_employee = self.env['hr.employee'].search([('user_id', '=', current_user_id)], limit=1)
view = super().get_view(view_id, view_type, **options)
if not current_employee:
return view
if view_type == 'list':
all_records = self.search([
'|',
('employee_ids', 'in', [current_employee.id]),
('employee2_ids', 'in', [current_employee.id]),
('reclaim_state', '=', False) # 补回丢失的过滤条件
]) # 限制最大记录数,避免性能问题
if all_records:
all_records._compute_is_done()
all_records._compute_is_to_do()
return view
all_records = self.search([
('users_ids', 'in', self.env.user.id),
('reclaim_state', '=', False)
])
for record in all_records:
# 校验关联记录是否存在
if not record.res_model or not record.res_id:
continue
record_id = self.env[record.res_model].browse(record.res_id)
if not record_id or not hasattr(record_id, 'log_ids'):
continue
current_user_logs = record_id.log_ids.filtered(
lambda l: l.done_by.id == self.env.user.id
)
if not current_user_logs:
continue
approval_states = current_user_logs.mapped('approval_state')
if any(state in ['0', '1'] for state in approval_states):
record.write({'soong_state': 'to_do'})
elif all(state == '2' for state in approval_states):
record.write({'soong_state': 'done'})
for log in current_user_logs:
if log.name == '归档':
if log.approval_state == '0' or log.approval_state == '1':
record.write({'soong_state': 'to_active'})
elif log.approval_state == '2':
record.write({'soong_state': 'active'})
break
for log2 in record_id.log_ids2:
if log2.done_by.name == self.env.user.name:
if log2.approval_state == '2':
record.write({'soong_state': 'done'})
elif log2.approval_state in ['0', '1']:
record.write({'soong_state': 'to_do'})
record._compute_is_done()
record._compute_is_to_do()
return super(SoongWorkflowRecord, self).get_view(view_id, view_type, **options)
def to_do_process_reminders(self):
workflow_records = self.env['soong.workflow.record'].search([
+18 -8
View File
@@ -195,11 +195,13 @@ class YuthonNotice(models.Model):
self.sequence = 0
def notice_publish(self):
self.ensure_one()
if self.is_change_notice:
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'))]
)
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 = []
@@ -210,20 +212,30 @@ class YuthonNotice(models.Model):
url = f'https://phone.thtzjt.com/phone/Notice/{self.id}?employee_id={employee.id}'
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(
category='notice',
user_id=user_id.employee_id.wecom_userid,
touser=user_id.employee_id.wecom_userid,
title="通知公告",
description=self.name + '发布人:' + self.users_id.name,
description=f"{self.name} 发布人: {self.users_id.name}",
url=url,
btntxt="详细信息"
)
msg_id = None
if result_data and isinstance(result_data, tuple) and len(result_data) >= 2:
res_dict = result_data[1]
if res_dict.get('errcode') == 0 and res_dict.get('errmsg') == 'ok' and 'msgid' in res_dict:
msg_id = res_dict['msgid']
user_wecom_mapping.append({
'emp_id': employee.id,
'msg_id': msg_id
})
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)
msg_id = mapping['msg_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,
@@ -234,8 +246,6 @@ class YuthonNotice(models.Model):
'state': 'no',
'msg_id': msg_id,
})
else:
raise UserError('该公告不允许通知,请勾选通知')
def look_up_notice_users(self):
return {