From ec0ed0c9d775048756a60df4691c44b3bff7261f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Thu, 18 May 2023 11:07:30 +0200 Subject: [PATCH] [IMP] stock_request_purchase: Propagate the cancellation of related purchases TT43414 --- .../models/stock_request.py | 9 +++ .../tests/test_stock_request_purchase.py | 72 ++++++++++--------- 2 files changed, 48 insertions(+), 33 deletions(-) diff --git a/stock_request_purchase/models/stock_request.py b/stock_request_purchase/models/stock_request.py index d2ccf02da..e12a3e207 100644 --- a/stock_request_purchase/models/stock_request.py +++ b/stock_request_purchase/models/stock_request.py @@ -1,4 +1,5 @@ # Copyright 2017-20 ForgeFlow S.L. (https://www.forgeflow.com) +# Copyright 2023 Tecnativa - Víctor Martínez # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). from odoo import _, api, fields, models @@ -38,6 +39,14 @@ class StockRequest(models.Model): ) ) + def action_cancel(self): + """Propagate the cancellation to the generated purchase orders.""" + res = super().action_cancel() + self.sudo().purchase_ids.filtered( + lambda x: x.state not in ("purchase", "done", "cancel") + ).button_cancel() + return res + def action_view_purchase(self): action = self.env["ir.actions.act_window"]._for_xml_id("purchase.purchase_rfq") diff --git a/stock_request_purchase/tests/test_stock_request_purchase.py b/stock_request_purchase/tests/test_stock_request_purchase.py index 5d999a7aa..b6e1d4b07 100644 --- a/stock_request_purchase/tests/test_stock_request_purchase.py +++ b/stock_request_purchase/tests/test_stock_request_purchase.py @@ -1,24 +1,27 @@ # Copyright 2016-20 ForgeFlow S.L. (https://www.forgeflow.com) +# Copyright 2023 Tecnativa - Víctor Martínez # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0). from odoo import fields -from odoo.tests import common +from odoo.tests import common, new_test_user class TestStockRequestPurchase(common.TransactionCase): def setUp(self): - super(TestStockRequestPurchase, self).setUp() - + super().setUp() + self.env = self.env( + context=dict( + self.env.context, + mail_create_nolog=True, + mail_create_nosubscribe=True, + mail_notrack=True, + no_reset_password=True, + ) + ) # common models self.stock_request = self.env["stock.request"] # refs - self.stock_request_user_group = self.env.ref( - "stock_request.group_stock_request_user" - ) - self.stock_request_manager_group = self.env.ref( - "stock_request.group_stock_request_manager" - ) self.main_company = self.env.ref("base.main_company") self.warehouse = self.env.ref("stock.warehouse0") self.categ_unit = self.env.ref("uom.product_uom_categ_unit") @@ -28,15 +31,17 @@ class TestStockRequestPurchase(common.TransactionCase): self.wh2 = self.env["stock.warehouse"].search( [("company_id", "=", self.company_2.id)], limit=1 ) - self.stock_request_user = self._create_user( - "stock_request_user", - [self.stock_request_user_group.id], - [self.main_company.id, self.company_2.id], + self.stock_request_user = new_test_user( + self.env, + login="stock_request_user", + groups="stock_request.group_stock_request_user", + company_ids=[(6, 0, [self.main_company.id, self.company_2.id])], ) - self.stock_request_manager = self._create_user( - "stock_request_manager", - [self.stock_request_manager_group.id], - [self.main_company.id, self.company_2.id], + self.stock_request_manager = new_test_user( + self.env, + login="stock_request_manager", + groups="stock_request.group_stock_request_manager", + company_ids=[(6, 0, [self.main_company.id, self.company_2.id])], ) self.route_buy = self.warehouse.buy_pull_id.route_id self.supplier = self.env["res.partner"].create({"name": "Supplier"}) @@ -52,22 +57,6 @@ class TestStockRequestPurchase(common.TransactionCase): } ) - def _create_user(self, name, group_ids, company_ids): - return ( - self.env["res.users"] - .with_context({"no_reset_password": True}) - .create( - { - "name": name, - "password": "demo", - "login": name, - "email": str(name) + "@test.com", - "groups_id": [(6, 0, group_ids)], - "company_ids": [(6, 0, company_ids)], - } - ) - ) - def _create_product(self, default_code, name, company_id): return self.env["product.product"].create( { @@ -212,6 +201,23 @@ class TestStockRequestPurchase(common.TransactionCase): self.assertEqual(stock_request_2.qty_in_progress, 0.0) self.assertEqual(stock_request_2.qty_done, stock_request_2.product_uom_qty) + def test_create_request_cancel_purchase(self): + vals = { + "product_id": self.product.id, + "product_uom_id": self.product.uom_id.id, + "product_uom_qty": 5.0, + "company_id": self.main_company.id, + "warehouse_id": self.warehouse.id, + "location_id": self.warehouse.lot_stock_id.id, + } + stock_request = self.stock_request.with_user(self.stock_request_user).create( + vals + ) + stock_request.action_confirm() + self.assertEqual(stock_request.purchase_ids.state, "draft") + stock_request.action_cancel() + self.assertEqual(stock_request.purchase_ids.state, "cancel") + def test_view_actions(self): expected_date = fields.Datetime.now() vals = {