stock_mts_mto_rule

This commit is contained in:
jbeficent
2016-04-12 10:44:31 +02:00
committed by Pierrick Brun
parent fb1cd6a3a5
commit cd38204fc3
4 changed files with 29 additions and 38 deletions

View File

@@ -70,8 +70,6 @@ stock-logistics-warehouse/issues/new?body=module:%20
stock_mts_mto_rule%0Aversion:%20 stock_mts_mto_rule%0Aversion:%20
8.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. 8.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Note: In order to see this option, you must enable "Manage advanced routes for your warehouse" under Settings -> Configuration -> Warehouse.
Credits Credits
======= =======

View File

@@ -21,7 +21,7 @@
############################################################################## ##############################################################################
{'name': 'Stock MTS+MTO Rule', {'name': 'Stock MTS+MTO Rule',
'version': '8.0.1.0.0', 'version': '9.0.1.0.0',
'author': 'Akretion,Odoo Community Association (OCA)', 'author': 'Akretion,Odoo Community Association (OCA)',
'website': 'http://www.akretion.com', 'website': 'http://www.akretion.com',
'license': 'AGPL-3', 'license': 'AGPL-3',
@@ -34,5 +34,5 @@
'view/pull_rule.xml', 'view/pull_rule.xml',
'view/warehouse.xml', 'view/warehouse.xml',
], ],
'installable': False, 'installable': True,
} }

View File

@@ -19,7 +19,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################### ###############################################################################
from openerp import models, api, fields from openerp import api, fields, models
class ProcurementOrder(models.Model): class ProcurementOrder(models.Model):
@@ -52,14 +52,13 @@ class ProcurementOrder(models.Model):
return self.product_qty return self.product_qty
@api.model @api.model
def _get_mts_mto_procurement(self, proc, rule, qty, uos_qty): def _get_mts_mto_procurement(self, proc, rule, qty):
origin = (proc.group_id and (proc.group_id.name + ":") or "") + \ origin = (proc.group_id and (proc.group_id.name + ":") or "") + \
(proc.rule_id and proc.rule_id.name or proc.origin or "/") (proc.rule_id and proc.rule_id.name or proc.origin or "/")
return { return {
'name': proc.name, 'name': proc.name,
'origin': origin, 'origin': origin,
'product_qty': qty, 'product_qty': qty,
'product_uos_qty': uos_qty,
'rule_id': rule.id, 'rule_id': rule.id,
'mts_mto_procurement_id': proc.id, 'mts_mto_procurement_id': proc.id,
} }
@@ -94,37 +93,28 @@ class ProcurementOrder(models.Model):
procurement.rule_id.action == 'split_procurement': procurement.rule_id.action == 'split_procurement':
if procurement.mts_mto_procurement_ids: if procurement.mts_mto_procurement_ids:
return super(ProcurementOrder, self)._run(procurement) return super(ProcurementOrder, self)._run(procurement)
uom_obj = self.env['product.uom']
needed_qty = procurement.get_mto_qty_to_order() needed_qty = procurement.get_mto_qty_to_order()
rule = procurement.rule_id rule = procurement.rule_id
if needed_qty == 0.0: if needed_qty == 0.0:
mts_vals = self._get_mts_mto_procurement( mts_vals = self._get_mts_mto_procurement(
procurement, rule.mts_rule_id, procurement.product_qty, procurement, rule.mts_rule_id, procurement.product_qty)
procurement.product_uos_qty)
mts_proc = procurement.copy(mts_vals) mts_proc = procurement.copy(mts_vals)
mts_proc.run() mts_proc.run()
elif needed_qty == procurement.product_qty: elif needed_qty == procurement.product_qty:
mto_vals = self._get_mts_mto_procurement( mto_vals = self._get_mts_mto_procurement(
procurement, rule.mto_rule_id, procurement.product_qty, procurement, rule.mto_rule_id, procurement.product_qty)
procurement.product_uos_qty)
mto_proc = procurement.copy(mto_vals) mto_proc = procurement.copy(mto_vals)
mto_proc.run() mto_proc.run()
else: else:
mts_qty = procurement.product_qty - needed_qty mts_qty = procurement.product_qty - needed_qty
mts_uos_qty = uom_obj._compute_qty(
procurement.product_uom.id,
mts_qty,
procurement.product_uos.id)
mts_vals = self._get_mts_mto_procurement( mts_vals = self._get_mts_mto_procurement(
procurement, rule.mts_rule_id, mts_qty, mts_uos_qty) procurement, rule.mts_rule_id, mts_qty)
mts_proc = procurement.copy(mts_vals) mts_proc = procurement.copy(mts_vals)
mts_proc.run() mts_proc.run()
uos_qty = procurement.product_uos_qty
mto_vals = self._get_mts_mto_procurement( mto_vals = self._get_mts_mto_procurement(
procurement, rule.mto_rule_id, needed_qty, procurement, rule.mto_rule_id, needed_qty)
uos_qty - mts_uos_qty)
mto_proc = procurement.copy(mto_vals) mto_proc = procurement.copy(mto_vals)
mto_proc.run() mto_proc.run()
return super(ProcurementOrder, self)._run(procurement) return super(ProcurementOrder, self)._run(procurement)

View File

@@ -19,10 +19,24 @@ from datetime import datetime
class TestMtoMtsRoute(TransactionCase): class TestMtoMtsRoute(TransactionCase):
def _procurement_create(self):
self.procurement = self.env['procurement.order'].create({
'location_id': self.env.ref('stock.stock_location_customers').id,
'product_id': self.product.id,
'product_qty': 2.0,
'product_uom': 1,
'warehouse_id': self.warehouse.id,
'priority': '1',
'date_planned': datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
'name': self.product.name,
'origin': 'test',
'group_id': self.group.id,
})
def test_standard_mto_route(self): def test_standard_mto_route(self):
mto_route = self.env.ref('stock.route_warehouse0_mto') mto_route = self.env.ref('stock.route_warehouse0_mto')
self.product.route_ids = [(6, 0, [mto_route.id])] self.product.route_ids = [(6, 0, [mto_route.id])]
self.procurement.run() self._procurement_create()
self.assertEqual(self.warehouse.mto_pull_id, self.assertEqual(self.warehouse.mto_pull_id,
self.procurement.rule_id) self.procurement.rule_id)
self.assertEqual('make_to_order', self.assertEqual('make_to_order',
@@ -33,7 +47,7 @@ class TestMtoMtsRoute(TransactionCase):
self.procurement.move_ids[0].state) self.procurement.move_ids[0].state)
def test_standard_mts_route(self): def test_standard_mts_route(self):
self.procurement.run() self._procurement_create()
procurement_id = self.procurement_obj.search([ procurement_id = self.procurement_obj.search([
('group_id', '=', self.procurement.group_id.id), ('group_id', '=', self.procurement.group_id.id),
('move_ids', '!=', False)], limit=1) ('move_ids', '!=', False)], limit=1)
@@ -48,7 +62,7 @@ class TestMtoMtsRoute(TransactionCase):
mto_mts_route = self.env.ref('stock_mts_mto_rule.route_mto_mts') mto_mts_route = self.env.ref('stock_mts_mto_rule.route_mto_mts')
self.product.route_ids = [(6, 0, [mto_mts_route.id])] self.product.route_ids = [(6, 0, [mto_mts_route.id])]
self.quant.qty = 1.0 self.quant.qty = 1.0
self.procurement.run() self._procurement_create()
moves = self.env['stock.move'].search( moves = self.env['stock.move'].search(
[('group_id', '=', self.group.id)]) [('group_id', '=', self.group.id)])
self.assertEqual(2, len(moves)) self.assertEqual(2, len(moves))
@@ -58,7 +72,7 @@ class TestMtoMtsRoute(TransactionCase):
mto_mts_route = self.env.ref('stock_mts_mto_rule.route_mto_mts') mto_mts_route = self.env.ref('stock_mts_mto_rule.route_mto_mts')
self.product.route_ids = [(6, 0, [mto_mts_route.id])] self.product.route_ids = [(6, 0, [mto_mts_route.id])]
self.quant.qty = 0.0 self.quant.qty = 0.0
self.procurement.run() self._procurement_create()
moves = self.env['stock.move'].search( moves = self.env['stock.move'].search(
[('group_id', '=', self.group.id)]) [('group_id', '=', self.group.id)])
self.assertEqual(1, len(moves)) self.assertEqual(1, len(moves))
@@ -70,7 +84,7 @@ class TestMtoMtsRoute(TransactionCase):
mto_mts_route = self.env.ref('stock_mts_mto_rule.route_mto_mts') mto_mts_route = self.env.ref('stock_mts_mto_rule.route_mto_mts')
self.product.route_ids = [(6, 0, [mto_mts_route.id])] self.product.route_ids = [(6, 0, [mto_mts_route.id])]
self.quant.qty = 3.0 self.quant.qty = 3.0
self.procurement.run() self._procurement_create()
moves = self.env['stock.move'].search( moves = self.env['stock.move'].search(
[('group_id', '=', self.group.id)]) [('group_id', '=', self.group.id)])
self.assertEqual(1, len(moves)) self.assertEqual(1, len(moves))
@@ -88,18 +102,7 @@ class TestMtoMtsRoute(TransactionCase):
self.group = self.env['procurement.group'].create({ self.group = self.env['procurement.group'].create({
'name': 'test', 'name': 'test',
}) })
self.procurement = self.env['procurement.order'].create({
'location_id': self.env.ref('stock.stock_location_customers').id,
'product_id': self.product.id,
'product_qty': 2.0,
'product_uom': 1,
'warehouse_id': self.warehouse.id,
'priority': '1',
'date_planned': datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
'name': self.product.name,
'origin': 'test',
'group_id': self.group.id,
})
self.quant = self.env['stock.quant'].create({ self.quant = self.env['stock.quant'].create({
'owner_id': self.company_partner.id, 'owner_id': self.company_partner.id,
'location_id': self.env.ref('stock.stock_location_stock').id, 'location_id': self.env.ref('stock.stock_location_stock').id,