diff --git a/stock_available/__openerp__.py b/stock_available/__openerp__.py index 14dcb7397..f5748a838 100644 --- a/stock_available/__openerp__.py +++ b/stock_available/__openerp__.py @@ -4,7 +4,7 @@ { 'name': 'Stock available to promise', - 'version': '9.0.1.0.0', + 'version': '9.0.1.0.1', "author": "Numérigraphe, Sodexis, Odoo Community Association (OCA)", 'category': 'Warehouse', 'depends': ['stock'], diff --git a/stock_available/models/product_product.py b/stock_available/models/product_product.py index a22951f92..e76a67ee6 100644 --- a/stock_available/models/product_product.py +++ b/stock_available/models/product_product.py @@ -21,8 +21,11 @@ class ProductProduct(models.Model): By default, available to promise = forecasted quantity. - Must be overridden by another module that actually implement - computations.""" + **Each** sub-module **must** override this method in **both** + `product.product` **and** `product.template`, because we can't + decide in advance how to compute the template's quantity from the + variants. + """ for prod in self: prod.immediately_usable_qty = prod.virtual_available diff --git a/stock_available/models/product_template.py b/stock_available/models/product_template.py index a7f1fcc4b..96db9b15f 100644 --- a/stock_available/models/product_template.py +++ b/stock_available/models/product_template.py @@ -12,12 +12,17 @@ class ProductTemplate(models.Model): @api.multi @api.depends('product_variant_ids.immediately_usable_qty') def _immediately_usable_qty(self): - """Compute the quantity using all the variants""" + """No-op implementation of the stock available to promise. + + By default, available to promise = forecasted quantity. + + **Each** sub-module **must** override this method in **both** + `product.product` **and** `product.template`, because we can't + decide in advance how to compute the template's quantity from the + variants. + """ for tmpl in self: - tmpl.immediately_usable_qty = sum( - v.immediately_usable_qty - for v in tmpl.product_variant_ids - ) + tmpl.immediately_usable_qty = tmpl.virtual_available immediately_usable_qty = fields.Float( digits=dp.get_precision('Product Unit of Measure'), diff --git a/stock_available_immediately/__openerp__.py b/stock_available_immediately/__openerp__.py index 5894ba55c..f246cad5a 100644 --- a/stock_available_immediately/__openerp__.py +++ b/stock_available_immediately/__openerp__.py @@ -4,7 +4,7 @@ { "name": "Ignore planned receptions in quantity available to promise", - "version": "9.0.1.0.0", + "version": "9.0.1.1.0", "depends": ["stock_available"], "author": "Camptocamp,Sodexis,Odoo Community Association (OCA)", "license": "AGPL-3", diff --git a/stock_available_immediately/models/__init__.py b/stock_available_immediately/models/__init__.py index 73c7d8277..4fce57c9b 100644 --- a/stock_available_immediately/models/__init__.py +++ b/stock_available_immediately/models/__init__.py @@ -3,3 +3,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import product_product +from . import product_template diff --git a/stock_available_immediately/models/product_product.py b/stock_available_immediately/models/product_product.py index be202f9ad..12e973ed8 100644 --- a/stock_available_immediately/models/product_product.py +++ b/stock_available_immediately/models/product_product.py @@ -11,7 +11,9 @@ class ProductProduct(models.Model): @api.multi @api.depends('virtual_available', 'incoming_qty') def _immediately_usable_qty(self): - """Ignore the incoming goods in the quantity available to promise""" + """Ignore the incoming goods in the quantity available to promise + + This is the same implementation as for templates.""" super(ProductProduct, self)._immediately_usable_qty() for prod in self: prod.immediately_usable_qty -= prod.incoming_qty diff --git a/stock_available_immediately/models/product_template.py b/stock_available_immediately/models/product_template.py new file mode 100644 index 000000000..d8cd5ed34 --- /dev/null +++ b/stock_available_immediately/models/product_template.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module is copyright (C) 2014 Numérigraphe SARL. All Rights Reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp import models, api + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + + @api.multi + @api.depends('virtual_available', 'incoming_qty') + def _immediately_usable_qty(self): + """Ignore the incoming goods in the quantity available to promise + + This is the same implementation as for variants.""" + super(ProductTemplate, self)._immediately_usable_qty() + for tmpl in self: + tmpl.immediately_usable_qty -= tmpl.incoming_qty