Skip to content

Commit

Permalink
[MIG] website_sale_product_assortment: Migration to 18.0
Browse files Browse the repository at this point in the history
  • Loading branch information
PieterPaulussen committed Dec 18, 2024
1 parent 5f30180 commit 2621dfe
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 130 deletions.
6 changes: 3 additions & 3 deletions website_sale_product_assortment/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
{
"name": "eCommerce product assortment",
"summary": "Use product assortments to display products available on e-commerce.",
"version": "16.0.1.1.0",
"version": "18.0.1.1.0",
"development_status": "Beta",
"license": "AGPL-3",
"category": "Website",
Expand All @@ -16,8 +16,8 @@
"assets": {
"web.assets_frontend": [
"website_sale_product_assortment/static/src/xml/*.xml",
"website_sale_product_assortment/static/src/js/variant_mixin.js",
"website_sale_product_assortment/static/src/js/assortment_list_preview.js",
"website_sale_product_assortment/static/src/js/variant_mixin.esm.js",
"website_sale_product_assortment/static/src/js/assortment_list_preview.esm.js",
],
"web.assets_tests": [
"website_sale_product_assortment/static/src/js/no_purchase_tour.js",
Expand Down
6 changes: 4 additions & 2 deletions website_sale_product_assortment/controllers/variant.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
from odoo import _, http
from odoo.http import request

from odoo.addons.sale.controllers.variant import VariantController
from odoo.addons.sale.controllers.product_configurator import (
SaleProductConfiguratorController,
)


class WebsiteSaleVariantController(VariantController):
class WebsiteSaleVariantController(SaleProductConfiguratorController):
@http.route(
["/sale/get_info_assortment_preview"],
type="json",
Expand Down
2 changes: 0 additions & 2 deletions website_sale_product_assortment/models/product_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,13 @@ def _get_combination_info(
combination=False,
product_id=False,
add_qty=1,
pricelist=False,
parent_combination=False,
only_template=False,
):
res = super()._get_combination_info(
combination=combination,
product_id=product_id,
add_qty=add_qty,
pricelist=pricelist,
parent_combination=parent_combination,
only_template=only_template,
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import core from "web.core";

var WebsiteSaleProductAssortment = {
selector: "#products_grid",

start: function () {
return $.when.apply($, [
this._super.apply(this, arguments),
this.render_assortments(),
]);
},
render_assortments: function () {
const $products = $(".o_wsale_product_grid_wrapper");
const product_dic = {};
$products.each(function () {
product_dic[this.querySelector("a img").src.split("/")[6]] = this;
});
const product_ids = Object.keys(product_dic).map(Number);
return this._rpc({
route: "/sale/get_info_assortment_preview",
params: {product_template_ids: product_ids},
}).then((product_values) => {
for (const product of product_values) {
this.render_product_assortment(product_dic[product.id], product);
}
});
},
render_product_assortment: function (product_info, product) {
$(product_info)
.find(".product_price")
.append(
$(
core.qweb.render(
"website_sale_product_assortment.product_availability",
{
message_unavailable: product.message_unavailable,
product_template_id: product.id,
}
)
).get(0)
);

$(product_info).find(".fa-shopping-cart").parent().addClass("disabled");
},
};

export default WebsiteSaleProductAssortment;

This file was deleted.

52 changes: 52 additions & 0 deletions website_sale_product_assortment/static/src/js/variant_mixin.esm.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright 2021 Tecnativa - Carlos Roca
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

import {QWeb} from "web.core";
import VariantMixin from "@website_sale/js/sale_variant_mixin";

VariantMixin._onChangeCombinationAssortment = function (ev, $parent, combination) {
let product_id = 0;
if ($parent.find("input.product_id:checked").length) {
product_id = $parent.find("input.product_id:checked").val();
} else {
product_id = $parent.find(".product_id").val();
}
const isMainProduct =
combination.product_id &&
($parent.is(".js_main_product") || $parent.is(".main_product")) &&
combination.product_id === parseInt(product_id);
if (!this.isWebsite || !isMainProduct) {
return;
}
$(".oe_website_sale")
.find("#message_unavailable_" + combination.product_template_id)
.remove();
$("#product_full_assortment_description").remove();
if (!combination.product_avoid_purchase) {
return;
}
$parent.find("#add_to_cart").addClass("disabled");
$parent.find("#buy_now").addClass("disabled");
$(".oe_website_sale")
.find("#product_option_block")
.prepend(
QWeb.render(
"website_sale_product_assortment.product_availability",
combination
)
);
if (combination.assortment_information) {
$("#product_detail").after(
"<div id='product_full_assortment_description'>" +
combination.assortment_information +
"</div>"
);
}
};

VariantMixin._onChangeCombination = function (ev, $parent, combination) {
this._super.apply(this, arguments);
this._onChangeCombinationAssortment(ev, $parent, combination);
};

export default VariantMixin;
65 changes: 0 additions & 65 deletions website_sale_product_assortment/static/src/js/variant_mixin.js

This file was deleted.

12 changes: 6 additions & 6 deletions website_sale_product_assortment/tests/test_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,41 +18,41 @@ def setUp(self):
)

def test_01_ui_no_restriction(self):
partner_admin = self.env.ref("base.partner_admin")
self.env["ir.filters"].create(
{
"name": "Test Assortment",
"model_id": "product.product",
"is_assortment": True,
"domain": [("id", "!=", self.product.product_variant_id.id)],
"partner_domain": "[('id', '=', %s)]"
% self.env.ref("base.partner_admin").id,
"partner_domain": f"[('id', '=', {partner_admin.id})]",
}
)
self.start_tour("/shop", "test_assortment_with_no_restriction", login="admin")

def test_02_ui_no_show(self):
partner_admin = self.env.ref("base.partner_admin")
self.env["ir.filters"].create(
{
"name": "Test Assortment",
"model_id": "product.product",
"is_assortment": True,
"domain": [("id", "!=", self.product.product_variant_id.id)],
"partner_domain": "[('id', '=', %s)]"
% self.env.ref("base.partner_admin").id,
"partner_domain": f"[('id', '=', {partner_admin.id})]",
"website_availability": "no_show",
}
)
self.start_tour("/shop", "test_assortment_with_no_show", login="admin")

def test_03_ui_no_purchase(self):
partner_admin = self.env.ref("base.partner_admin")
self.env["ir.filters"].create(
{
"name": "Test Assortment",
"model_id": "product.product",
"is_assortment": True,
"domain": [("id", "!=", self.product.product_variant_id.id)],
"partner_domain": "[('id', '=', %s)]"
% self.env.ref("base.partner_admin").id,
"partner_domain": f"[('id', '=', {partner_admin.id})]",
"website_availability": "no_purchase",
"message_unavailable": "Can't purchase",
"assortment_information": """<span name='testing'>
Expand Down
4 changes: 2 additions & 2 deletions website_sale_product_assortment/views/ir_filters_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
<field name="website_availability" />
<field
name="message_unavailable"
attrs="{'invisible': [('website_availability', '!=', 'no_purchase')]}"
invisible="website_availability != 'no_purchase'"
/>
<field
name="assortment_information"
attrs="{'invisible': [('website_availability', '!=', 'no_purchase')]}"
invisible="website_availability != 'no_purchase'"
/>
</group>
</xpath>
Expand Down

0 comments on commit 2621dfe

Please sign in to comment.