diff options
| author | Arnold Moyaux <arm@odoo.com> | 2019-03-18 15:27:18 +0000 |
|---|---|---|
| committer | Arnold Moyaux <arm@odoo.com> | 2019-03-20 14:22:09 +0000 |
| commit | 277e32d2dcf03a764f0ea49817564fb92a20b2d5 (patch) | |
| tree | 2b62388e65cdfc1df652f9105d8d2d6efd2af67d /addons | |
| parent | 8a7b6a4f9c2ab2e8d208e735f86b0c9477a2ca64 (diff) | |
[IMP] stock: allow to change picking on returns
The code that generate the return lines is moved inside
an onchange. The purpose is to allow an inherit that will
modify the picking_id of the wizard. It should trigger the
new return lines without a call to default_get.
task_id 1909413
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/purchase_mrp/tests/test_purchase_mrp_flow.py | 28 | ||||
| -rw-r--r-- | addons/purchase_stock/tests/test_anglo_saxon_valuation_reconciliation.py | 8 | ||||
| -rw-r--r-- | addons/purchase_stock/tests/test_fifo_returns.py | 8 | ||||
| -rw-r--r-- | addons/purchase_stock/tests/test_purchase_order.py | 11 | ||||
| -rw-r--r-- | addons/purchase_stock/tests/test_stockvaluation.py | 7 | ||||
| -rw-r--r-- | addons/sale_mrp/tests/test_sale_mrp_flow.py | 16 | ||||
| -rw-r--r-- | addons/sale_stock/tests/test_anglo_saxon_valuation_reconciliation.py | 8 | ||||
| -rw-r--r-- | addons/sale_stock/tests/test_sale_stock.py | 9 | ||||
| -rw-r--r-- | addons/stock/tests/test_move2.py | 69 | ||||
| -rw-r--r-- | addons/stock/tests/test_warehouse.py | 7 | ||||
| -rw-r--r-- | addons/stock/wizard/stock_picking_return.py | 75 | ||||
| -rw-r--r-- | addons/stock/wizard/stock_picking_return_views.xml | 2 | ||||
| -rw-r--r-- | addons/stock_account/tests/test_stockvaluation.py | 9 | ||||
| -rw-r--r-- | addons/stock_dropshipping/tests/test_stockvaluation.py | 9 |
14 files changed, 141 insertions, 125 deletions
diff --git a/addons/purchase_mrp/tests/test_purchase_mrp_flow.py b/addons/purchase_mrp/tests/test_purchase_mrp_flow.py index 617f84b73c2..ea99478a93b 100644 --- a/addons/purchase_mrp/tests/test_purchase_mrp_flow.py +++ b/addons/purchase_mrp/tests/test_purchase_mrp_flow.py @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo.tests import common, Form +from odoo.tests.common import Form, TransactionCase -class TestSaleMrpFlow(common.TransactionCase): +class TestSaleMrpFlow(TransactionCase): def setUp(self): super(TestSaleMrpFlow, self).setUp() @@ -355,14 +355,10 @@ class TestSaleMrpFlow(common.TransactionCase): self.assertEquals(order_line.qty_received, 7.0) # Return all components processed by backorder_3 - default_data = self.env['stock.return.picking'].with_context( - active_ids=backorder_3.ids, - active_id=backorder_3.ids[0] - ).default_get(['move_dest_exists', 'original_location_id', 'product_return_moves', 'parent_location_id', 'location_id']) - return_wiz = self.env['stock.return.picking'].with_context( - active_ids=backorder_3.ids, - active_id=backorder_3.ids[0] - ).create(default_data) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=backorder_3.ids, active_id=backorder_3.ids[0], + active_model='stock.picking')) + return_wiz = stock_return_picking_form.save() for return_move in return_wiz.product_return_moves: return_move.write({ 'quantity': expected_quantities[return_move.product_id], @@ -379,14 +375,10 @@ class TestSaleMrpFlow(common.TransactionCase): # Now quantity received should be 3 again self.assertEquals(order_line.qty_received, 3) - default_data = self.env['stock.return.picking'].with_context( - active_ids=return_pick.ids, - active_id=return_pick.ids[0] - ).default_get(['move_dest_exists', 'original_location_id', 'product_return_moves', 'parent_location_id', 'location_id']) - return_wiz = self.env['stock.return.picking'].with_context( - active_ids=return_pick.ids, - active_id=return_pick.ids[0] - ).create(default_data) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=return_pick.ids, active_id=return_pick.ids[0], + active_model='stock.picking')) + return_wiz = stock_return_picking_form.save() for move in return_wiz.product_return_moves: move.quantity = expected_quantities[move.product_id] res = return_wiz.create_returns() diff --git a/addons/purchase_stock/tests/test_anglo_saxon_valuation_reconciliation.py b/addons/purchase_stock/tests/test_anglo_saxon_valuation_reconciliation.py index 5b466f75078..93192940cd5 100644 --- a/addons/purchase_stock/tests/test_anglo_saxon_valuation_reconciliation.py +++ b/addons/purchase_stock/tests/test_anglo_saxon_valuation_reconciliation.py @@ -6,7 +6,7 @@ from datetime import datetime import time from odoo.addons.stock_account.tests.test_anglo_saxon_valuation_reconciliation_common import ValuationReconciliationTestCase -from odoo.tests import tagged +from odoo.tests.common import Form, tagged @tagged('post_install', '-at_install') @@ -113,8 +113,10 @@ class TestValuationReconciliation(ValuationReconciliationTestCase): }) # Return the goods and refund the invoice - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=[picking.id], active_id=picking.id).create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking.ids, active_id=picking.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 1.0 stock_return_picking_action = stock_return_picking.create_returns() return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) diff --git a/addons/purchase_stock/tests/test_fifo_returns.py b/addons/purchase_stock/tests/test_fifo_returns.py index 9a2811ac45b..8bc12d28733 100644 --- a/addons/purchase_stock/tests/test_fifo_returns.py +++ b/addons/purchase_stock/tests/test_fifo_returns.py @@ -3,7 +3,7 @@ import time from .common import TestPurchase - +from odoo.tests.common import Form class TestFifoReturns(TestPurchase): @@ -72,8 +72,10 @@ class TestFifoReturns(TestPurchase): # Return the goods of purchase order 2 picking = purchase_order_2.picking_ids[0] - return_pick_wiz = self.env['stock.return.picking'].with_context( - active_model='stock.picking', active_id=picking.id).create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking.ids, active_id=picking.ids[0], + active_model='stock.picking')) + return_pick_wiz = stock_return_picking_form.save() return_picking_id, dummy = return_pick_wiz.with_context(active_id=picking.id)._create_returns() # Important to pass through confirmation and assignation diff --git a/addons/purchase_stock/tests/test_purchase_order.py b/addons/purchase_stock/tests/test_purchase_order.py index 60f91a9c196..1367604d118 100644 --- a/addons/purchase_stock/tests/test_purchase_order.py +++ b/addons/purchase_stock/tests/test_purchase_order.py @@ -5,7 +5,7 @@ from datetime import datetime from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT from odoo.addons.account.tests.account_test_classes import AccountingTestCase -from odoo.tests import tagged +from odoo.tests import Form, tagged @tagged('post_install', '-at_install') @@ -129,11 +129,12 @@ class TestPurchaseOrder(AccountingTestCase): self.assertEqual(received_qty, 10.0, 'Purchase: Received quantity should be 10.0 instead of %s after validating incoming shipment' % received_qty) # Create return picking - StockReturnPicking = self.env['stock.return.picking'] pick = self.po.picking_ids - default_data = StockReturnPicking.with_context(active_ids=pick.ids, active_id=pick.ids[0]).default_get(['move_dest_exists', 'original_location_id', 'product_return_moves', 'parent_location_id', 'location_id']) - return_wiz = StockReturnPicking.with_context(active_ids=pick.ids, active_id=pick.ids[0]).create(default_data) - return_wiz.product_return_moves.write({'quantity': 2.0, 'to_refund': True}) # Return only 2 + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=pick.ids, active_id=pick.ids[0], + active_model='stock.picking')) + return_wiz = stock_return_picking_form.save() + return_wiz.product_return_moves.write({'quantity': 2.0, 'to_refund': True}) # Return only 2 res = return_wiz.create_returns() return_pick = self.env['stock.picking'].browse(res['res_id']) diff --git a/addons/purchase_stock/tests/test_stockvaluation.py b/addons/purchase_stock/tests/test_stockvaluation.py index 920d6e4872a..a72c4d4b633 100644 --- a/addons/purchase_stock/tests/test_stockvaluation.py +++ b/addons/purchase_stock/tests/test_stockvaluation.py @@ -391,9 +391,10 @@ class TestStockValuationWithCOA(AccountingTestCase): self.assertEqual(self.product1.stock_value, 300) # return the second po - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=receipt_po2.ids, active_id=receipt_po2.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=receipt_po2.ids, active_id=receipt_po2.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 10 stock_return_picking_action = stock_return_picking.create_returns() return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) diff --git a/addons/sale_mrp/tests/test_sale_mrp_flow.py b/addons/sale_mrp/tests/test_sale_mrp_flow.py index 5f46e0b969e..d4cae275bd4 100644 --- a/addons/sale_mrp/tests/test_sale_mrp_flow.py +++ b/addons/sale_mrp/tests/test_sale_mrp_flow.py @@ -921,10 +921,10 @@ class TestSaleMrpFlow(common.TransactionCase): self.assertEquals(order_line.qty_delivered, 7.0) # Return all components processed by backorder_3 - StockReturnPicking = self.env['stock.return.picking'] - default_data = StockReturnPicking.with_context(active_ids=backorder_3.ids, active_id=backorder_3.ids[0]).default_get( - ['move_dest_exists', 'original_location_id', 'product_return_moves', 'parent_location_id', 'location_id']) - return_wiz = StockReturnPicking.with_context(active_ids=backorder_3.ids, active_id=backorder_3.ids[0]).create(default_data) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=backorder_3.ids, active_id=backorder_3.ids[0], + active_model='stock.picking')) + return_wiz = stock_return_picking_form.save() for return_move in return_wiz.product_return_moves: return_move.write({ 'quantity': expected_quantities[return_move.product_id], @@ -941,10 +941,10 @@ class TestSaleMrpFlow(common.TransactionCase): # Now quantity delivered should be 3 again self.assertEquals(order_line.qty_delivered, 3) - default_data = StockReturnPicking.with_context(active_ids=return_pick.ids, active_id=return_pick.ids[0]).default_get( - ['move_dest_exists', 'original_location_id', 'product_return_moves', 'parent_location_id', 'location_id']) - return_wiz = StockReturnPicking.with_context(active_ids=return_pick.ids, active_id=return_pick.ids[0]).create( - default_data) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=return_pick.ids, active_id=return_pick.ids[0], + active_model='stock.picking')) + return_wiz = stock_return_picking_form.save() for move in return_wiz.product_return_moves: move.quantity = expected_quantities[move.product_id] res = return_wiz.create_returns() diff --git a/addons/sale_stock/tests/test_anglo_saxon_valuation_reconciliation.py b/addons/sale_stock/tests/test_anglo_saxon_valuation_reconciliation.py index f80c4bf758c..cf444c56bb3 100644 --- a/addons/sale_stock/tests/test_anglo_saxon_valuation_reconciliation.py +++ b/addons/sale_stock/tests/test_anglo_saxon_valuation_reconciliation.py @@ -4,7 +4,7 @@ import time from odoo.addons.stock_account.tests.test_anglo_saxon_valuation_reconciliation_common import ValuationReconciliationTestCase -from odoo.tests import tagged +from odoo.tests import Form, tagged @tagged('post_install', '-at_install') @@ -139,8 +139,10 @@ class TestValuationReconciliation(ValuationReconciliationTestCase): 'rate': 10.54739702, 'name': '2018-03-01', }) - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=[picking.id], active_id=picking.id).create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking.ids, active_id=picking.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 1.0 stock_return_picking_action = stock_return_picking.create_returns() return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) diff --git a/addons/sale_stock/tests/test_sale_stock.py b/addons/sale_stock/tests/test_sale_stock.py index 7782ecdc7f1..9bea6fa8847 100644 --- a/addons/sale_stock/tests/test_sale_stock.py +++ b/addons/sale_stock/tests/test_sale_stock.py @@ -3,7 +3,7 @@ from odoo.addons.sale.tests.test_sale_common import TestSale from odoo.exceptions import UserError -from odoo.tests import tagged +from odoo.tests import Form, tagged @tagged('post_install', '-at_install') @@ -159,9 +159,10 @@ class TestSaleStock(TestSale): self.inv_1.action_invoice_open() # Create return picking - StockReturnPicking = self.env['stock.return.picking'] - default_data = StockReturnPicking.with_context(active_ids=pick.ids, active_id=pick.ids[0]).default_get(['move_dest_exists', 'original_location_id', 'product_return_moves', 'parent_location_id', 'location_id']) - return_wiz = StockReturnPicking.with_context(active_ids=pick.ids, active_id=pick.ids[0]).create(default_data) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=pick.ids, active_id=pick.ids[0], + active_model='stock.picking')) + return_wiz = stock_return_picking_form.save() return_wiz.product_return_moves.quantity = 2.0 # Return only 2 return_wiz.product_return_moves.to_refund = True # Refund these 2 res = return_wiz.create_returns() diff --git a/addons/stock/tests/test_move2.py b/addons/stock/tests/test_move2.py index dd75243ffa3..a62ff9fef98 100644 --- a/addons/stock/tests/test_move2.py +++ b/addons/stock/tests/test_move2.py @@ -3,8 +3,7 @@ from odoo.addons.stock.tests.common import TestStockCommon from odoo.exceptions import UserError -from odoo import api, registry -from odoo.tests.common import TransactionCase +from odoo.tests import Form class TestPickShip(TestStockCommon): @@ -174,10 +173,12 @@ class TestPickShip(TestStockCommon): self.assertEqual(picking_client.state, 'assigned') # return a part of what we've done - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=picking_pick.ids, active_id=picking_pick.ids[0])\ - .create({}) - stock_return_picking.product_return_moves.quantity = 2.0 # Return only 2 + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_pick.ids, active_id=picking_pick.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() + stock_return_picking = stock_return_picking_form.save() + stock_return_picking.product_return_moves.quantity = 2.0 # Return only 2 stock_return_picking_action = stock_return_picking.create_returns() return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) return_pick.move_lines[0].move_line_ids[0].qty_done = 2.0 @@ -197,9 +198,10 @@ class TestPickShip(TestStockCommon): self.assertEqual(picking_client.state, 'assigned') # return more than we've done - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=picking_pick.ids, active_id=picking_pick.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_pick.ids, active_id=picking_pick.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 12.0 # Return 2 extra stock_return_picking_action = stock_return_picking.create_returns() return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) @@ -440,18 +442,20 @@ class TestPickShip(TestStockCommon): output. This return should not be available and should only have picking pick as origin move. """ - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=picking_pick.ids, active_id=picking_pick.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_pick.ids, active_id=picking_pick.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 10.0 stock_return_picking_action = stock_return_picking.create_returns() return_pick_picking = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) self.assertEqual(return_pick_picking.state, 'waiting') - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=picking_ship.ids, active_id=picking_ship.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_ship.ids, active_id=picking_ship.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 10.0 stock_return_picking_action = stock_return_picking.create_returns() return_ship_picking = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) @@ -514,9 +518,10 @@ class TestPickShip(TestStockCommon): picking_ship.move_lines[0].move_line_ids[0].qty_done = 1.0 picking_ship.action_done() - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=picking_ship.ids, active_id=picking_ship.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_ship.ids, active_id=picking_ship.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 1.0 stock_return_picking_action = stock_return_picking.create_returns() return_ship_picking = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) @@ -527,9 +532,10 @@ class TestPickShip(TestStockCommon): }) return_ship_picking.action_done() - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=picking_pack.ids, active_id=picking_pack.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_pack.ids, active_id=picking_pack.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 1.0 stock_return_picking_action = stock_return_picking.create_returns() return_pack_picking = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) @@ -537,9 +543,10 @@ class TestPickShip(TestStockCommon): return_pack_picking.move_lines[0].move_line_ids[0].qty_done = 1.0 return_pack_picking.action_done() - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=picking_pick.ids, active_id=picking_pick.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_pick.ids, active_id=picking_pick.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 1.0 stock_return_picking_action = stock_return_picking.create_returns() return_pick_picking = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) @@ -680,9 +687,10 @@ class TestPickShip(TestStockCommon): picking_client.action_done() # return half in the pick location - return1 = self.env['stock.return.picking']\ - .with_context(active_ids=picking_pick.ids, active_id=picking_client.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_client.ids, active_id=picking_client.ids[0], + active_model='stock.picking')) + return1 = stock_return_picking_form.save() return1.product_return_moves.quantity = 5.0 return1.location_id = pick_location.id return_to_pick_picking_action = return1.create_returns() @@ -692,9 +700,10 @@ class TestPickShip(TestStockCommon): return_to_pick_picking.action_done() # return the remainig products in the return warehouse - return2 = self.env['stock.return.picking']\ - .with_context(active_ids=picking_pick.ids, active_id=picking_client.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_client.ids, active_id=picking_client.ids[0], + active_model='stock.picking')) + return2 = stock_return_picking_form.save() return2.product_return_moves.quantity = 5.0 return2.location_id = return_location.id return_to_return_picking_action = return2.create_returns() diff --git a/addons/stock/tests/test_warehouse.py b/addons/stock/tests/test_warehouse.py index 9a93da5c939..7288e4eb58e 100644 --- a/addons/stock/tests/test_warehouse.py +++ b/addons/stock/tests/test_warehouse.py @@ -158,9 +158,10 @@ class TestWarehouse(TestStockCommon): quant = self.env['stock.quant'].search([('product_id', '=', productA.id), ('location_id', '=', stock_location.id)]) self.assertEqual(len(quant), 1) - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=picking_out.ids, active_id=picking_out.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=picking_out.ids, active_id=picking_out.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 1.0 stock_return_picking_action = stock_return_picking.create_returns() return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) diff --git a/addons/stock/wizard/stock_picking_return.py b/addons/stock/wizard/stock_picking_return.py index 0a836c93499..eba3a4c3f74 100644 --- a/addons/stock/wizard/stock_picking_return.py +++ b/addons/stock/wizard/stock_picking_return.py @@ -23,6 +23,17 @@ class ReturnPicking(models.TransientModel): _name = 'stock.return.picking' _description = 'Return Picking' + @api.model + def default_get(self, fields): + if len(self.env.context.get('active_ids', list())) > 1: + raise UserError(_("You may only return one picking at a time.")) + res = super(ReturnPicking, self).default_get(fields) + if self.env.context.get('active_id') and self.env.context.get('active_model') == 'stock.picking': + picking = self.env['stock.picking'].browse(self.env.context.get('active_id')) + if picking.exists(): + res.update({'picking_id': picking.id}) + return res + picking_id = fields.Many2one('stock.picking') product_return_moves = fields.One2many('stock.return.picking.line', 'wizard_id', 'Moves') move_dest_exists = fields.Boolean('Chained Move Exists', readonly=True) @@ -32,45 +43,35 @@ class ReturnPicking(models.TransientModel): 'stock.location', 'Return Location', domain="['|', ('id', '=', original_location_id), ('return_location', '=', True)]") - @api.model - def default_get(self, fields): - if len(self.env.context.get('active_ids', list())) > 1: - raise UserError(_("You may only return one picking at a time.")) - res = super(ReturnPicking, self).default_get(fields) - + @api.onchange('picking_id') + def _onchange_picking_id(self): move_dest_exists = False product_return_moves = [] - picking = self.env['stock.picking'].browse(self.env.context.get('active_id')) - if picking: - res.update({'picking_id': picking.id}) - if picking.state != 'done': - raise UserError(_("You may only return Done pickings.")) - for move in picking.move_lines: - if move.scrapped: - continue - if move.move_dest_ids: - move_dest_exists = True - quantity = move.product_qty - sum(move.move_dest_ids.filtered(lambda m: m.state in ['partially_available', 'assigned', 'done']).\ - mapped('move_line_ids').mapped('product_qty')) - quantity = float_round(quantity, precision_rounding=move.product_uom.rounding) - product_return_moves.append((0, 0, {'product_id': move.product_id.id, 'quantity': quantity, 'move_id': move.id, 'uom_id': move.product_id.uom_id.id})) - - if not product_return_moves: - raise UserError(_("No products to return (only lines in Done state and not fully returned yet can be returned).")) - if 'product_return_moves' in fields: - res.update({'product_return_moves': product_return_moves}) - if 'move_dest_exists' in fields: - res.update({'move_dest_exists': move_dest_exists}) - if 'parent_location_id' in fields and picking.location_id.usage == 'internal': - res.update({'parent_location_id': picking.picking_type_id.warehouse_id and picking.picking_type_id.warehouse_id.view_location_id.id or picking.location_id.location_id.id}) - if 'original_location_id' in fields: - res.update({'original_location_id': picking.location_id.id}) - if 'location_id' in fields: - location_id = picking.location_id.id - if picking.picking_type_id.return_picking_type_id.default_location_dest_id.return_location: - location_id = picking.picking_type_id.return_picking_type_id.default_location_dest_id.id - res['location_id'] = location_id - return res + if self.picking_id and self.picking_id.state != 'done': + raise UserError(_("You may only return Done pickings.")) + for move in self.picking_id.move_lines: + if move.scrapped: + continue + if move.move_dest_ids: + move_dest_exists = True + quantity = move.product_qty - sum(move.move_dest_ids + .filtered(lambda m: m.state in ['partially_available', 'assigned', 'done']) + .mapped('move_line_ids').mapped('product_qty') + ) + quantity = float_round(quantity, precision_rounding=move.product_uom.rounding) + product_return_moves.append((0, 0, {'product_id': move.product_id.id, 'quantity': quantity, 'move_id': move.id, 'uom_id': move.product_id.uom_id.id})) + + if self.picking_id and not product_return_moves: + raise UserError(_("No products to return (only lines in Done state and not fully returned yet can be returned).")) + if self.picking_id: + self.product_return_moves = product_return_moves + self.move_dest_exists = move_dest_exists + self.parent_location_id = self.picking_id.picking_type_id.warehouse_id and self.picking_id.picking_type_id.warehouse_id.view_location_id.id or self.picking_id.location_id.location_id.id + self.original_location_id = self.picking_id.location_id.id + location_id = self.picking_id.location_id.id + if self.picking_id.picking_type_id.return_picking_type_id.default_location_dest_id.return_location: + location_id = self.picking_id.picking_type_id.return_picking_type_id.default_location_dest_id.id + self.location_id = location_id def _prepare_move_default_values(self, return_line, new_picking): vals = { diff --git a/addons/stock/wizard/stock_picking_return_views.xml b/addons/stock/wizard/stock_picking_return_views.xml index 3bbba44a176..3c901072aa7 100644 --- a/addons/stock/wizard/stock_picking_return_views.xml +++ b/addons/stock/wizard/stock_picking_return_views.xml @@ -10,6 +10,7 @@ <field name="arch" type="xml"> <form> <field name="move_dest_exists" invisible="1"/> + <field name="picking_id" invisible="1"/> <group attrs="{'invisible': [('move_dest_exists', '=', False)]}"> <div class="oe_grey"> <p>This picking appears to be chained with another operation. Later, if you receive the goods you are returning now, make sure to <b>reverse</b> the returned picking in order to avoid logistic rules to be applied again (which would create duplicated operations)</p> @@ -21,6 +22,7 @@ <field name="product_id" options="{'no_create': True, 'no_open': True}" force_save="1"/> <field name="quantity"/> <field name="uom_id" readonly="1" groups="uom.group_uom"/> + <field name="move_id" invisible="1"/> </tree> </field> </group> diff --git a/addons/stock_account/tests/test_stockvaluation.py b/addons/stock_account/tests/test_stockvaluation.py index 775bba724b4..55d3e241ec6 100644 --- a/addons/stock_account/tests/test_stockvaluation.py +++ b/addons/stock_account/tests/test_stockvaluation.py @@ -5,7 +5,7 @@ from datetime import timedelta from odoo.exceptions import UserError from odoo.fields import Date, Datetime -from odoo.tests.common import TransactionCase +from odoo.tests.common import Form, TransactionCase class TestStockValuation(TransactionCase): @@ -1206,9 +1206,10 @@ class TestStockValuation(TransactionCase): self.assertEqual(self.product1.standard_price, 16) # return - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=[out_pick.id], active_id=out_pick.id)\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=out_pick.ids, active_id=out_pick.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking.product_return_moves.quantity = 1.0 # Return only 2 stock_return_picking_action = stock_return_picking.create_returns() return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) diff --git a/addons/stock_dropshipping/tests/test_stockvaluation.py b/addons/stock_dropshipping/tests/test_stockvaluation.py index 70cf614b16c..08f81173375 100644 --- a/addons/stock_dropshipping/tests/test_stockvaluation.py +++ b/addons/stock_dropshipping/tests/test_stockvaluation.py @@ -2,7 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.addons.account.tests.account_test_classes import AccountingTestCase -from odoo.tests import tagged +from odoo.tests import Form, tagged @tagged('post_install', '-at_install') class TestStockValuation(AccountingTestCase): @@ -278,9 +278,10 @@ class TestStockValuation(AccountingTestCase): all_amls = self._dropship_product1() # return what we've done - stock_return_picking = self.env['stock.return.picking']\ - .with_context(active_ids=self.sale_order1.picking_ids.ids, active_id=self.sale_order1.picking_ids.ids[0])\ - .create({}) + stock_return_picking_form = Form(self.env['stock.return.picking'] + .with_context(active_ids=self.sale_order1.picking_ids.ids, active_id=self.sale_order1.picking_ids.ids[0], + active_model='stock.picking')) + stock_return_picking = stock_return_picking_form.save() stock_return_picking_action = stock_return_picking.create_returns() return_pick = self.env['stock.picking'].browse(stock_return_picking_action['res_id']) return_pick.move_lines[0].move_line_ids[0].qty_done = 1.0 |
