From ef444da57a0e5b3a8426a6fac8cef3f6d856b148 Mon Sep 17 00:00:00 2001 From: Ruchir Shukla Date: Tue, 16 Jan 2018 15:23:08 +0530 Subject: [PATCH] [FIX] stock: do_new_transfer callable in xml-rpc When returning None, the XML-RPC can trigger an error, making the api unusable in certain cases. So, we added return True and if the context is None we use an empty dict, so if the context is returned in a dict, it is not returning None either. Tests were adapted too. Closes #22264 --- addons/sale_stock/tests/test_sale_stock.py | 4 ++-- addons/stock/stock.py | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/sale_stock/tests/test_sale_stock.py b/addons/sale_stock/tests/test_sale_stock.py index 6085c639f6e..a19cdcd268f 100644 --- a/addons/sale_stock/tests/test_sale_stock.py +++ b/addons/sale_stock/tests/test_sale_stock.py @@ -51,7 +51,7 @@ class TestSaleStock(TestSale): pick_2 = self.so.picking_ids[0] pick_2.force_assign() pick_2.pack_operation_product_ids.write({'qty_done': 1}) - self.assertIsNone(pick_2.do_new_transfer(), 'Sale Stock: second picking should be final without need for a backorder') + self.assertTrue(pick_2.do_new_transfer(), 'Sale Stock: second picking should be final without need for a backorder') self.assertEqual(self.so.invoice_status, 'to invoice', 'Sale Stock: so invoice_status should be "to invoice" after complete delivery') del_qties = [sol.qty_delivered for sol in self.so.order_line] del_qties_truth = [2.0 if sol.product_id.type in ['product', 'consu'] else 0.0 for sol in self.so.order_line] @@ -98,7 +98,7 @@ class TestSaleStock(TestSale): pick = self.so.picking_ids pick.force_assign() pick.pack_operation_product_ids.write({'qty_done': 2}) - self.assertIsNone(pick.do_new_transfer(), 'Sale Stock: complete delivery should not need a backorder') + self.assertTrue(pick.do_new_transfer(), 'Sale Stock: complete delivery should not need a backorder') del_qties = [sol.qty_delivered for sol in self.so.order_line] del_qties_truth = [2.0 if sol.product_id.type in ['product', 'consu'] else 0.0 for sol in self.so.order_line] self.assertEqual(del_qties, del_qties_truth, 'Sale Stock: delivered quantities are wrong after partial delivery') diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 45fe1e380d9..06bafd6a341 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -1589,6 +1589,8 @@ class stock_picking(models.Model): def do_new_transfer(self, cr, uid, ids, context=None): pack_op_obj = self.pool['stock.pack.operation'] data_obj = self.pool['ir.model.data'] + if not context: + context = {} for pick in self.browse(cr, uid, ids, context=context): to_delete = [] if not pick.move_lines and not pick.pack_operation_ids: @@ -1642,7 +1644,7 @@ class stock_picking(models.Model): if to_delete: pack_op_obj.unlink(cr, uid, to_delete, context=context) self.do_transfer(cr, uid, ids, context=context) - return + return True def check_backorder(self, cr, uid, picking, context=None): need_rereserve, all_op_processed = self.picking_recompute_remaining_quantities(cr, uid, picking, done_qtys=True, context=context)