From fbffdc71b23887e960409968b6f0e9579aa69507 Mon Sep 17 00:00:00 2001 From: Ernesto Tejeda Date: Wed, 19 Aug 2020 00:19:25 -0400 Subject: [PATCH] [FIX+IMP] rma, rma_sale: fix bugs and add improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix thrown error when trying to download a picking from the portal. - Add the hook method to prepare RMA values ​​from the return pick wizard. - Add the access rule for portal users. - Show the portal 'Request RMAs' button on the sales page only to users related to the sales order. --- rma/controllers/main.py | 16 ++++++++-------- rma/data/mail_data.xml | 2 +- rma/i18n/es.po | 2 +- rma/models/rma.py | 6 ++++++ rma/models/stock_move.py | 26 ++++++++++++++++++++++++++ rma/models/stock_warehouse.py | 2 +- rma/security/rma_security.xml | 11 +++++++++-- rma/views/rma_portal_templates.xml | 4 ++-- rma/views/rma_views.xml | 2 +- rma/wizard/stock_picking_return.py | 27 ++++----------------------- rma_sale/controllers/sale_portal.py | 3 +++ rma_sale/models/__init__.py | 1 + rma_sale/models/sale.py | 1 - rma_sale/models/stock_move.py | 13 +++++++++++++ 14 files changed, 76 insertions(+), 40 deletions(-) create mode 100644 rma_sale/models/stock_move.py diff --git a/rma/controllers/main.py b/rma/controllers/main.py index f53942f1..aeb6d1c8 100644 --- a/rma/controllers/main.py +++ b/rma/controllers/main.py @@ -102,13 +102,13 @@ class PortalRma(CustomerPortal): values = self._rma_get_page_view_values(rma_sudo, access_token, **kw) return request.render("rma.portal_rma_page", values) - @http.route(['/my/rma/picking/pdf/'], + @http.route(['/my/rma/picking/pdf//'], type='http', auth="public", website=True) - def portal_my_rma_picking_report(self, picking_id, access_token=None, - **kw): + def portal_my_rma_picking_report(self, rma_id, picking_id, + access_token=None, **kw): try: - picking_sudo = self._stock_picking_check_access( - picking_id, access_token=access_token) + picking_sudo = self._picking_check_access( + rma_id, picking_id, access_token=access_token) except exceptions.AccessError: return request.redirect('/my') report_sudo = request.env.ref('stock.action_report_delivery').sudo() @@ -119,14 +119,14 @@ class PortalRma(CustomerPortal): ] return request.make_response(pdf, headers=pdfhttpheaders) - def _stock_picking_check_access(self, picking_id, access_token=None): + def _picking_check_access(self, rma_id, picking_id, access_token=None): + rma = request.env['rma'].browse([rma_id]) picking = request.env['stock.picking'].browse([picking_id]) picking_sudo = picking.sudo() try: picking.check_access_rights('read') picking.check_access_rule('read') except exceptions.AccessError: - if not access_token or not consteq( - picking_sudo.sale_id.access_token, access_token): + if not access_token or not consteq(rma.access_token, access_token): raise return picking_sudo diff --git a/rma/data/mail_data.xml b/rma/data/mail_data.xml index 207747bc..7c118726 100644 --- a/rma/data/mail_data.xml +++ b/rma/data/mail_data.xml @@ -5,7 +5,7 @@ Draft RMA rma - New RMA in draft state + RMA in draft state diff --git a/rma/i18n/es.po b/rma/i18n/es.po index 5df1ef08..edcfa9d2 100644 --- a/rma/i18n/es.po +++ b/rma/i18n/es.po @@ -1355,7 +1355,7 @@ msgstr "" #: model:ir.model.fields,field_description:rma.field_rma__state #: model_terms:ir.ui.view,arch_db:rma.rma_view_search msgid "State" -msgstr "Provincia" +msgstr "Estado" #. module: rma #: code:addons/rma/controllers/main.py:40 diff --git a/rma/models/rma.py b/rma/models/rma.py index 8a9ddcd8..ab95a420 100644 --- a/rma/models/rma.py +++ b/rma/models/rma.py @@ -1080,6 +1080,12 @@ class Rma(models.Model): } # Mail business methods + def _track_subtype(self, init_values): + self.ensure_one() + if 'state' in init_values and self.state == 'draft': + return 'rma.mt_rma_draft' + return super()._track_subtype(init_values) + def message_new(self, msg_dict, custom_values=None): """Extract the needed values from an incoming rma emails data-set to be used to create an RMA. diff --git a/rma/models/stock_move.py b/rma/models/stock_move.py index 8ab511ce..c20e64c6 100644 --- a/rma/models/stock_move.py +++ b/rma/models/stock_move.py @@ -88,6 +88,32 @@ class StockMove(models.Model): res['rma_id'] = self.rma_id.id return res + def _prepare_return_rma_vals(self, original_picking): + """ hook method for preparing an RMA from the 'return picking wizard'. + """ + self.ensure_one() + partner = original_picking.partner_id + if hasattr(original_picking, 'sale_id') and original_picking.sale_id: + partner_invoice_id = original_picking.sale_id.partner_invoice_id.id + else: + partner_invoice_id = partner.address_get( + ['invoice']).get('invoice', False), + return { + 'user_id': self.env.user.id, + 'partner_id': partner.id, + 'partner_invoice_id': partner_invoice_id, + 'origin': original_picking.name, + 'picking_id': original_picking.id, + 'move_id': self.origin_returned_move_id.id, + 'product_id': self.origin_returned_move_id.product_id.id, + 'product_uom_qty': self.product_uom_qty, + 'product_uom': self.product_uom.id, + 'reception_move_id': self.id, + 'company_id': self.company_id.id, + 'location_id': self.location_dest_id.id, + 'state': 'confirmed', + } + class StockRule(models.Model): _inherit = 'stock.rule' diff --git a/rma/models/stock_warehouse.py b/rma/models/stock_warehouse.py index 7c0716d2..5896accd 100644 --- a/rma/models/stock_warehouse.py +++ b/rma/models/stock_warehouse.py @@ -62,7 +62,7 @@ class StockWarehouse(models.Model): sequence_data = warehouse._get_sequence_values() warehouse.rma_in_type_id.sequence_id.write( sequence_data['rma_in_type_id']) - warehouse.rma_in_type_id.sequence_id.write( + warehouse.rma_out_type_id.sequence_id.write( sequence_data['rma_out_type_id']) def _get_picking_type_create_values(self, max_sequence): diff --git a/rma/security/rma_security.xml b/rma/security/rma_security.xml index 5a8037c9..6604005f 100644 --- a/rma/security/rma_security.xml +++ b/rma/security/rma_security.xml @@ -30,16 +30,23 @@ Personal RMAs - + ['|',('user_id','=',user.id),('user_id','=',False)] All RMAs - + [(1,'=',1)] + + + RMA portal users + + [('message_partner_ids', 'child_of', [user.partner_id.commercial_partner_id.id])] + + RMA multi-company diff --git a/rma/views/rma_portal_templates.xml b/rma/views/rma_portal_templates.xml index e4ae704e..9219c044 100644 --- a/rma/views/rma_portal_templates.xml +++ b/rma/views/rma_portal_templates.xml @@ -191,7 +191,7 @@
Reception - +