diff --git a/soong_workflow/__manifest__.py b/soong_workflow/__manifest__.py index 09c02de90..7296e6583 100644 --- a/soong_workflow/__manifest__.py +++ b/soong_workflow/__manifest__.py @@ -10,6 +10,7 @@ "security/soong_workflow_security.xml", "security/ir.model.access.csv", "views/menuitem.xml", + "views/soong_approval_users_views.xml", "views/soong_hr_employee_views.xml", "views/soong_user_role_views.xml", "views/soong_workflow_node_views.xml", diff --git a/soong_workflow/models/soong_approval_users.py b/soong_workflow/models/soong_approval_users.py index 1911a1423..95ee95b51 100644 --- a/soong_workflow/models/soong_approval_users.py +++ b/soong_workflow/models/soong_approval_users.py @@ -11,10 +11,24 @@ class SoongApprovalUsers(models.Model): _name = "soong.approval.users" _description = "Soong Approval Users" - workflow_id = fields.Many2one("soong.workflow.mixin", string="Workflow Ref.", ondelete="cascade", required=True) + @api.model + def default_get(self, fields): + res = super().default_get(fields) + if 'res_model_id' in fields and res.get('res_model'): + res['res_model_id'] = self.env['ir.model']._get(res['res_model']).id + return res + + # workflow_id = fields.Many2one("soong.workflow.mixin", string="Workflow Ref.", ondelete="cascade", required=True) + res_model_id = fields.Many2one('ir.model', string='Model', index=True, ondelete='cascade') + res_model = fields.Char('Workflow Ref Model', index=True, related='res_model_id.model', precompute=True, store=True, readonly=True) + res_id = fields.Many2oneReference(string='Workflow Ref.', index=True, model_field='res_model') approval_user_id = fields.Many2one('res.users', string='审批人') approval_user = fields.Many2one('soong.user.role', string='审批角色') approval_user_datetime = fields.Datetime(string='审批时间') approval_user_notice = fields.Char(string='审批意见') approval_user_sign = fields.Char(string='审批签署') approval_user_state = fields.Selection([('will', '待审批')], string='状态') + + @api.model_create_multi + def create(self, vals_list): + return super().create(vals_list) \ No newline at end of file diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py index 80a1907c8..353fdc281 100644 --- a/soong_workflow/models/soong_workflow_mixin.py +++ b/soong_workflow/models/soong_workflow_mixin.py @@ -52,7 +52,7 @@ class SoongWorkflowMixin(models.AbstractModel): compute="_compute_workflow_id", ) - approval_users_ids = fields.One2many("soong.approval.users", "workflow_id", string="审批明细") + approval_users_ids = fields.One2many("soong.approval.users", "res_id", domain=lambda self: [('res_model', '=', self._name)], auto_join=True, string="审批明细") @api.depends("state") def _compute_workflow_id(self): @@ -382,12 +382,12 @@ class SoongWorkflowMixin(models.AbstractModel): if view_type == "form": # Locate the group element - group_el = arch.xpath("//group") + group_el = arch.xpath("//sheet") if group_el: group_el = group_el[0] else: # If no group element exists, create one and add it to the arch - group_el = etree.Element("group") + group_el = etree.Element("sheet") # Insert the group element at the beginning or end of the arch arch.insert(0, group_el) @@ -407,6 +407,8 @@ class SoongWorkflowMixin(models.AbstractModel): # Create the field element for the one2many field field_el = etree.Element("field") field_el.set("name", "approval_users_ids") + field_el_context = {'tree_view_ref': 'soong_workflow.soong_approval_users_search', 'default_res_model_id': self.env['ir.model']._get(self._name).id} + field_el.set("context", str(field_el_context)) # Append the field element to the new page page_el.append(field_el) diff --git a/soong_workflow/views/soong_approval_users_views.xml b/soong_workflow/views/soong_approval_users_views.xml new file mode 100644 index 000000000..fe5ef2886 --- /dev/null +++ b/soong_workflow/views/soong_approval_users_views.xml @@ -0,0 +1,21 @@ + + + + + soong.approval.users.tree + soong.approval.users + + + + + + + + + + + + + + +