From 41d19da9334dc974862eaf3f2cfece75a15d2370 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Thu, 16 Aug 2018 12:44:43 -0700 Subject: [PATCH] IMP `rma_sale` with critical path of doing a return for an existing picking. --- rma_sale/__manifest__.py | 1 + rma_sale/data/rma_demo.xml | 15 ++++++++ rma_sale/tests/__init__.py | 1 + rma_sale/tests/test_rma.py | 68 ++++++++++++++++++++++++++++++++++++ rma_sale/wizard/rma_lines.py | 2 +- 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 rma_sale/data/rma_demo.xml create mode 100644 rma_sale/tests/__init__.py create mode 100644 rma_sale/tests/test_rma.py diff --git a/rma_sale/__manifest__.py b/rma_sale/__manifest__.py index b2582c51..a3ae4d3d 100644 --- a/rma_sale/__manifest__.py +++ b/rma_sale/__manifest__.py @@ -16,6 +16,7 @@ ], 'data': [ 'security/ir.model.access.csv', + 'data/rma_demo.xml', 'views/rma_views.xml', 'wizard/rma_lines_views.xml', ], diff --git a/rma_sale/data/rma_demo.xml b/rma_sale/data/rma_demo.xml new file mode 100644 index 00000000..dbfea5ea --- /dev/null +++ b/rma_sale/data/rma_demo.xml @@ -0,0 +1,15 @@ + + + + Sale Return + sale_order + + + + + + make_to_stock + + + + \ No newline at end of file diff --git a/rma_sale/tests/__init__.py b/rma_sale/tests/__init__.py new file mode 100644 index 00000000..c95f5fde --- /dev/null +++ b/rma_sale/tests/__init__.py @@ -0,0 +1 @@ +from . import test_rma diff --git a/rma_sale/tests/test_rma.py b/rma_sale/tests/test_rma.py new file mode 100644 index 00000000..fe732090 --- /dev/null +++ b/rma_sale/tests/test_rma.py @@ -0,0 +1,68 @@ +from odoo.addons.rma.tests.test_rma import TestRMA +from odoo.exceptions import UserError + + +class TestRMASale(TestRMA): + + def setUp(self): + super(TestRMASale, self).setUp() + self.template2 = self.env.ref('rma_sale.template_sale_return') + + def test_20_sale_return(self): + self.product1.tracking = 'serial' + order = self.env['sale.order'].create({ + 'partner_id': self.partner1.id, + 'partner_invoice_id': self.partner1.id, + 'partner_shipping_id': self.partner1.id, + 'order_line': [(0, 0, { + 'product_id': self.product1.id, + 'product_uom_qty': 1.0, + 'product_uom': self.product1.uom_id.id, + 'price_unit': 10.0, + })] + }) + order.action_confirm() + self.assertTrue(order.state in ('sale', 'done')) + self.assertEqual(len(order.picking_ids), 1, 'Tests only run with single stage delivery.') + + # Try to RMA item not delivered yet + rma = self.env['rma.rma'].create({ + 'template_id': self.template2.id, + 'partner_id': self.partner1.id, + 'partner_shipping_id': self.partner1.id, + 'sale_order_id': order.id, + }) + self.assertEqual(rma.state, 'draft') + rma_line = self.env['rma.line'].create({ + 'rma_id': rma.id, + 'product_id': self.product1.id, + 'product_uom_id': self.product1.uom_id.id, + 'product_uom_qty': 1.0, + }) + with self.assertRaises(UserError): + rma.action_confirm() + + order.picking_ids.force_assign() + pack_opt = self.env['stock.pack.operation'].search([('picking_id', '=', order.picking_ids.id)], limit=1) + lot = self.env['stock.production.lot'].create({ + 'product_id': self.product1.id, + 'name': 'X100', + }) + self.env['stock.pack.operation.lot'].create({'operation_id': pack_opt.id, 'lot_id': lot.id, 'qty': 1.0}) + pack_opt.qty_done = 1.0 + order.picking_ids.do_transfer() + self.assertEqual(order.picking_ids.state, 'done') + + # Confirm RMA + rma.action_confirm() + self.assertEqual(rma.in_picking_id.state, 'assigned') + pack_opt = self.env['stock.pack.operation'].search([('picking_id', '=', rma.in_picking_id.id)], limit=1) + self.assertEqual(pack_opt.pack_lot_ids.lot_id, lot) + + with self.assertRaises(UserError): + rma.action_done() + + pack_opt.pack_lot_ids.qty = 1.0 + pack_opt.qty_done = 1.0 + rma.in_picking_id.do_transfer() + rma.action_done() diff --git a/rma_sale/wizard/rma_lines.py b/rma_sale/wizard/rma_lines.py index 69eb20bd..e09c33be 100644 --- a/rma_sale/wizard/rma_lines.py +++ b/rma_sale/wizard/rma_lines.py @@ -52,7 +52,7 @@ class RMASaleMakeLines(models.TransientModel): class RMASOMakeLinesLine(models.TransientModel): _name = 'rma.sale.make.lines.line' - rma_make_lines_id = fields.Many2one('rma.make.lines') + rma_make_lines_id = fields.Many2one('rma.sale.make.lines') product_id = fields.Many2one('product.product', string="Product") qty_ordered = fields.Float(string='Ordered') qty_invoiced = fields.Float(string='Invoiced')