mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-21 23:32:09 +02:00
Initial commit: OCA Technical packages (595 packages)
This commit is contained in:
commit
2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions
335
odoo-bringout-oca-rma-rma/rma/tests/test_rma_operation.py
Normal file
335
odoo-bringout-oca-rma-rma/rma/tests/test_rma_operation.py
Normal file
|
|
@ -0,0 +1,335 @@
|
|||
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
||||
# Copyright 2023 Michael Tietz (MT Software) <mtietz@mt-software.de>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tests.common import Form
|
||||
|
||||
from .test_rma import TestRma
|
||||
|
||||
|
||||
class TestRmaOperation(TestRma):
|
||||
def test_01(self):
|
||||
"""
|
||||
ensure that the receipt creation behaves correctly according to the
|
||||
action_create_receipt setting.
|
||||
- "automatic_on_confirm":
|
||||
- receipts are created automatically
|
||||
- the manual button is hidden
|
||||
- "manual_on_confirm"
|
||||
- manual button is visible after confirmation
|
||||
- disappears once a receipt is manually created
|
||||
"""
|
||||
self.assertEqual(self.operation.action_create_receipt, "automatic_on_confirm")
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
self.assertFalse(rma.show_create_receipt)
|
||||
rma.action_confirm()
|
||||
self.assertTrue(rma.reception_move_id)
|
||||
self.assertFalse(rma.show_create_receipt)
|
||||
self.operation.action_create_receipt = "manual_on_confirm"
|
||||
rma2 = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
rma2.action_confirm()
|
||||
self.assertTrue(rma2.show_create_receipt)
|
||||
self.assertFalse(rma2.reception_move_id)
|
||||
rma2.action_create_receipt()
|
||||
self.assertFalse(rma2.show_create_receipt)
|
||||
|
||||
def test_02(self):
|
||||
"""
|
||||
test delivery button visibility based on operation settings.
|
||||
No deliver possible
|
||||
"""
|
||||
self.operation.action_create_delivery = False
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "confirmed")
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.show_create_return)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
self.assertFalse(rma.show_create_replace)
|
||||
|
||||
def test_03(self):
|
||||
"""
|
||||
test delivery button visibility based on operation settings.
|
||||
deliver manually after confirm
|
||||
"""
|
||||
self.operation.action_create_delivery = "manual_on_confirm"
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "confirmed")
|
||||
self.assertTrue(rma.can_be_returned)
|
||||
self.assertTrue(rma.show_create_return)
|
||||
self.assertTrue(rma.can_be_replaced)
|
||||
self.assertTrue(rma.show_create_replace)
|
||||
|
||||
def test_04(self):
|
||||
"""
|
||||
test delivery button visibility based on operation settings.
|
||||
deliver automatically after confirm, return same product
|
||||
"""
|
||||
self.operation.action_create_delivery = "automatic_on_confirm"
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "waiting_replacement")
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.show_create_return)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
self.assertFalse(rma.show_create_replace)
|
||||
self.assertTrue(rma.delivery_move_ids)
|
||||
self.assertEqual(rma.delivery_move_ids.product_id, self.product)
|
||||
self.assertEqual(rma.delivery_move_ids.product_uom_qty, 10)
|
||||
|
||||
def test_05(self):
|
||||
"""
|
||||
test delivery button visibility based on operation settings.
|
||||
deliver manually after receipt
|
||||
"""
|
||||
self.operation.action_create_delivery = "manual_after_receipt"
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "confirmed")
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.show_create_return)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
self.assertFalse(rma.show_create_replace)
|
||||
rma.reception_move_id.quantity_done = rma.product_uom_qty
|
||||
rma.reception_move_id.picking_id._action_done()
|
||||
self.assertEqual(rma.state, "received")
|
||||
self.assertTrue(rma.can_be_returned)
|
||||
self.assertTrue(rma.show_create_return)
|
||||
self.assertTrue(rma.can_be_replaced)
|
||||
self.assertTrue(rma.show_create_replace)
|
||||
|
||||
def test_06(self):
|
||||
"""
|
||||
test delivery button visibility based on operation settings.
|
||||
deliver automatically after receipt
|
||||
"""
|
||||
self.operation.action_create_delivery = "automatic_after_receipt"
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "confirmed")
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.show_create_return)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
self.assertFalse(rma.show_create_replace)
|
||||
self.assertFalse(rma.delivery_move_ids)
|
||||
rma.reception_move_id.quantity_done = rma.product_uom_qty
|
||||
rma.reception_move_id.picking_id._action_done()
|
||||
self.assertEqual(rma.delivery_move_ids.product_id, self.product)
|
||||
self.assertEqual(rma.delivery_move_ids.product_uom_qty, 10)
|
||||
self.assertEqual(rma.state, "waiting_replacement")
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.show_create_return)
|
||||
self.assertTrue(rma.can_be_replaced)
|
||||
self.assertFalse(rma.show_create_replace)
|
||||
|
||||
def test_07(self):
|
||||
"""
|
||||
test delivery button visibility based on operation settings.
|
||||
deliver automatically after confirm, different product
|
||||
"""
|
||||
self.operation.action_create_delivery = "automatic_on_confirm"
|
||||
self.operation.different_return_product = True
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
with self.assertRaises(AssertionError, msg="Replacement fields are required"):
|
||||
with Form(rma) as rma_form:
|
||||
rma_form.save()
|
||||
with self.assertRaises(
|
||||
ValidationError, msg="Complete the replacement information"
|
||||
):
|
||||
rma.action_confirm()
|
||||
rma.return_product_id = self.product_product.create(
|
||||
{"name": "return Product test 1", "type": "product"}
|
||||
)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.delivery_move_ids.product_id, rma.product_id)
|
||||
self.assertEqual(rma.reception_move_id.product_id, rma.return_product_id)
|
||||
self.assertEqual(rma.state, "waiting_replacement")
|
||||
|
||||
def test_08(self):
|
||||
"""test refund, manually after confirm"""
|
||||
self.operation.action_create_refund = "manual_on_confirm"
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "confirmed")
|
||||
self.assertTrue(rma.can_be_refunded)
|
||||
self.assertTrue(rma.show_create_refund)
|
||||
|
||||
def test_09(self):
|
||||
"""test refund, manually after receipt"""
|
||||
self.operation.action_create_refund = "manual_after_receipt"
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "confirmed")
|
||||
self.assertFalse(rma.can_be_refunded)
|
||||
self.assertFalse(rma.show_create_refund)
|
||||
rma.reception_move_id.quantity_done = rma.product_uom_qty
|
||||
rma.reception_move_id.picking_id._action_done()
|
||||
self.assertEqual(rma.state, "received")
|
||||
self.assertTrue(rma.can_be_refunded)
|
||||
self.assertTrue(rma.show_create_refund)
|
||||
|
||||
def test_10(self):
|
||||
"""test refund, automatic after confirm"""
|
||||
self.operation.action_create_refund = "automatic_on_confirm"
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "refunded")
|
||||
self.assertTrue(rma.refund_id)
|
||||
self.assertFalse(rma.can_be_refunded)
|
||||
self.assertFalse(rma.show_create_refund)
|
||||
|
||||
def test_11(self):
|
||||
"""test refund, automatic after confirm"""
|
||||
self.operation.action_create_refund = "automatic_after_receipt"
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "confirmed")
|
||||
rma.reception_move_id.quantity_done = rma.product_uom_qty
|
||||
rma.reception_move_id.picking_id._action_done()
|
||||
self.assertEqual(rma.state, "refunded")
|
||||
self.assertTrue(rma.refund_id)
|
||||
self.assertFalse(rma.can_be_refunded)
|
||||
self.assertFalse(rma.show_create_refund)
|
||||
|
||||
def test_12(self):
|
||||
"""
|
||||
Refund without product return
|
||||
Some companies may offer refunds without requiring the return of the product,
|
||||
often in cases of low-value items or when the cost of return shipping is
|
||||
prohibitive.
|
||||
- no receipt
|
||||
- no return
|
||||
- automatically refund on confirm
|
||||
"""
|
||||
self.operation.action_create_receipt = False
|
||||
self.operation.action_create_refund = "automatic_on_confirm"
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "refunded")
|
||||
self.assertFalse(rma.reception_move_id)
|
||||
self.assertTrue(rma.refund_id)
|
||||
|
||||
def test_13(self):
|
||||
"""
|
||||
Return of non-ordered product
|
||||
Occasionally, customers receive items they did not order and need a process for
|
||||
returning these products. The delivered product don't figure on the sale order
|
||||
- receipt
|
||||
- no return
|
||||
- no refund
|
||||
"""
|
||||
self.operation.action_create_receipt = "automatic_on_confirm"
|
||||
self.operation.action_create_delivery = False
|
||||
self.operation.action_create_refund = False
|
||||
rma = self._create_rma(self.partner, self.product, 10, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
rma.reception_move_id.quantity_done = rma.product_uom_qty
|
||||
rma.reception_move_id.picking_id._action_done()
|
||||
self.assertEqual(rma.state, "received")
|
||||
self.assertFalse(rma.delivery_move_ids)
|
||||
|
||||
def test_14(self):
|
||||
"""if the refund action is not ment to update quantity, return picking line
|
||||
to_refund field should be False"""
|
||||
self.operation.action_create_refund = "manual_after_receipt"
|
||||
origin_delivery = self._create_delivery()
|
||||
stock_return_picking_form = Form(
|
||||
self.env["stock.return.picking"].with_context(
|
||||
active_ids=origin_delivery.ids,
|
||||
active_id=origin_delivery.id,
|
||||
active_model="stock.picking",
|
||||
)
|
||||
)
|
||||
stock_return_picking_form.create_rma = True
|
||||
stock_return_picking_form.rma_operation_id = self.operation
|
||||
return_wizard = stock_return_picking_form.save()
|
||||
return_line = return_wizard.product_return_moves.filtered(
|
||||
lambda m, p=self.product: m.product_id == p
|
||||
)
|
||||
self.assertEqual(return_line.rma_operation_id, self.operation)
|
||||
picking_action = return_wizard.create_returns()
|
||||
reception = self.env["stock.picking"].browse(picking_action["res_id"])
|
||||
move = reception.move_ids.filtered(lambda m, p=self.product: m.product_id == p)
|
||||
self.assertFalse(move.to_refund)
|
||||
|
||||
def test_15(self):
|
||||
"""if the refund action is ment to update quantity, return picking line
|
||||
to_refund field should be True"""
|
||||
self.operation.action_create_refund = "update_quantity"
|
||||
origin_delivery = self._create_delivery()
|
||||
stock_return_picking_form = Form(
|
||||
self.env["stock.return.picking"].with_context(
|
||||
active_ids=origin_delivery.ids,
|
||||
active_id=origin_delivery.id,
|
||||
active_model="stock.picking",
|
||||
)
|
||||
)
|
||||
stock_return_picking_form.create_rma = True
|
||||
stock_return_picking_form.rma_operation_id = self.operation
|
||||
return_wizard = stock_return_picking_form.save()
|
||||
return_line = return_wizard.product_return_moves.filtered(
|
||||
lambda m, p=self.product: m.product_id == p
|
||||
)
|
||||
self.assertEqual(return_line.rma_operation_id, self.operation)
|
||||
picking_action = return_wizard.create_returns()
|
||||
reception = self.env["stock.picking"].browse(picking_action["res_id"])
|
||||
move = reception.move_ids.filtered(lambda m, p=self.product: m.product_id == p)
|
||||
self.assertTrue(move.to_refund)
|
||||
|
||||
def test_rma_replace_pick_ship(self):
|
||||
self.operation.action_create_delivery = "automatic_on_confirm"
|
||||
self.warehouse.write({"delivery_steps": "pick_ship"})
|
||||
rma = self._create_rma(self.partner, self.product, 1, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.state, "waiting_replacement")
|
||||
out_pickings = rma.mapped("delivery_move_ids.picking_id")
|
||||
self.assertEqual(rma.delivery_picking_count, 2)
|
||||
self.assertIn(
|
||||
self.warehouse.pick_type_id, out_pickings.mapped("picking_type_id")
|
||||
)
|
||||
self.assertIn(
|
||||
self.warehouse.out_type_id, out_pickings.mapped("picking_type_id")
|
||||
)
|
||||
|
||||
def test_16(self):
|
||||
rma = self._create_rma(self.partner, self.product, 1, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.reception_move_id.state, "assigned")
|
||||
self.assertEqual(rma.reception_move_id.picking_id.state, "assigned")
|
||||
|
||||
def test_17(self):
|
||||
self.operation.auto_confirm_reception = True
|
||||
rma = self._create_rma(self.partner, self.product, 1, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
self.assertEqual(rma.reception_move_id.state, "done")
|
||||
self.assertEqual(rma.reception_move_id.picking_id.state, "done")
|
||||
|
||||
def test_manual_finish_if_no_required_action_flag(self):
|
||||
self.operation.action_create_receipt = False
|
||||
self.operation.action_create_delivery = False
|
||||
self.operation.action_create_refund = False
|
||||
rma = self._create_rma(self.partner, self.product, 1, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
self.assertFalse(rma.requires_action)
|
||||
self.assertEqual(rma.state, "confirmed")
|
||||
rma.action_finish()
|
||||
self.assertEqual(rma.state, "finished")
|
||||
self.operation.action_create_receipt = "manual_on_confirm"
|
||||
rma2 = self._create_rma(self.partner, self.product, 1, self.rma_loc)
|
||||
rma2.action_confirm()
|
||||
self.assertTrue(rma2.requires_action)
|
||||
self.assertEqual(rma2.state, "confirmed")
|
||||
with self.assertRaises(ValidationError):
|
||||
rma2.action_finish()
|
||||
Loading…
Add table
Add a link
Reference in a new issue