From 42d3e2419a01fb57531c404074bbb8bdaed117a0 Mon Sep 17 00:00:00 2001
From: John Walsh <John.Walsh@interclean.com>
Date: Wed, 23 Sep 2015 12:27:50 -0700
Subject: [PATCH 01/10] [ADD] mrp_mto_with_stock - initial commit

---
 mrp_mto_with_stock/__init__.py        | 18 ++++++
 mrp_mto_with_stock/__openerp__.py     | 47 +++++++++++++++
 mrp_mto_with_stock/models/__init__.py | 19 ++++++
 mrp_mto_with_stock/models/mrp.py      | 86 +++++++++++++++++++++++++++
 mrp_mto_with_stock/models/stock.py    | 17 ++++++
 5 files changed, 187 insertions(+)
 create mode 100644 mrp_mto_with_stock/__init__.py
 create mode 100644 mrp_mto_with_stock/__openerp__.py
 create mode 100644 mrp_mto_with_stock/models/__init__.py
 create mode 100644 mrp_mto_with_stock/models/mrp.py
 create mode 100644 mrp_mto_with_stock/models/stock.py

diff --git a/mrp_mto_with_stock/__init__.py b/mrp_mto_with_stock/__init__.py
new file mode 100644
index 00000000000..d0c2e2f3710
--- /dev/null
+++ b/mrp_mto_with_stock/__init__.py
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see http://www.gnu.org/licenses/.
+#
+##############################################################################
+import models
diff --git a/mrp_mto_with_stock/__openerp__.py b/mrp_mto_with_stock/__openerp__.py
new file mode 100644
index 00000000000..5e408e726cc
--- /dev/null
+++ b/mrp_mto_with_stock/__openerp__.py
@@ -0,0 +1,47 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see http://www.gnu.org/licenses/.
+#
+##############################################################################
+{
+    'name': "mrp_mto_with_stock",
+
+    'summary': """
+        Fix Manufacturing orders to pull from stock until qty is zero,
+        and then create a procurement for them""",
+
+    'description': """
+        Long description of module's purpose
+    """,
+
+    'author': "John Walsh",
+    'website': "http://github.com/michaeljohn32",
+
+    # Categories can be used to filter modules in modules listing
+    # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
+    # for the full list
+    'category': 'Hidden/Dependency',
+    'version': '0.1',
+
+    # any module necessary for this one to work correctly
+    'depends': ['mrp', 'stock_mts_mto_rule'],
+
+    # always loaded
+    'data': [
+    ],
+    # only loaded in demonstration mode
+    'demo': [
+    ],
+}
diff --git a/mrp_mto_with_stock/models/__init__.py b/mrp_mto_with_stock/models/__init__.py
new file mode 100644
index 00000000000..e9ebf62ff21
--- /dev/null
+++ b/mrp_mto_with_stock/models/__init__.py
@@ -0,0 +1,19 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+#    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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see http://www.gnu.org/licenses/.
+#
+##############################################################################
+import stock
+import mrp
diff --git a/mrp_mto_with_stock/models/mrp.py b/mrp_mto_with_stock/models/mrp.py
new file mode 100644
index 00000000000..cec522e6ce7
--- /dev/null
+++ b/mrp_mto_with_stock/models/mrp.py
@@ -0,0 +1,86 @@
+# -*- encoding: utf-8 -*-
+from openerp import fields, models, api
+import pdb
+import logging
+_logger = logging.getLogger(__name__)
+
+class mrp_production(models.Model):
+    _inherit = 'mrp.production'
+
+#    @api.model
+#    def _make_consume_line_from_data(self, production, product, uom_id, qty, uos_id, uos_qty):
+#        '''Confirms stock move or put it in waiting if it's linked to another move.
+#        @returns list of ids'''
+#        pdb.set_trace()
+#        # change the qty to make two moves (if needed)
+#        res = super(mrp_production, self)._make_consume_line_from_data(production, product, uom_id, uos_id, uos_qty)
+#        return res
+    @api.one
+    def action_confirm(self):
+        '''Confirms stock move or put it in waiting if it's linked to another move.
+        @returns list of ids'''
+#        pdb.set_trace()
+        # change the qty to make two moves (if needed)
+        res = super(mrp_production, self).action_confirm()
+        # try to assign moves (and generate procurements!)
+        self.action_assign()
+        return res
+
+    @api.one
+    def action_assign(self):
+        '''Reserves available products to the production order
+        but also creates procurements for more items if we 
+        cannot reserve enough (MTO with stock)
+        @returns list of ids'''
+        # reserve all that is available
+        res = super(mrp_production, self).action_assign()
+        mtos_route = self.env.ref('stock_mts_mto_rule.route_mto_mts')
+        for move in self.move_lines:
+            if move.state == 'confirmed' and mtos_route.id in move.product_id.route_ids.ids:
+                #This move is waiting availability
+
+                #create a domain
+                #TODO: check other possible states confirmed/exception?
+                domain = [('product_id','=', move.product_id.id),('state','=','running'),('move_dest_id','=',move.id)]
+                if move.group_id:
+                    domain.append(('group_id','=',move.group_id.id))
+                procurement = self.env['procurement.order'].search(domain)
+                if not procurement:
+                    # we need to create a procurement
+                    qty_to_procure = move.remaining_qty - move.reserved_availability
+                    proc_dict = self._prepare_mto_procurement(move, qty_to_procure)
+                    procurement = self.env['procurement.order'].create(proc_dict)
+        return res
+    
+    def _prepare_mto_procurement(self, move, qty):
+        '''Prepares a procurement for a MTO move
+        using similar logic to /stock/stock.py/class stock_move/_prepare_procurement_from_move()
+        
+        '''
+        origin = ((move.group_id and (move.group_id.name) + ":") or "") + ((move.name and move.name + ":") or "") + ('MTO -> Production')
+        group_id = move.group_id and move.group_id.id or False
+
+        route_ids = [self.env.ref('stock.route_warehouse0_mto')]
+        return{
+            'name': move.name + ':' + str(move.id),
+            'origin': origin,
+            'company_id': move.company_id and move.company_id.id or False,
+            'date_planned': move.date,
+            'product_id': move.product_id.id,
+            'product_qty': qty,
+            'product_uom': move.product_uom.id,
+            'product_uos_qty': qty, #FIXME: (move.product_uos and move.product_uos_qty) or move.product_uom_qty,
+            'product_uos': move.product_uom.id, #FIXME:(move.product_uos and move.product_uos.id) or move.product_uom.id,
+            'location_id': move.location_id.id,
+            'move_dest_id': move.id,
+            'group_id': group_id,
+            'route_ids':[(4, x.id) for x in route_ids],
+            'warehouse_id': move.warehouse_id.id or (move.picking_type_id and move.picking_type_id.warehouse_id.id or False),
+            'priority': move.priority,
+        }
+
+
+
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/mrp_mto_with_stock/models/stock.py b/mrp_mto_with_stock/models/stock.py
new file mode 100644
index 00000000000..f67c7b52200
--- /dev/null
+++ b/mrp_mto_with_stock/models/stock.py
@@ -0,0 +1,17 @@
+# -*- encoding: utf-8 -*-
+from openerp import fields, models, api
+import pdb
+
+class stock_move(models.Model):
+    _inherit = 'stock.move'
+
+    @api.multi
+    def action_confirm(self):
+        '''Confirms stock move or put it in waiting if it's linked to another move.
+        @returns list of ids'''
+        res = super(stock_move, self).action_confirm()
+        return res
+
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+

From 7c02c0147fd25725a552e9bc1869e7d25b903555 Mon Sep 17 00:00:00 2001
From: lreficent <lois.rilo@eficent.com>
Date: Wed, 26 Apr 2017 18:38:39 +0200
Subject: [PATCH 02/10] [9.0][IMP] mrp_mto_with_stock: adapt to OCA and minor
 fixes.

---
 mrp_mto_with_stock/README.rst         | 70 +++++++++++++++++++++
 mrp_mto_with_stock/__init__.py        | 24 ++-----
 mrp_mto_with_stock/__openerp__.py     | 61 +++++-------------
 mrp_mto_with_stock/models/__init__.py | 25 ++------
 mrp_mto_with_stock/models/mrp.py      | 91 ++++++++++++---------------
 mrp_mto_with_stock/models/stock.py    | 17 -----
 6 files changed, 137 insertions(+), 151 deletions(-)
 create mode 100644 mrp_mto_with_stock/README.rst
 delete mode 100644 mrp_mto_with_stock/models/stock.py

diff --git a/mrp_mto_with_stock/README.rst b/mrp_mto_with_stock/README.rst
new file mode 100644
index 00000000000..a065cad4aee
--- /dev/null
+++ b/mrp_mto_with_stock/README.rst
@@ -0,0 +1,70 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+   :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+   :alt: License: AGPL-3
+
+==================
+MRP MTO with Stock
+==================
+
+This module extends the functionality of Manufacturing to support the creation
+of procurements when there is no stock available. This allow you to pull from
+stock until the quantity on hand is zero, and then create a procurement
+for fulfill the MO requirements.
+
+Configuration
+=============
+
+To configure this module, you need to:
+
+#. Go to the products you want to follow this behaviour.
+#. In the view form got to the tab *Inventory* and check the box for the
+   route *Make To Order + Make To Stock*.
+
+Usage
+=====
+
+To use this module, you need to:
+
+#. Go to *Manufacturing* and create a Manufacturing Order.
+#. Click on *Confirm Production*.
+
+.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
+   :alt: Try me on Runbot
+   :target: https://runbot.odoo-community.org/runbot/129/9.0
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues
+<https://github.com/OCA/manufacture/issues>`_. In case of trouble, please
+check there if your issue has already been reported. If you spotted it first,
+help us smash it by providing detailed and welcomed feedback.
+
+Credits
+=======
+
+Images
+------
+
+* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
+
+Contributors
+------------
+
+* John Walsh <?>
+* Lois Rilo <lois.rilo@eficent.com>
+
+Maintainer
+----------
+
+.. image:: https://odoo-community.org/logo.png
+   :alt: Odoo Community Association
+   :target: https://odoo-community.org
+
+This module is maintained by the OCA.
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+To contribute to this module, please visit https://odoo-community.org.
diff --git a/mrp_mto_with_stock/__init__.py b/mrp_mto_with_stock/__init__.py
index d0c2e2f3710..a7129c69a68 100644
--- a/mrp_mto_with_stock/__init__.py
+++ b/mrp_mto_with_stock/__init__.py
@@ -1,18 +1,6 @@
-# -*- encoding: utf-8 -*-
-##############################################################################
-#
-#    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 General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see http://www.gnu.org/licenses/.
-#
-##############################################################################
-import models
+# -*- coding: utf-8 -*-
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+# Copyright 2015 John Walsh
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import models
diff --git a/mrp_mto_with_stock/__openerp__.py b/mrp_mto_with_stock/__openerp__.py
index 5e408e726cc..3235afb03d4 100644
--- a/mrp_mto_with_stock/__openerp__.py
+++ b/mrp_mto_with_stock/__openerp__.py
@@ -1,47 +1,18 @@
-# -*- encoding: utf-8 -*-
-##############################################################################
-#
-#    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 General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see http://www.gnu.org/licenses/.
-#
-##############################################################################
-{
-    'name': "mrp_mto_with_stock",
-
-    'summary': """
-        Fix Manufacturing orders to pull from stock until qty is zero,
-        and then create a procurement for them""",
-
-    'description': """
-        Long description of module's purpose
-    """,
-
-    'author': "John Walsh",
-    'website': "http://github.com/michaeljohn32",
+# -*- coding: utf-8 -*-
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+# Copyright 2015 John Walsh
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
-    # Categories can be used to filter modules in modules listing
-    # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
-    # for the full list
-    'category': 'Hidden/Dependency',
-    'version': '0.1',
-
-    # any module necessary for this one to work correctly
-    'depends': ['mrp', 'stock_mts_mto_rule'],
-
-    # always loaded
-    'data': [
-    ],
-    # only loaded in demonstration mode
-    'demo': [
-    ],
+{
+    "name": "MRP MTO with Stock",
+    "summary": "Fix Manufacturing orders to pull from stock until qty is "
+               "zero, and then create a procurement for them.",
+    "author": "John Walsh, Eficent, Odoo Community Association (OCA)",
+    "website": "https://odoo-community.org/",
+    "category": "Manufacturing",
+    "version": "9.0.1.0.0",
+    "license": "AGPL-3",
+    "application": False,
+    "installable": True,
+    "depends": ["mrp", "stock_mts_mto_rule"],
 }
diff --git a/mrp_mto_with_stock/models/__init__.py b/mrp_mto_with_stock/models/__init__.py
index e9ebf62ff21..f5102a7f2e9 100644
--- a/mrp_mto_with_stock/models/__init__.py
+++ b/mrp_mto_with_stock/models/__init__.py
@@ -1,19 +1,6 @@
-# -*- encoding: utf-8 -*-
-##############################################################################
-#
-#    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 General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see http://www.gnu.org/licenses/.
-#
-##############################################################################
-import stock
-import mrp
+# -*- coding: utf-8 -*-
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+# Copyright 2015 John Walsh
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import mrp
diff --git a/mrp_mto_with_stock/models/mrp.py b/mrp_mto_with_stock/models/mrp.py
index cec522e6ce7..a2d5565b77f 100644
--- a/mrp_mto_with_stock/models/mrp.py
+++ b/mrp_mto_with_stock/models/mrp.py
@@ -1,67 +1,62 @@
-# -*- encoding: utf-8 -*-
-from openerp import fields, models, api
-import pdb
+# -*- coding: utf-8 -*-
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+# Copyright 2015 John Walsh
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from openerp import api, models
 import logging
 _logger = logging.getLogger(__name__)
 
-class mrp_production(models.Model):
+
+class MrpProduction(models.Model):
     _inherit = 'mrp.production'
 
-#    @api.model
-#    def _make_consume_line_from_data(self, production, product, uom_id, qty, uos_id, uos_qty):
-#        '''Confirms stock move or put it in waiting if it's linked to another move.
-#        @returns list of ids'''
-#        pdb.set_trace()
-#        # change the qty to make two moves (if needed)
-#        res = super(mrp_production, self)._make_consume_line_from_data(production, product, uom_id, uos_id, uos_qty)
-#        return res
     @api.one
     def action_confirm(self):
-        '''Confirms stock move or put it in waiting if it's linked to another move.
-        @returns list of ids'''
-#        pdb.set_trace()
+        """Confirms stock move or put it in waiting if it's linked to another move.
+        @returns list of ids"""
         # change the qty to make two moves (if needed)
-        res = super(mrp_production, self).action_confirm()
+        res = super(MrpProduction, self).action_confirm()
         # try to assign moves (and generate procurements!)
         self.action_assign()
         return res
 
     @api.one
     def action_assign(self):
-        '''Reserves available products to the production order
-        but also creates procurements for more items if we 
-        cannot reserve enough (MTO with stock)
-        @returns list of ids'''
-        # reserve all that is available
-        res = super(mrp_production, self).action_assign()
+        """Reserves available products to the production order but also reates
+        procurements for more items if we cannot reserve enough (MTO with
+        stock).
+        @returns list of ids"""
+        # reserve all that is available (standard behaviour):
+        res = super(MrpProduction, self).action_assign()
+        # try to create procurements:
         mtos_route = self.env.ref('stock_mts_mto_rule.route_mto_mts')
         for move in self.move_lines:
-            if move.state == 'confirmed' and mtos_route.id in move.product_id.route_ids.ids:
-                #This move is waiting availability
-
-                #create a domain
-                #TODO: check other possible states confirmed/exception?
-                domain = [('product_id','=', move.product_id.id),('state','=','running'),('move_dest_id','=',move.id)]
+            if (move.state == 'confirmed' and mtos_route.id in
+                    move.product_id.route_ids.ids):
+                domain = [('product_id', '=', move.product_id.id),
+                          ('state', '=', 'running'),
+                          ('move_dest_id', '=', move.id)]
                 if move.group_id:
-                    domain.append(('group_id','=',move.group_id.id))
+                    domain.append(('group_id', '=', move.group_id.id))
                 procurement = self.env['procurement.order'].search(domain)
                 if not procurement:
-                    # we need to create a procurement
-                    qty_to_procure = move.remaining_qty - move.reserved_availability
-                    proc_dict = self._prepare_mto_procurement(move, qty_to_procure)
-                    procurement = self.env['procurement.order'].create(proc_dict)
+                    qty_to_procure = (move.remaining_qty -
+                                      move.reserved_availability)
+                    proc_dict = self._prepare_mto_procurement(
+                        move, qty_to_procure)
+                    self.env['procurement.order'].create(proc_dict)
         return res
-    
+
     def _prepare_mto_procurement(self, move, qty):
-        '''Prepares a procurement for a MTO move
-        using similar logic to /stock/stock.py/class stock_move/_prepare_procurement_from_move()
-        
-        '''
-        origin = ((move.group_id and (move.group_id.name) + ":") or "") + ((move.name and move.name + ":") or "") + ('MTO -> Production')
+        """Prepares a procurement for a MTO product."""
+        origin = ((move.group_id and move.group_id.name + ":") or "") + \
+                 ((move.name and move.name + ":") or "") + 'MTO -> Production'
         group_id = move.group_id and move.group_id.id or False
-
-        route_ids = [self.env.ref('stock.route_warehouse0_mto')]
-        return{
+        route_ids = self.env.ref('stock.route_warehouse0_mto')
+        warehouse_id = (move.warehouse_id.id or (move.picking_type_id and
+                        move.picking_type_id.warehouse_id.id or False))
+        return {
             'name': move.name + ':' + str(move.id),
             'origin': origin,
             'company_id': move.company_id and move.company_id.id or False,
@@ -69,18 +64,10 @@ def _prepare_mto_procurement(self, move, qty):
             'product_id': move.product_id.id,
             'product_qty': qty,
             'product_uom': move.product_uom.id,
-            'product_uos_qty': qty, #FIXME: (move.product_uos and move.product_uos_qty) or move.product_uom_qty,
-            'product_uos': move.product_uom.id, #FIXME:(move.product_uos and move.product_uos.id) or move.product_uom.id,
             'location_id': move.location_id.id,
             'move_dest_id': move.id,
             'group_id': group_id,
-            'route_ids':[(4, x.id) for x in route_ids],
-            'warehouse_id': move.warehouse_id.id or (move.picking_type_id and move.picking_type_id.warehouse_id.id or False),
+            'route_ids': [(6, 0, route_ids.ids)],
+            'warehouse_id': warehouse_id,
             'priority': move.priority,
         }
-
-
-
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/mrp_mto_with_stock/models/stock.py b/mrp_mto_with_stock/models/stock.py
deleted file mode 100644
index f67c7b52200..00000000000
--- a/mrp_mto_with_stock/models/stock.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- encoding: utf-8 -*-
-from openerp import fields, models, api
-import pdb
-
-class stock_move(models.Model):
-    _inherit = 'stock.move'
-
-    @api.multi
-    def action_confirm(self):
-        '''Confirms stock move or put it in waiting if it's linked to another move.
-        @returns list of ids'''
-        res = super(stock_move, self).action_confirm()
-        return res
-
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-

From ad94d92bc665256c7830ad31b71f9782854018cb Mon Sep 17 00:00:00 2001
From: lreficent <lois.rilo@eficent.com>
Date: Wed, 3 May 2017 19:00:33 +0200
Subject: [PATCH 03/10] [9.0][REW] mrp_mto_with_stock: Rework to remove
 dependency and enhance flexibility

---
 mrp_mto_with_stock/README.rst                 |  5 +++--
 mrp_mto_with_stock/__openerp__.py             |  3 ++-
 mrp_mto_with_stock/models/__init__.py         |  1 +
 mrp_mto_with_stock/models/mrp.py              |  5 ++---
 mrp_mto_with_stock/models/product_template.py | 15 ++++++++++++++
 .../views/product_template_view.xml           | 20 +++++++++++++++++++
 6 files changed, 43 insertions(+), 6 deletions(-)
 create mode 100644 mrp_mto_with_stock/models/product_template.py
 create mode 100644 mrp_mto_with_stock/views/product_template_view.xml

diff --git a/mrp_mto_with_stock/README.rst b/mrp_mto_with_stock/README.rst
index a065cad4aee..fdce71d4b07 100644
--- a/mrp_mto_with_stock/README.rst
+++ b/mrp_mto_with_stock/README.rst
@@ -17,8 +17,9 @@ Configuration
 To configure this module, you need to:
 
 #. Go to the products you want to follow this behaviour.
-#. In the view form got to the tab *Inventory* and check the box for the
-   route *Make To Order + Make To Stock*.
+#. In the view form go to the tab *Inventory* and set the *Manufacturing
+   MTO/MTS Locations*. Any other location not specified here will have the
+   standard behavior.
 
 Usage
 =====
diff --git a/mrp_mto_with_stock/__openerp__.py b/mrp_mto_with_stock/__openerp__.py
index 3235afb03d4..928dbc421eb 100644
--- a/mrp_mto_with_stock/__openerp__.py
+++ b/mrp_mto_with_stock/__openerp__.py
@@ -14,5 +14,6 @@
     "license": "AGPL-3",
     "application": False,
     "installable": True,
-    "depends": ["mrp", "stock_mts_mto_rule"],
+    "depends": ["mrp"],
+    "data": ['views/product_template_view.xml'],
 }
diff --git a/mrp_mto_with_stock/models/__init__.py b/mrp_mto_with_stock/models/__init__.py
index f5102a7f2e9..709cb97b300 100644
--- a/mrp_mto_with_stock/models/__init__.py
+++ b/mrp_mto_with_stock/models/__init__.py
@@ -4,3 +4,4 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
 from . import mrp
+from . import product_template
diff --git a/mrp_mto_with_stock/models/mrp.py b/mrp_mto_with_stock/models/mrp.py
index a2d5565b77f..87d1c082fad 100644
--- a/mrp_mto_with_stock/models/mrp.py
+++ b/mrp_mto_with_stock/models/mrp.py
@@ -30,10 +30,9 @@ def action_assign(self):
         # reserve all that is available (standard behaviour):
         res = super(MrpProduction, self).action_assign()
         # try to create procurements:
-        mtos_route = self.env.ref('stock_mts_mto_rule.route_mto_mts')
         for move in self.move_lines:
-            if (move.state == 'confirmed' and mtos_route.id in
-                    move.product_id.route_ids.ids):
+            if (move.state == 'confirmed' and move.location_id in
+                    move.product_id.mrp_mts_mto_location_ids):
                 domain = [('product_id', '=', move.product_id.id),
                           ('state', '=', 'running'),
                           ('move_dest_id', '=', move.id)]
diff --git a/mrp_mto_with_stock/models/product_template.py b/mrp_mto_with_stock/models/product_template.py
new file mode 100644
index 00000000000..11099600d9e
--- /dev/null
+++ b/mrp_mto_with_stock/models/product_template.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from openerp import fields, models
+
+
+class ProductTemplate(models.Model):
+    _inherit = 'product.template'
+
+    mrp_mts_mto_location_ids = fields.Many2many(
+        comodel_name='stock.location',
+        string='Manufacturing MTO/MTS Locations',
+        help='These manufacturing locations will create procurements when '
+             'there is no stock availale in the source location.')
diff --git a/mrp_mto_with_stock/views/product_template_view.xml b/mrp_mto_with_stock/views/product_template_view.xml
new file mode 100644
index 00000000000..cbe221f8f9b
--- /dev/null
+++ b/mrp_mto_with_stock/views/product_template_view.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2017 Eficent Business and IT Consulting Services S.L.
+     License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
+
+<odoo>
+
+    <record id="view_template_property_form" model="ir.ui.view">
+        <field name="name">product.template.form - mrp_mto_with_stock
+            extension</field>
+        <field name="model">product.template</field>
+        <field name="inherit_id" ref="stock.view_template_property_form"/>
+        <field name="arch" type="xml">
+            <field name="property_stock_inventory" position="after">
+                <field name="mrp_mts_mto_location_ids" widget="many2many_tags"
+                       options="{'no_create': True}"/>
+            </field>
+        </field>
+    </record>
+
+</odoo>

From 9f1f676aab9901a74bc60742f822148b2cb1e970 Mon Sep 17 00:00:00 2001
From: Jordi Ballester <jordi.ballester@eficent.com>
Date: Sun, 23 Jul 2017 07:11:58 +0200
Subject: [PATCH 04/10] [IMP] should not auto-confirm the MO. Added test cases

---
 mrp_mto_with_stock/README.rst                 |   2 +-
 mrp_mto_with_stock/models/__init__.py         |   2 +-
 .../models/{mrp.py => mrp_production.py}      |  13 +-
 mrp_mto_with_stock/tests/__init__.py          |   5 +
 .../tests/test_mrp_mto_with_stock.py          | 139 ++++++++++++++++++
 5 files changed, 147 insertions(+), 14 deletions(-)
 rename mrp_mto_with_stock/models/{mrp.py => mrp_production.py} (85%)
 create mode 100644 mrp_mto_with_stock/tests/__init__.py
 create mode 100644 mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py

diff --git a/mrp_mto_with_stock/README.rst b/mrp_mto_with_stock/README.rst
index fdce71d4b07..4b92df24eb8 100644
--- a/mrp_mto_with_stock/README.rst
+++ b/mrp_mto_with_stock/README.rst
@@ -9,7 +9,7 @@ MRP MTO with Stock
 This module extends the functionality of Manufacturing to support the creation
 of procurements when there is no stock available. This allow you to pull from
 stock until the quantity on hand is zero, and then create a procurement
-for fulfill the MO requirements.
+to fulfill the MO requirements.
 
 Configuration
 =============
diff --git a/mrp_mto_with_stock/models/__init__.py b/mrp_mto_with_stock/models/__init__.py
index 709cb97b300..c4a684fa226 100644
--- a/mrp_mto_with_stock/models/__init__.py
+++ b/mrp_mto_with_stock/models/__init__.py
@@ -3,5 +3,5 @@
 # Copyright 2015 John Walsh
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
-from . import mrp
+from . import mrp_production
 from . import product_template
diff --git a/mrp_mto_with_stock/models/mrp.py b/mrp_mto_with_stock/models/mrp_production.py
similarity index 85%
rename from mrp_mto_with_stock/models/mrp.py
rename to mrp_mto_with_stock/models/mrp_production.py
index 87d1c082fad..281fc9ea80c 100644
--- a/mrp_mto_with_stock/models/mrp.py
+++ b/mrp_mto_with_stock/models/mrp_production.py
@@ -11,19 +11,9 @@
 class MrpProduction(models.Model):
     _inherit = 'mrp.production'
 
-    @api.one
-    def action_confirm(self):
-        """Confirms stock move or put it in waiting if it's linked to another move.
-        @returns list of ids"""
-        # change the qty to make two moves (if needed)
-        res = super(MrpProduction, self).action_confirm()
-        # try to assign moves (and generate procurements!)
-        self.action_assign()
-        return res
-
     @api.one
     def action_assign(self):
-        """Reserves available products to the production order but also reates
+        """Reserves available products to the production order but also creates
         procurements for more items if we cannot reserve enough (MTO with
         stock).
         @returns list of ids"""
@@ -34,7 +24,6 @@ def action_assign(self):
             if (move.state == 'confirmed' and move.location_id in
                     move.product_id.mrp_mts_mto_location_ids):
                 domain = [('product_id', '=', move.product_id.id),
-                          ('state', '=', 'running'),
                           ('move_dest_id', '=', move.id)]
                 if move.group_id:
                     domain.append(('group_id', '=', move.group_id.id))
diff --git a/mrp_mto_with_stock/tests/__init__.py b/mrp_mto_with_stock/tests/__init__.py
new file mode 100644
index 00000000000..f8065ee2e46
--- /dev/null
+++ b/mrp_mto_with_stock/tests/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import test_mrp_mto_with_stock
diff --git a/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py b/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
new file mode 100644
index 00000000000..464195aa94f
--- /dev/null
+++ b/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
@@ -0,0 +1,139 @@
+# -*- coding: utf-8 -*-
+# Copyright 2017 Eficent Business and IT Consulting Services S.L.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from openerp.tests.common import TransactionCase
+from openerp import fields
+
+
+class TestMrpMtoWithStock(TransactionCase):
+    def setUp(self, *args, **kwargs):
+        super(TestMrpMtoWithStock, self).setUp(*args, **kwargs)
+        self.production_model = self.env['mrp.production']
+        self.bom_model = self.env['mrp.bom']
+        self.stock_location_stock = self.env.ref('stock.stock_location_stock')
+        self.manufacture_route = self.env.ref(
+            'mrp.route_warehouse0_manufacture')
+        self.uom_unit = self.env.ref('product.product_uom_unit')
+
+        self.product_fp = self.env['product.product'].create({
+            'name': 'FP',
+            'type': 'product',
+            'uom_id': self.uom_unit.id,
+            'route_ids': [(4, self.manufacture_route.id)]
+        })
+        self.product_c1 = self.env['product.product'].create({
+            'name': 'C1',
+            'type': 'product',
+            'uom_id': self.uom_unit.id,
+            'route_ids': [(4, self.manufacture_route.id)]
+        })
+        self.product_c2 = self.env['product.product'].create({
+            'name': 'C2',
+            'type': 'product',
+            'uom_id': self.uom_unit.id,
+        })
+        self._update_product_qty(self.product_c2,
+                                 self.stock_location_stock, 10)
+
+        self.bom_fp = self.env['mrp.bom'].create({
+            'product_id': self.product_fp.id,
+            'product_tmpl_id': self.product_fp.product_tmpl_id.id,
+            'bom_line_ids': ([
+                (0, 0, {
+                    'product_id': self.product_c1.id,
+                    'product_qty': 1,
+                    'product_uom': self.uom_unit.id
+                }),
+                (0, 0, {
+                    'product_id': self.product_c2.id,
+                    'product_qty': 1,
+                    'product_uom': self.uom_unit.id
+                }),
+            ])
+        })
+
+        self.bom_c1 = self.env['mrp.bom'].create({
+            'product_id': self.product_c1.id,
+            'product_tmpl_id': self.product_c1.product_tmpl_id.id,
+            'bom_line_ids': ([(0, 0, {
+                'product_id': self.product_c2.id,
+                'product_qty': 1,
+                'product_uom': self.uom_unit.id
+            })])
+        })
+        self.product_c1.mrp_mts_mto_location_ids = [
+            (6, 0, [self.stock_location_stock.id])]
+
+    def _update_product_qty(self, product, location, quantity):
+        """Update Product quantity."""
+        product_qty = self.env['stock.change.product.qty'].create({
+            'location_id': location.id,
+            'product_id': product.id,
+            'new_quantity': quantity,
+        })
+        product_qty.change_product_qty()
+        return product_qty
+
+    def create_procurement(self, name, product):
+        values = {
+            'name': name,
+            'date_planned': fields.Datetime.now(),
+            'product_id': product.id,
+            'product_qty': 4.0,
+            'product_uom': product.uom_id.id,
+            'warehouse_id': self.env.ref('stock.warehouse0').id,
+            'location_id': self.stock_location_stock.id,
+            'route_ids': [
+                (4, self.env.ref('mrp.route_warehouse0_manufacture').id, 0)],
+        }
+        return self.env['procurement.order'].create(values)
+
+    def test_manufacture(self):
+
+        procurement_fp = self.create_procurement('TEST/01', self.product_fp)
+        production_fp = procurement_fp.production_id
+        self.assertEqual(production_fp.state, 'confirmed')
+
+        production_fp.action_assign()
+        self.assertEqual(production_fp.state, 'confirmed')
+
+        procurement_c1 = self.env['procurement.order'].search(
+            [('product_id', '=', self.product_c1.id),
+             ('move_dest_id', 'in', production_fp.move_lines.ids)], limit=1)
+        self.assertEquals(len(procurement_c1), 1)
+
+        procurement_c2 = self.env['procurement.order'].search(
+            [('product_id', '=', self.product_c2.id),
+             ('move_dest_id', 'in', production_fp.move_lines.ids)], limit=1)
+        self.assertEquals(len(procurement_c2), 0)
+
+        procurement_c1.run()
+        production_c1 = procurement_c1.production_id
+        self.assertEqual(production_c1.state, 'confirmed')
+
+        production_c1.action_assign()
+        self.assertEqual(production_c1.state, 'ready')
+
+        procurement_c2 = self.env['procurement.order'].search(
+            [('product_id', '=', self.product_c2.id),
+             ('move_dest_id', 'in', production_c1.move_lines.ids)], limit=1)
+        self.assertEquals(len(procurement_c2), 0)
+
+        wizard = self.env['mrp.product.produce'].create({
+            'product_id': self.product_c1.id,
+            'product_qty': 1,
+        })
+        self.env['mrp.production'].action_produce(
+            production_c1.id, 1, 'consume_produce', wizard)
+        production_c1.refresh()
+        self.assertEqual(production_fp.state, 'confirmed')
+
+        wizard = self.env['mrp.product.produce'].create({
+            'product_id': self.product_c1.id,
+            'product_qty': 3,
+        })
+        self.env['mrp.production'].action_produce(
+            production_c1.id, 3, 'consume_produce', wizard)
+        production_c1.refresh()
+        self.assertEqual(production_fp.state, 'ready')

From 94699f0529189f9664ea952199f3dd532319d2aa Mon Sep 17 00:00:00 2001
From: lreficent <lois.rilo@eficent.com>
Date: Mon, 24 Jul 2017 13:28:36 +0200
Subject: [PATCH 05/10] add contributor email

---
 mrp_mto_with_stock/README.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mrp_mto_with_stock/README.rst b/mrp_mto_with_stock/README.rst
index 4b92df24eb8..6d17ccadad9 100644
--- a/mrp_mto_with_stock/README.rst
+++ b/mrp_mto_with_stock/README.rst
@@ -52,7 +52,7 @@ Images
 Contributors
 ------------
 
-* John Walsh <?>
+* John Walsh <John.Walsh@interclean.com>
 * Lois Rilo <lois.rilo@eficent.com>
 
 Maintainer

From 6345f1508b1c83fc17f97353782a689b8a4dacc4 Mon Sep 17 00:00:00 2001
From: Florian da Costa <florian.dacosta@akretion.com>
Date: Thu, 27 Jul 2017 10:46:26 +0200
Subject: [PATCH 06/10] Migrate and improve mrp_to_mto_with_stock to version 10

---
 mrp_mto_with_stock/README.rst                 |  24 +-
 .../{__openerp__.py => __manifest__.py}       |   8 +-
 mrp_mto_with_stock/demo/product.xml           | 128 +++++++++
 mrp_mto_with_stock/models/__init__.py         |   1 +
 mrp_mto_with_stock/models/mrp_production.py   |  94 +++++--
 mrp_mto_with_stock/models/product_template.py |   2 +-
 mrp_mto_with_stock/models/stock_warehouse.py  |  16 ++
 .../tests/test_mrp_mto_with_stock.py          | 245 ++++++++++--------
 mrp_mto_with_stock/views/stock_warehouse.xml  |  17 ++
 9 files changed, 394 insertions(+), 141 deletions(-)
 rename mrp_mto_with_stock/{__openerp__.py => __manifest__.py} (78%)
 create mode 100644 mrp_mto_with_stock/demo/product.xml
 create mode 100644 mrp_mto_with_stock/models/stock_warehouse.py
 create mode 100644 mrp_mto_with_stock/views/stock_warehouse.xml

diff --git a/mrp_mto_with_stock/README.rst b/mrp_mto_with_stock/README.rst
index 6d17ccadad9..fa154d0f29e 100644
--- a/mrp_mto_with_stock/README.rst
+++ b/mrp_mto_with_stock/README.rst
@@ -7,9 +7,16 @@ MRP MTO with Stock
 ==================
 
 This module extends the functionality of Manufacturing to support the creation
-of procurements when there is no stock available. This allow you to pull from
-stock until the quantity on hand is zero, and then create a procurement
-to fulfill the MO requirements.
+of procurements only for a part of the raw material.
+It has 2 modes. The default one allow you to pull
+from stock until the quantity on hand is zero, and then create a procurement
+to fulfill the MO requirements. In this mode, the created procurements must
+be the ones fulfilling the MO that has generated it.
+The other mode is based on the forecast quantity. It will allow to pull from
+stock until the forecast quantity is zero and then create a procurement for
+the missing products. In this mode, there is no link between the procurement
+created and MO that has generated it. The procurement may be used to fulfill
+another MO.
 
 Configuration
 =============
@@ -21,17 +28,23 @@ To configure this module, you need to:
    MTO/MTS Locations*. Any other location not specified here will have the
    standard behavior.
 
+If you want to use the second mode, based on forecast quantity
+#. Go to the warehouse you want to follow this behaviour.
+#. In the view form go to the tab *Warehouse Configuration* and set the 
+   *MRP MTO with forecast stock*. You still need to configure the products
+   like described in last step.
+
 Usage
 =====
 
 To use this module, you need to:
 
 #. Go to *Manufacturing* and create a Manufacturing Order.
-#. Click on *Confirm Production*.
+#. Click on *Check availability*.
 
 .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
    :alt: Try me on Runbot
-   :target: https://runbot.odoo-community.org/runbot/129/9.0
+   :target: https://runbot.odoo-community.org/runbot/129/10.0
 
 Bug Tracker
 ===========
@@ -54,6 +67,7 @@ Contributors
 
 * John Walsh <John.Walsh@interclean.com>
 * Lois Rilo <lois.rilo@eficent.com>
+* Florian da Costa <florian.dacosta@akretion.com>
 
 Maintainer
 ----------
diff --git a/mrp_mto_with_stock/__openerp__.py b/mrp_mto_with_stock/__manifest__.py
similarity index 78%
rename from mrp_mto_with_stock/__openerp__.py
rename to mrp_mto_with_stock/__manifest__.py
index 928dbc421eb..ef669a7fbc0 100644
--- a/mrp_mto_with_stock/__openerp__.py
+++ b/mrp_mto_with_stock/__manifest__.py
@@ -10,10 +10,14 @@
     "author": "John Walsh, Eficent, Odoo Community Association (OCA)",
     "website": "https://odoo-community.org/",
     "category": "Manufacturing",
-    "version": "9.0.1.0.0",
+    "version": "10.0.1.0.0",
     "license": "AGPL-3",
     "application": False,
     "installable": True,
     "depends": ["mrp"],
-    "data": ['views/product_template_view.xml'],
+    "data": [
+        'views/product_template_view.xml',
+        'views/stock_warehouse.xml',
+    ],
+    "demo": ['demo/product.xml'],
 }
diff --git a/mrp_mto_with_stock/demo/product.xml b/mrp_mto_with_stock/demo/product.xml
new file mode 100644
index 00000000000..4a4d61a8cac
--- /dev/null
+++ b/mrp_mto_with_stock/demo/product.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (C) 2017 - Today: GRAP (http://www.grap.coop)
+@author Sylvain LE GAL (https://twitter.com/legalsylvain)
+License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+-->
+
+<odoo> <data noupdate="1">
+
+        <record id="product_product_manufacture_1" model="product.product">
+            <field name="name">TOP</field>
+            <field name="categ_id" ref="product.product_category_3"/>
+            <field name="standard_price">600.00</field>
+            <field name="list_price">400.00</field>
+            <field name="type">product</field>
+            <field name="uom_id" ref="product.product_uom_unit"/>
+            <field name="uom_po_id" ref="product.product_uom_unit"/>
+            <field name="description">TODO</field>
+            <field name="default_code">MANUF</field>
+            <field name="route_ids" eval="[(6, 0, [ref('stock.route_warehouse0_mto'), ref('mrp.route_warehouse0_manufacture')])]"/>
+        </record>
+
+        <record id="product_product_manufacture_1_1" model="product.product">
+            <field name="name">Subproduct 1</field>
+            <field name="categ_id" ref="product.product_category_3"/>
+            <field name="standard_price">300.00</field>
+            <field name="list_price">100.00</field>
+            <field name="type">product</field>
+            <field name="uom_id" ref="product.product_uom_unit"/>
+            <field name="uom_po_id" ref="product.product_uom_unit"/>
+            <field name="description">TODO</field>
+            <field name="default_code">MANUF 1-1</field>
+            <field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
+            <field name="mrp_mts_mto_location_ids" eval="[(6, 0, [ref('stock.stock_location_stock')])]"/>
+        </record>
+
+        <record id="product_product_manufacture_1_2" model="product.product">
+            <field name="name">Subproduct 2</field>
+            <field name="categ_id" ref="product.product_category_3"/>
+            <field name="standard_price">100.00</field>
+            <field name="list_price">30.00</field>
+            <field name="type">product</field>
+            <field name="uom_id" ref="product.product_uom_unit"/>
+            <field name="uom_po_id" ref="product.product_uom_unit"/>
+            <field name="description">TODO</field>
+            <field name="default_code">MANUF 1-2</field>
+            <field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
+            <field name="mrp_mts_mto_location_ids" eval="[(6, 0, [ref('stock.stock_location_stock')])]"/>
+        </record>
+
+        <record id="product_product_manufacture_1_1_1" model="product.product">
+            <field name="name">Subproduct 1-1</field>
+            <field name="categ_id" ref="product.product_category_3"/>
+            <field name="standard_price">10.00</field>
+            <field name="list_price">3.00</field>
+            <field name="type">product</field>
+            <field name="uom_id" ref="product.product_uom_unit"/>
+            <field name="uom_po_id" ref="product.product_uom_unit"/>
+            <field name="description">TODO</field>
+            <field name="default_code">MANUF 1-1-1</field>
+        </record>
+
+
+        <record id="product_product_manufacture_1_2_1" model="product.product">
+            <field name="name">Subproduct 2-1</field>
+            <field name="categ_id" ref="product.product_category_3"/>
+            <field name="standard_price">10.00</field>
+            <field name="list_price">3.00</field>
+            <field name="type">product</field>
+            <field name="uom_id" ref="product.product_uom_unit"/>
+            <field name="uom_po_id" ref="product.product_uom_unit"/>
+            <field name="description">TODO</field>
+            <field name="default_code">MANUF 1-2-1</field>
+        </record>
+
+
+        <record id="mrp_bom_manuf_1" model="mrp.bom">
+            <field name="product_tmpl_id" ref="product_product_manufacture_1_product_template"/>
+            <field name="product_uom_id" ref="product.product_uom_unit"/>
+            <field name="sequence">10</field>
+        </record>
+
+        <record id="mrp_bom_line_manuf_1_1" model="mrp.bom.line">
+            <field name="product_id" ref="product_product_manufacture_1_1"/>
+            <field name="product_qty">5</field>
+            <field name="product_uom_id" ref="product.product_uom_unit"/>
+            <field name="sequence">1</field>
+            <field name="bom_id" ref="mrp_bom_manuf_1"/>
+        </record>
+
+        <record id="mrp_bom_line_manuf_1_2" model="mrp.bom.line">
+            <field name="product_id" ref="product_product_manufacture_1_2"/>
+            <field name="product_qty">2</field>
+            <field name="product_uom_id" ref="product.product_uom_unit"/>
+            <field name="sequence">1</field>
+            <field name="bom_id" ref="mrp_bom_manuf_1"/>
+        </record>
+
+        <record id="mrp_bom_manuf_1_1" model="mrp.bom">
+            <field name="product_tmpl_id" ref="product_product_manufacture_1_1_product_template"/>
+            <field name="product_uom_id" ref="product.product_uom_unit"/>
+            <field name="sequence">10</field>
+        </record>
+
+        <record id="mrp_bom_line_manuf_1_1_1" model="mrp.bom.line">
+            <field name="product_id" ref="product_product_manufacture_1_1_1"/>
+            <field name="product_qty">2</field>
+            <field name="product_uom_id" ref="product.product_uom_unit"/>
+            <field name="sequence">1</field>
+            <field name="bom_id" ref="mrp_bom_manuf_1_1"/>
+        </record>
+
+        <record id="mrp_bom_manuf_1_2" model="mrp.bom">
+            <field name="product_tmpl_id" ref="product_product_manufacture_1_2_product_template"/>
+            <field name="product_uom_id" ref="product.product_uom_unit"/>
+            <field name="sequence">10</field>
+        </record>
+
+        <record id="mrp_bom_line_manuf_1_2_1" model="mrp.bom.line">
+            <field name="product_id" ref="product_product_manufacture_1_2_1"/>
+            <field name="product_qty">4</field>
+            <field name="product_uom_id" ref="product.product_uom_unit"/>
+            <field name="sequence">1</field>
+            <field name="bom_id" ref="mrp_bom_manuf_1_2"/>
+        </record>
+
+
+</data> </odoo>
diff --git a/mrp_mto_with_stock/models/__init__.py b/mrp_mto_with_stock/models/__init__.py
index c4a684fa226..c617a225fc9 100644
--- a/mrp_mto_with_stock/models/__init__.py
+++ b/mrp_mto_with_stock/models/__init__.py
@@ -5,3 +5,4 @@
 
 from . import mrp_production
 from . import product_template
+from . import stock_warehouse
diff --git a/mrp_mto_with_stock/models/mrp_production.py b/mrp_mto_with_stock/models/mrp_production.py
index 281fc9ea80c..dc6a585f534 100644
--- a/mrp_mto_with_stock/models/mrp_production.py
+++ b/mrp_mto_with_stock/models/mrp_production.py
@@ -3,7 +3,7 @@
 # Copyright 2015 John Walsh
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
-from openerp import api, models
+from odoo import api, models
 import logging
 _logger = logging.getLogger(__name__)
 
@@ -11,32 +11,69 @@
 class MrpProduction(models.Model):
     _inherit = 'mrp.production'
 
-    @api.one
+    @api.multi
+    def _adjust_procure_method(self):
+        # Si location => By pass method...
+        super(MrpProduction, self)._adjust_procure_method()
+
+    @api.multi
     def action_assign(self):
         """Reserves available products to the production order but also creates
         procurements for more items if we cannot reserve enough (MTO with
         stock).
-        @returns list of ids"""
+        @returns True"""
         # reserve all that is available (standard behaviour):
         res = super(MrpProduction, self).action_assign()
         # try to create procurements:
-        for move in self.move_lines:
-            if (move.state == 'confirmed' and move.location_id in
-                    move.product_id.mrp_mts_mto_location_ids):
-                domain = [('product_id', '=', move.product_id.id),
-                          ('move_dest_id', '=', move.id)]
-                if move.group_id:
-                    domain.append(('group_id', '=', move.group_id.id))
-                procurement = self.env['procurement.order'].search(domain)
-                if not procurement:
-                    qty_to_procure = (move.remaining_qty -
-                                      move.reserved_availability)
-                    proc_dict = self._prepare_mto_procurement(
-                        move, qty_to_procure)
-                    self.env['procurement.order'].create(proc_dict)
+        move_obj = self.env['stock.move']
+        for production in self:
+            warehouse = production.location_src_id.get_warehouse()
+            mto_with_no_move_dest_id = warehouse.mrp_mto_mts_forecast_qty
+            for move in self.move_raw_ids:
+                if (move.state == 'confirmed' and move.location_id in
+                        move.product_id.mrp_mts_mto_location_ids and not
+                        mto_with_no_move_dest_id):
+                    domain = [('product_id', '=', move.product_id.id),
+                              ('move_dest_id', '=', move.id)]
+                    if move.group_id:
+                        domain.append(('group_id', '=', move.group_id.id))
+                    procurement = self.env['procurement.order'].search(domain)
+                    if not procurement:
+                        # We have to split the move because we can't have
+                        # a part of the move that have ancestors and not the
+                        # other else it won't ever be reserved.
+                        qty_to_procure = (move.remaining_qty -
+                                          move.reserved_availability)
+                        if qty_to_procure < move.product_uom_qty:
+                            move.do_unreserve()
+                            new_move_id = move.split(
+                                qty_to_procure,
+                                restrict_lot_id=move.restrict_lot_id,
+                                restrict_partner_id=move.restrict_partner_id)
+                            new_move = move_obj.browse(
+                                new_move_id)
+                            move.action_assign()
+                        else:
+                            new_move = move
+
+                        proc_dict = self._prepare_mto_procurement(
+                            new_move, qty_to_procure,
+                            mto_with_no_move_dest_id)
+                        self.env['procurement.order'].create(proc_dict)
+
+                if (move.state == 'confirmed' and move.location_id in
+                        move.product_id.mrp_mts_mto_location_ids and
+                        move.procure_method == 'make_to_stock' and
+                        mto_with_no_move_dest_id):
+                    qty_to_procure = production.get_mto_qty_to_procure(move)
+                    if qty_to_procure > 0.0:
+                        proc_dict = self._prepare_mto_procurement(
+                            move, qty_to_procure, mto_with_no_move_dest_id)
+                        proc_dict.pop('move_dest_id', None)
+                        self.env['procurement.order'].create(proc_dict)
         return res
 
-    def _prepare_mto_procurement(self, move, qty):
+    def _prepare_mto_procurement(self, move, qty, mto_with_no_move_dest_id):
         """Prepares a procurement for a MTO product."""
         origin = ((move.group_id and move.group_id.name + ":") or "") + \
                  ((move.name and move.name + ":") or "") + 'MTO -> Production'
@@ -44,7 +81,7 @@ def _prepare_mto_procurement(self, move, qty):
         route_ids = self.env.ref('stock.route_warehouse0_mto')
         warehouse_id = (move.warehouse_id.id or (move.picking_type_id and
                         move.picking_type_id.warehouse_id.id or False))
-        return {
+        vals = {
             'name': move.name + ':' + str(move.id),
             'origin': origin,
             'company_id': move.company_id and move.company_id.id or False,
@@ -53,9 +90,26 @@ def _prepare_mto_procurement(self, move, qty):
             'product_qty': qty,
             'product_uom': move.product_uom.id,
             'location_id': move.location_id.id,
-            'move_dest_id': move.id,
             'group_id': group_id,
             'route_ids': [(6, 0, route_ids.ids)],
             'warehouse_id': warehouse_id,
             'priority': move.priority,
         }
+        if not mto_with_no_move_dest_id:
+            vals['move_dest_id'] = move.id
+        return vals
+
+    @api.multi
+    def get_mto_qty_to_procure(self, move):
+        self.ensure_one()
+        stock_location_id = move.location_id.id
+        move_location = move.with_context(location=stock_location_id)
+        virtual_available = move_location.product_id.virtual_available
+        qty_available = move.product_id.uom_id._compute_quantity(
+            virtual_available, move.product_uom)
+        if qty_available >= 0:
+            return 0.0
+        else:
+            if abs(qty_available) < move.product_uom_qty:
+                return abs(qty_available)
+        return move.product_uom_qty
diff --git a/mrp_mto_with_stock/models/product_template.py b/mrp_mto_with_stock/models/product_template.py
index 11099600d9e..a6e1142bf4e 100644
--- a/mrp_mto_with_stock/models/product_template.py
+++ b/mrp_mto_with_stock/models/product_template.py
@@ -2,7 +2,7 @@
 # Copyright 2017 Eficent Business and IT Consulting Services S.L.
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
-from openerp import fields, models
+from odoo import fields, models
 
 
 class ProductTemplate(models.Model):
diff --git a/mrp_mto_with_stock/models/stock_warehouse.py b/mrp_mto_with_stock/models/stock_warehouse.py
new file mode 100644
index 00000000000..75d3f30f0d1
--- /dev/null
+++ b/mrp_mto_with_stock/models/stock_warehouse.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Copyright 2017 Akretion
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class StockWarehouse(models.Model):
+    _inherit = 'stock.warehouse'
+
+    mrp_mto_mts_forecast_qty = fields.Boolean(
+        string="MRP MTO with forecast stock",
+        help="When you use Mrp_mto_with_stock, the procurement creation is "
+             "based on reservable stock by default. Check this option if "
+             "you prefer base it on the forecast stock. In this case, the "
+             "created procurements won't be linked to the raw material moves")
diff --git a/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py b/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
index 464195aa94f..c9d844cde87 100644
--- a/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
+++ b/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
@@ -2,11 +2,11 @@
 # Copyright 2017 Eficent Business and IT Consulting Services S.L.
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
-from openerp.tests.common import TransactionCase
-from openerp import fields
+from odoo.tests.common import TransactionCase
 
 
 class TestMrpMtoWithStock(TransactionCase):
+
     def setUp(self, *args, **kwargs):
         super(TestMrpMtoWithStock, self).setUp(*args, **kwargs)
         self.production_model = self.env['mrp.production']
@@ -15,55 +15,27 @@ def setUp(self, *args, **kwargs):
         self.manufacture_route = self.env.ref(
             'mrp.route_warehouse0_manufacture')
         self.uom_unit = self.env.ref('product.product_uom_unit')
-
-        self.product_fp = self.env['product.product'].create({
-            'name': 'FP',
-            'type': 'product',
-            'uom_id': self.uom_unit.id,
-            'route_ids': [(4, self.manufacture_route.id)]
-        })
-        self.product_c1 = self.env['product.product'].create({
-            'name': 'C1',
-            'type': 'product',
-            'uom_id': self.uom_unit.id,
-            'route_ids': [(4, self.manufacture_route.id)]
-        })
-        self.product_c2 = self.env['product.product'].create({
-            'name': 'C2',
-            'type': 'product',
-            'uom_id': self.uom_unit.id,
-        })
-        self._update_product_qty(self.product_c2,
-                                 self.stock_location_stock, 10)
-
-        self.bom_fp = self.env['mrp.bom'].create({
-            'product_id': self.product_fp.id,
-            'product_tmpl_id': self.product_fp.product_tmpl_id.id,
-            'bom_line_ids': ([
-                (0, 0, {
-                    'product_id': self.product_c1.id,
-                    'product_qty': 1,
-                    'product_uom': self.uom_unit.id
-                }),
-                (0, 0, {
-                    'product_id': self.product_c2.id,
-                    'product_qty': 1,
-                    'product_uom': self.uom_unit.id
-                }),
-            ])
-        })
-
-        self.bom_c1 = self.env['mrp.bom'].create({
-            'product_id': self.product_c1.id,
-            'product_tmpl_id': self.product_c1.product_tmpl_id.id,
-            'bom_line_ids': ([(0, 0, {
-                'product_id': self.product_c2.id,
-                'product_qty': 1,
-                'product_uom': self.uom_unit.id
-            })])
-        })
-        self.product_c1.mrp_mts_mto_location_ids = [
-            (6, 0, [self.stock_location_stock.id])]
+        self.warehouse = self.env.ref('stock.warehouse0')
+
+        self.top_product = self.env.ref(
+            'mrp_mto_with_stock.product_product_manufacture_1')
+        self.subproduct1 = self.env.ref(
+            'mrp_mto_with_stock.product_product_manufacture_1_1')
+        self.subproduct2 = self.env.ref(
+            'mrp_mto_with_stock.product_product_manufacture_1_2')
+        self.subproduct_1_1 = self.env.ref(
+            'mrp_mto_with_stock.product_product_manufacture_1_1_1')
+
+        self.main_bom = self.env.ref(
+            'mrp_mto_with_stock.mrp_bom_manuf_1')
+
+    def _get_production_vals(self):
+        return {
+            'product_id': self.top_product.id,
+            'product_qty': 1,
+            'product_uom_id': self.uom_unit.id,
+            'bom_id': self.main_bom.id,
+        }
 
     def _update_product_qty(self, product, location, quantity):
         """Update Product quantity."""
@@ -75,65 +47,112 @@ def _update_product_qty(self, product, location, quantity):
         product_qty.change_product_qty()
         return product_qty
 
-    def create_procurement(self, name, product):
-        values = {
-            'name': name,
-            'date_planned': fields.Datetime.now(),
-            'product_id': product.id,
-            'product_qty': 4.0,
-            'product_uom': product.uom_id.id,
-            'warehouse_id': self.env.ref('stock.warehouse0').id,
-            'location_id': self.stock_location_stock.id,
-            'route_ids': [
-                (4, self.env.ref('mrp.route_warehouse0_manufacture').id, 0)],
-        }
-        return self.env['procurement.order'].create(values)
-
-    def test_manufacture(self):
-
-        procurement_fp = self.create_procurement('TEST/01', self.product_fp)
-        production_fp = procurement_fp.production_id
-        self.assertEqual(production_fp.state, 'confirmed')
-
-        production_fp.action_assign()
-        self.assertEqual(production_fp.state, 'confirmed')
-
-        procurement_c1 = self.env['procurement.order'].search(
-            [('product_id', '=', self.product_c1.id),
-             ('move_dest_id', 'in', production_fp.move_lines.ids)], limit=1)
-        self.assertEquals(len(procurement_c1), 1)
-
-        procurement_c2 = self.env['procurement.order'].search(
-            [('product_id', '=', self.product_c2.id),
-             ('move_dest_id', 'in', production_fp.move_lines.ids)], limit=1)
-        self.assertEquals(len(procurement_c2), 0)
-
-        procurement_c1.run()
-        production_c1 = procurement_c1.production_id
-        self.assertEqual(production_c1.state, 'confirmed')
-
-        production_c1.action_assign()
-        self.assertEqual(production_c1.state, 'ready')
-
-        procurement_c2 = self.env['procurement.order'].search(
-            [('product_id', '=', self.product_c2.id),
-             ('move_dest_id', 'in', production_c1.move_lines.ids)], limit=1)
-        self.assertEquals(len(procurement_c2), 0)
-
-        wizard = self.env['mrp.product.produce'].create({
-            'product_id': self.product_c1.id,
-            'product_qty': 1,
-        })
-        self.env['mrp.production'].action_produce(
-            production_c1.id, 1, 'consume_produce', wizard)
-        production_c1.refresh()
-        self.assertEqual(production_fp.state, 'confirmed')
-
-        wizard = self.env['mrp.product.produce'].create({
-            'product_id': self.product_c1.id,
-            'product_qty': 3,
-        })
-        self.env['mrp.production'].action_produce(
-            production_c1.id, 3, 'consume_produce', wizard)
-        production_c1.refresh()
-        self.assertEqual(production_fp.state, 'ready')
+    def test_manufacture_with_forecast_stock(self):
+        """
+            Test Manufacture mto with stock based on forecast quantity
+            and no link between sub assemblies MO's and Main MO raw material
+        """
+
+        self.warehouse.mrp_mto_mts_forecast_qty = True
+
+        self._update_product_qty(self.subproduct1, self.stock_location_stock,
+                                 2)
+        self._update_product_qty(self.subproduct2, self.stock_location_stock,
+                                 4)
+
+        self.production = self.production_model.create(
+            self._get_production_vals())
+
+        # Create MO and check it create sub assemblie MO.
+        self.production.action_assign()
+
+        self.assertEqual(self.production.availability, 'partially_available')
+
+        self.assertEquals(self.subproduct1.virtual_available, 0)
+
+        procurement_subproduct1 = self.env['procurement.order'].search(
+            [('product_id', '=', self.subproduct1.id),
+             ('group_id', '=', self.production.procurement_group_id.id)])
+
+        self.assertEquals(len(procurement_subproduct1), 1)
+        self.assertEquals(procurement_subproduct1.product_qty, 3)
+
+        production_sub1 = procurement_subproduct1.production_id
+        self.assertEqual(production_sub1.state, 'confirmed')
+        self.assertEqual(production_sub1.product_qty, 3)
+
+        self._update_product_qty(self.subproduct1, self.stock_location_stock,
+                                 7)
+
+        # Create second MO and check it does not create procurement
+        self.production2 = self.production_model.create(
+            self._get_production_vals())
+        self.production2.action_assign()
+        procurement_subproduct1_2 = self.env['procurement.order'].search(
+            [('product_id', '=', self.subproduct1.id),
+             ('group_id', '=', self.production2.procurement_group_id.id)])
+        self.assertEquals(len(procurement_subproduct1_2), 0)
+        self.assertEquals(self.production2.availability, 'assigned')
+        self.production2.do_unreserve()
+
+        self.assertEquals(self.subproduct1.virtual_available, 0)
+
+        self.production.action_assign()
+        # We check if first MO is able to assign it self even if it has
+        # previously generate procurements, it would not be the case in the
+        # other mode (without mrp_mto_mts_reservable_stock on warehouse)
+        self.assertEquals(self.production.availability, 'assigned')
+
+        self.assertEquals(self.subproduct1.virtual_available, 0)
+
+    def test_manufacture_with_reservable_stock(self):
+        """
+            Test Manufacture mto with stock based on reservable stock
+            and there is a link between sub assemblies MO's and Main MO raw
+            materi  al
+        """
+
+        self._update_product_qty(self.subproduct1, self.stock_location_stock,
+                                 2)
+        self._update_product_qty(self.subproduct2, self.stock_location_stock,
+                                 4)
+
+        self.production = self.production_model.create(
+            self._get_production_vals())
+
+        self._update_product_qty(self.subproduct_1_1,
+                                 self.stock_location_stock, 50)
+
+        # Create MO and check it create sub assemblie MO.
+        self.production.action_assign()
+        self.assertEqual(self.production.state, 'confirmed')
+
+        procurement_sub1 = self.env['procurement.order'].search(
+            [('product_id', '=', self.subproduct1.id),
+             ('move_dest_id', 'in', self.production.move_raw_ids.ids)])
+        self.assertEquals(len(procurement_sub1), 1)
+
+        procurement_sub2 = self.env['procurement.order'].search(
+            [('product_id', '=', self.subproduct2.id),
+             ('move_dest_id', 'in', self.production.move_raw_ids.ids)])
+        self.assertEquals(len(procurement_sub2), 0)
+
+        production_sub1 = procurement_sub1.production_id
+        self.assertEqual(production_sub1.product_qty, 3)
+        production_sub1.action_assign()
+        self.assertEqual(production_sub1.availability, 'assigned')
+
+        wizard_obj = self.env['mrp.product.produce']
+        default_fields = ['lot_id', 'product_id', 'product_uom_id',
+                          'product_tracking', 'consume_line_ids',
+                          'production_id', 'product_qty', 'serial']
+        wizard_vals = wizard_obj.with_context(active_id=production_sub1.id).\
+            default_get(default_fields)
+
+        wizard = wizard_obj.create(wizard_vals)
+        wizard.do_produce()
+        self.assertTrue(production_sub1.check_to_done)
+        self.assertEquals(self.subproduct1.qty_available, 2)
+        production_sub1.button_mark_done()
+        self.assertEquals(self.subproduct1.qty_available, 5)
+        self.assertEqual(self.production.availability, 'assigned')
diff --git a/mrp_mto_with_stock/views/stock_warehouse.xml b/mrp_mto_with_stock/views/stock_warehouse.xml
new file mode 100644
index 00000000000..68a4266ce24
--- /dev/null
+++ b/mrp_mto_with_stock/views/stock_warehouse.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2017 Akretion
+     License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
+
+<odoo>
+
+    <record id="view_warehouse_mrp_with_stock" model="ir.ui.view">
+        <field name="model">stock.warehouse</field>
+        <field name="inherit_id" ref="mrp.view_warehouse_inherited"/>
+        <field name="arch" type="xml">
+            <field name="manufacture_to_resupply" position="after">
+                <field name="mrp_mto_mts_forecast_qty"/>
+            </field>
+        </field>
+    </record>
+
+</odoo>

From 5d8596eaa6b5eb9a98fe51b41ddd49c5f9648070 Mon Sep 17 00:00:00 2001
From: OCA Transbot <transbot@odoo-community.org>
Date: Sat, 2 Dec 2017 07:32:13 +0100
Subject: [PATCH 07/10] OCA Transbot updated translations from Transifex

---
 mrp_mto_with_stock/i18n/ca.po    | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/de.po    | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/es.po    | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/es_MX.po | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/fi.po    | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/fr.po    | 107 +++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/fr_CH.po | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/hr.po    | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/hr_HR.po | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/it.po    | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/nl_NL.po | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/pt_BR.po | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/ro.po    | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/sl.po    | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/tr_TR.po | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/vi_VN.po | 106 ++++++++++++++++++++++++++++++
 mrp_mto_with_stock/i18n/zh_CN.po | 106 ++++++++++++++++++++++++++++++
 17 files changed, 1803 insertions(+)
 create mode 100644 mrp_mto_with_stock/i18n/ca.po
 create mode 100644 mrp_mto_with_stock/i18n/de.po
 create mode 100644 mrp_mto_with_stock/i18n/es.po
 create mode 100644 mrp_mto_with_stock/i18n/es_MX.po
 create mode 100644 mrp_mto_with_stock/i18n/fi.po
 create mode 100644 mrp_mto_with_stock/i18n/fr.po
 create mode 100644 mrp_mto_with_stock/i18n/fr_CH.po
 create mode 100644 mrp_mto_with_stock/i18n/hr.po
 create mode 100644 mrp_mto_with_stock/i18n/hr_HR.po
 create mode 100644 mrp_mto_with_stock/i18n/it.po
 create mode 100644 mrp_mto_with_stock/i18n/nl_NL.po
 create mode 100644 mrp_mto_with_stock/i18n/pt_BR.po
 create mode 100644 mrp_mto_with_stock/i18n/ro.po
 create mode 100644 mrp_mto_with_stock/i18n/sl.po
 create mode 100644 mrp_mto_with_stock/i18n/tr_TR.po
 create mode 100644 mrp_mto_with_stock/i18n/vi_VN.po
 create mode 100644 mrp_mto_with_stock/i18n/zh_CN.po

diff --git a/mrp_mto_with_stock/i18n/ca.po b/mrp_mto_with_stock/i18n/ca.po
new file mode 100644
index 00000000000..dbb97319cd6
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/ca.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Plantilla del producte"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/de.po b/mrp_mto_with_stock/i18n/de.po
new file mode 100644
index 00000000000..47e7213a38b
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/de.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr "Fertigungsautrag"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Produktvorlage"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/es.po b/mrp_mto_with_stock/i18n/es.po
new file mode 100644
index 00000000000..5d71bc8e888
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/es.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr "Órden de producción"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Plantilla de producto"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/es_MX.po b/mrp_mto_with_stock/i18n/es_MX.po
new file mode 100644
index 00000000000..181d998c1ec
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/es_MX.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Spanish (Mexico) (https://www.transifex.com/oca/teams/23907/es_MX/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_MX\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Plantilla del producto"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/fi.po b/mrp_mto_with_stock/i18n/fi.po
new file mode 100644
index 00000000000..900ceadb032
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/fi.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Tuotteen malli"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/fr.po b/mrp_mto_with_stock/i18n/fr.po
new file mode 100644
index 00000000000..7590911610a
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/fr.po
@@ -0,0 +1,107 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# Quentin THEURET <odoo@kerpeo.com>, 2017
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr "Ordre de fabrication"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Modèle d'article"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/fr_CH.po b/mrp_mto_with_stock/i18n/fr_CH.po
new file mode 100644
index 00000000000..3499af4b485
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/fr_CH.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: French (Switzerland) (https://www.transifex.com/oca/teams/23907/fr_CH/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fr_CH\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Template de produit"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/hr.po b/mrp_mto_with_stock/i18n/hr.po
new file mode 100644
index 00000000000..ed3a5c9640e
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/hr.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: hr\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Predložak proizvoda"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/hr_HR.po b/mrp_mto_with_stock/i18n/hr_HR.po
new file mode 100644
index 00000000000..9f915c0763b
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/hr_HR.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# Bole <bole@dajmi5.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
+"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/hr_HR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: hr_HR\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr "Proizvodni nalog"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/it.po b/mrp_mto_with_stock/i18n/it.po
new file mode 100644
index 00000000000..25424a05a2f
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/it.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Template prodotto"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/nl_NL.po b/mrp_mto_with_stock/i18n/nl_NL.po
new file mode 100644
index 00000000000..7a0bc69772e
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/nl_NL.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# Peter Hageman <hageman.p@gmail.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n"
+"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: nl_NL\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr "Productieorder"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/pt_BR.po b/mrp_mto_with_stock/i18n/pt_BR.po
new file mode 100644
index 00000000000..986464daf4c
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/pt_BR.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr "Ordem de fabricação"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Produto Modelo"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/ro.po b/mrp_mto_with_stock/i18n/ro.po
new file mode 100644
index 00000000000..fbe05a73a6a
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/ro.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Produs șablon"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/sl.po b/mrp_mto_with_stock/i18n/sl.po
new file mode 100644
index 00000000000..db6d101f7d4
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/sl.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Predloga proizvoda"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/tr_TR.po b/mrp_mto_with_stock/i18n/tr_TR.po
new file mode 100644
index 00000000000..98bf044b9e7
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/tr_TR.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Turkish (Turkey) (https://www.transifex.com/oca/teams/23907/tr_TR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: tr_TR\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Ürün şablonu"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/vi_VN.po b/mrp_mto_with_stock/i18n/vi_VN.po
new file mode 100644
index 00000000000..ca132106bac
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/vi_VN.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/oca/teams/23907/vi_VN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: vi_VN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr "Mẫu sản phẩm"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""
diff --git a/mrp_mto_with_stock/i18n/zh_CN.po b/mrp_mto_with_stock/i18n/zh_CN.po
new file mode 100644
index 00000000000..83adac2f3d8
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/zh_CN.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# OCA Transbot <transbot@odoo-community.org>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-11-28 03:44+0000\n"
+"PO-Revision-Date: 2017-11-28 03:44+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
+"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/zh_CN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr "制造订单"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""

From d8b06747b6e58e061d2bb80b20ad68ad5c8f34cd Mon Sep 17 00:00:00 2001
From: OCA Transbot <transbot@odoo-community.org>
Date: Sat, 27 Jan 2018 08:25:31 +0100
Subject: [PATCH 08/10] OCA Transbot updated translations from Transifex

---
 mrp_mto_with_stock/i18n/lt.po | 106 ++++++++++++++++++++++++++++++++++
 1 file changed, 106 insertions(+)
 create mode 100644 mrp_mto_with_stock/i18n/lt.po

diff --git a/mrp_mto_with_stock/i18n/lt.po b/mrp_mto_with_stock/i18n/lt.po
new file mode 100644
index 00000000000..f062ca7f9aa
--- /dev/null
+++ b/mrp_mto_with_stock/i18n/lt.po
@@ -0,0 +1,106 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mrp_mto_with_stock
+# 
+# Translators:
+# Viktoras Norkus <viktoras@bmx.lt>, 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-01-16 08:02+0000\n"
+"PO-Revision-Date: 2018-01-16 08:02+0000\n"
+"Last-Translator: Viktoras Norkus <viktoras@bmx.lt>, 2018\n"
+"Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lt\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid "MRP MTO with forecast stock"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,field_description:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid "Manufacturing MTO/MTS Locations"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_mrp_production
+msgid "Manufacturing Order"
+msgstr "Gamybos užsakymas"
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+msgid "Subproduct 1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+msgid "Subproduct 1-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+msgid "Subproduct 2"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+msgid "Subproduct 2-1"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_1_1
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2
+#: model:product.product,description:mrp_mto_with_stock.product_product_manufacture_1_2_1
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_1_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_2_product_template
+#: model:product.template,description:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TODO"
+msgstr "Padaryti"
+
+#. module: mrp_mto_with_stock
+#: model:product.product,name:mrp_mto_with_stock.product_product_manufacture_1
+#: model:product.template,name:mrp_mto_with_stock.product_product_manufacture_1_product_template
+msgid "TOP"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_product_mrp_mts_mto_location_ids
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_product_template_mrp_mts_mto_location_ids
+msgid ""
+"These manufacturing locations will create procurements when there is no "
+"stock availale in the source location."
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model,name:mrp_mto_with_stock.model_stock_warehouse
+msgid "Warehouse"
+msgstr ""
+
+#. module: mrp_mto_with_stock
+#: model:ir.model.fields,help:mrp_mto_with_stock.field_stock_warehouse_mrp_mto_mts_forecast_qty
+msgid ""
+"When you use Mrp_mto_with_stock, the procurement creation is based on "
+"reservable stock by default. Check this option if you prefer base it on the "
+"forecast stock. In this case, the created procurements won't be linked to "
+"the raw material moves"
+msgstr ""

From dab59bcc211b61bab0f67486818bdaed38539e2a Mon Sep 17 00:00:00 2001
From: Bhavesh Odedra <bodedra@ursainfosystems.com>
Date: Fri, 16 Feb 2018 22:40:25 +0530
Subject: [PATCH 09/10] [11.0][MIG] mrp_mto_with_stock

---
 mrp_mto_with_stock/README.rst                 |   4 +-
 mrp_mto_with_stock/__init__.py                |   3 -
 mrp_mto_with_stock/__manifest__.py            |   5 +-
 mrp_mto_with_stock/demo/product.xml           | 239 +++++++++---------
 mrp_mto_with_stock/models/__init__.py         |   3 -
 mrp_mto_with_stock/models/mrp_production.py   | 117 +++++----
 mrp_mto_with_stock/models/product_template.py |   1 -
 mrp_mto_with_stock/models/stock_warehouse.py  |   1 -
 .../static/description/icon.png               | Bin 0 -> 9455 bytes
 mrp_mto_with_stock/tests/__init__.py          |   2 -
 .../tests/test_mrp_mto_with_stock.py          |  70 +++--
 .../views/product_template_view.xml           |   2 +-
 mrp_mto_with_stock/views/stock_warehouse.xml  |   2 +-
 13 files changed, 214 insertions(+), 235 deletions(-)
 create mode 100644 mrp_mto_with_stock/static/description/icon.png

diff --git a/mrp_mto_with_stock/README.rst b/mrp_mto_with_stock/README.rst
index fa154d0f29e..b8606761ec7 100644
--- a/mrp_mto_with_stock/README.rst
+++ b/mrp_mto_with_stock/README.rst
@@ -29,6 +29,7 @@ To configure this module, you need to:
    standard behavior.
 
 If you want to use the second mode, based on forecast quantity
+
 #. Go to the warehouse you want to follow this behaviour.
 #. In the view form go to the tab *Warehouse Configuration* and set the 
    *MRP MTO with forecast stock*. You still need to configure the products
@@ -44,7 +45,7 @@ To use this module, you need to:
 
 .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
    :alt: Try me on Runbot
-   :target: https://runbot.odoo-community.org/runbot/129/10.0
+   :target: https://runbot.odoo-community.org/runbot/129/11.0
 
 Bug Tracker
 ===========
@@ -68,6 +69,7 @@ Contributors
 * John Walsh <John.Walsh@interclean.com>
 * Lois Rilo <lois.rilo@eficent.com>
 * Florian da Costa <florian.dacosta@akretion.com>
+* Bhavesh Odedra <bodedra@opensourceintegrators.com>
 
 Maintainer
 ----------
diff --git a/mrp_mto_with_stock/__init__.py b/mrp_mto_with_stock/__init__.py
index a7129c69a68..69f7babdfb1 100644
--- a/mrp_mto_with_stock/__init__.py
+++ b/mrp_mto_with_stock/__init__.py
@@ -1,6 +1,3 @@
-# -*- coding: utf-8 -*-
-# Copyright 2017 Eficent Business and IT Consulting Services S.L.
-# Copyright 2015 John Walsh
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
 from . import models
diff --git a/mrp_mto_with_stock/__manifest__.py b/mrp_mto_with_stock/__manifest__.py
index ef669a7fbc0..fb12f2dff2e 100644
--- a/mrp_mto_with_stock/__manifest__.py
+++ b/mrp_mto_with_stock/__manifest__.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Copyright 2017 Eficent Business and IT Consulting Services S.L.
 # Copyright 2015 John Walsh
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
@@ -10,11 +9,11 @@
     "author": "John Walsh, Eficent, Odoo Community Association (OCA)",
     "website": "https://odoo-community.org/",
     "category": "Manufacturing",
-    "version": "10.0.1.0.0",
+    "version": "11.0.1.0.0",
     "license": "AGPL-3",
     "application": False,
     "installable": True,
-    "depends": ["mrp"],
+    "depends": ["stock", "sale", "purchase", "mrp"],
     "data": [
         'views/product_template_view.xml',
         'views/stock_warehouse.xml',
diff --git a/mrp_mto_with_stock/demo/product.xml b/mrp_mto_with_stock/demo/product.xml
index 4a4d61a8cac..fefb255f20f 100644
--- a/mrp_mto_with_stock/demo/product.xml
+++ b/mrp_mto_with_stock/demo/product.xml
@@ -1,128 +1,123 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
 <!--
 Copyright (C) 2017 - Today: GRAP (http://www.grap.coop)
 @author Sylvain LE GAL (https://twitter.com/legalsylvain)
 License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 -->
 
-<odoo> <data noupdate="1">
-
-        <record id="product_product_manufacture_1" model="product.product">
-            <field name="name">TOP</field>
-            <field name="categ_id" ref="product.product_category_3"/>
-            <field name="standard_price">600.00</field>
-            <field name="list_price">400.00</field>
-            <field name="type">product</field>
-            <field name="uom_id" ref="product.product_uom_unit"/>
-            <field name="uom_po_id" ref="product.product_uom_unit"/>
-            <field name="description">TODO</field>
-            <field name="default_code">MANUF</field>
-            <field name="route_ids" eval="[(6, 0, [ref('stock.route_warehouse0_mto'), ref('mrp.route_warehouse0_manufacture')])]"/>
-        </record>
-
-        <record id="product_product_manufacture_1_1" model="product.product">
-            <field name="name">Subproduct 1</field>
-            <field name="categ_id" ref="product.product_category_3"/>
-            <field name="standard_price">300.00</field>
-            <field name="list_price">100.00</field>
-            <field name="type">product</field>
-            <field name="uom_id" ref="product.product_uom_unit"/>
-            <field name="uom_po_id" ref="product.product_uom_unit"/>
-            <field name="description">TODO</field>
-            <field name="default_code">MANUF 1-1</field>
-            <field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
-            <field name="mrp_mts_mto_location_ids" eval="[(6, 0, [ref('stock.stock_location_stock')])]"/>
-        </record>
-
-        <record id="product_product_manufacture_1_2" model="product.product">
-            <field name="name">Subproduct 2</field>
-            <field name="categ_id" ref="product.product_category_3"/>
-            <field name="standard_price">100.00</field>
-            <field name="list_price">30.00</field>
-            <field name="type">product</field>
-            <field name="uom_id" ref="product.product_uom_unit"/>
-            <field name="uom_po_id" ref="product.product_uom_unit"/>
-            <field name="description">TODO</field>
-            <field name="default_code">MANUF 1-2</field>
-            <field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
-            <field name="mrp_mts_mto_location_ids" eval="[(6, 0, [ref('stock.stock_location_stock')])]"/>
-        </record>
-
-        <record id="product_product_manufacture_1_1_1" model="product.product">
-            <field name="name">Subproduct 1-1</field>
-            <field name="categ_id" ref="product.product_category_3"/>
-            <field name="standard_price">10.00</field>
-            <field name="list_price">3.00</field>
-            <field name="type">product</field>
-            <field name="uom_id" ref="product.product_uom_unit"/>
-            <field name="uom_po_id" ref="product.product_uom_unit"/>
-            <field name="description">TODO</field>
-            <field name="default_code">MANUF 1-1-1</field>
-        </record>
-
-
-        <record id="product_product_manufacture_1_2_1" model="product.product">
-            <field name="name">Subproduct 2-1</field>
-            <field name="categ_id" ref="product.product_category_3"/>
-            <field name="standard_price">10.00</field>
-            <field name="list_price">3.00</field>
-            <field name="type">product</field>
-            <field name="uom_id" ref="product.product_uom_unit"/>
-            <field name="uom_po_id" ref="product.product_uom_unit"/>
-            <field name="description">TODO</field>
-            <field name="default_code">MANUF 1-2-1</field>
-        </record>
-
-
-        <record id="mrp_bom_manuf_1" model="mrp.bom">
-            <field name="product_tmpl_id" ref="product_product_manufacture_1_product_template"/>
-            <field name="product_uom_id" ref="product.product_uom_unit"/>
-            <field name="sequence">10</field>
-        </record>
-
-        <record id="mrp_bom_line_manuf_1_1" model="mrp.bom.line">
-            <field name="product_id" ref="product_product_manufacture_1_1"/>
-            <field name="product_qty">5</field>
-            <field name="product_uom_id" ref="product.product_uom_unit"/>
-            <field name="sequence">1</field>
-            <field name="bom_id" ref="mrp_bom_manuf_1"/>
-        </record>
-
-        <record id="mrp_bom_line_manuf_1_2" model="mrp.bom.line">
-            <field name="product_id" ref="product_product_manufacture_1_2"/>
-            <field name="product_qty">2</field>
-            <field name="product_uom_id" ref="product.product_uom_unit"/>
-            <field name="sequence">1</field>
-            <field name="bom_id" ref="mrp_bom_manuf_1"/>
-        </record>
-
-        <record id="mrp_bom_manuf_1_1" model="mrp.bom">
-            <field name="product_tmpl_id" ref="product_product_manufacture_1_1_product_template"/>
-            <field name="product_uom_id" ref="product.product_uom_unit"/>
-            <field name="sequence">10</field>
-        </record>
-
-        <record id="mrp_bom_line_manuf_1_1_1" model="mrp.bom.line">
-            <field name="product_id" ref="product_product_manufacture_1_1_1"/>
-            <field name="product_qty">2</field>
-            <field name="product_uom_id" ref="product.product_uom_unit"/>
-            <field name="sequence">1</field>
-            <field name="bom_id" ref="mrp_bom_manuf_1_1"/>
-        </record>
-
-        <record id="mrp_bom_manuf_1_2" model="mrp.bom">
-            <field name="product_tmpl_id" ref="product_product_manufacture_1_2_product_template"/>
-            <field name="product_uom_id" ref="product.product_uom_unit"/>
-            <field name="sequence">10</field>
-        </record>
-
-        <record id="mrp_bom_line_manuf_1_2_1" model="mrp.bom.line">
-            <field name="product_id" ref="product_product_manufacture_1_2_1"/>
-            <field name="product_qty">4</field>
-            <field name="product_uom_id" ref="product.product_uom_unit"/>
-            <field name="sequence">1</field>
-            <field name="bom_id" ref="mrp_bom_manuf_1_2"/>
-        </record>
-
-
-</data> </odoo>
+<odoo noupdate="1">
+    <record id="product_product_manufacture_1" model="product.product">
+        <field name="name">TOP</field>
+        <field name="categ_id" ref="product.product_category_3"/>
+        <field name="standard_price">600.00</field>
+        <field name="list_price">400.00</field>
+        <field name="type">product</field>
+        <field name="uom_id" ref="product.product_uom_unit"/>
+        <field name="uom_po_id" ref="product.product_uom_unit"/>
+        <field name="description">TODO</field>
+        <field name="default_code">MANUF</field>
+        <field name="route_ids" eval="[(6, 0, [ref('stock.route_warehouse0_mto'), ref('mrp.route_warehouse0_manufacture')])]"/>
+    </record>
+
+    <record id="product_product_manufacture_1_1" model="product.product">
+        <field name="name">Subproduct 1</field>
+        <field name="categ_id" ref="product.product_category_3"/>
+        <field name="standard_price">300.00</field>
+        <field name="list_price">100.00</field>
+        <field name="type">product</field>
+        <field name="uom_id" ref="product.product_uom_unit"/>
+        <field name="uom_po_id" ref="product.product_uom_unit"/>
+        <field name="description">TODO</field>
+        <field name="default_code">MANUF 1-1</field>
+        <field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
+        <field name="mrp_mts_mto_location_ids" eval="[(6, 0, [ref('stock.stock_location_stock')])]"/>
+    </record>
+
+    <record id="product_product_manufacture_1_2" model="product.product">
+        <field name="name">Subproduct 2</field>
+        <field name="categ_id" ref="product.product_category_3"/>
+        <field name="standard_price">100.00</field>
+        <field name="list_price">30.00</field>
+        <field name="type">product</field>
+        <field name="uom_id" ref="product.product_uom_unit"/>
+        <field name="uom_po_id" ref="product.product_uom_unit"/>
+        <field name="description">TODO</field>
+        <field name="default_code">MANUF 1-2</field>
+        <field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
+        <field name="mrp_mts_mto_location_ids" eval="[(6, 0, [ref('stock.stock_location_stock')])]"/>
+    </record>
+
+    <record id="product_product_manufacture_1_1_1" model="product.product">
+        <field name="name">Subproduct 1-1</field>
+        <field name="categ_id" ref="product.product_category_3"/>
+        <field name="standard_price">10.00</field>
+        <field name="list_price">3.00</field>
+        <field name="type">product</field>
+        <field name="uom_id" ref="product.product_uom_unit"/>
+        <field name="uom_po_id" ref="product.product_uom_unit"/>
+        <field name="description">TODO</field>
+        <field name="default_code">MANUF 1-1-1</field>
+    </record>
+
+    <record id="product_product_manufacture_1_2_1" model="product.product">
+        <field name="name">Subproduct 2-1</field>
+        <field name="categ_id" ref="product.product_category_3"/>
+        <field name="standard_price">10.00</field>
+        <field name="list_price">3.00</field>
+        <field name="type">product</field>
+        <field name="uom_id" ref="product.product_uom_unit"/>
+        <field name="uom_po_id" ref="product.product_uom_unit"/>
+        <field name="description">TODO</field>
+        <field name="default_code">MANUF 1-2-1</field>
+    </record>
+
+    <record id="mrp_bom_manuf_1" model="mrp.bom">
+        <field name="product_tmpl_id" ref="product_product_manufacture_1_product_template"/>
+        <field name="product_uom_id" ref="product.product_uom_unit"/>
+        <field name="sequence">10</field>
+    </record>
+
+    <record id="mrp_bom_line_manuf_1_1" model="mrp.bom.line">
+        <field name="product_id" ref="product_product_manufacture_1_1"/>
+        <field name="product_qty">5</field>
+        <field name="product_uom_id" ref="product.product_uom_unit"/>
+        <field name="sequence">1</field>
+        <field name="bom_id" ref="mrp_bom_manuf_1"/>
+    </record>
+
+    <record id="mrp_bom_line_manuf_1_2" model="mrp.bom.line">
+        <field name="product_id" ref="product_product_manufacture_1_2"/>
+        <field name="product_qty">2</field>
+        <field name="product_uom_id" ref="product.product_uom_unit"/>
+        <field name="sequence">1</field>
+        <field name="bom_id" ref="mrp_bom_manuf_1"/>
+    </record>
+
+    <record id="mrp_bom_manuf_1_1" model="mrp.bom">
+        <field name="product_tmpl_id" ref="product_product_manufacture_1_1_product_template"/>
+        <field name="product_uom_id" ref="product.product_uom_unit"/>
+        <field name="sequence">10</field>
+    </record>
+
+    <record id="mrp_bom_line_manuf_1_1_1" model="mrp.bom.line">
+        <field name="product_id" ref="product_product_manufacture_1_1_1"/>
+        <field name="product_qty">2</field>
+        <field name="product_uom_id" ref="product.product_uom_unit"/>
+        <field name="sequence">1</field>
+        <field name="bom_id" ref="mrp_bom_manuf_1_1"/>
+    </record>
+
+    <record id="mrp_bom_manuf_1_2" model="mrp.bom">
+        <field name="product_tmpl_id" ref="product_product_manufacture_1_2_product_template"/>
+        <field name="product_uom_id" ref="product.product_uom_unit"/>
+        <field name="sequence">10</field>
+    </record>
+
+    <record id="mrp_bom_line_manuf_1_2_1" model="mrp.bom.line">
+        <field name="product_id" ref="product_product_manufacture_1_2_1"/>
+        <field name="product_qty">4</field>
+        <field name="product_uom_id" ref="product.product_uom_unit"/>
+        <field name="sequence">1</field>
+        <field name="bom_id" ref="mrp_bom_manuf_1_2"/>
+    </record>
+</odoo>
diff --git a/mrp_mto_with_stock/models/__init__.py b/mrp_mto_with_stock/models/__init__.py
index c617a225fc9..6a98762c4cb 100644
--- a/mrp_mto_with_stock/models/__init__.py
+++ b/mrp_mto_with_stock/models/__init__.py
@@ -1,6 +1,3 @@
-# -*- coding: utf-8 -*-
-# Copyright 2017 Eficent Business and IT Consulting Services S.L.
-# Copyright 2015 John Walsh
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
 from . import mrp_production
diff --git a/mrp_mto_with_stock/models/mrp_production.py b/mrp_mto_with_stock/models/mrp_production.py
index dc6a585f534..313ba4bba64 100644
--- a/mrp_mto_with_stock/models/mrp_production.py
+++ b/mrp_mto_with_stock/models/mrp_production.py
@@ -1,9 +1,9 @@
-# -*- coding: utf-8 -*-
 # Copyright 2017 Eficent Business and IT Consulting Services S.L.
 # Copyright 2015 John Walsh
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
 from odoo import api, models
+from odoo.exceptions import UserError
 import logging
 _logger = logging.getLogger(__name__)
 
@@ -11,10 +11,9 @@
 class MrpProduction(models.Model):
     _inherit = 'mrp.production'
 
-    @api.multi
-    def _adjust_procure_method(self):
-        # Si location => By pass method...
-        super(MrpProduction, self)._adjust_procure_method()
+    def _get_procurement_group_data(self, move):
+        return {'partner_id': move.partner_id.id,
+                'name': '{0}:{1}'.format(self.name, move.product_id.name)}
 
     @api.multi
     def action_assign(self):
@@ -26,78 +25,76 @@ def action_assign(self):
         res = super(MrpProduction, self).action_assign()
         # try to create procurements:
         move_obj = self.env['stock.move']
+        procurement_obj = self.env['procurement.group']
         for production in self:
             warehouse = production.location_src_id.get_warehouse()
             mto_with_no_move_dest_id = warehouse.mrp_mto_mts_forecast_qty
             for move in self.move_raw_ids:
-                if (move.state == 'confirmed' and move.location_id in
-                        move.product_id.mrp_mts_mto_location_ids and not
-                        mto_with_no_move_dest_id):
-                    domain = [('product_id', '=', move.product_id.id),
-                              ('move_dest_id', '=', move.id)]
-                    if move.group_id:
-                        domain.append(('group_id', '=', move.group_id.id))
-                    procurement = self.env['procurement.order'].search(domain)
+                group = new_move = procurement = False
+                qty_to_procure = 0.0
+                if move.state in ('partially_available', 'confirmed') \
+                        and move.location_id in \
+                        move.product_id.mrp_mts_mto_location_ids \
+                        and not mto_with_no_move_dest_id:
+                    # Search procurement group which has created from here
+                    group_name = '{0}:{1}'.format(
+                        production.name, move.product_id.name)
+                    procurement = procurement_obj.search(
+                        [('name', '=', group_name)])
                     if not procurement:
                         # We have to split the move because we can't have
                         # a part of the move that have ancestors and not the
                         # other else it won't ever be reserved.
-                        qty_to_procure = (move.remaining_qty -
-                                          move.reserved_availability)
+                        qty_to_procure = (
+                            move.product_uom_qty - move.reserved_availability)
                         if qty_to_procure < move.product_uom_qty:
-                            move.do_unreserve()
-                            new_move_id = move.split(
+                            move._do_unreserve()
+                            new_move_id = move._split(
                                 qty_to_procure,
-                                restrict_lot_id=move.restrict_lot_id,
                                 restrict_partner_id=move.restrict_partner_id)
-                            new_move = move_obj.browse(
-                                new_move_id)
-                            move.action_assign()
+                            new_move = move_obj.browse(new_move_id)
+                            move._action_assign()
                         else:
                             new_move = move
-
-                        proc_dict = self._prepare_mto_procurement(
-                            new_move, qty_to_procure,
-                            mto_with_no_move_dest_id)
-                        self.env['procurement.order'].create(proc_dict)
-
-                if (move.state == 'confirmed' and move.location_id in
-                        move.product_id.mrp_mts_mto_location_ids and
-                        move.procure_method == 'make_to_stock' and
-                        mto_with_no_move_dest_id):
+                        pg_data = production._get_procurement_group_data(
+                            new_move)
+                        group = procurement_obj.create(pg_data)
+                if move.state in ('partially_available', 'confirmed') \
+                        and move.procure_method == 'make_to_stock' \
+                        and mto_with_no_move_dest_id and \
+                        move.location_id in \
+                        move.product_id.mrp_mts_mto_location_ids:
                     qty_to_procure = production.get_mto_qty_to_procure(move)
                     if qty_to_procure > 0.0:
-                        proc_dict = self._prepare_mto_procurement(
-                            move, qty_to_procure, mto_with_no_move_dest_id)
-                        proc_dict.pop('move_dest_id', None)
-                        self.env['procurement.order'].create(proc_dict)
+                        pg_data = production._get_procurement_group_data(move)
+                        group = procurement_obj.create(pg_data)
+                        new_move = move
+                if group:
+                    production.run_procurement(new_move, group, qty_to_procure)
         return res
 
-    def _prepare_mto_procurement(self, move, qty, mto_with_no_move_dest_id):
-        """Prepares a procurement for a MTO product."""
-        origin = ((move.group_id and move.group_id.name + ":") or "") + \
-                 ((move.name and move.name + ":") or "") + 'MTO -> Production'
-        group_id = move.group_id and move.group_id.id or False
-        route_ids = self.env.ref('stock.route_warehouse0_mto')
-        warehouse_id = (move.warehouse_id.id or (move.picking_type_id and
-                        move.picking_type_id.warehouse_id.id or False))
-        vals = {
-            'name': move.name + ':' + str(move.id),
-            'origin': origin,
-            'company_id': move.company_id and move.company_id.id or False,
-            'date_planned': move.date,
-            'product_id': move.product_id.id,
-            'product_qty': qty,
-            'product_uom': move.product_uom.id,
-            'location_id': move.location_id.id,
-            'group_id': group_id,
-            'route_ids': [(6, 0, route_ids.ids)],
-            'warehouse_id': warehouse_id,
-            'priority': move.priority,
-        }
-        if not mto_with_no_move_dest_id:
-            vals['move_dest_id'] = move.id
-        return vals
+    @api.multi
+    def run_procurement(self, move, group, qty):
+        self.ensure_one()
+        errors = []
+        values = move._prepare_procurement_values()
+        origin = ((group and group.name + ":") or "") + 'MTO -> Production'
+        values['route_ids'] = move.product_id.route_ids
+        try:
+            self.env['procurement.group'].run(
+                move.product_id,
+                qty,
+                move.product_uom,
+                move.location_id,
+                origin,
+                origin,
+                values
+            )
+        except UserError as error:
+                errors.append(error.name)
+        if errors:
+            raise UserError('\n'.join(errors))
+        return True
 
     @api.multi
     def get_mto_qty_to_procure(self, move):
diff --git a/mrp_mto_with_stock/models/product_template.py b/mrp_mto_with_stock/models/product_template.py
index a6e1142bf4e..6e8624deacf 100644
--- a/mrp_mto_with_stock/models/product_template.py
+++ b/mrp_mto_with_stock/models/product_template.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Copyright 2017 Eficent Business and IT Consulting Services S.L.
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
diff --git a/mrp_mto_with_stock/models/stock_warehouse.py b/mrp_mto_with_stock/models/stock_warehouse.py
index 75d3f30f0d1..2e2fe213c43 100644
--- a/mrp_mto_with_stock/models/stock_warehouse.py
+++ b/mrp_mto_with_stock/models/stock_warehouse.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Copyright 2017 Akretion
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
diff --git a/mrp_mto_with_stock/static/description/icon.png b/mrp_mto_with_stock/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}<C%<R2Kc9faym6aW`f0Dh5$js*d
z_}}Z!;XIG;_cPz`_vag-p{7Ve$Uq1H00~A(?iu(VaQlMefnU3&OozZXm@69d91cGG
z;O61r&je0NdamH#&)mKsXk?Zb_)B^>d0jUxM@u(PQx^-s)6<jB#=*|j%+$$(&(Xyy
zYgd8+09XKwoa}S2?48%%ZU#L~n^g{fE40h%YEx5by;GuJ(K|vI1uO;0m}=J7R4@Bs
z>97TX<v{QF=s?r`z`m$a0ZvrhBU7}{15RN9M`j!kv_Mp+3~{||YNuFzHNvhMYm3=Q
zo!q+OJ5(%-oNM^I^M%*luKMiVL`lo`bcKGymX7i3MIFWj1i|9+CGNvn`cu-RsK0Qh
zoYlwB>`ehR4?GS^qbkof1cslKgk<Uw6DeIxZyT_?=OwX|lwC*A?ac*gHF7jmS080$
z>U)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~!
zVpnB`o+K7|Al`Q_U<UrcmRnh6jExs}l(hZs0%T~Dnpu-NENdhioRv(T{Qmv>;eD$B
zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA
z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__
zc+blN2UAB0=617@>_<D4$IPL<k1zq(*VmlDPer&h1n6`AG;9A!_W=N$JthhQWXZ<i
zGURc6f<i*joK3xSWaOOXxAc8ES>u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_
zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I
z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz<Z(Qt1jC2cC|
z6WbMo9YgON{L#ZDl$sV4*<CP(>{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U
z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)(
z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH
zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW
z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx
zOGVPhVRTGPtv0o}RfVP;Nd(|CB)<HrC1(%ZOEd8PI?r9b_$Cp-${bh59Z_R7n&YCp
zl8lfMpes*8{FVm;oJH@0LLoWmxD59u?JwHz2iRrAaE0`Hc&g;t5~$P*kdeOZn9OJ3
zRczo@ZkWU)RG+hcfH~{49Vvb3D(W0wRX#|$cA0Iqy^VR~(4hqA2AFI-rK!FM!#fJ_
zGFI@iqJOPXZ!=VjTS3dMuu~9xU3K1&?th;$)cqM#WGxbDEyB$y`#9j%>I;*t&QO8h
zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9
zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz#
z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7t<dboft~zeDZwK=+l2bFWs5^+|r{J6GO9Cwl
z&SW58BRs?XdFLuhtzl7WLbQ#~z#`jAB3AbSUg6jW6@qVd2Q~9qN(izT1y*>F#6nHA
zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K=
z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS
zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C
zuVl&0duN<;uOsB3%T9Fp8t{ED108<?)`y_~Hnd9AUX7h-H?jVuU|}My+C=TjH(jKz
zqMVr0re3S$H@t{zI95qa)+Crz*5Zj}Ao%4Z><+W(nOZd?gDnfNBC3>M8WE61$So|P
zVvqH0SNtDTcs<xiU1;=a39$d&&l5EwoIH1db#`S9Kw!YC1jhR)VbCWMptlUUkpfif
zMzi-i8)WL?|C$*Q?iqbS{w<lA9XN(rD)VS<zn>UdzaMDpT=Ty0pDHHNL@Z0w$Y`XO
z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1
zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_
zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8
zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ>
zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}a<Xwa$pLotZk<
zsykXwQO37I=aXew7x=}YWiW)^p)|C#g+)an!@j?EcY8C0t)BlK#y{YLtkJ6=D6H-5
zp2*ANf@>RBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN
z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=<bK!vY7J*RP!&i_xU}i*o6o
z?xN*1<rEe1L2HBkCSgiYM3a|4w?Bo7CJL7?Eh;9An1m$1t?h1v92<Xg2(#)bjbL|o
zH_H0}!Og=1dOBynXHu>@hbCRcfT5ji<pmK_U*~T(A$I-*rM$8-BCv{=@=7F)2pdtU
z5==tp!}A*&Xgf{F>gwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h
zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&<KAVm#0W>BE*}XfU|H&(FssBqY=hPCt`d
zH?@s2>I(|;fcW&YM6#V<T#ysvE$@4oRO>#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB
zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz
z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I
zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R<sv-KjYb}UVFjITQ)VAEWu*)Lz7*-f^A*H
z<25#Ynt~-Qh?$wWx4$1=T2`j@bKp!)3IXh(LC@)%WGW$+j(tGz(6#bGw&K0j=Np@B
zt}@t$R`z(>?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X
zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD
z<sX7(ZJc+Q;#xP8uk`jnF@a^|TWw*55if6@@}%7lOBaGo9Ia-e?`RPQc^w^EWfhe}
zHWHTvDA+r}Xf5Yqpr;QU-88%QC9F_>#z-)AXwSRY?<M%E84!g*1GC?E>OPefw^iI+
z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd
z$<h)Fm>6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs
z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I
z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$
z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV<GYik+VfZene%bm(n6
z`r@rc^TVw7EN{|O7rORMlw)zt(Z#enc3joE#IIk!M)L8gk^go9E9AxiP9o#OqmvV>
z@;rlc*NRK7i3y5BETSKuumEN`Xu_8<BQ)z0!-JuC8x}?$qo8SEko}oUWNI(4h*VHO
zAi!Egy!f(o9aHs2dhSE6ki(be*&w&+WLOB<(b3T_Hide(NvVvLQV{BN|2?UJFaY*@
z9CXA5B_*8i5Bf6sn~d`R>GP1Ri=OK<SGIb#BCTo3qI#UBUg+dkR+2ilUwIg%XFV;l
z+>Q$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s
zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6
zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5<g6yi=XozU}zReXL{rA%c`$IQAs<ObZ
zep*ITZ0C(~W*`?XH^l1t7&+qigAfY9tVJ5DH!~jY>#ZRj8kg}dS7_V&^%#Do==#`u
zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK<aUZ^OhBu;1e6t#{
zxKehVgz`HT;A`FMivG<tq0OcrXwHUX_<$j<uk%m>#HN`!1vBJHnC+RM&yIh8{gG2q
zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH
zVWo*OwYElb#uyW{Imam6f2<eMTQj#)z8+N&ZY?tSPo%&2eVNU=4=?rlO<*9Twaxco
zEVE=Jh?_x>rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c
zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT
zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+
z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ
zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy
zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC)
zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#B<pkvWZft^C&
z;+zNo+VJNluxaDF!`gW+F0=MxsCQ~~#CYKa;ULfj5hTa8a6;d*(<eeQ7-ZQgz2et^
zf|7URfj;x*#HiF0wuBCOTEpbeD&kkENqolCm2#cQGHCeEC<&I3j+P6?sX?BPp4~46
zx-S~EJ>oo{AH8n$<d4loB?vL3RqXwK_COrQ6xRoWGOdFnWy(hhzrG8k;2k}8Zj&>a
zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x!
zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X
zZ3WYJtHp_ri(}SQAPjv+Y+0=<GD??Na(2AG`s>fH4krOP@S&=zZ-t1jW1o@}z;xk8
z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A
z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H
zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n=
z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~N<X{IYiJ3k=4u-u*nJEBnJ<OdI8P
zXmK`OYkO5a{YDhI3PL|H4m=p>Bvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK
z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z
zzCR$P#uktu+#!w)cX!<osOkId_HzAT-HD2N`M+v2l+zwdW%GgZbQMuhfE*hHjKXKg
z45hphqVETPDbX6wpTlZqza0gFaRGh`3L~0id)F6#%@9;w(e%PjzuD7@inuToA!B?F
zCMLJc!u{3N)s?lB-!11!GxXsCak8zQomO)gmn02f-5~OkMYnm~#jVwwYNw@LAv!KN
z-n`q1|AXw*TW>lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h
z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD
z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW
zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@
zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz
z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y<
zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X
zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6
zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V<h953|jk-C&|3)z%
ze&_30-6q1)a0(!xXqA+_t(WC`HA_yYaW@>`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6%
z2(}&uGRF;p9<Q%jdNy1%e7XTzyu7EEQT(5LrnvX~T%K!IuDyHY`ZneVJu#k_1T)xA
z*yxB?y4!pOJ$DTZzBm|8OIQq+AtV25aJ+X5EJjAu><tfuiNClI2BSoMgqLnU-5t95
zEnZ(^g~1RgD=UMB({c;$HujG&%DqGF;5jI~roRT+(rOoS$6f6SsURIuAVkAeIVc~{
z5ZxLN%m%Z*Sg;qYCf3<$dE6~&w_!EBx%yl4YC~LH{FCFNRBc_I>2eS*sE*o<YSPrx
z{M(reV{~jKue#Y6ZOnqJia{fQc!UxV4m)l389OmzR6A3|2!i<P{r82jKw+zq4%@ny
znopi6g!1Vx9Bml#a~KdL2lp2C)qSTKIh43vgycQHfQb_I!kQY&p;X@Bz|{^SXsW1K
zP&Ag1CW_r6u5-4=s(W>R$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(|
z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4<V=<
zfr<*%iOB1EY}w3tF2Cwl7a2OS&~Y-lu<s)T^9=OFU8(CeN|63BiMxf*)5gesGU<eZ
z9DigzL3+quZ1o2T<KAZbCGJx&lrl*e#}Dpv24bZO$B<Yoc5hbeP0y?@P%|Tvw||e%
zV#e^q0D2R_Oq_c+=x5vP&hg4k+df{o7$aNZCM>PdpwWDop%^}n;dD#K4s#DYA8SHZ
z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H
zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^W<wsNa}nUDpNk$q{>Yu2u5kubqmwp%drJ6
z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d}
z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A
zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&<F<Z7l=VnwB^RA&^APMi=Tn
zNc}%IJL~xB4OP6bJNwAw)~Ma2=UP0dhr%X=kco(it+@F<#$xrIJ8@|{Buh<)h`xg?
z_U}pe=3#zmDfdqE4`Hyn<!?&CfCp#GTeXo8;AYd1Opd&cXER8cBSOF3iFJ#XPgQVp
zZSiQf7V^Dt?ITs8aMF~e1hq0P@^oB)#byh|6q_7F1B%ST%WL~J?ySn>YOi-3|1QKB
z<?_cUy)V3go%%^l)lRa=dmY_XQG3Z{Q?52d$qG}vIe|EZbYEtrR$rh(iS)O#dU-(>
z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp
zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#<i<Zx(`=7k~{%`w&<EbG}U<
z0%E^8lyw>s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@<TSeYlROCt(gU?O((-qu
zs>QS0TEL_?njX|<LXnSC4TlId(D4W|GQ?L@$3Ue@N8p=l9-sC<=z(lPk;^sT(v2*k
zc~vp#Hp`mXjzhml2NMCh^h5)sqsan+jJ_l<a4w|G&ac02hrz8#6|kFraA~rta0}!q
zB4BE{QWY7MtxHn_xB);Avf#Lf<GG<A?Q3JVyc1p8^H}$8(Gn=_&F1!m8$sKyeue+L
z5&392wm+wO;_oXoTEJ=wxVXk}dt<d~CgUUMW_PPTe(c<7n18#mVaX)vK}-PzZq7<b
zNJbVTFaq(8ZLx|A*G$H3ugT2aVziDEGa66FVt@hr1|D{RWN6yuqlglM!rp^YG;UpG
zrnm?ek079l3VoOU^p%f^A9Yzn8IVX?^rB4LbgJ|PONhzM_0{P?S(V$OI=u5IBjfT#
z0ntLLnhg5$0fAHJaG6HCx4X7;RmvMtE}8C>@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6#
z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f#
zuT7fv<Q3o5LspCx-RPkzLw{VsDE>jSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC
zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv!
zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8<JV*@W33SMHM;w!OmUXar{O;_8j>ul%rG
z-<zwGD)!Y{+(T{%ob~79zpXX%zulyiy1_UHWvu@YqxKAK3e9GO6Os4R0Naujn>wfS
zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9
z^zP;K#|)$`^Rb{rnH<AdQ^(;gQMcF>GH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE#
z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz
zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8<!P
zAOHj?oPbjQ%hh|vE_1IMB)43eQpeLi&)R>etW=xJvni)8eHi`H$%#zn^WJ<U7gogJ
z?A^!2J~rI78JH|Ml2EldmKY5K8;Zx(FGcBdM<5oe#G+nd6dObqz@Af%%M*aBE_pn8
zXQo2`Bw*IwvP3#1Ev<%YocpBodO9+Rw~`5*CY3{L;qf1PxV!r%NI+#Q1f8GU7$~#U
zAA9$4&g-k=8BYi*3i@0^UX}nTQVyOf)8T(}G^Ti?Vqvk~bJRR#EAQ?u`dClPxk@{;
zxvO?%jSX`2{8|^z0*C5DR1Z^>5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t
z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN
zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01F<S%GT3P{Ck&Y*^gWuie`o_g+ZNDNIV|F
z)zEe|Ij*4$H1(<RLz0($;AD3VsUJwI@liw^?fh(V?VC`Sz7h`*Q<VYlhbHJ?&h+!W
zAJC)U;Lx_QRaSNFYbyi|7+MeNTgA+Znh}qFzf>mx5XbRo6+n|pP(&nodMoap^z{~q
ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k
zQ<WB5+u#`K#~J$81)#?BuTOKLk|+S>^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG
z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff
z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1
zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO
zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}2<F#{*|k0E{$&_`~)
zkzDcsi#!7r<a8lPUCMj?{CK;e|9#-xj>6NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$
zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV(<Rzgqw(Ze!7hEGKKx((>
z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb
zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4
z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_N<mojSrG!`
zgkqx4t<XLL6ZUppvjeV9PJ6dG>hT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{
zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*<bTMtKO;_Z)R
zRSOJrd5TFO0aO%#%-sNa{`SiQ^$$1^@oUd&^lB{MKZ>vIg?@fVFSmMpaw0qtTRbx}
z({Pg?#{2`sc9)M5N$*N|4;^t$+Q<Wh^yJ?FzJ*$wiB{j;CMy+?m1MbsJo0ubR==f9
z>P?#mo<zt1E6=Ilm*nbmYmpxfAj7*m*Wh@=7|;!%(-pviW`nuCktLveet9^$*y^>v
zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22
zc2Ix|App^>v6(3L_MCU0d3W##AB<Fxl*nmny6_RsCu%1a)so}}uCXSzwY70Y@uTxK
z=5nu(N*2HDbrIcL)t_*{*84mvmV_Y9<vxHJJ;0gUdNjyW)jDb|@|j*qR8;gsMa5Ir
z02fHv=%xyN9VLv_ZLL4y|F*p$S^^T47m{aok5{rmM{$s7^Xu2!_fo1$IG6kkG_Tgx
zFfjPm3;g>0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq
zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t<
z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k
z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp
z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{}
zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I

literal 0
HcmV?d00001

diff --git a/mrp_mto_with_stock/tests/__init__.py b/mrp_mto_with_stock/tests/__init__.py
index f8065ee2e46..575f33c5824 100644
--- a/mrp_mto_with_stock/tests/__init__.py
+++ b/mrp_mto_with_stock/tests/__init__.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-# Copyright 2017 Eficent Business and IT Consulting Services S.L.
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
 from . import test_mrp_mto_with_stock
diff --git a/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py b/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
index c9d844cde87..bbdebd2fe4a 100644
--- a/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
+++ b/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Copyright 2017 Eficent Business and IT Consulting Services S.L.
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
 
@@ -10,6 +9,7 @@ class TestMrpMtoWithStock(TransactionCase):
     def setUp(self, *args, **kwargs):
         super(TestMrpMtoWithStock, self).setUp(*args, **kwargs)
         self.production_model = self.env['mrp.production']
+        self.procurement_model = self.env['procurement.group']
         self.bom_model = self.env['mrp.bom']
         self.stock_location_stock = self.env.ref('stock.stock_location_stock')
         self.manufacture_route = self.env.ref(
@@ -67,20 +67,12 @@ def test_manufacture_with_forecast_stock(self):
         self.production.action_assign()
 
         self.assertEqual(self.production.availability, 'partially_available')
-
         self.assertEquals(self.subproduct1.virtual_available, 0)
-
-        procurement_subproduct1 = self.env['procurement.order'].search(
-            [('product_id', '=', self.subproduct1.id),
-             ('group_id', '=', self.production.procurement_group_id.id)])
-
-        self.assertEquals(len(procurement_subproduct1), 1)
-        self.assertEquals(procurement_subproduct1.product_qty, 3)
-
-        production_sub1 = procurement_subproduct1.production_id
+        production_sub1 = self.production_model.search(
+            [('origin', 'ilike', self.production.name)])
         self.assertEqual(production_sub1.state, 'confirmed')
+        self.assertEquals(len(production_sub1), 1)
         self.assertEqual(production_sub1.product_qty, 3)
-
         self._update_product_qty(self.subproduct1, self.stock_location_stock,
                                  7)
 
@@ -88,20 +80,18 @@ def test_manufacture_with_forecast_stock(self):
         self.production2 = self.production_model.create(
             self._get_production_vals())
         self.production2.action_assign()
-        procurement_subproduct1_2 = self.env['procurement.order'].search(
-            [('product_id', '=', self.subproduct1.id),
-             ('group_id', '=', self.production2.procurement_group_id.id)])
-        self.assertEquals(len(procurement_subproduct1_2), 0)
+        p = self.production_model.search(
+            [('origin', 'ilike', self.production2.name)])
+        self.assertEquals(len(p), 0)
         self.assertEquals(self.production2.availability, 'assigned')
         self.production2.do_unreserve()
-
         self.assertEquals(self.subproduct1.virtual_available, 0)
 
         self.production.action_assign()
         # We check if first MO is able to assign it self even if it has
         # previously generate procurements, it would not be the case in the
         # other mode (without mrp_mto_mts_reservable_stock on warehouse)
-        self.assertEquals(self.production.availability, 'assigned')
+        self.assertEquals(self.production.availability, 'partially_available')
 
         self.assertEquals(self.subproduct1.virtual_available, 0)
 
@@ -126,33 +116,39 @@ def test_manufacture_with_reservable_stock(self):
         # Create MO and check it create sub assemblie MO.
         self.production.action_assign()
         self.assertEqual(self.production.state, 'confirmed')
+        mo = self.production_model.search(
+            [('origin', 'ilike', self.production.name)])
+        self.assertEqual(mo.product_qty, 3)
 
-        procurement_sub1 = self.env['procurement.order'].search(
-            [('product_id', '=', self.subproduct1.id),
-             ('move_dest_id', 'in', self.production.move_raw_ids.ids)])
-        self.assertEquals(len(procurement_sub1), 1)
-
-        procurement_sub2 = self.env['procurement.order'].search(
-            [('product_id', '=', self.subproduct2.id),
-             ('move_dest_id', 'in', self.production.move_raw_ids.ids)])
-        self.assertEquals(len(procurement_sub2), 0)
+        mo.action_assign()
+        self.assertEqual(mo.availability, 'assigned')
+        wizard_obj = self.env['mrp.product.produce']
+        default_fields = ['lot_id', 'product_id', 'product_uom_id',
+                          'product_tracking', 'consume_line_ids',
+                          'production_id', 'product_qty', 'serial']
+        wizard_vals = wizard_obj.with_context(active_id=mo.id).\
+            default_get(default_fields)
+        wizard = wizard_obj.create(wizard_vals)
+        wizard.do_produce()
+        self.assertEqual(len(mo), 1)
+        mo.button_mark_done()
+        self.assertEqual(mo.availability, 'assigned')
+        self.assertEquals(self.subproduct1.qty_available, 5)
 
-        production_sub1 = procurement_sub1.production_id
-        self.assertEqual(production_sub1.product_qty, 3)
-        production_sub1.action_assign()
-        self.assertEqual(production_sub1.availability, 'assigned')
+        self.production.action_assign()
+        self.assertEqual(self.production.state, 'confirmed')
 
         wizard_obj = self.env['mrp.product.produce']
         default_fields = ['lot_id', 'product_id', 'product_uom_id',
                           'product_tracking', 'consume_line_ids',
                           'production_id', 'product_qty', 'serial']
-        wizard_vals = wizard_obj.with_context(active_id=production_sub1.id).\
+        wizard_vals = wizard_obj.with_context(active_id=self.production.id).\
             default_get(default_fields)
 
         wizard = wizard_obj.create(wizard_vals)
         wizard.do_produce()
-        self.assertTrue(production_sub1.check_to_done)
-        self.assertEquals(self.subproduct1.qty_available, 2)
-        production_sub1.button_mark_done()
-        self.assertEquals(self.subproduct1.qty_available, 5)
-        self.assertEqual(self.production.availability, 'assigned')
+
+        self.assertTrue(self.production.check_to_done)
+        self.production.button_mark_done()
+        self.assertEqual(self.production.state, 'done')
+        self.assertEquals(self.subproduct2.qty_available, 2)
diff --git a/mrp_mto_with_stock/views/product_template_view.xml b/mrp_mto_with_stock/views/product_template_view.xml
index cbe221f8f9b..5eff34d8997 100644
--- a/mrp_mto_with_stock/views/product_template_view.xml
+++ b/mrp_mto_with_stock/views/product_template_view.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0"?>
 <!-- Copyright 2017 Eficent Business and IT Consulting Services S.L.
      License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
 
diff --git a/mrp_mto_with_stock/views/stock_warehouse.xml b/mrp_mto_with_stock/views/stock_warehouse.xml
index 68a4266ce24..6775e1e8044 100644
--- a/mrp_mto_with_stock/views/stock_warehouse.xml
+++ b/mrp_mto_with_stock/views/stock_warehouse.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0"?>
 <!-- Copyright 2017 Akretion
      License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
 

From af86bde8011b245605b15788f9a114eb236c8673 Mon Sep 17 00:00:00 2001
From: Florian da Costa <florian.dacosta@akretion.com>
Date: Mon, 9 Apr 2018 22:27:20 +0200
Subject: [PATCH 10/10] Fix mto_with_no_move_dest_id option + avoid useless
 procurement group creation

---
 mrp_mto_with_stock/models/mrp_production.py   | 64 +++++++++----------
 .../tests/test_mrp_mto_with_stock.py          |  2 +-
 2 files changed, 32 insertions(+), 34 deletions(-)

diff --git a/mrp_mto_with_stock/models/mrp_production.py b/mrp_mto_with_stock/models/mrp_production.py
index 313ba4bba64..118f3ca2a46 100644
--- a/mrp_mto_with_stock/models/mrp_production.py
+++ b/mrp_mto_with_stock/models/mrp_production.py
@@ -4,6 +4,7 @@
 
 from odoo import api, models
 from odoo.exceptions import UserError
+import copy
 import logging
 _logger = logging.getLogger(__name__)
 
@@ -25,60 +26,57 @@ def action_assign(self):
         res = super(MrpProduction, self).action_assign()
         # try to create procurements:
         move_obj = self.env['stock.move']
-        procurement_obj = self.env['procurement.group']
         for production in self:
             warehouse = production.location_src_id.get_warehouse()
             mto_with_no_move_dest_id = warehouse.mrp_mto_mts_forecast_qty
-            for move in self.move_raw_ids:
-                group = new_move = procurement = False
+            move_ids = copy.copy(self.move_raw_ids.ids)
+            for move in move_obj.browse(move_ids):
+                new_move = False
                 qty_to_procure = 0.0
                 if move.state in ('partially_available', 'confirmed') \
                         and move.location_id in \
                         move.product_id.mrp_mts_mto_location_ids \
                         and not mto_with_no_move_dest_id:
-                    # Search procurement group which has created from here
-                    group_name = '{0}:{1}'.format(
-                        production.name, move.product_id.name)
-                    procurement = procurement_obj.search(
-                        [('name', '=', group_name)])
-                    if not procurement:
-                        # We have to split the move because we can't have
-                        # a part of the move that have ancestors and not the
-                        # other else it won't ever be reserved.
-                        qty_to_procure = (
-                            move.product_uom_qty - move.reserved_availability)
-                        if qty_to_procure < move.product_uom_qty:
-                            move._do_unreserve()
-                            new_move_id = move._split(
-                                qty_to_procure,
-                                restrict_partner_id=move.restrict_partner_id)
-                            new_move = move_obj.browse(new_move_id)
-                            move._action_assign()
-                        else:
-                            new_move = move
-                        pg_data = production._get_procurement_group_data(
-                            new_move)
-                        group = procurement_obj.create(pg_data)
-                if move.state in ('partially_available', 'confirmed') \
+                    # We have to split the move because we can't have
+                    # a part of the move that have ancestors and not the
+                    # other else it won't ever be reserved.
+                    qty_to_procure = (
+                        move.product_uom_qty - move.reserved_availability)
+                    if qty_to_procure < move.product_uom_qty:
+                        move._do_unreserve()
+                        new_move_id = move._split(
+                            qty_to_procure,
+                            restrict_partner_id=move.restrict_partner_id)
+                        new_move = move_obj.browse(new_move_id)
+                        move._action_assign()
+                    else:
+                        new_move = move
+                elif move.state in ('partially_available', 'confirmed') \
                         and move.procure_method == 'make_to_stock' \
                         and mto_with_no_move_dest_id and \
                         move.location_id in \
                         move.product_id.mrp_mts_mto_location_ids:
                     qty_to_procure = production.get_mto_qty_to_procure(move)
                     if qty_to_procure > 0.0:
-                        pg_data = production._get_procurement_group_data(move)
-                        group = procurement_obj.create(pg_data)
                         new_move = move
-                if group:
-                    production.run_procurement(new_move, group, qty_to_procure)
+                    else:
+                        continue
+                if new_move:
+                    production.run_procurement(new_move, qty_to_procure,
+                                               mto_with_no_move_dest_id)
         return res
 
     @api.multi
-    def run_procurement(self, move, group, qty):
+    def run_procurement(self, move, qty, mto_with_no_move_dest_id):
         self.ensure_one()
         errors = []
         values = move._prepare_procurement_values()
-        origin = ((group and group.name + ":") or "") + 'MTO -> Production'
+        # In that mode, we don't want any link between the raw material move
+        # And the previous move generated now.
+        if mto_with_no_move_dest_id:
+            values.pop('move_dest_ids', None)
+        origin = '{0}:{1}'.format(self.name, move.product_id.name) + \
+                 ':MTO -> Production'
         values['route_ids'] = move.product_id.route_ids
         try:
             self.env['procurement.group'].run(
diff --git a/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py b/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
index bbdebd2fe4a..24e3db02bff 100644
--- a/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
+++ b/mrp_mto_with_stock/tests/test_mrp_mto_with_stock.py
@@ -91,7 +91,7 @@ def test_manufacture_with_forecast_stock(self):
         # We check if first MO is able to assign it self even if it has
         # previously generate procurements, it would not be the case in the
         # other mode (without mrp_mto_mts_reservable_stock on warehouse)
-        self.assertEquals(self.production.availability, 'partially_available')
+        self.assertEquals(self.production.availability, 'assigned')
 
         self.assertEquals(self.subproduct1.virtual_available, 0)