diff --git a/soong_workflow/__manifest__.py b/soong_workflow/__manifest__.py
index 47431aae0..2914b335a 100644
--- a/soong_workflow/__manifest__.py
+++ b/soong_workflow/__manifest__.py
@@ -30,7 +30,7 @@
"views/soong_workflow_inspector_views.xml",
"views/soong_workflow_log_views.xml",
"views/soong_workflow_record_copy_views.xml",
- "views/view_change_node_wizard.xml",
+ "wizard/change_node_wizard_views.xml",
"wizard/soong_bounced_wizard_views.xml",
"wizard/soong_workflow_comment_wizard_view.xml",
"wizard/soong_workflow_apostille_wizard_view.xml",
diff --git a/soong_workflow/models/soong_workflow_link.py b/soong_workflow/models/soong_workflow_link.py
index c275a4aec..64bc8fe1d 100644
--- a/soong_workflow/models/soong_workflow_link.py
+++ b/soong_workflow/models/soong_workflow_link.py
@@ -76,3 +76,8 @@ class SoongWorkflowLink(models.Model):
if rec.state == self.node_from.node_name:
rec.state = self.node_to.node_name
return True
+
+class ChangeNode(models.Model):
+ _name = "change.node"
+
+ name = fields.Char(string="Name")
diff --git a/soong_workflow/models/soong_workflow_record.py b/soong_workflow/models/soong_workflow_record.py
index 381023234..c7f26e12b 100644
--- a/soong_workflow/models/soong_workflow_record.py
+++ b/soong_workflow/models/soong_workflow_record.py
@@ -157,24 +157,28 @@ class SoongWorkflowRecord(models.Model):
}
}
- def action_open_change_node_wizard(self):
+ def change_node_wizard(self):
self.ensure_one()
- view = self.env.ref('soong_workflow.view_change_node_wizard_form')
+ record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
+ node_ids = self.env["soong.workflow.node"].search([('workflow_id', '=', record_id.workflow_id.id)])
+ if record_id:
+ state_list = [i.node_name for i in node_ids.sorted('sequence')]
+ for name in state_list:
+ self.env['change.node'].create({
+ 'name': name
+ })
return {
'type': 'ir.actions.act_window',
'name': _('更改当前节点'),
- 'res_model': 'soong.workflow.record',
- 'res_id': self.id,
+ 'res_model': 'change.node.wizard',
'view_mode': 'form',
- 'view_id': view.id,
'target': 'new',
+ 'context':{
+ 'default_res_model': self.res_model,
+ 'default_res_id': self.res_id,
+ }
}
- def action_confirm(self):
- """Close the popup; keep logic minimal as requested."""
- self.ensure_one()
- return {'type': 'ir.actions.act_window_close'}
-
def _get_valid_employee_for_user(self):
user = self.env.user
employee = user.employee_ids
diff --git a/soong_workflow/security/ir.model.access.csv b/soong_workflow/security/ir.model.access.csv
index 9a3e80499..57a6e20f7 100644
--- a/soong_workflow/security/ir.model.access.csv
+++ b/soong_workflow/security/ir.model.access.csv
@@ -51,7 +51,8 @@ access_soong_workflow_line,soong_workflow_line,model_soong_workflow_line,soong_w
access_project_project_line,project_project_line,model_project_project_line,soong_workflow.group_soong_workflow_user,1,1,1,1
access_soong_bounced_wizard,soong_bounced_wizard,model_soong_bounced_wizard,base.group_user,1,1,1,1
access_workflow_line_wizard,workflow_line_wizard,model_workflow_line_wizard,soong_workflow.group_soong_workflow_user,1,1,1,1
-access_change_node_wizard,change_node_wizard,model_change_node_wizard,soong_workflow.group_soong_workflow_user,1,1,1,1
access_change_opinions_wizard,change_opinions_wizard,model_change_opinions_wizard,soong_workflow.group_soong_workflow_user,1,1,1,1
access_soong_workflow_log2_wizard,soong_workflow_log2_wizard,model_soong_workflow_log2_wizard,soong_workflow.group_soong_workflow_user,1,1,1,1
-access_soong_workflow_log2_line,soong_workflow_log2_line,model_soong_workflow_log2_line,soong_workflow.group_soong_workflow_user,1,1,1,1
\ No newline at end of file
+access_soong_workflow_log2_line,soong_workflow_log2_line,model_soong_workflow_log2_line,soong_workflow.group_soong_workflow_user,1,1,1,1
+access_change_node,change_node,model_change_node,soong_workflow.group_soong_workflow_user,1,1,1,1
+access_change_node_wizard,change_node_wizard,model_change_node_wizard,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/soong_workflow/views/soong_workflow_record.xml b/soong_workflow/views/soong_workflow_record.xml
index 3449eec7a..aaf8aaa46 100644
--- a/soong_workflow/views/soong_workflow_record.xml
+++ b/soong_workflow/views/soong_workflow_record.xml
@@ -159,15 +159,16 @@
-
-
+
+
+
diff --git a/soong_workflow/wizard/__init__.py b/soong_workflow/wizard/__init__.py
index 6a291ef37..e9ed5ecaa 100644
--- a/soong_workflow/wizard/__init__.py
+++ b/soong_workflow/wizard/__init__.py
@@ -11,4 +11,5 @@ from . import workflow_line_wizard
from . import soong_bounced_wizard
from . import change_opinions_wizard
from . import soong_workflow_log2_wizard
+from . import change_node_wizard
diff --git a/soong_workflow/wizard/change_node_wizard.py b/soong_workflow/wizard/change_node_wizard.py
new file mode 100644
index 000000000..122635154
--- /dev/null
+++ b/soong_workflow/wizard/change_node_wizard.py
@@ -0,0 +1,22 @@
+from odoo import fields, models, api
+from odoo.exceptions import UserError, ValidationError
+from datetime import datetime, date, time, timedelta
+
+
+class ChangeNodeWizard(models.Model):
+ _name = 'change.node.wizard'
+ _description = '变更节点'
+
+ res_model = fields.Char(string="模型")
+ res_id = fields.Integer(string="记录ID")
+ change_node_id = fields.Many2one('change.node', string="变更节点")
+
+ @api.onchange('change_node_id')
+ def _onchange_change_node_id(self):
+ if self.change_node_id:
+ record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
+ if record_id:
+ record_id.state = self.change_node_id.name
+
+ def action_confirm(self):
+ self.env['change.node'].search([]).unlink()
\ No newline at end of file
diff --git a/soong_workflow/views/view_change_node_wizard.xml b/soong_workflow/wizard/change_node_wizard_views.xml
similarity index 88%
rename from soong_workflow/views/view_change_node_wizard.xml
rename to soong_workflow/wizard/change_node_wizard_views.xml
index cfd955c44..0d47923c6 100644
--- a/soong_workflow/views/view_change_node_wizard.xml
+++ b/soong_workflow/wizard/change_node_wizard_views.xml
@@ -2,13 +2,14 @@
change.node.wizard.form
- soong.workflow.record
+ change.node.wizard