diff --git a/rma_purchase/README.rst b/rma_purchase/README.rst index 5ae429f1..2cd007c2 100644 --- a/rma_purchase/README.rst +++ b/rma_purchase/README.rst @@ -38,6 +38,7 @@ Contributors * Jordi Ballester Alomar * Aaron Henriquez * Lois Rilo +* Bhavesh Odedra Maintainer ---------- diff --git a/rma_purchase/__init__.py b/rma_purchase/__init__.py index 4105ff51..f3284a96 100644 --- a/rma_purchase/__init__.py +++ b/rma_purchase/__init__.py @@ -1,5 +1,5 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) + from . import models from . import wizards diff --git a/rma_purchase/__manifest__.py b/rma_purchase/__manifest__.py index e8b0d0d8..f6e788bf 100644 --- a/rma_purchase/__manifest__.py +++ b/rma_purchase/__manifest__.py @@ -1,9 +1,9 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) + { 'name': 'RMA Purchase', - 'version': '9.0.1.0.0', + 'version': '11.0.1.0.0', 'category': 'RMA', 'summary': 'RMA from PO', 'license': 'LGPL-3', @@ -13,6 +13,6 @@ 'data': ['views/rma_order_view.xml', 'views/rma_order_line_view.xml', 'wizards/rma_add_purchase.xml'], - 'installable': False, + 'installable': True, 'auto_install': True, } diff --git a/rma_purchase/models/__init__.py b/rma_purchase/models/__init__.py index 5c53c7a9..7f58a831 100644 --- a/rma_purchase/models/__init__.py +++ b/rma_purchase/models/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) from . import rma_order diff --git a/rma_purchase/models/purchase_order_line.py b/rma_purchase/models/purchase_order_line.py index bae355ce..c3db4433 100644 --- a/rma_purchase/models/purchase_order_line.py +++ b/rma_purchase/models/purchase_order_line.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) diff --git a/rma_purchase/models/rma_order.py b/rma_purchase/models/rma_order.py index fcf07403..12ad7076 100644 --- a/rma_purchase/models/rma_order.py +++ b/rma_purchase/models/rma_order.py @@ -1,18 +1,21 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) -from odoo import api, fields, models + +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError class RmaOrder(models.Model): _inherit = "rma.order" - @api.depends('rma_line_ids', 'rma_line_ids.procurement_ids') @api.multi def _compute_po_count(self): for rec in self: - purchases = rec.mapped('rma_line_ids.procurement_ids.purchase_id') - rec.po_count = len(purchases) + po_count = 0 + for line in rec.rma_line_ids: + po_count += len(self.env['purchase.order'].search( + [('origin', '=', line.name)]).ids) + rec.po_count = po_count @api.multi def _compute_origin_po_count(self): @@ -30,7 +33,10 @@ class RmaOrder(models.Model): def action_view_purchase_order(self): action = self.env.ref('purchase.purchase_rfq') result = action.read()[0] - po_ids = self.mapped('rma_line_ids.procurement_ids.purchase_id').ids + po_ids = self.env['purchase.order'].search( + [('origin', '=', self.name)]).ids + if not po_ids: + raise ValidationError(_("No purchase order found!")) result['domain'] = [('id', 'in', po_ids)] return result @@ -40,5 +46,7 @@ class RmaOrder(models.Model): result = action.read()[0] po_ids = self.mapped( 'rma_line_ids.purchase_order_line_id.order_id').ids + if not po_ids: + raise ValidationError(_("No purchase order found!")) result['domain'] = [('id', 'in', po_ids)] return result diff --git a/rma_purchase/models/rma_order_line.py b/rma_purchase/models/rma_order_line.py index b2cf3e50..ad7ba221 100644 --- a/rma_purchase/models/rma_order_line.py +++ b/rma_purchase/models/rma_order_line.py @@ -1,9 +1,8 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) + from odoo import api, fields, models, _ from odoo.exceptions import ValidationError -from odoo.addons import decimal_precision as dp class RmaOrderLine(models.Model): @@ -12,30 +11,19 @@ class RmaOrderLine(models.Model): @api.multi def _compute_purchase_count(self): for rec in self: - purchase_list = [] - for procurement_id in rec.procurement_ids: - if procurement_id.purchase_id and \ - procurement_id.purchase_id.id: - purchase_list.append(procurement_id.purchase_id.id) - rec.purchase_count = len(list(set(purchase_list))) + rec.purchase_count = len(self.env['purchase.order'].search( + [('origin', 'ilike', rec.name)]).ids) @api.multi - @api.depends('procurement_ids.purchase_line_id') def _compute_purchase_order_lines(self): for rec in self: purchase_list = [] - for procurement_id in rec.procurement_ids: - if procurement_id.purchase_line_id and \ - procurement_id.purchase_line_id.id: - purchase_list.append(procurement_id.purchase_line_id.id) + for purchase in self.env['purchase.order'].search( + [('origin', 'ilike', rec.name)]): + for line in purchase.order_line: + purchase_list.append(line.id) rec.purchase_order_line_ids = [(6, 0, purchase_list)] - @api.multi - @api.depends('procurement_ids.purchase_line_id') - def _compute_qty_purchased(self): - for rec in self: - rec.qty_purchased = rec._get_rma_purchased_qty() - purchase_count = fields.Integer( compute='_compute_purchase_count', string='# of Purchases', ) @@ -55,11 +43,6 @@ class RmaOrderLine(models.Model): column1='rma_order_line_id', column2='purchase_order_line_id', string='Purchase Order Lines', compute='_compute_purchase_order_lines', ) - qty_purchased = fields.Float( - string='Qty Purchased', copy=False, - digits=dp.get_precision('Product Unit of Measure'), - readonly=True, compute='_compute_qty_purchased', store=True, - ) @api.multi def _prepare_rma_line_from_po_line(self, line): @@ -139,25 +122,3 @@ class RmaOrderLine(models.Model): if not exception == 'purchase_order_line_id': self.purchase_order_line_id = False return res - - @api.multi - def action_view_purchase_order(self): - action = self.env.ref('purchase.purchase_rfq') - result = action.read()[0] - order_ids = [] - for procurement_id in self.procurement_ids: - order_ids.append(procurement_id.purchase_id.id) - result['domain'] = [('id', 'in', order_ids)] - return result - - @api.multi - def _get_rma_purchased_qty(self): - self.ensure_one() - qty = 0.0 - for procurement_id in self.procurement_ids: - purchase_line = procurement_id.purchase_line_id - if self.type == 'supplier': - qty += purchase_line.product_qty - else: - qty = 0.0 - return qty diff --git a/rma_purchase/tests/__init__.py b/rma_purchase/tests/__init__.py index dfa77946..fd0efa32 100644 --- a/rma_purchase/tests/__init__.py +++ b/rma_purchase/tests/__init__.py @@ -1,6 +1,6 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) + from . import test_rma from . import test_supplier_rma from . import test_rma_dropship diff --git a/rma_purchase/tests/test_rma.py b/rma_purchase/tests/test_rma.py index d4049f77..f11d36b1 100644 --- a/rma_purchase/tests/test_rma.py +++ b/rma_purchase/tests/test_rma.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) @@ -267,13 +266,10 @@ class TestRma(common.TransactionCase): self.rma_customer_id._compute_po_count() self.rma_customer_id._compute_origin_po_count() - self.rma_customer_id.action_view_purchase_order() self.rma_customer_id.action_view_origin_purchase_order() self.rma_customer_id.rma_line_ids[0]._compute_purchase_count() self.rma_customer_id.rma_line_ids[0]._compute_purchase_order_lines() - self.rma_customer_id.rma_line_ids[0].action_view_purchase_order() - self.rma_customer_id.rma_line_ids[0]._get_rma_purchased_qty() def test_rma_add_purchase_wizard(self): wizard = self.env['rma_add_purchase'].with_context({ @@ -320,13 +316,11 @@ class TestRma(common.TransactionCase): 'picking_type': 'incoming', 'active_id': 1 }).create({}) - procurements = wizard._create_picking() - group_ids = set([proc.group_id.id for proc in procurements if - proc.group_id]) - domain = [('group_id', 'in', list(group_ids))] - picking = self.stockpicking.search(domain) - self.assertEquals(len(picking), 1, - "Incorrect number of pickings created") + wizard._create_picking() + res = self.rma_customer_id.rma_line_ids.action_view_in_shipments() + self.assertTrue('res_id' in res, + "Incorrect number of pickings created") + picking = self.env['stock.picking'].browse(res['res_id']) moves = picking.move_lines self.assertEquals(len(moves), 3, "Incorrect number of moves created") @@ -356,8 +350,11 @@ class TestRma(common.TransactionCase): "Wrong qty to receive") self.assertEquals(line.qty_incoming, 2, "Wrong qty incoming") + picking.action_confirm() picking.action_assign() - picking.do_transfer() + for line in picking.move_line_ids: + line.qty_done = line.product_uom_qty + picking.action_done() for line in self.rma_customer_id.rma_line_ids: self.assertEquals(line.qty_to_receive, 0, "Wrong qty to_receive") @@ -389,17 +386,12 @@ class TestRma(common.TransactionCase): 'active_model': 'rma.order.line', 'picking_type': 'outgoing', }).create({}) - procurements = wizard._create_picking() - group_ids = set([proc.group_id.id for proc in procurements if - proc.group_id]) - domain = [('group_id', 'in', list(group_ids))] - pickings = self.stockpicking.search(domain) - procurements[0].purchase_id = self._create_purchase_order().id - wizard._get_action(pickings, procurements) - self.assertEquals(len(pickings), 2, - "Incorrect number of pickings created") - picking_out = pickings[1] - moves = picking_out.move_lines + wizard._create_picking() + res = self.rma_customer_id.rma_line_ids.action_view_out_shipments() + self.assertTrue('res_id' in res, + "Incorrect number of pickings created") + picking = self.env['stock.picking'].browse(res['res_id']) + moves = picking.move_lines self.assertEquals(len(moves), 3, "Incorrect number of moves created") for line in self.rma_customer_id.rma_line_ids: @@ -430,8 +422,11 @@ class TestRma(common.TransactionCase): "Wrong qty to deliver") self.assertEquals(line.qty_outgoing, 2, "Wrong qty outgoing") - picking_out.action_assign() - picking_out.do_transfer() + picking.action_confirm() + picking.action_assign() + for line in picking.move_line_ids: + line.qty_done = line.product_uom_qty + picking.action_done() for line in self.rma_customer_id.rma_line_ids: self.assertEquals(line.qty_to_receive, 0, "Wrong qty to receive") diff --git a/rma_purchase/tests/test_rma_dropship.py b/rma_purchase/tests/test_rma_dropship.py index abe07221..c469252d 100644 --- a/rma_purchase/tests/test_rma_dropship.py +++ b/rma_purchase/tests/test_rma_dropship.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) @@ -45,13 +44,11 @@ class TestRmaDropship(test_rma.TestRma): 'active_model': 'rma.order.line', 'picking_type': 'incoming', }).create({}) - procurements = wizard._create_picking() - group_ids = set([proc.group_id.id for proc in procurements if - proc.group_id]) - domain = [('group_id', 'in', list(group_ids))] - picking = self.stockpicking.search(domain) - self.assertEquals(len(picking), 1, - "Incorrect number of pickings created") + wizard._create_picking() + res = supplier_rma.rma_line_ids.action_view_in_shipments() + self.assertTrue('res_id' in res, + "Incorrect number of pickings created") + picking = self.env['stock.picking'].browse(res['res_id']) moves = picking.move_lines self.assertEquals(len(moves), 3, "Incorrect number of moves created") diff --git a/rma_purchase/tests/test_supplier_rma.py b/rma_purchase/tests/test_supplier_rma.py index 8fca8b14..f24dc7c5 100644 --- a/rma_purchase/tests/test_supplier_rma.py +++ b/rma_purchase/tests/test_supplier_rma.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) @@ -22,13 +21,11 @@ class TestSupplierRma(test_rma.TestRma): 'picking_type': 'outgoing', 'active_id': 1 }).create({}) - procurements = wizard._create_picking() - group_ids = set([proc.group_id.id for proc in procurements if - proc.group_id]) - domain = [('group_id', 'in', list(group_ids))] - picking = self.stockpicking.search(domain) - self.assertEquals(len(picking), 1, - "Incorrect number of pickings created") + wizard._create_picking() + res = self.rma_supplier_id.rma_line_ids.action_view_out_shipments() + self.assertTrue('res_id' in res, + "Incorrect number of pickings created") + picking = self.env['stock.picking'].browse(res['res_id']) moves = picking.move_lines self.assertEquals(len(moves), 3, "Incorrect number of moves created") @@ -64,24 +61,26 @@ class TestSupplierRma(test_rma.TestRma): "Wrong qty outgoing") picking.action_assign() - picking.do_new_transfer() + for line in picking.move_lines: + line.quantity_done = line.product_uom_qty + picking.button_validate() for line in self.rma_supplier_id.rma_line_ids: self.assertEquals(line.qty_incoming, 0, "Wrong qty incoming") self.assertEquals(line.qty_received, 0, "Wrong qty received") if line.product_id == self.product_1: - self.assertEquals(line.qty_delivered, 0, + self.assertEquals(line.qty_delivered, 3, "Wrong qty delivered") self.assertEquals(line.qty_to_receive, 3, "Wrong qty to receive") if line.product_id == self.product_2: - self.assertEquals(line.qty_outgoing, 5, + self.assertEquals(line.qty_outgoing, 0, "Wrong qty outgoing") self.assertEquals(line.qty_to_receive, 5, "Wrong qty to receive") if line.product_id == self.product_3: - self.assertEquals(line.qty_outgoing, 2, + self.assertEquals(line.qty_outgoing, 0, "Wrong qty delivered") self.assertEquals(line.qty_to_receive, 2, "Wrong qty to receive") @@ -91,65 +90,48 @@ class TestSupplierRma(test_rma.TestRma): 'active_model': 'rma.order.line', 'picking_type': 'incoming', }).create({}) - procurements = wizard._create_picking() - group_ids = set([proc.group_id.id for proc in procurements if - proc.group_id]) - domain = [('group_id', 'in', list(group_ids))] - pickings = self.stockpicking.search(domain) - self.assertEquals(len(pickings), 2, - "Incorrect number of pickings created") - picking_out = pickings[1] - moves = picking_out.move_lines + wizard._create_picking() + res = self.rma_supplier_id.rma_line_ids.action_view_in_shipments() + self.assertTrue('res_id' in res, + "Incorrect number of pickings created") + picking = self.env['stock.picking'].browse(res['res_id']) + moves = picking.move_lines self.assertEquals(len(moves), 3, "Incorrect number of moves created") for line in self.rma_supplier_id.rma_line_ids: - self.assertEquals(line.qty_incoming, 0, - "Wrong qty incoming") self.assertEquals(line.qty_received, 0, "Wrong qty received") if line.product_id == self.product_1: self.assertEquals(line.qty_to_receive, 3, "Wrong qty to receive") - self.assertEquals(line.qty_incoming, 0, + self.assertEquals(line.qty_incoming, 3, "Wrong qty incoming") - self.assertEquals(line.qty_delivered, 0, - "Wrong qty delivered") if line.product_id == self.product_2: self.assertEquals(line.qty_to_receive, 5, "Wrong qty to receive") - self.assertEquals(line.qty_to_deliver, 5, - "Wrong qty to deliver") + self.assertEquals(line.qty_incoming, 5, + "Wrong qty incoming") if line.product_id == self.product_3: self.assertEquals(line.qty_to_receive, 2, "Wrong qty to receive") - self.assertEquals(line.qty_to_deliver, 2, - "Wrong qty to deliver") - picking_out.action_assign() - picking_out.do_new_transfer() + self.assertEquals(line.qty_incoming, 2, + "Wrong qty incoming") + picking.action_assign() + for line in picking.move_line_ids: + line.qty_done = line.product_uom_qty + picking.action_done() for line in self.rma_supplier_id.rma_line_ids[0]: - self.assertEquals(line.qty_to_receive, 3, - "Wrong qty to receive") self.assertEquals(line.qty_incoming, 0, "Wrong qty incoming") - self.assertEquals(line.qty_delivered, 0, - "Wrong qty deliver") - self.assertEquals(line.qty_outgoing, 6, - "Wrong qty outgoing") if line.product_id == self.product_1: - self.assertEquals(line.qty_received, 0, + self.assertEquals(line.qty_received, 3, "Wrong qty received") - self.assertEquals(line.qty_delivered, 0, - "Wrong qty delivered") if line.product_id == self.product_2: - self.assertEquals(line.qty_received, 0, + self.assertEquals(line.qty_received, 5, "Wrong qty received") - self.assertEquals(line.qty_delivered, 5, - "Wrong qty delivered") if line.product_id == self.product_3: self.assertEquals(line.qty_received, 2, "Wrong qty received") - self.assertEquals(line.qty_delivered, 2, - "Wrong qty delivered") for line in self.rma_supplier_id.rma_line_ids: line.action_rma_done() self.assertEquals(line.state, 'done', diff --git a/rma_purchase/views/rma_order_line_view.xml b/rma_purchase/views/rma_order_line_view.xml index 81d45512..e606b37e 100644 --- a/rma_purchase/views/rma_order_line_view.xml +++ b/rma_purchase/views/rma_order_line_view.xml @@ -1,4 +1,4 @@ - + @@ -6,15 +6,6 @@ rma.order.line -
- -
- - - - - diff --git a/rma_purchase/views/rma_order_view.xml b/rma_purchase/views/rma_order_view.xml index 685a4029..f109af39 100644 --- a/rma_purchase/views/rma_order_view.xml +++ b/rma_purchase/views/rma_order_view.xml @@ -1,4 +1,4 @@ - + diff --git a/rma_purchase/wizards/__init__.py b/rma_purchase/wizards/__init__.py index 716f361c..93c9a820 100644 --- a/rma_purchase/wizards/__init__.py +++ b/rma_purchase/wizards/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) diff --git a/rma_purchase/wizards/rma_add_purchase.py b/rma_purchase/wizards/rma_add_purchase.py index 1679442a..15e95e51 100644 --- a/rma_purchase/wizards/rma_add_purchase.py +++ b/rma_purchase/wizards/rma_add_purchase.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) @@ -91,8 +90,6 @@ class RmaAddPurchase(models.TransientModel): def _get_rma_data(self): data = { 'date_rma': fields.Datetime.now(), - 'delivery_address_id': self.purchase_id.partner_id.id, - 'invoice_address_id': self.purchase_id.partner_id.id } return data diff --git a/rma_purchase/wizards/rma_add_purchase.xml b/rma_purchase/wizards/rma_add_purchase.xml index ee6c4a3b..1c467bef 100644 --- a/rma_purchase/wizards/rma_add_purchase.xml +++ b/rma_purchase/wizards/rma_add_purchase.xml @@ -1,4 +1,4 @@ - + @@ -71,6 +71,4 @@
- -
diff --git a/rma_purchase/wizards/rma_make_picking.py b/rma_purchase/wizards/rma_make_picking.py index 76a8cbfc..42d440f7 100644 --- a/rma_purchase/wizards/rma_make_picking.py +++ b/rma_purchase/wizards/rma_make_picking.py @@ -1,6 +1,6 @@ -# -*- coding: utf-8 -*- # © 2017 Eficent Business and IT Consulting Services S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) + from odoo import api, fields, models