Files
rma/website_rma/controllers/main.py
david aa9e542129 [FIX] website_rma: controller implementation
It was assumed that this method (used for any model) always had an RMA
in return, which wasn't correct at all and could lead to cross-model and
cross-customer subscripting if an RMA id matched the one of the form
model creating (eg.: `crm.lead` in 'Contact Us' form)
2021-04-26 12:47:29 +02:00

57 lines
2.1 KiB
Python

# Copyright 2020 Tecnativa - Ernesto Tejeda
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import json
from odoo import http
from odoo.addons.website_form.controllers.main import WebsiteForm
from odoo.http import request
class WebsiteForm(WebsiteForm):
def insert_record(self, request, model, values, custom, meta=None):
if model.model != 'rma':
return super().insert_record(request, model, values, custom, meta)
values['partner_id'] = request.env.user.partner_id.id
values['origin'] = 'Website form'
res = super().insert_record(request, model, values, custom, meta)
# Add the customer to the followers, the same as when creating
# an RMA from a sales order in the portal.
rma = request.env['rma'].browse(res).sudo()
rma.message_subscribe([rma.partner_id.id])
return res
class WebsiteRMA(http.Controller):
def _get_website_rma_product_domain(self, q):
"""Domain used for the products to be shown in selection of
the web form.
"""
domain = [
("name", "=ilike", "%{}%".format(q or "")),
("sale_ok", "=", True),
]
# HACK: As there is no glue module for this purpose we have put
# this this condition to check that the mrp module is installed.
if "bom_ids" in request.env["product.product"]._fields:
domain += [
"|",
("bom_ids.type", "!=", "phantom"),
("bom_ids", "=", False),
]
return domain
@http.route(['/requestrma'], type='http', auth="user", website=True)
def request_rma(self, **kw):
return http.request.render("website_rma.request_rma", {})
@http.route('/website_rma/get_products', type='http', auth="user",
methods=['GET'], website=True)
def rma_product_read(self, q='', l=25, **post):
data = request.env['product.product'].sudo().search_read(
domain=self._get_website_rma_product_domain(q),
fields=['id', 'display_name', 'uom_id'],
limit=int(l),
)
return json.dumps(data)