diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py index 1ea302120..e89cd88ad 100644 --- a/soong_workflow/models/soong_workflow_mixin.py +++ b/soong_workflow/models/soong_workflow_mixin.py @@ -337,7 +337,7 @@ class SoongWorkflowMixin(models.AbstractModel): current_user_id = self.env.user.id if self.state in ['申请人', '拟办']: if not record_obj: - self.env["soong.workflow.record"].create({ + values = { "code": record_id.code, "res_model": rec._name, "department_id": rec.department_id.id, @@ -348,7 +348,28 @@ class SoongWorkflowMixin(models.AbstractModel): "users_ids": [(4, current_user_id)], "employee_ids": self.env.user.employee_id, "write_date2": fields.Datetime.now(), - }) + } + # 查找匹配的字段 + matched_fields = self.find_fields_by_string(record_id) + # 提取"事由"或"正文"字段的值 + text_fields = [f for f in matched_fields if + '事由' in f['field_string'] or '正文' in f['field_string']] + if text_fields: + # 优先使用"事由"字段,没有则使用第一个"正文"字段 + reason_field = next((f for f in text_fields if '事由' in f['field_string']), text_fields[0]) + values["text"] = getattr(rec, reason_field['field_name'], '') + + # 提取"附件"字段的值 + attachment_fields = [f for f in matched_fields if '附件' in f['field_string']] + if attachment_fields and attachment_fields[0]['field_type'] in ['many2many', 'one2many']: + # 处理附件关系字段 + attachment_field = attachment_fields[0] + attachment_ids = getattr(rec, attachment_field['field_name'], []) + if attachment_ids: + values["documents_ids"] = [(6, 0, attachment_ids.ids)] + # 创建工作流记录 + self.env["soong.workflow.record"].create(values) + if record_obj: record_obj.update({"workflow_id": rec.workflow_id.id, "node_id": rec.node_id.id, @@ -356,6 +377,30 @@ class SoongWorkflowMixin(models.AbstractModel): "write_date2": fields.Datetime.now(), }) + def find_fields_by_string(self,record_id): + """ + 根据模型名称和记录ID查找字段,其string属性包含特定关键词 + :param record_id: 记录id + :return: 匹配的字段信息列表 + """ + # 定义要查找的关键词 + keywords = ['正文', '事由', '附件'] + # 获取模型的所有字段 + fields = record_id.fields_get() + # 存储匹配的字段信息 + matched_fields = [] + # 遍历所有字段,检查string属性 + for field_name, field_attrs in fields.items(): + field_string = field_attrs.get('string', '') + # 检查字段的string是否包含任何关键词 + if any(keyword in field_string for keyword in keywords): + matched_fields.append({ + 'field_name': field_name, + 'field_string': field_string, + 'field_type': field_attrs.get('type'), + }) + return matched_fields + def unlink(self): self.mapped("log_ids").unlink() self.mapped("log_ids2").unlink() diff --git a/soong_workflow/models/soong_workflow_record.py b/soong_workflow/models/soong_workflow_record.py index 894a55a7b..51dfb22d7 100644 --- a/soong_workflow/models/soong_workflow_record.py +++ b/soong_workflow/models/soong_workflow_record.py @@ -35,6 +35,8 @@ class SoongWorkflowRecord(models.Model): res_id = fields.Integer(string="Res ID", required=True) users_ids = fields.Many2many('res.users', string="用户") employee_ids = fields.Many2many('hr.employee', string="当前经办人") + text = fields.Text(string="正文") + documents_ids = fields.Many2many('ir.attachment', string="附件") workflow_id = fields.Many2one(comodel_name="soong.workflow", string="类型", ondelete="restrict") node_id = fields.Many2one(comodel_name="soong.workflow.node", string="当前节点") company_id = fields.Many2one(related="create_uid.company_id", string="公司") diff --git a/soong_workflow/views/soong_workflow_record.xml b/soong_workflow/views/soong_workflow_record.xml index 112cd6d01..8a9d19dbc 100644 --- a/soong_workflow/views/soong_workflow_record.xml +++ b/soong_workflow/views/soong_workflow_record.xml @@ -9,7 +9,8 @@ - + + @@ -35,6 +36,8 @@ + +