@@ -459,7 +459,7 @@
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">soong.workflow.record</field>
|
||||
<field name="view_mode">tree,kanban,search</field>
|
||||
<field name="domain">[('reclaim_state', '=', False), ('is_company', '=', True),('approve_state','!=','start'),('approvals_group_id.name', 'not in', ['考勤', '人事'])]</field>
|
||||
<field name="domain">[('reclaim_state', '=', False), ('approve_state','!=','start'),('approvals_group_id.name', 'not in', ['考勤', '人事']), '|', ('users_ids', 'in', [uid]), ('member_of_department', '=', True)]</field>
|
||||
<field name="context">{'search_default_my_department_shifts': True, 'default_order': 'display_end_time desc'}</field>
|
||||
<field name="search_view_id" ref="soong_workflow_record_search1"/>
|
||||
<field name="view_id" ref="soong_workflow_record_department_tree"/>
|
||||
|
||||
@@ -19,6 +19,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
res_model = fields.Char()
|
||||
res_id = fields.Integer()
|
||||
code = fields.Char()
|
||||
|
||||
log_ids = fields.Many2many(comodel_name="soong.workflow.log")
|
||||
node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button")
|
||||
node_btn_name = fields.Char(string="动作名称", related='node_btn_id.name')
|
||||
@@ -35,6 +36,51 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
workflow_record_id = fields.Many2one('soong.workflow.record', string="流程")
|
||||
is_selection = fields.Boolean(string="是否自动选择")
|
||||
trans_link_id = fields.Many2one('trans.link', string='转交节点', ondelete='set null')
|
||||
is_avoid = fields.Boolean(string='是否回避')
|
||||
allowed_issue_ids = fields.Many2many('issue.library', 'soong_comment_wizard_allowed_issue_rel',
|
||||
'wizard_id', 'issue_id', string='可选议题')
|
||||
avoid_issue_ids = fields.Many2many('issue.library', 'soong_comment_wizard_avoid_issue_rel',
|
||||
'wizard_id', 'issue_id', string='回避议题')
|
||||
avoid_comment = fields.Char(string='回避意见')
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields_list):
|
||||
res = super().default_get(fields_list)
|
||||
ctx = self.env.context
|
||||
res_model = ctx.get('default_res_model') or res.get('res_model')
|
||||
res_id = ctx.get('default_res_id') or res.get('res_id')
|
||||
if res_model and res_id:
|
||||
source = self.env[res_model].browse(res_id)
|
||||
if hasattr(source, 'line_ids'):
|
||||
res['allowed_issue_ids'] = [(6, 0, source.line_ids.mapped('issue_id').ids)]
|
||||
return res
|
||||
|
||||
@api.onchange('avoid_issue_ids')
|
||||
def _onchange_avoid_issue_ids(self):
|
||||
if self.avoid_issue_ids and self.allowed_issue_ids:
|
||||
invalid = self.avoid_issue_ids - self.allowed_issue_ids
|
||||
if invalid:
|
||||
self.avoid_issue_ids = [(6, 0, (self.avoid_issue_ids - invalid).ids)]
|
||||
return {
|
||||
'warning': {
|
||||
'title': '无效议题',
|
||||
'message': f'以下议题不在当前申报范围内,已自动移除:{", ".join(invalid.mapped("name"))}',
|
||||
}
|
||||
}
|
||||
|
||||
@api.onchange('is_avoid')
|
||||
def _onchange_is_avoid(self):
|
||||
if not self.is_avoid:
|
||||
self.avoid_issue_ids = [(5, 0, 0)]
|
||||
self.avoid_comment = False
|
||||
|
||||
def _handle_avoidance(self):
|
||||
"""回避处理:勾选回避且选了议题时,在对应议题中记录回避"""
|
||||
if not self.is_avoid or not self.avoid_issue_ids:
|
||||
return
|
||||
for issue in self.avoid_issue_ids:
|
||||
issue.log_avoidance(self.env.user, self.avoid_comment or '')
|
||||
|
||||
document_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
return_link_id = fields.Many2one('trans.link', string='退回节点', ondelete='set null')
|
||||
invalid_link_ids = fields.Many2many(
|
||||
@@ -130,7 +176,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
])
|
||||
self.employee_ids2 = self.env['hr.employee'].search(domain)
|
||||
|
||||
@api.depends('comment_note_id', 'comment_note')
|
||||
@api.depends('comment_note_id', 'comment_note', 'avoid_comment')
|
||||
def _compute_comment(self):
|
||||
for record in self:
|
||||
comment_parts = []
|
||||
@@ -138,6 +184,8 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
comment_parts.append(record.comment_note_id.name)
|
||||
if record.comment_note:
|
||||
comment_parts.append(record.comment_note)
|
||||
if record.avoid_comment:
|
||||
comment_parts.append(f'【回避意见】{record.avoid_comment}')
|
||||
record.comment = " ".join(comment_parts) if comment_parts else ""
|
||||
|
||||
@api.depends('user_id.employee_ids.user_role_ids', 'user_id.employee_ids.user_role_id')
|
||||
@@ -564,6 +612,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
title=record_id._description + '传阅/抄送,测试提醒',
|
||||
description=description, url=url,
|
||||
btntxt="查看详情")
|
||||
self._handle_avoidance()
|
||||
if self.node_btn_name == '退回':
|
||||
if not self.return_link_id:
|
||||
raise UserError('请选择退回节点')
|
||||
@@ -970,6 +1019,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
title=title,
|
||||
description=f"标题为{record_id.name}的{title}已结束,请归档",
|
||||
url=url, btntxt="查看详情")
|
||||
self._handle_avoidance()
|
||||
if self.node_btn_name == "分发":
|
||||
record_id.is_send = True
|
||||
menu_id = self.env['ir.ui.menu'].search([('name', '=', '行政收文')], limit=1)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
<field name="approval_concatenation" widget="radio"/>
|
||||
<field name="invalid_link_ids" widget="many2many_tags"/>
|
||||
<field name="user_role_ids"/>
|
||||
<field name="res_model" invisible="1"/>
|
||||
<field name="comment"/>
|
||||
</group>
|
||||
<group invisible="node_btn_name in ['分发', '结束', '收回', '确认', '归档', '加签', '加签确认']">
|
||||
@@ -136,6 +137,11 @@
|
||||
<field name="trans_link_id" string="转交节点" invisible="node_btn_name == '退回'"
|
||||
domain="[('id', 'not in', invalid_link_ids), ('workflow_record_id', '=', workflow_record_id)]"
|
||||
options="{'no_open': True}" widget="radio" force_save="1"/>
|
||||
<field name="is_avoid" invisible="res_model not in ['issue.party.approval', 'issue.boss.approval', 'issue.class.approval']"/>
|
||||
<field name="allowed_issue_ids" invisible="1"/>
|
||||
<field name="avoid_issue_ids" widget="many2many_tags"
|
||||
invisible="not is_avoid" options="{'no_create': True}"/>
|
||||
<field name="avoid_comment" invisible="not is_avoid" placeholder="请输入回避意见..."/>
|
||||
<field name="employee_trans_domain_ids" invisible="1"/>
|
||||
<!-- 退回意见退回类型 -->
|
||||
<div invisible="node_btn_name != '退回'" style="white-space: nowrap; color: #dc3545; font-weight: bold; font-size: 14px; padding: 2px 8px; border-left: 3px solid #dc3545; margin-bottom: 6px;">退回节点</div>
|
||||
|
||||
@@ -71,6 +71,7 @@ class IssueLibrary(models.Model):
|
||||
issue_approval_id = fields.Many2one('issue.approval', string="关联议题审批")
|
||||
issue_library_line_ids = fields.One2many('issue.library.line', 'issue_library_id', string="决策明细")
|
||||
issue_library_approval_line_ids = fields.One2many('issue.library.approval.line', 'issue_library_id', string='流程记录')
|
||||
avoid_line_ids = fields.One2many('issue.library.avoid.line', 'issue_library_id', string='回避记录')
|
||||
approval_decision_sequence = fields.Char(string="决策清单事项")
|
||||
is_booking = fields.Boolean(string="是否上会")
|
||||
issues_result = fields.Html(string="会议结果")
|
||||
@@ -113,6 +114,15 @@ class IssueLibrary(models.Model):
|
||||
is_push_depart = fields.Boolean(string="部门推送")
|
||||
is_meeting = fields.Boolean(string="已过会", compute='_compute_meeting', store=True)
|
||||
|
||||
def log_avoidance(self, avoid_user, avoid_comment=''):
|
||||
"""记录回避信息"""
|
||||
self.env['issue.library.avoid.line'].create({
|
||||
'issue_library_id': self.id,
|
||||
'avoid_user_id': avoid_user.id,
|
||||
'avoid_date': fields.Datetime.now() + timedelta(hours=8),
|
||||
'avoid_comment': avoid_comment,
|
||||
})
|
||||
|
||||
def correction_confirm(self):
|
||||
for rec in self:
|
||||
rec.is_confirm = False
|
||||
@@ -1006,3 +1016,14 @@ class IssueLibraryRoomLine(models.Model):
|
||||
'target': 'current',
|
||||
}
|
||||
|
||||
|
||||
class IssueLibraryAvoidLine(models.Model):
|
||||
_name = 'issue.library.avoid.line'
|
||||
_description = '回避记录'
|
||||
_order = 'avoid_date desc'
|
||||
|
||||
issue_library_id = fields.Many2one('issue.library', string='关联议题')
|
||||
avoid_user_id = fields.Many2one('res.users', string='回避人', default=lambda self: self.env.user)
|
||||
avoid_date = fields.Datetime(string='回避时间', default=fields.Datetime.now)
|
||||
avoid_comment = fields.Text(string='回避意见')
|
||||
|
||||
|
||||
@@ -328,6 +328,16 @@
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="回避记录">
|
||||
<field name="avoid_line_ids">
|
||||
<tree create="false" delete="false">
|
||||
<field name="issue_library_id" column_invisible="1"/>
|
||||
<field name="avoid_user_id"/>
|
||||
<field name="avoid_date"/>
|
||||
<field name="avoid_comment"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user