From 80823e1613780268a1808645e5b71c5720328433 Mon Sep 17 00:00:00 2001 From: Manuel Claeys Bouuaert Date: Mon, 19 Oct 2020 15:59:09 +0200 Subject: [PATCH] [ADD] purchase_order_line_from_stock: tests fixup! [ADD] purchase_order_line_from_stock --- .../models/stock.py | 14 +++--- .../tests/__init__.py | 1 + .../tests/test_stock.py | 46 +++++++++++++++++++ 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/purchase_order_line_from_stock/models/stock.py b/purchase_order_line_from_stock/models/stock.py index 290c6f774..f26c17f23 100644 --- a/purchase_order_line_from_stock/models/stock.py +++ b/purchase_order_line_from_stock/models/stock.py @@ -5,18 +5,14 @@ class StockMove(models.Model): _inherit = "stock.move" - # def _action_done(self): - # self.add_purchase_order_line_from_stock() - # res = super(StockMove, self)._action_done() - # return res - def write(self, vals): - self.add_purchase_order_line_from_stock() + if "purchase_line_id" not in vals: # Prevent recursion + self.add_purchase_order_line_from_stock_move() res = super(StockMove, self).write(vals) return res @api.multi - def add_purchase_order_line_from_stock(self): + def add_purchase_order_line_from_stock_move(self): stock_move_to_add = self.filtered( lambda m: m.state == "done" and not m.purchase_line_id ) @@ -25,7 +21,9 @@ def add_purchase_order_line_from_stock(self): raise ValidationError( _("At least one of the original products must be received") ) - self.env["purchase.order.line"].create( + stock_move.purchase_line_id = self.env[ + "purchase.order.line" + ].create( { "name": stock_move.name, "product_id": stock_move.product_id.id, diff --git a/purchase_order_line_from_stock/tests/__init__.py b/purchase_order_line_from_stock/tests/__init__.py index e69de29bb..e96f48eb2 100644 --- a/purchase_order_line_from_stock/tests/__init__.py +++ b/purchase_order_line_from_stock/tests/__init__.py @@ -0,0 +1 @@ +from . import test_stock diff --git a/purchase_order_line_from_stock/tests/test_stock.py b/purchase_order_line_from_stock/tests/test_stock.py index e69de29bb..ba08ca3fe 100644 --- a/purchase_order_line_from_stock/tests/test_stock.py +++ b/purchase_order_line_from_stock/tests/test_stock.py @@ -0,0 +1,46 @@ +from odoo import tests + + +class TestStock(tests.common.TransactionCase): + def test_order_line_from_stock(self): + order = self.browse_ref("purchase.purchase_order_4") + product = self.browse_ref("product.product_product_1") + location_id = self.env.ref("stock.warehouse0").wh_output_stock_loc_id + dest_loc = self.env.ref("stock.stock_location_customers") + + # Confirm order + order.button_confirm() + self.assertEquals(len(order.order_line), 3) + self.assertEquals(len(order.picking_ids.move_ids_without_package), 3) + + # Add stock move to picking + new_move = self.env["stock.move"].create( + { + "name": product.name, + "product_id": product.id, + "product_uom": product.uom_id.id, + "quantity_done": 20, + "location_id": location_id.id, + "location_dest_id": dest_loc.id, + } + ) + order.picking_ids.move_ids_without_package = [(4, new_move.id, 0)] + self.assertEquals(len(order.picking_ids.move_ids_without_package), 4) + + # Set one of the original stock moves to 'done': + # At least one other element must have a quantity_done, + # otherwise an action is returned notifying the user. + order.picking_ids.move_ids_without_package[0].write( + {"quantity_done": 1} + ) + + # Validate picking + wizard = order.picking_ids.button_validate() + backorder_confirmation = self.env[wizard["res_model"]].browse( + wizard["res_id"] + ) + backorder_confirmation.process_cancel_backorder() + + # Check that product is added to order + self.assertEquals(len(order.order_line), 4) + self.assertEquals(order.order_line[-1].qty_received, 20)