[IMP] website_rma: black, isort, prettier

This commit is contained in:
Ernesto Tejeda
2020-12-01 10:19:34 -05:00
committed by iwkse
parent 6fe32c7351
commit 9f937c9462
12 changed files with 241 additions and 146 deletions

View File

@@ -10,10 +10,7 @@
"author": "Tecnativa, Odoo Community Association (OCA)",
"maintainers": ["ernestotejeda"],
"license": "AGPL-3",
"depends": [
"rma",
"website_form",
],
"depends": ["rma", "website_form",],
"data": [
"data/ir_model_data.xml",
"views/assets.xml",

View File

@@ -1,46 +1,56 @@
# 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
from odoo.addons.website_form.controllers.main import WebsiteForm
class WebsiteForm(WebsiteForm):
def insert_record(self, request, model, values, custom, meta=None):
if model.model == 'rma':
values['partner_id'] = request.env.user.partner_id.id
if model.model == "rma":
values["partner_id"] = request.env.user.partner_id.id
res = super(WebsiteForm, self).insert_record(
request, model, values, custom, meta)
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 = 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.
"""
return [
('name', '=ilike', "%{}%".format(q or '')),
("name", "=ilike", "%{}%".format(q or "")),
("sale_ok", "=", True),
]
@http.route(['/requestrma'], type='http', auth="user", website=True)
@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(
@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'],
fields=["id", "display_name", "uom_id"],
limit=int(l),
)
)
return json.dumps(data)

View File

@@ -1,17 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 Tecnativa - Ernesto Tejeda
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<data>
<record id="rma.model_rma" model="ir.model">
<field name="website_form_default_field_id" ref="rma.field_rma__description" />
<field
name="website_form_default_field_id"
ref="rma.field_rma__description"
/>
<field name="website_form_access">True</field>
<field name="website_form_label">Request RMA</field>
</record>
</data>
<function model="ir.model.fields" name="formbuilder_whitelist">
<value>rma</value>
<value eval="[
<value
eval="[
'partner_id',
'product_id',
'product_uom_qty',
@@ -19,6 +23,7 @@
'operation_id',
'description',
'state',
]"/>
]"
/>
</function>
</odoo>

View File

@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 Tecnativa - Ernesto Tejeda
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<data>
<record id="request_rma_thanks_page" model="website.page">
<field name="url">/requestrma-thank-you</field>
<field name="website_indexed" eval="False"/>
<field name="website_indexed" eval="False" />
<field name="website_published">True</field>
<field name="view_id" ref="request_rma_thanks_page_view"/>
<field name="view_id" ref="request_rma_thanks_page_view" />
</record>
</data>
</odoo>

View File

@@ -5,7 +5,7 @@ from odoo import api, models
class IrModel(models.Model):
_inherit = 'ir.model'
_inherit = "ir.model"
@api.model
def get_authorized_fields(self, model_name):
@@ -17,7 +17,7 @@ class IrModel(models.Model):
readonly always.
"""
res = super().get_authorized_fields(model_name)
if model_name == 'rma':
auth_fields = ['product_uom_qty', 'product_uom', 'partner_id']
if model_name == "rma":
auth_fields = ["product_uom_qty", "product_uom", "partner_id"]
res.update(self.env[model_name].fields_get(auth_fields))
return res

View File

@@ -1,23 +1,23 @@
/* Copyright 2020 Tecnativa - Ernesto Tejeda
/* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
*/
odoo.define('website_rma.website_rma', function(require) {
odoo.define("website_rma.website_rma", function(require) {
"use strict";
require('web.dom_ready');
require("web.dom_ready");
$("#rma_request_form input[name='product_id']").select2({
width: '100%',
placeholder: 'Select a product',
width: "100%",
placeholder: "Select a product",
allowClear: true,
selection_data: false,
ajax: {
url: '/website_rma/get_products',
dataType: 'json',
url: "/website_rma/get_products",
dataType: "json",
data: function(term) {
return {
q: term,
l: 50
l: 50,
};
},
results: function(data) {
@@ -27,18 +27,18 @@ odoo.define('website_rma.website_rma', function(require) {
id: x.id,
text: x.display_name,
uom_id: x.uom_id[0],
uom_name: x.uom_id[1]
uom_name: x.uom_id[1],
});
});
return {results: res};
}
},
},
});
// Set UoM on selected onchange
$("#rma_request_form input[name='product_id']").change(function(){
var select2_data = $(this).select2('data');
var uom_id = select2_data ? select2_data['uom_id'] : ''
var uom_name = select2_data ? select2_data['uom_name'] : ''
$("#rma_request_form input[name='product_id']").change(function() {
var select2_data = $(this).select2("data");
var uom_id = select2_data ? select2_data.uom_id : "";
var uom_name = select2_data ? select2_data.uom_name : "";
$("input[name='product_uom']").val(uom_id);
$("input[name='product_uom_name']").val(uom_name);
});

View File

@@ -1,17 +1,18 @@
/* Copyright 2020 Tecnativa - Ernesto Tejeda
/* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
*/
odoo.define('website_sale_vat_required.tour', function(require) {
odoo.define("website_sale_vat_required.tour", function(require) {
"use strict";
var tour = require("web_tour.tour");
var base = require("web_editor.base");
tour.register("request_rma",
tour.register(
"request_rma",
{
test: true,
url: "/my",
wait_for: base.ready()
wait_for: base.ready(),
},
[
{
@@ -19,27 +20,29 @@ odoo.define('website_sale_vat_required.tour', function(require) {
trigger: ".o_portal_my_home a[href='/requestrma']",
},
{
content: 'Click on request button with the form empty',
content: "Click on request button with the form empty",
trigger: "a.o_website_form_send",
},
{
content: 'Fill form',
content: "Fill form",
trigger: "#rma_request_form",
extra_trigger: "#rma_request_form",
run: function (actions) {
$("select[name='operation_id'] > option:eq(1)").prop('selected', true);
run: function(actions) {
$("select[name='operation_id'] > option:eq(1)").prop(
"selected",
true
);
$("textarea[name='description']").val("RMA test from website form");
}
},
},
{
content: 'Click on request button with the form empty',
content: "Click on request button with the form empty",
trigger: "a.o_website_form_send",
},
{
content: "Click on RMA form page link",
trigger: "div#request_rma_thanks",
}
},
]
)
);
});

View File

@@ -5,25 +5,24 @@ from odoo.tests.common import Form, HttpCase
class TestWebsiteRma(HttpCase):
def setUp(self):
super().setUp()
self.product = self.env['product.product'].create({
'name': 'Website rma 1',
'type': 'product',
})
picking_type = self.env['stock.picking.type'].search(
self.product = self.env["product.product"].create(
{"name": "Website rma 1", "type": "product",}
)
picking_type = self.env["stock.picking.type"].search(
[
('code', '=', 'outgoing'),
'|',
('warehouse_id.company_id', '=', self.env.user.company_id.id),
('warehouse_id', '=', False)
("code", "=", "outgoing"),
"|",
("warehouse_id.company_id", "=", self.env.user.company_id.id),
("warehouse_id", "=", False),
],
limit=1,
)
picking_form = Form(
recordp=self.env['stock.picking'].with_context(
default_picking_type_id=picking_type.id),
recordp=self.env["stock.picking"].with_context(
default_picking_type_id=picking_type.id
),
view="stock.view_picking_form",
)
picking_form.partner_id = self.env.user.partner_id
@@ -38,14 +37,14 @@ class TestWebsiteRma(HttpCase):
def test_website_form_request_rma(self):
self.browser_js(
url_path="/my",
code="odoo.__DEBUG__.services['web_tour.tour']"
".run('request_rma')",
ready="odoo.__DEBUG__.services['web_tour.tour']"
".tours.request_rma.ready",
code="odoo.__DEBUG__.services['web_tour.tour']" ".run('request_rma')",
ready="odoo.__DEBUG__.services['web_tour.tour']" ".tours.request_rma.ready",
login="admin",
)
rma = self.env['rma'].search([
('operation_id', '!=', False),
('description', '=', "RMA test from website form"),
])
rma = self.env["rma"].search(
[
("operation_id", "!=", False),
("description", "=", "RMA test from website form"),
]
)
self.assertTrue(bool(rma))

View File

@@ -1,11 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 Tecnativa - Ernesto Tejeda
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<template id="website_rma_assets_frontend" inherit_id="website.assets_frontend">
<xpath expr="script[last()]" position="after">
<script type="text/javascript" src="/website_rma/static/src/js/website_rma.tour.js"></script>
<script type="text/javascript" src="/website_rma/static/src/js/website_rma.js"></script>
<script
type="text/javascript"
src="/website_rma/static/src/js/website_rma.tour.js"
/>
<script
type="text/javascript"
src="/website_rma/static/src/js/website_rma.js"
/>
</xpath>
</template>
</odoo>

View File

@@ -1,12 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 Tecnativa - Ernesto Tejeda
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<template id="request_rma" name="Request RMA">
<t t-call="website.layout">
<div id="wrap">
<div class="oe_structure mt-2" id="oe_structure_website_rma_form_request_0"/>
<div
class="oe_structure mt-2"
id="oe_structure_website_rma_form_request_0"
/>
<section class="pt8 pb8">
<div class="container">
<div class="row s_nb_column_fixed">
@@ -19,7 +21,10 @@
<div class="container mt-2">
<div class="row">
<div class="col-lg-8">
<div class="oe_structure mt-2" id="oe_structure_website_rma_form_request_1"/>
<div
class="oe_structure mt-2"
id="oe_structure_website_rma_form_request_1"
/>
<section class="s_text_block">
<div class="container">
<div class="row">
@@ -32,52 +37,74 @@
</div>
</section>
<div class="request_rma_container">
<form action="/website_form/"
<form
action="/website_form/"
method="post"
data-model_name="rma"
data-success_page="/requestrma-thank-you"
class="s_website_form container-fluid mt32"
enctype="multipart/form-data"
data-editable-form="false"
id="rma_request_form">
id="rma_request_form"
>
<div class="form-group row">
<label class="col-lg-3 col-md-4 col-form-label"
for="product_id">
<label
class="col-lg-3 col-md-4 col-form-label"
for="product_id"
>
Product
</label>
<div class="col-lg-7 col-md-8">
<input type="hidden"
<input
type="hidden"
name="product_id"
class="form-control o_website_form_input"/>
class="form-control o_website_form_input"
/>
</div>
</div>
<div class="form-group row form-field o_website_form_required">
<label class="col-lg-3 col-md-4 col-form-label"
for="product_uom_qty">
<div
class="form-group row form-field o_website_form_required"
>
<label
class="col-lg-3 col-md-4 col-form-label"
for="product_uom_qty"
>
Quantity
</label>
<div class="col-lg-4 col-md-5">
<input class="form-control o_website_form_input"
<input
class="form-control o_website_form_input"
pattern="^\d*(\.\d{0,3})?$"
name="product_uom_qty"
required=""
t-att-value="request.params.get('product_uom_qty', '1.000')"/>
t-att-value="request.params.get('product_uom_qty', '1.000')"
/>
</div>
<div class="col-lg-3 col-md-3">
<input type="hidden" name="product_uom"/>
<input type="text"
<input type="hidden" name="product_uom" />
<input
type="text"
class="form-control o_website_form_input"
name="product_uom_name"
disabled="true"/>
disabled="true"
/>
</div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="operation_id">Operation</label>
<label
class="col-lg-3 col-md-4 col-form-label"
for="operation_id"
>Operation</label>
<div class="col-lg-7 col-md-8">
<select name="operation_id"
class="form-control custom-select o_website_form_input">
<option/>
<t t-foreach="request.env['rma.operation'].sudo().search([])" t-as="o">
<select
name="operation_id"
class="form-control custom-select o_website_form_input"
>
<option />
<t
t-foreach="request.env['rma.operation'].sudo().search([])"
t-as="o"
>
<option t-att-value="o.id">
<t t-esc="o.name" />
</option>
@@ -85,34 +112,56 @@
</select>
</div>
</div>
<div class="form-group row form-field o_website_form_required_custom">
<label class="col-lg-3 col-md-4 col-form-label" for="description">Description</label>
<div
class="form-group row form-field o_website_form_required_custom"
>
<label
class="col-lg-3 col-md-4 col-form-label"
for="description"
>Description</label>
<div class="col-lg-7 col-md-8">
<textarea class="form-control o_website_form_input"
<textarea
class="form-control o_website_form_input"
name="description"
required=""><t t-esc="request.params.get('description', '')"/></textarea>
required=""
>
<t
t-esc="request.params.get('description', '')"
/>
</textarea>
</div>
</div>
<div class="form-group row">
<div class="offset-lg-3 offset-md-4 col-md-8 col-lg-7">
<a href="#" role="button" class="btn btn-primary btn-lg o_website_form_send">Request</a>
<span id="o_website_form_result"></span>
<div
class="offset-lg-3 offset-md-4 col-md-8 col-lg-7"
>
<a
href="#"
role="button"
class="btn btn-primary btn-lg o_website_form_send"
>Request</a>
<span id="o_website_form_result" />
</div>
</div>
</form>
</div>
<div class="oe_structure mt-2" id="oe_structure_website_rma_form_request_2"/>
<div
class="oe_structure mt-2"
id="oe_structure_website_rma_form_request_2"
/>
</div>
<div class="col-lg-4">
<t t-call="website.company_description"/>
<t t-call="website.company_description" />
</div>
</div>
</div>
<div class="oe_structure mt-2" id="oe_structure_website_rma_form_request_3"/>
<div
class="oe_structure mt-2"
id="oe_structure_website_rma_form_request_3"
/>
</div>
</t>
</template>
<record id="request_rma_thanks_page_view" model="ir.ui.view">
<field name="name">Thanks (Request RMA)</field>
<field name="type">qweb</field>
@@ -121,25 +170,35 @@
<t name="Thanks (Request RMA)" t-name="website_crm.requestrma_thanks">
<t t-call="website.layout">
<div id="wrap">
<div class="oe_structure" id="oe_structure_website_rma_request_rma_thanks_1"/>
<div
class="oe_structure"
id="oe_structure_website_rma_request_rma_thanks_1"
/>
<div class="container" id="request_rma_thanks">
<h1>Thanks!</h1>
<div class="row">
<div class="col-lg-8">
<div class="alert alert-success" role="status">
Your request has been sent successfully.
<button type="button" class="close" data-dismiss="alert">&amp;times;</button>
<button
type="button"
class="close"
data-dismiss="alert"
>&amp;times;</button>
</div>
<p>
We will get back to you shortly.
</p>
</div>
<div class="col-lg-4">
<t t-call="website.company_description"/>
<t t-call="website.company_description" />
</div>
</div>
</div>
<div class="oe_structure" id="oe_structure_website_rma_request_rma_thanks_2"/>
<div
class="oe_structure"
id="oe_structure_website_rma_request_rma_thanks_2"
/>
</div>
</t>
</t>

View File

@@ -1,8 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 Tecnativa - Ernesto Tejeda
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<template id="portal_my_home_rma" name="Portal My Home : RMA entries" inherit_id="portal.portal_my_home" priority="30">
<template
id="portal_my_home_rma"
name="Portal My Home : RMA entries"
inherit_id="portal.portal_my_home"
priority="30"
>
<xpath expr="//div[hasclass('o_portal_docs')]" position="after">
<div class="oe_structure">
<section class="s_text_block mt16">
@@ -10,7 +15,9 @@
<div class="row">
<div class="col-lg-12 bg-300">
<p style="margin-top: 1rem;">
You can request an RMA <strong><a href="/requestrma">here</a></strong> if you do not
You can request an RMA <strong>
<a href="/requestrma">here</a>
</strong> if you do not
know the sales order from which it was made. If you know
the sales order, go to it and click on the corresponding button.
</p>

View File

@@ -1,16 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 Tecnativa - Ernesto Tejeda
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<template id="contact_us_request_rma" name="Request RMA" inherit_id="website.contactus">
<xpath expr="//t[@t-call='website.company_description']/../../div[hasclass('col-lg-8')]" position="inside">
<template
id="contact_us_request_rma"
name="Request RMA"
inherit_id="website.contactus"
>
<xpath
expr="//t[@t-call='website.company_description']/../../div[hasclass('col-lg-8')]"
position="inside"
>
<div class="oe_structure">
<section class="s_text_block">
<div class="container">
<div class="row">
<div class="col-lg-12 bg-300">
<p style="margin-top: 1rem;">
You can request an RMA <strong><a href="/requestrma">here</a></strong> if you do not
You can request an RMA <strong>
<a href="/requestrma">here</a>
</strong> if you do not
know the sales order from which it was made.
If you know the sales order, go to it and click on the corresponding button.
</p>