@@ -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([
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user