增加 审批人员展示
This commit is contained in:
@@ -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="操作时间")
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user