diff options
| author | jdoutreloux <jud@odoo.com> | 2019-11-07 11:23:18 +0000 |
|---|---|---|
| committer | Yannick Tivisse <yti@odoo.com> | 2020-01-13 11:19:17 +0000 |
| commit | 52ed0be17e80aa6bcc24d59620dd3462b6d577c3 (patch) | |
| tree | 40eba75a87dd071b8d59747a2c5d4c90a4f26660 /addons/uom | |
| parent | 34dd971ddc17b4d5eac83f229c587367ed045318 (diff) | |
[IMP] uom : remove 'measure_type' field
This removes the measure_type field which has become unused and
causes issues when users try to add new uom categories.
Task-2043927
closes odoo/odoo#41056
Related: odoo/enterprise#6945
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Diffstat (limited to 'addons/uom')
| -rw-r--r-- | addons/uom/data/uom_data.xml | 14 | ||||
| -rw-r--r-- | addons/uom/models/uom_uom.py | 29 | ||||
| -rw-r--r-- | addons/uom/tests/test_uom.py | 8 | ||||
| -rw-r--r-- | addons/uom/views/uom_uom_views.xml | 2 |
4 files changed, 23 insertions, 30 deletions
diff --git a/addons/uom/data/uom_data.xml b/addons/uom/data/uom_data.xml index badda0920c1..aab34756533 100644 --- a/addons/uom/data/uom_data.xml +++ b/addons/uom/data/uom_data.xml @@ -6,23 +6,18 @@ --> <record id="product_uom_categ_unit" model="uom.category"> <field name="name">Unit</field> - <field name="measure_type">unit</field> </record> <record id="product_uom_categ_kgm" model="uom.category"> <field name="name">Weight</field> - <field name="measure_type">weight</field> </record> <record id="uom_categ_wtime" model="uom.category"> <field name="name">Working Time</field> - <field name="measure_type">working_time</field> </record> <record id="uom_categ_length" model="uom.category"> <field name="name">Length / Distance</field> - <field name="measure_type">length</field> </record> <record id="product_uom_categ_vol" model="uom.category"> <field name="name">Volume</field> - <field name="measure_type">volume</field> </record> <!-- Resource: uom.uom @@ -31,6 +26,7 @@ <field name="category_id" ref="product_uom_categ_unit"/> <field name="name">Units</field> <field name="factor" eval="1.0"/> + <field name="uom_type">reference</field> <field name="rounding" eval="0.001"/> </record> <record id="product_uom_dozen" model="uom.uom"> @@ -44,6 +40,7 @@ <field name="category_id" ref="product_uom_categ_kgm"/> <field name="name">kg</field> <field name="factor" eval="1"/> + <field name="uom_type">reference</field> <field name="rounding" eval="0.001"/> </record> <record id="product_uom_gram" model="uom.uom"> @@ -55,12 +52,13 @@ <record id="product_uom_day" model="uom.uom"> <field name="name">Days</field> - <field eval="uom_categ_wtime" name="category_id"/> + <field name="category_id" ref="uom_categ_wtime"/> <field name="factor" eval="1.0"/> + <field name="uom_type">reference</field> </record> <record id="product_uom_hour" model="uom.uom"> <field name="name">Hours</field> - <field eval="uom_categ_wtime" name="category_id"/> + <field name="category_id" ref="uom_categ_wtime"/> <field name="factor" eval="8.0"/> <field name="uom_type">smaller</field> </record> @@ -76,6 +74,7 @@ <field name="category_id" ref="uom_categ_length"/> <field name="name">m</field> <field name="factor" eval="1.0"/> + <field name="uom_type">reference</field> </record> <record id="product_uom_km" model="uom.uom"> <field name="category_id" ref="uom_categ_length"/> @@ -93,6 +92,7 @@ <field name="name">Liters</field> <field name="category_id" ref="product_uom_categ_vol"/> <field name="factor">1.0</field> + <field name="uom_type">reference</field> </record> <!--Americanization of units of measure--> diff --git a/addons/uom/models/uom_uom.py b/addons/uom/models/uom_uom.py index 5d18143b4f3..c5d105c0fb2 100644 --- a/addons/uom/models/uom_uom.py +++ b/addons/uom/models/uom_uom.py @@ -10,20 +10,11 @@ class UoMCategory(models.Model): _description = 'Product UoM Categories' name = fields.Char('Unit of Measure Category', required=True, translate=True) - measure_type = fields.Selection([ - ('unit', 'Default Units'), - ('weight', 'Default Weight'), - ('working_time', 'Default Working Time'), - ('length', 'Default Length'), - ('volume', 'Default Volume'), - ], string="Type of Measure") - - _sql_constraints = [ - ('uom_category_unique_type', 'UNIQUE(measure_type)', 'You can have only one category per measurement type.'), - ] def unlink(self): - if self.filtered(lambda categ: categ.measure_type == 'working_time'): + uom_categ_unit = self.env.ref('uom.product_uom_categ_unit') + uom_categ_wtime = self.env.ref('uom.uom_categ_wtime') + if any(categ.id in (uom_categ_unit + uom_categ_wtime).ids for categ in self): raise UserError(_("You cannot delete this UoM Category as it is used by the system.")) return super(UoMCategory, self).unlink() @@ -54,7 +45,6 @@ class UoM(models.Model): ('reference', 'Reference Unit of Measure for this category'), ('smaller', 'Smaller than the reference Unit of Measure')], 'Type', default='reference', required=1) - measure_type = fields.Selection(string="Type of measurement category", related='category_id.measure_type', store=True, readonly=True) _sql_constraints = [ ('factor_gt_zero', 'CHECK (factor!=0)', 'The conversion ratio for a unit of measure cannot be 0!'), @@ -93,6 +83,15 @@ class UoM(models.Model): if uom_data['uom_count'] > 1: raise ValidationError(_("UoM category %s should only have one reference unit of measure.") % (self.env['uom.category'].browse(uom_data['category_id']).name,)) + @api.constrains('category_id') + def _validate_uom_category(self): + for uom in self: + reference_uoms = self.env['uom.uom'].search([ + ('category_id', '=', uom.category_id.id), + ('uom_type', '=', 'reference')]) + if len(reference_uoms) > 1: + raise ValidationError(_("UoM category %s should only have one reference unit of measure.") % (self.category_id.name)) + @api.model_create_multi def create(self, vals_list): for values in vals_list: @@ -108,7 +107,9 @@ class UoM(models.Model): return super(UoM, self).write(values) def unlink(self): - if self.filtered(lambda uom: uom.measure_type == 'working_time'): + uom_categ_unit = self.env.ref('uom.product_uom_categ_unit') + uom_categ_wtime = self.env.ref('uom.uom_categ_wtime') + if any(uom.category_id.id in (uom_categ_unit + uom_categ_wtime).ids and uom.uom_type == 'reference' for uom in self): raise UserError(_("You cannot delete this UoM as it is used by the system. You should rather archive it.")) return super(UoM, self).unlink() diff --git a/addons/uom/tests/test_uom.py b/addons/uom/tests/test_uom.py index 935bb6a12cb..48728b18bcd 100644 --- a/addons/uom/tests/test_uom.py +++ b/addons/uom/tests/test_uom.py @@ -51,7 +51,7 @@ class TestUom(TransactionCase): def test_30_reference_uniqueness(self): """ Check the uniqueness of the reference UoM in a category """ - time_category = self.env['uom.category'].search([('measure_type', '=', 'working_time')], limit=1) + time_category = self.env.ref('uom.product_uom_categ_unit') with self.assertRaises(ValidationError): self.env['uom.uom'].create({ @@ -62,12 +62,6 @@ class TestUom(TransactionCase): 'category_id': time_category.id }) - def test_31_reference_uniqueness(self): - """ Check the uniqueness of the reference UoM in a category """ - time_category = self.env['uom.category'].search([('measure_type', '=', 'working_time')], limit=1) - with self.assertRaises(ValidationError): - self.env['uom.uom'].search([('measure_type', '=', 'unit'), ('uom_type', '=', 'reference')]).category_id = time_category - def test_40_custom_uom(self): """ A custom UoM is an UoM in a category without measurement type. It should behave like a normal UoM """ category = self.env['uom.category'].create({ diff --git a/addons/uom/views/uom_uom_views.xml b/addons/uom/views/uom_uom_views.xml index 84154a055f7..cf835c1dfb1 100644 --- a/addons/uom/views/uom_uom_views.xml +++ b/addons/uom/views/uom_uom_views.xml @@ -90,7 +90,6 @@ <sheet> <group> <field name="name"/> - <field name="measure_type"/> </group> </sheet> </form> @@ -103,7 +102,6 @@ <field name="arch" type="xml"> <tree string="Units of Measure categories" editable="bottom"> <field name="name"/> - <field name="measure_type" groups="base.group_no_one"/> </tree> </field> </record> |
