mirror of
https://github.com/ForgeFlow/stock-rma.git
synced 2025-01-21 12:57:49 +02:00
[16.0][IMP] rma, add feature to require origin field in rma approval process
This commit is contained in:
@@ -94,3 +94,7 @@ class RmaOperation(models.Model):
|
||||
required=True,
|
||||
default=lambda self: self.env.user.company_id,
|
||||
)
|
||||
require_origin_field_filled = fields.Boolean(
|
||||
default=False,
|
||||
help="RMA document can't be continue in process if at least one origin field is filled",
|
||||
)
|
||||
|
||||
@@ -647,8 +647,20 @@ class RmaOrderLine(models.Model):
|
||||
% (rec.product_id.display_name)
|
||||
)
|
||||
|
||||
@api.model
|
||||
def _origin_fields(self):
|
||||
return ["reference_move_id"]
|
||||
|
||||
def _check_origin_fields_filled(self):
|
||||
for rec in self.filtered(lambda x: x.operation_id.require_origin_field_filled):
|
||||
if not any(rec[origin_field] for origin_field in self._origin_fields()):
|
||||
raise UserError(
|
||||
_("You should fill at least one origin field to continue")
|
||||
)
|
||||
|
||||
def action_rma_to_approve(self):
|
||||
self._check_lot_assigned()
|
||||
self._check_origin_fields_filled()
|
||||
self.write({"state": "to_approve"})
|
||||
for rec in self:
|
||||
if rec.product_id.rma_approval_policy == "one_step":
|
||||
|
||||
@@ -1093,3 +1093,44 @@ class TestRma(common.TransactionCase):
|
||||
self.assertEqual(
|
||||
rma.rma_line_ids.mapped("state"), ["approved", "approved", "approved"]
|
||||
)
|
||||
|
||||
def test_10_rma_require_origin_fields(self):
|
||||
self.rma_cust_replace_op_id.write(
|
||||
{
|
||||
"require_origin_field_filled": True,
|
||||
}
|
||||
)
|
||||
rma_line = Form(
|
||||
self.rma_line,
|
||||
view=self.env.ref("rma.view_rma_line_form").id,
|
||||
)
|
||||
rma_line.partner_id = self.partner_id
|
||||
rma_line.operation_id = self.rma_cust_replace_op_id
|
||||
rma_line.product_id = self.product_1
|
||||
rma_line = rma_line.save()
|
||||
with self.assertRaises(UserError):
|
||||
rma_line.action_rma_to_approve()
|
||||
|
||||
self._create_inventory(self.product_1, 5, self.stock_location)
|
||||
picking_type = self._get_picking_type(
|
||||
self.wh, self.stock_location, self.customer_location
|
||||
)
|
||||
picking = self._create_picking(self.partner_id, picking_type)
|
||||
move_values = self._prepare_move(
|
||||
self.product_1,
|
||||
5,
|
||||
self.stock_location,
|
||||
self.customer_location,
|
||||
picking,
|
||||
)
|
||||
move_created = self.env["stock.move"].create(move_values)
|
||||
self._do_picking(picking)
|
||||
|
||||
rma_line = Form(
|
||||
rma_line,
|
||||
view=self.env.ref("rma.view_rma_line_form").id,
|
||||
)
|
||||
rma_line.reference_move_id = move_created
|
||||
rma_line = rma_line.save()
|
||||
rma_line.action_rma_to_approve()
|
||||
self.assertIn(rma_line.state, ("to_approve", "approved"))
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
<group name="policies" string="Policies">
|
||||
<field name="receipt_policy" />
|
||||
<field name="delivery_policy" />
|
||||
<field name="require_origin_field_filled" />
|
||||
</group>
|
||||
<group name="inbound" string="Inbound">
|
||||
<field name="in_route_id" />
|
||||
|
||||
@@ -130,6 +130,11 @@ class RmaOrderLine(models.Model):
|
||||
ondelete="restrict",
|
||||
)
|
||||
|
||||
@api.model
|
||||
def _origin_fields(self):
|
||||
res = super()._origin_fields()
|
||||
return res + ["account_move_line_id"]
|
||||
|
||||
@api.depends("partner_id")
|
||||
def _compute_commercial_partner_id(self):
|
||||
for rma_line in self:
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
|
||||
|
||||
from odoo import fields
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.fields import Date
|
||||
from odoo.tests import common
|
||||
from odoo.tests.common import Form
|
||||
@@ -303,3 +304,37 @@ class TestRmaAccount(common.SingleTransactionCase):
|
||||
self.assertEqual(rma_1.product_id.id, bill_product.id)
|
||||
self.assertEqual(bill.rma_count, 1)
|
||||
self.assertEqual(bill.used_in_rma_count, 0)
|
||||
|
||||
def test_08_rma_require_origin_fields(self):
|
||||
partner = self.inv_customer.partner_id
|
||||
operation = self.env.ref("rma.rma_operation_customer_replace")
|
||||
rma_line = Form(
|
||||
self.rma_line_obj,
|
||||
view=self.env.ref("rma_account.view_rma_line_form").id,
|
||||
)
|
||||
rma_line.partner_id = partner
|
||||
rma_line.operation_id = operation
|
||||
rma_line.product_id = self.product_1
|
||||
rma_line = rma_line.save()
|
||||
self.assertFalse(bool(rma_line.reference_move_id))
|
||||
self.assertFalse(bool(rma_line.account_move_line_id))
|
||||
rma_line.operation_id.write(
|
||||
{
|
||||
"require_origin_field_filled": True,
|
||||
}
|
||||
)
|
||||
self.assertTrue(rma_line.operation_id.require_origin_field_filled)
|
||||
with self.assertRaises(UserError):
|
||||
rma_line.action_rma_to_approve()
|
||||
|
||||
rma_line = Form(
|
||||
rma_line,
|
||||
view=self.env.ref("rma.view_rma_line_form").id,
|
||||
)
|
||||
|
||||
move_line = self.inv_customer.invoice_line_ids[0]
|
||||
|
||||
rma_line.account_move_line_id = move_line
|
||||
rma_line = rma_line.save()
|
||||
rma_line.action_rma_to_approve()
|
||||
self.assertIn(rma_line.state, ("to_approve", "approved"))
|
||||
|
||||
@@ -88,6 +88,11 @@ class RmaOrderLine(models.Model):
|
||||
compute="_compute_qty_purchase",
|
||||
)
|
||||
|
||||
@api.model
|
||||
def _origin_fields(self):
|
||||
res = super()._origin_fields()
|
||||
return res + ["purchase_order_line_id"]
|
||||
|
||||
@api.onchange("product_id", "partner_id")
|
||||
def _onchange_product_id(self):
|
||||
"""Domain for purchase_order_line_id is computed here to make
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
# Copyright 2017-2022 ForgeFlow S.L.
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
|
||||
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.fields import Datetime
|
||||
from odoo.tests import common
|
||||
from odoo.tests import Form, common
|
||||
|
||||
|
||||
class TestRmaPurchase(common.TransactionCase):
|
||||
@@ -108,3 +109,36 @@ class TestRmaPurchase(common.TransactionCase):
|
||||
rma._onchange_purchase_order_line_id()
|
||||
self.assertEqual(rma.product_id, self.product_1)
|
||||
self.assertEqual(rma.product_qty, 20.0)
|
||||
|
||||
def test_03_rma_require_origin_fields(self):
|
||||
rma_line = Form(
|
||||
self.rma_line_obj.with_context(supplier=True),
|
||||
view=self.env.ref("rma.view_rma_line_supplier_form").id,
|
||||
)
|
||||
rma_line.partner_id = self.po.partner_id
|
||||
rma_line.product_id = self.product_1
|
||||
rma_line.operation_id = self.env.ref("rma.rma_operation_supplier_replace")
|
||||
rma_line = rma_line.save()
|
||||
self.assertFalse(bool(rma_line.reference_move_id))
|
||||
self.assertFalse(bool(rma_line.account_move_line_id))
|
||||
self.assertFalse(bool(rma_line.purchase_order_line_id))
|
||||
rma_line.operation_id.write(
|
||||
{
|
||||
"require_origin_field_filled": True,
|
||||
}
|
||||
)
|
||||
self.assertTrue(rma_line.operation_id.require_origin_field_filled)
|
||||
with self.assertRaises(UserError):
|
||||
rma_line.action_rma_to_approve()
|
||||
|
||||
rma_line = Form(
|
||||
rma_line,
|
||||
view=self.env.ref("rma.view_rma_line_supplier_form").id,
|
||||
)
|
||||
|
||||
move_line = self.po.order_line[0]
|
||||
|
||||
rma_line.purchase_order_line_id = move_line
|
||||
rma_line = rma_line.save()
|
||||
rma_line.action_rma_to_approve()
|
||||
self.assertIn(rma_line.state, ("to_approve", "approved"))
|
||||
|
||||
@@ -82,6 +82,11 @@ class RmaOrderLine(models.Model):
|
||||
)
|
||||
sales_count = fields.Integer(compute="_compute_sales_count", string="# of Sales")
|
||||
|
||||
@api.model
|
||||
def _origin_fields(self):
|
||||
res = super()._origin_fields()
|
||||
return res + ["sale_line_id"]
|
||||
|
||||
@api.onchange("product_id", "partner_id")
|
||||
def _onchange_product_id(self):
|
||||
"""Domain for sale_line_id is computed here to make it dynamic."""
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# Copyright 2020 ForgeFlow S.L.
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
|
||||
|
||||
from odoo.tests import common
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tests import Form, common
|
||||
|
||||
|
||||
class TestRmaSale(common.SingleTransactionCase):
|
||||
@@ -155,3 +156,31 @@ class TestRmaSale(common.SingleTransactionCase):
|
||||
rma._onchange_sale_line_id()
|
||||
self.assertEqual(rma.product_id, self.product_1)
|
||||
self.assertEqual(rma.product_qty, 20.0)
|
||||
|
||||
def test_05_rma_require_origin_fields(self):
|
||||
rma_line = self.rma_group.rma_line_ids.filtered(
|
||||
lambda r: r.product_id == self.product_1
|
||||
).copy()
|
||||
self.assertFalse(bool(rma_line.reference_move_id))
|
||||
self.assertFalse(bool(rma_line.account_move_line_id))
|
||||
self.assertFalse(bool(rma_line.sale_line_id))
|
||||
rma_line.operation_id.write(
|
||||
{
|
||||
"require_origin_field_filled": True,
|
||||
}
|
||||
)
|
||||
self.assertTrue(rma_line.operation_id.require_origin_field_filled)
|
||||
with self.assertRaises(UserError):
|
||||
rma_line.action_rma_to_approve()
|
||||
|
||||
rma_line = Form(
|
||||
rma_line,
|
||||
view=self.env.ref("rma.view_rma_line_form").id,
|
||||
)
|
||||
|
||||
move_line = self.so.order_line[0]
|
||||
|
||||
rma_line.sale_line_id = move_line
|
||||
rma_line = rma_line.save()
|
||||
rma_line.action_rma_to_approve()
|
||||
self.assertIn(rma_line.state, ("to_approve", "approved"))
|
||||
|
||||
Reference in New Issue
Block a user