增加 审批人员展示

This commit is contained in:
ljm
2024-11-27 10:40:17 +00:00
committed by 李鹏宇
parent f1dc39d0e4
commit fdd7ef4f4f
2 changed files with 74 additions and 5 deletions
+8 -3
View File
@@ -19,9 +19,14 @@ class SoongWorkflowLog(models.Model):
name = fields.Char(string="节点名称", compute="_compute_name")
model = fields.Char(string="Related Document Model", index=True, required=True)
res_id = fields.Integer(string="Related Document ID", index=True, required=True)
workflow_id = fields.Many2one(comodel_name="soong.workflow", related="node_btn_id.workflow_id")
node_id = fields.Many2one(comodel_name="soong.workflow.node", related="node_btn_id.node_id")
node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button", required=True, string="动作名称")
w_res_id = fields.Many2oneReference(string='Workflow Ref.', index=True, model_field='w_res_model_id')
w_res_model_id = fields.Many2one('ir.model', string='Model', index=True, ondelete='cascade')
w_res_model = fields.Char('Workflow Ref Model', index=True, related='w_res_model_id.model', precompute=True, store=True, readonly=True)
workflow_id = fields.Many2one(comodel_name="soong.workflow")
node_id = fields.Many2one(comodel_name="soong.workflow.node")
node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button", string="动作名称")
done_by = fields.Many2one(comodel_name="res.users", string="审批人")
lase_click_date = fields.Datetime(string="操作时间")
+66 -2
View File
@@ -68,6 +68,39 @@ class SoongWorkflowMixin(models.AbstractModel):
string="审批明细")
approval_sign_ids = fields.Many2many('res.users', string="加签人员")
workflow_approver_ids = fields.One2many('soong.workflow.log', 'w_res_id', string="审批记录", compute='_compute_workflow_approver_ids')
def _compute_workflow_approver_ids(self):
wkf_obj = self.env["soong.workflow"]
for rec in self:
log_ids = []
# Variables
rec_model = rec._name
# Get Workflow
workflow_id = wkf_obj.search([("model_id", "=", rec_model), ('is_enable', '=', True)])
node_ids = workflow_id.node_ids
for node_id in node_ids:
log_obj = self.env["soong.workflow.log"]
record_obj = log_obj.search(
[
("model", "=", self._name),
("res_id", "=", self.id),
("node_id", "=", node_id.id),
]
)
if not record_obj:
record_obj = log_obj.create(
{
"model": self._name,
"res_id": self.id,
"node_id": node_id.id,
"workflow_id": node_id.workflow_id.id,
"lase_click_date": fields.Datetime.now(),
}
)
log_ids.append(record_obj.id)
rec.workflow_approver_ids = log_ids
@api.depends("state")
def _compute_workflow_id(self):
# Objects
@@ -78,6 +111,7 @@ class SoongWorkflowMixin(models.AbstractModel):
# Get Workflow
rec.workflow_id = wkf_obj.search([("model_id", "=", rec_model), ('is_enable', '=', True)])
node_id = fields.Many2one(
comodel_name="soong.workflow.node",
string="Workflow Node Ref.",
@@ -116,7 +150,8 @@ class SoongWorkflowMixin(models.AbstractModel):
[
("model", "=", self._name),
("res_id", "=", self.id),
("node_btn_id", "=", btn_rec.id),
("node_id", "=", btn_rec.node_id.id),
# ("node_btn_id", "=", btn_rec.id),
]
)
if not record_obj:
@@ -124,12 +159,14 @@ class SoongWorkflowMixin(models.AbstractModel):
{
"model": self._name,
"res_id": self.id,
"node_id": btn_rec.node_id.id,
"workflow_id": btn_rec.workflow_id.id,
"node_btn_id": btn_rec.id,
"done_by": self.env.uid,
"lase_click_date": fields.Datetime.now(),
}
)
record_obj.update({"done_by": self.env.uid, "lase_click_date": fields.Datetime.now()})
record_obj.update({"workflow_id": btn_rec.workflow_id.id, "node_btn_id": btn_rec.id, "done_by": self.env.uid, "lase_click_date": fields.Datetime.now()})
return record_obj
def btn_exec_action(self):
@@ -322,6 +359,7 @@ class SoongWorkflowMixin(models.AbstractModel):
# res = self._add_state_tree_view(view_type, res)
res = self._add_soong_workflow_log(view_type, res, params)
res = self._load_sign_view(view_type, res)
res = self._load_workflow_approver_view(view_type, res)
return res
# 收回
@@ -662,6 +700,32 @@ class SoongWorkflowMixin(models.AbstractModel):
res["arch"] = etree.tostring(arch, encoding="unicode").replace("\t", "")
return res
def _load_workflow_approver_view(self, view_type, res):
arch = etree.fromstring(res["arch"])
if view_type == "form":
sheet_el = arch.xpath("//sheet")
if sheet_el:
sheet_el = sheet_el[0]
else:
sheet_el = etree.Element("sheet")
arch.insert(0, sheet_el)
notebook_el = sheet_el.xpath(".//notebook")
if notebook_el:
notebook_el = notebook_el[0]
else:
notebook_el = etree.Element("notebook")
sheet_el.append(notebook_el)
page_el = etree.Element("page")
page_el.set("string", "审批流程") # 设置页面标签
page_el.set("invisible", "1") # todo domain
field_m2m_el = etree.Element("field")
field_m2m_el.set("name", "workflow_approver_ids")
page_el.append(field_m2m_el)
notebook_el.append(page_el)
res["arch"] = etree.tostring(arch, encoding="unicode").replace("\t", "")
return res
def _update_fields_view(self, view_type, res):
"""
Updates fields attributes.