Skip to content

Commit 5bf416a

Browse files
[MIG] base_kanban_stage: Migration to 19.0
1 parent 882dfbc commit 5bf416a

File tree

6 files changed

+45
-54
lines changed

6 files changed

+45
-54
lines changed

base_kanban_stage/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
{
55
"name": "Kanban - Stage Support",
66
"summary": "Provides stage model and abstract logic for inheritance",
7-
"version": "16.0.1.0.0",
7+
"version": "19.0.1.0.0",
88
"author": "LasLabs, Odoo Community Association (OCA)",
99
"category": "base",
1010
"depends": ["base"],

base_kanban_stage/models/base_kanban_abstract.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,6 @@ def _valid_field_parameter(self, field, name):
111111
# allow tracking on models inheriting from 'base.kanban.stage'
112112
return name == "tracking" or super()._valid_field_parameter(field, name)
113113

114-
def _read_group_stage_ids(self, stages, domain, order):
114+
def _read_group_stage_ids(self, stages, domain):
115115
search_domain = [("res_model_id.model", "=", self._name)]
116-
return stages.search(search_domain, order=order)
116+
return stages.search(search_domain)

base_kanban_stage/models/ir_model.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# Copyright 2019 Eficent Business and IT Consulting Services S.L.
1+
# Copyright 2025 ForgeFlow S.L.
22
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
33

4-
from odoo import _, api, fields, models
4+
from odoo import api, fields, models
55
from odoo.exceptions import UserError
66

77

@@ -17,9 +17,11 @@ class IrModel(models.Model):
1717
def write(self, vals):
1818
if self and "is_kanban" in vals:
1919
if not all(rec.state == "manual" for rec in self):
20-
raise UserError(_("Only custom models can be modified."))
20+
raise UserError(self.env._("Only custom models can be modified."))
2121
if not all(rec.is_kanban <= vals["is_kanban"] for rec in self):
22-
raise UserError(_('Field "Kanban" cannot be changed to "False".'))
22+
raise UserError(
23+
self.env._('Field "Kanban" cannot be changed to "False".')
24+
)
2325
res = super().write(vals)
2426
# setup models; this reloads custom models in registry
2527
self.pool.setup_models(self._cr)
@@ -38,8 +40,8 @@ def _reflect_model_params(self, model):
3840
return vals
3941

4042
@api.model
41-
def _instanciate(self, model_data):
42-
model_class = super()._instanciate(model_data)
43+
def _instanciate_attrs(self, model_data):
44+
model_class = super()._instanciate_attrs(model_data)
4345
if model_data.get("is_kanban") and model_class._name != "base.kanban.abstract":
4446
parents = model_class._inherit or []
4547
parents = [parents] if isinstance(parents, (str,)) else parents
Lines changed: 29 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,47 @@
11
# Copyright 2016-2017 LasLabs Inc.
2-
# Copyright 2019 ForgeFlow.
2+
# Copyright 2025 ForgeFlow.
33
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
44

5-
from collections import deque
6-
7-
from odoo import api, models
5+
from odoo import models
86
from odoo.tests.common import TransactionCase
97

108

119
class BaseKanbanAbstractTester(models.Model):
1210
_name = "base.kanban.abstract.tester"
1311
_description = "base kanban abstract tester"
1412
_inherit = "base.kanban.abstract"
13+
_order = "id asc"
1514

1615

1716
class TestBaseKanbanAbstract(TransactionCase):
18-
def _init_test_model(self, model_cls):
19-
model_cls._build_model(self.registry, self.cr)
20-
model = self.env[model_cls._name]
21-
# setup_models():
22-
model._prepare_setup()
23-
model._setup_base()
24-
model._setup_fields()
25-
model._setup_complete()
26-
# init_models():
27-
self.registry._post_init_queue = deque()
28-
self.registry._foreign_keys = {}
29-
model._auto_init()
30-
model.init()
31-
self.env["ir.model"]._reflect_models([model._name])
32-
self.env["ir.model.fields"]._reflect_fields([model._name])
33-
self.env["ir.model.fields.selection"]._reflect_selections([model._name])
34-
self.env["ir.model.constraint"]._reflect_constraints([model._name])
35-
while self.registry._post_init_queue:
36-
func = self.registry._post_init_queue.popleft()
37-
func()
38-
del self.registry._post_init_queue
39-
del self.registry._foreign_keys
40-
return model
17+
@classmethod
18+
def setUpClass(cls):
19+
super().setUpClass()
4120

42-
def setUp(self):
43-
super().setUp()
21+
# Manually register and build the test model
22+
from odoo.orm import model_classes
23+
24+
registry = cls.env.registry
25+
cr = cls.env.cr
26+
27+
# Build the model if not already in registry
28+
if BaseKanbanAbstractTester._name not in registry.models:
29+
# Add the model definition to registry
30+
model_classes.add_to_registry(registry, BaseKanbanAbstractTester)
4431

45-
self.registry.enter_test_mode(self.cr)
46-
self.old_cursor = self.cr
47-
self.cr = self.registry.cursor()
48-
self.env = api.Environment(self.cr, self.uid, {})
49-
self.test_model = self._init_test_model(BaseKanbanAbstractTester)
32+
# Setup models
33+
registry._setup_models__(cr, [BaseKanbanAbstractTester._name])
5034

35+
# Initialize the model
36+
with cls.muted_registry_logger:
37+
registry.init_models(
38+
cr, [BaseKanbanAbstractTester._name], {}, install=False
39+
)
40+
41+
cls.test_model = cls.env[BaseKanbanAbstractTester._name]
42+
43+
def setUp(self):
44+
super().setUp()
5145
test_model_record = self.env["ir.model"].search(
5246
[
5347
("model", "=", self.test_model._name),
@@ -71,12 +65,8 @@ def setUp(self):
7165
)
7266

7367
def tearDown(self):
74-
self.registry.leave_test_mode()
7568
self.registry[self.test_model._name]._abstract = True
7669
self.registry[self.test_model._name]._auto = False
77-
self.cr = self.old_cursor
78-
self.env = api.Environment(self.cr, self.uid, {})
79-
8070
super().tearDown()
8171

8272
def test_default_stage_id_no_stages(self):
@@ -99,12 +89,11 @@ def test_default_stage_id_available_stages(self):
9989
def test_read_group_stage_ids(self):
10090
"""It should return all corresponding stages in requested sort order"""
10191
result = self.test_model._read_group_stage_ids(
102-
self.env["base.kanban.stage"], None, "id"
92+
self.env["base.kanban.stage"], None
10393
)
10494

10595
expected = self.env["base.kanban.stage"].search(
10696
[("res_model_id.model", "=", self.test_model._name)],
107-
order="id",
10897
)
10998
self.assertEqual(result[0], expected[0])
11099
self.assertEqual(result[1], expected[1])

base_kanban_stage/views/base_kanban_stage.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@
3232
<field name="name">Kanban Stages - Tree View</field>
3333
<field name="model">base.kanban.stage</field>
3434
<field name="arch" type="xml">
35-
<tree name="Kanban Stages">
35+
<list name="Kanban Stages">
3636
<field name="name" />
3737
<field name="res_model_id" />
3838
<field name="sequence" />
39-
</tree>
39+
</list>
4040
</field>
4141
</record>
4242
<record id="base_kanban_stage_view_search" model="ir.ui.view">
@@ -54,7 +54,7 @@
5454
<field name="name">Kanban Stages</field>
5555
<field name="res_model">base.kanban.stage</field>
5656
<field name="type">ir.actions.act_window</field>
57-
<field name="view_mode">tree,form</field>
57+
<field name="view_mode">list,form</field>
5858
</record>
5959
<menuitem
6060
id="base_kanban_stage_root_menu"

base_kanban_stage/views/ir_model_views.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8" ?>
22
<!--
3-
Copyright 2019 Eficent Business and IT Consulting Services S.L.
3+
Copyright 2025 ForgeFlow S.L.
44
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
55
-->
66
<odoo>
@@ -11,7 +11,7 @@
1111
<field name="transient" position="after">
1212
<field
1313
name="is_kanban"
14-
attrs="{'readonly': [('state','!=', 'manual')]}"
14+
readonly="state != 'manual'"
1515
groups="base.group_no_one"
1616
/>
1717
</field>

0 commit comments

Comments
 (0)