Merge pull request #108 from agaldona/8.0-cycle_compute

[IMP] mrp_operations_extension: configurable cycle compute
This commit is contained in:
Pedro M. Baeza
2016-04-26 22:08:59 +02:00
6 changed files with 50 additions and 4 deletions

View File

@@ -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
=====

View File

@@ -10,4 +10,10 @@
<field name="object">mrp.production.workcenter.line</field>
</record>
</data>
<data noupdate="1">
<record forcecreate="True" id="config_parameter_cycle_by_bom" model="ir.config_parameter">
<field name="key">cycle.by.bom</field>
<field name="value" eval="True"/>
</record>
</data>
</openerp>

View File

@@ -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)

View File

@@ -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(

View File

@@ -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)

View File

@@ -11,9 +11,13 @@
<field name="group_mrp_workers" class="oe_inline"/>
<label for="group_mrp_workers"/>
</div>
<div>
<field name="cycle_by_bom" class="oe_inline"/>
<label for="cycle_by_bom"/>
</div>
</xpath>
</field>
</record>
</data>
</openerp>