product_detailed_type: improve compatibility with demo/test data
It's still not perfect yet, in particular when you install the "stock" module and "product_detailed_type_stock" is not installed yet.
This commit is contained in:
@@ -13,7 +13,9 @@ class ProductTemplate(models.Model):
|
|||||||
('consu', 'Consumable'),
|
('consu', 'Consumable'),
|
||||||
('service', 'Service'),
|
('service', 'Service'),
|
||||||
], string='Product Type', default='consu', required=True, tracking=True)
|
], string='Product Type', default='consu', required=True, tracking=True)
|
||||||
type = fields.Selection(compute='_compute_type', store=True, string="Type")
|
type = fields.Selection(
|
||||||
|
compute='_compute_type', store=True, string="Type", # native string = "Product Type"
|
||||||
|
default=False, required=False)
|
||||||
|
|
||||||
def _detailed_type_mapping(self):
|
def _detailed_type_mapping(self):
|
||||||
return {}
|
return {}
|
||||||
@@ -23,3 +25,16 @@ class ProductTemplate(models.Model):
|
|||||||
type_mapping = self._detailed_type_mapping()
|
type_mapping = self._detailed_type_mapping()
|
||||||
for record in self:
|
for record in self:
|
||||||
record.type = type_mapping.get(record.detailed_type, record.detailed_type)
|
record.type = type_mapping.get(record.detailed_type, record.detailed_type)
|
||||||
|
|
||||||
|
# to ensure compat with test and demo data
|
||||||
|
# It's not perfect, we still have a problem when installing the "stock"
|
||||||
|
# module while product_detailed_type_stock is not installed yet: it creates
|
||||||
|
# products with type = 'product' and with the inherit below, it sets detailed_type = 'product'
|
||||||
|
# but this value is only possible once product_detailed_type_stock is installed. Odoo says:
|
||||||
|
# ValueError: Wrong value for product.template.detailed_type: 'product'
|
||||||
|
@api.model_create_multi
|
||||||
|
def create(self, vals_list):
|
||||||
|
for vals in vals_list:
|
||||||
|
if vals.get('type') and vals['type'] != vals.get('detailed_type'):
|
||||||
|
vals['detailed_type'] = vals['type']
|
||||||
|
return super().create(vals_list)
|
||||||
|
|||||||
1
product_detailed_type/tests/__init__.py
Normal file
1
product_detailed_type/tests/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import test_detailed_type
|
||||||
34
product_detailed_type/tests/test_detailed_type.py
Normal file
34
product_detailed_type/tests/test_detailed_type.py
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# Copyright 2024 Akretion France (http://www.akretion.com/)
|
||||||
|
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
|
from odoo.tests.common import SavepointCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestProductDetailedType(SavepointCase):
|
||||||
|
|
||||||
|
def test_product_detailed_type(self):
|
||||||
|
p1 = self.env['product.product'].create({
|
||||||
|
'name': 'Test 1',
|
||||||
|
'detailed_type': 'service',
|
||||||
|
})
|
||||||
|
self.assertEqual(p1.type, 'service')
|
||||||
|
p2 = self.env['product.product'].create({
|
||||||
|
'name': 'Test 2',
|
||||||
|
'detailed_type': 'consu',
|
||||||
|
})
|
||||||
|
self.assertEqual(p2.type, 'consu')
|
||||||
|
|
||||||
|
def test_product_type_compat(self):
|
||||||
|
p1 = self.env['product.product'].create({
|
||||||
|
'name': 'Test 1',
|
||||||
|
'type': 'service',
|
||||||
|
})
|
||||||
|
self.assertEqual(p1.type, 'service')
|
||||||
|
self.assertEqual(p1.detailed_type, 'service')
|
||||||
|
p2 = self.env['product.product'].create({
|
||||||
|
'name': 'Test 1',
|
||||||
|
'type': 'consu',
|
||||||
|
})
|
||||||
|
self.assertEqual(p2.type, 'consu')
|
||||||
|
self.assertEqual(p2.detailed_type, 'consu')
|
||||||
Reference in New Issue
Block a user