summaryrefslogtreecommitdiff
path: root/addons/uom
diff options
context:
space:
mode:
authorjdoutreloux <jud@odoo.com>2019-11-07 11:23:18 +0000
committerYannick Tivisse <yti@odoo.com>2020-01-13 11:19:17 +0000
commit52ed0be17e80aa6bcc24d59620dd3462b6d577c3 (patch)
tree40eba75a87dd071b8d59747a2c5d4c90a4f26660 /addons/uom
parent34dd971ddc17b4d5eac83f229c587367ed045318 (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.xml14
-rw-r--r--addons/uom/models/uom_uom.py29
-rw-r--r--addons/uom/tests/test_uom.py8
-rw-r--r--addons/uom/views/uom_uom_views.xml2
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>