From cdafac7a61cbf5470a618c43c18bb732deb05926 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Sat, 11 Jun 2022 12:09:06 +0200 Subject: [PATCH] [IMP] rma: prevent the creation of zero qty moves --- rma/models/stock_rule.py | 1 + rma/tests/test_rma.py | 15 +++++++++++++++ rma/wizards/rma_make_picking.py | 9 +++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/rma/models/stock_rule.py b/rma/models/stock_rule.py index bf1340da..8ff40303 100644 --- a/rma/models/stock_rule.py +++ b/rma/models/stock_rule.py @@ -30,6 +30,7 @@ class StockRule(models.Model): ) if "rma_line_id" in values: line = values.get("rma_line_id") + line = self.env["rma.order.line"].browse([line]) res["rma_line_id"] = line.id if line.delivery_address_id: res["partner_id"] = line.delivery_address_id.id diff --git a/rma/tests/test_rma.py b/rma/tests/test_rma.py index 018146a2..08a0bf3b 100644 --- a/rma/tests/test_rma.py +++ b/rma/tests/test_rma.py @@ -880,3 +880,18 @@ class TestRma(common.SavepointCase): self.assertTrue(new_line.product_id.categ_id.rma_customer_operation_id) new_line._onchange_product_id() self.assertEqual(new_line.operation_id, rma_operation) + + def test_06_no_zero_qty_moves(self): + rma_lines = self.rma_customer_id.rma_line_ids + rma_lines.write({"receipt_policy": "delivered"}) + self.assertEqual(sum(rma_lines.mapped("qty_to_receive")), 0) + wizard = self.rma_make_picking.with_context( + { + "active_ids": rma_lines.ids, + "active_model": "rma.order.line", + "picking_type": "incoming", + "active_id": 1, + } + ).create({}) + with self.assertRaisesRegex(ValidationError, "No quantity to transfer"): + wizard._create_picking() diff --git a/rma/wizards/rma_make_picking.py b/rma/wizards/rma_make_picking.py index 1848a0bb..6d20e82b 100644 --- a/rma/wizards/rma_make_picking.py +++ b/rma/wizards/rma_make_picking.py @@ -5,7 +5,7 @@ import time from odoo import _, api, fields, models from odoo.exceptions import UserError, ValidationError -from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT as DT_FORMAT +from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT as DT_FORMAT, float_compare class RmaMakePicking(models.TransientModel): @@ -148,7 +148,12 @@ class RmaMakePicking(models.TransientModel): else: qty = item.qty_to_deliver values = self._get_procurement_data(item, group, qty, picking_type) - values = dict(values, rma_line_id=item.line_id, rma_id=item.line_id.rma_id) + product = item.line_id.product_id + if float_compare(qty, 0, product.uom_id.rounding) != 1: + raise ValidationError( + _("No quantity to transfer on %s shipment of product %s.") + % (_(picking_type), product.default_code or product.name) + ) # create picking procurements = [] try: