diff --git a/mrp_operations_extension/README.rst b/mrp_operations_extension/README.rst
index 526e2cf74..d7840cef9 100644
--- a/mrp_operations_extension/README.rst
+++ b/mrp_operations_extension/README.rst
@@ -31,6 +31,8 @@ Configuration
Go to *Settings > Manufacturing* and activate "Manage routings and work orders"
for handling the features of this module.
+Go to *Settings > Manufacturing* and deactivate "Compute Cycles by BoM Quantity"
+in order to compute cycles without BoM product quantity.
Usage
=====
diff --git a/mrp_operations_extension/data/mrp_operations_extension_data.xml b/mrp_operations_extension/data/mrp_operations_extension_data.xml
index 086c3d426..0b5e9673b 100644
--- a/mrp_operations_extension/data/mrp_operations_extension_data.xml
+++ b/mrp_operations_extension/data/mrp_operations_extension_data.xml
@@ -10,4 +10,10 @@
mrp.production.workcenter.line
+
+
+ cycle.by.bom
+
+
+
diff --git a/mrp_operations_extension/models/mrp_bom.py b/mrp_operations_extension/models/mrp_bom.py
index d397d1a73..b6819b139 100644
--- a/mrp_operations_extension/models/mrp_bom.py
+++ b/mrp_operations_extension/models/mrp_bom.py
@@ -13,6 +13,12 @@ class MrpBom(models.Model):
def _prepare_wc_line(self, wc_use, level=0, factor=1):
res = super(MrpBom, self)._prepare_wc_line(
wc_use, level=level, factor=factor)
+ if not self.env['mrp.config.settings']._get_parameter('cycle.by.bom',
+ False):
+ production = self.env.context.get('production')
+ factor = self._factor(production and production.product_qty or 1,
+ self.product_efficiency,
+ self.product_rounding)
cycle = int(math.ceil(factor / (wc_use.cycle_nbr or 1)))
hour = wc_use.hour_nbr * cycle
default_wc_line = wc_use.op_wc_lines.filtered(lambda r: r.default)
diff --git a/mrp_operations_extension/models/mrp_production.py b/mrp_operations_extension/models/mrp_production.py
index cf1bc9b6b..b2ba9c139 100644
--- a/mrp_operations_extension/models/mrp_production.py
+++ b/mrp_operations_extension/models/mrp_production.py
@@ -26,8 +26,8 @@ class MrpProduction(models.Model):
@api.multi
def _action_compute_lines(self, properties=None):
- res = super(MrpProduction, self)._action_compute_lines(
- properties=properties)
+ res = super(MrpProduction, self.with_context(production=self)
+ )._action_compute_lines(properties=properties)
# Assign work orders to each consume line
for product_line in self.product_lines:
product_line.work_order = self.workcenter_lines.filtered(
diff --git a/mrp_operations_extension/models/res_config.py b/mrp_operations_extension/models/res_config.py
index 6433919f1..d7cf55080 100644
--- a/mrp_operations_extension/models/res_config.py
+++ b/mrp_operations_extension/models/res_config.py
@@ -2,7 +2,7 @@
##############################################################################
# For copyright and license notices, see __openerp__.py file in root directory
##############################################################################
-from openerp import fields, models
+from openerp import fields, models, api
class MrpConfigSettings(models.TransientModel):
@@ -11,3 +11,31 @@ class MrpConfigSettings(models.TransientModel):
group_mrp_workers = fields.Boolean(
string='Manage operators in work centers',
implied_group='mrp_operations_extension.group_mrp_workers')
+ cycle_by_bom = fields.Boolean(string="Calc Cycles by BoM Quantity")
+
+ def _get_parameter(self, key, default=False):
+ param_obj = self.env['ir.config_parameter']
+ rec = param_obj.search([('key', '=', key)])
+ return rec or default
+
+ def _write_or_create_param(self, key, value):
+ param_obj = self.env['ir.config_parameter']
+ rec = self._get_parameter(key)
+ if rec:
+ if not value:
+ rec.unlink()
+ else:
+ rec.value = value
+ elif value:
+ param_obj.create({'key': key, 'value': value})
+
+ @api.multi
+ def get_default_parameter_cycle_bom(self):
+ def get_value(key, default=''):
+ rec = self._get_parameter(key)
+ return rec and rec.value or default
+ return {'cycle_by_bom': get_value('cycle.by.bom', False)}
+
+ @api.multi
+ def set_parameter_cycle_bom(self):
+ self._write_or_create_param('cycle.by.bom', self.cycle_by_bom)
diff --git a/mrp_operations_extension/views/res_config_view.xml b/mrp_operations_extension/views/res_config_view.xml
index 1a557458e..f86dafc7f 100644
--- a/mrp_operations_extension/views/res_config_view.xml
+++ b/mrp_operations_extension/views/res_config_view.xml
@@ -11,9 +11,13 @@
+
+
+
+
-
+