diff options
| author | jem-odoo <jem@openerp.com> | 2018-03-02 10:42:07 +0100 |
|---|---|---|
| committer | jem-odoo <jem@openerp.com> | 2018-04-09 10:13:06 +0200 |
| commit | 2d32ff4bb8a31184285cb979e8c491949249d4ca (patch) | |
| tree | 5ab76608ef4f691e40e90e919c9d3cb31668e37f /addons/uom | |
| parent | c71ce46b0eb3509b6805421915a8652bafd3bbbc (diff) | |
[IMP] uom: measurement type on category
In order to restrict some uom field to some uom category, it is required to
add a measurement type on uom.category. Also, this will lessen the use of
master data.
Some technical justifications:
- measure_type is not required, to allow people creating their own
uom.category. Those ones will not interfere with addons business.
- measure_type is unique: we restrict to only one category containing
time, weight, ... in order to avoid mismatch category during conversion.
(2 different weight categories can not be converted).
- measure_type on uom.uom is stored: to allow search and domain on
field, we need to store it. Usually, UoM are not updated every day,
and the number of uom in a database is not that important.
To illustrate this mecanism, a domain is added on
'project_time_mode_id', in project module. This field
is use as timesheet default uom, and we obviously want to
restrict it to time category (timesheeting in liter does
not make sense ...)
Task #1820076
Diffstat (limited to 'addons/uom')
| -rw-r--r-- | addons/uom/data/uom_data.xml | 5 | ||||
| -rw-r--r-- | addons/uom/models/uom_uom.py | 12 | ||||
| -rw-r--r-- | addons/uom/views/uom_uom_views.xml | 1 |
3 files changed, 18 insertions, 0 deletions
diff --git a/addons/uom/data/uom_data.xml b/addons/uom/data/uom_data.xml index f929564b1e4..59a2c41208c 100644 --- a/addons/uom/data/uom_data.xml +++ b/addons/uom/data/uom_data.xml @@ -6,18 +6,23 @@ --> <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">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 diff --git a/addons/uom/models/uom_uom.py b/addons/uom/models/uom_uom.py index 2c01624b5c6..9608894e485 100644 --- a/addons/uom/models/uom_uom.py +++ b/addons/uom/models/uom_uom.py @@ -10,6 +10,17 @@ class UoMCategory(models.Model): _description = 'Product UoM Categories' name = fields.Char('Name', required=True, translate=True) + measure_type = fields.Selection([ + ('unit', 'Units'), + ('weight', 'Weight'), + ('time', 'Time'), + ('length', 'Length'), + ('volume', 'Volume'), + ], string="Type of Measure") + + _sql_constraints = [ + ('uom_category_unique_type', 'UNIQUE(measure_type)', 'You can have only one category per measurement type.'), + ] class UoM(models.Model): @@ -38,6 +49,7 @@ 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!'), diff --git a/addons/uom/views/uom_uom_views.xml b/addons/uom/views/uom_uom_views.xml index 582ae8174c2..59acc96e86f 100644 --- a/addons/uom/views/uom_uom_views.xml +++ b/addons/uom/views/uom_uom_views.xml @@ -68,6 +68,7 @@ <form string="Units of Measure categories"> <group> <field name="name"/> + <field name="measure_type"/> </group> </form> </field> |
