diff --git a/product_variant_so_always/__init__.py b/product_variant_so_always/__init__.py new file mode 100755 index 00000000..0650744f --- /dev/null +++ b/product_variant_so_always/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_variant_so_always/__manifest__.py b/product_variant_so_always/__manifest__.py new file mode 100755 index 00000000..95c684d0 --- /dev/null +++ b/product_variant_so_always/__manifest__.py @@ -0,0 +1,22 @@ +{ + 'name': 'Product Variant Always on SO', + 'author': 'Hibou Corp. ', + 'category': 'Hidden', + 'version': '12.0.1.0.0', + 'description': + """ +Product Variant Always on SO +============================ + +The default limit in Odoo to 'always create variants' is 1000, but if you have a product +that needs to use 'always create variants' attributes AND you have too many attributes, +you may wish to have it behave as if it has attributes that + """, + 'depends': [ + 'sale', + ], + 'auto_install': False, + 'data': [ + 'views/product_views.xml', + ], +} diff --git a/product_variant_so_always/models/__init__.py b/product_variant_so_always/models/__init__.py new file mode 100644 index 00000000..23275437 --- /dev/null +++ b/product_variant_so_always/models/__init__.py @@ -0,0 +1 @@ +from . import product \ No newline at end of file diff --git a/product_variant_so_always/models/product.py b/product_variant_so_always/models/product.py new file mode 100644 index 00000000..d8489fa8 --- /dev/null +++ b/product_variant_so_always/models/product.py @@ -0,0 +1,13 @@ +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + always_variant_on_so = fields.Boolean(string='Always create variants on SO Lines') + + def has_dynamic_attributes(self): + self.ensure_one() + if self.always_variant_on_so: + return True + return super(ProductTemplate, self).has_dynamic_attributes() diff --git a/product_variant_so_always/tests/__init__.py b/product_variant_so_always/tests/__init__.py new file mode 100644 index 00000000..6919398d --- /dev/null +++ b/product_variant_so_always/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_creation diff --git a/product_variant_so_always/tests/test_product_creation.py b/product_variant_so_always/tests/test_product_creation.py new file mode 100644 index 00000000..befb9a99 --- /dev/null +++ b/product_variant_so_always/tests/test_product_creation.py @@ -0,0 +1,45 @@ +from odoo.tests import common +from odoo.exceptions import UserError + + +class TestProductCreation(common.TransactionCase): + def setUp(self): + super(TestProductCreation, self).setUp() + self.attrs = [] + + # Create 1000 combinations + for a in range(1, 4): + attribute = self.env['product.attribute'].create({ + 'name': 'Attr ' + str(a), + 'type': 'radio', + 'create_variant': 'always', + }) + self.attrs.append(attribute) + for v in range(1, 11): + self.env['product.attribute.value'].create({ + 'name': 'Value ' + str(v), + 'attribute_id': attribute.id, + }) + # Create 1 more... + self.env['product.attribute.value'].create({ + 'name': 'Value 11', + 'attribute_id': self.attrs[0].id, + }) + + def test_01_product_template(self): + product_tmpl = self.env['product.template'].create({ + 'name': 'Test Product', + 'type': 'product', + }) + attr_line_model = self.env['product.template.attribute.line'] + for a in self.attrs: + attr_line_model.create({ + 'product_tmpl_id': product_tmpl.id, + 'attribute_id': a.id, + 'value_ids': [(6, 0, a.value_ids.ids)], + }) + with self.assertRaises(UserError): + product_tmpl.create_variant_ids() + + product_tmpl.always_variant_on_so = True + product_tmpl.create_variant_ids() diff --git a/product_variant_so_always/views/product_views.xml b/product_variant_so_always/views/product_views.xml new file mode 100644 index 00000000..d28f9f28 --- /dev/null +++ b/product_variant_so_always/views/product_views.xml @@ -0,0 +1,17 @@ + + + + + product.template.product.form.inherit + product.template + + + + + + + + + + + \ No newline at end of file