Website Product Configurator
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:571a6836c9659722dc42db79a4b0b1d7f1915bf9c139a7a34518f21973cdc009
+!! source digest: sha256:5cb6dd72d2d950eb9a268d8cc613db21a735494ec532a55bd472156be9a88b76
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
This module facilitates to configure product on website.
diff --git a/website_product_configurator/static/src/js/website_sale.esm.js b/website_product_configurator/static/src/js/website_sale.esm.js
index b6153f15d2..b85d831ef4 100644
--- a/website_product_configurator/static/src/js/website_sale.esm.js
+++ b/website_product_configurator/static/src/js/website_sale.esm.js
@@ -13,5 +13,11 @@ WebsiteSale.include({
this._super(...arguments);
const config_session_id = $form.find('input[name="config_session_id"]').val();
if (config_session_id) this.rootProduct.config_session_id = config_session_id;
+
+ const reconfiguring_order_line_id = $form
+ .find('input[name="reconfiguring_order_line_id"]')
+ .val();
+ if (reconfiguring_order_line_id)
+ this.rootProduct.reconfiguring_order_line_id = reconfiguring_order_line_id;
},
});
diff --git a/website_product_configurator/static/tests/tours/reconfigure_cart_line.esm.js b/website_product_configurator/static/tests/tours/reconfigure_cart_line.esm.js
new file mode 100644
index 0000000000..7998ff304f
--- /dev/null
+++ b/website_product_configurator/static/tests/tours/reconfigure_cart_line.esm.js
@@ -0,0 +1,79 @@
+/** @odoo-module **/
+import tour from "web_tour.tour";
+
+import websiteSaleTourUtils from "website_sale.tour_utils";
+
+tour.register(
+ "website_product_configurator.reconfigure_cart_line",
+ {
+ test: true,
+ },
+ [
+ {
+ content: "Add to cart",
+ trigger: "#add_to_cart",
+ },
+ websiteSaleTourUtils.goToCart({quantity: 1}),
+ {
+ content: "Check Silver car is in cart",
+ trigger: "#cart_products td.td-product_name strong:contains('Silver')",
+ // eslint-disable-next-line no-empty-function
+ run: () => {},
+ },
+ {
+ content: "Click on reconfigure link",
+ trigger: "td[class='td-reconfigure_action'] > a",
+ },
+ {
+ content: "Check banner is shown",
+ trigger: "div[role='alert']",
+ // eslint-disable-next-line no-empty-function
+ run: () => {},
+ },
+ {
+ content: "Go to Body step",
+ trigger: "#product_config_form a:contains('Body')",
+ },
+ {
+ content: "Select Red color",
+ // Paint color has ID 8, couldn't find a better selector
+ trigger: "#__attribute_8",
+ run: function () {
+ const $options = $("#__attribute_8");
+ const $red = $("#__attribute_8 option:contains('Red')");
+ $options.val($red.attr("value")).change();
+ },
+ },
+ {
+ content: "Go to last step",
+ trigger: "#product_config_form a:contains('Extras')",
+ },
+ {
+ content: "Confirm",
+ trigger: "button#form_action span:contains('Continue')",
+ },
+ {
+ content: "Check configured car is red",
+ trigger: "#product_details span:contains('Red')",
+ // eslint-disable-next-line no-empty-function
+ run: () => {},
+ },
+ {
+ content: "Add to cart",
+ trigger: "#add_to_cart",
+ },
+ {
+ content: "Check banner is shown",
+ trigger: "div[role='alert']",
+ // eslint-disable-next-line no-empty-function
+ run: () => {},
+ },
+ websiteSaleTourUtils.goToCart({quantity: 1}),
+ {
+ content: "Check Red car is in cart",
+ trigger: "#cart_products td.td-product_name strong:contains('Red')",
+ // eslint-disable-next-line no-empty-function
+ run: () => {},
+ },
+ ]
+);
diff --git a/website_product_configurator/tests/__init__.py b/website_product_configurator/tests/__init__.py
index 5bf2f808f5..3ead779131 100644
--- a/website_product_configurator/tests/__init__.py
+++ b/website_product_configurator/tests/__init__.py
@@ -1,4 +1,5 @@
from . import test_custom_values
+from . import test_reconfigure_cart_line
from . import test_website_product_configurator_values
from . import test_product_config
from . import test_res_config_settings
diff --git a/website_product_configurator/tests/test_reconfigure_cart_line.py b/website_product_configurator/tests/test_reconfigure_cart_line.py
new file mode 100644
index 0000000000..0577fad16f
--- /dev/null
+++ b/website_product_configurator/tests/test_reconfigure_cart_line.py
@@ -0,0 +1,38 @@
+# Copyright 2024 Simone Rubino - Aion Tech
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+import operator
+from functools import reduce
+
+from odoo.tests import HttpCase, tagged
+
+from .test_website_product_configurator_values import TestProductConfiguratorValues
+
+
+@tagged("post_install", "-at_install")
+class TestReconfigureProductHTTP(HttpCase, TestProductConfiguratorValues):
+ def test_tour(self):
+ admin_user = self.env.ref("base.user_admin")
+
+ session = self.session_id
+ session.user_id = admin_user
+ pavs_xmlids = [
+ "product_configurator.product_attribute_value_gasoline",
+ "product_configurator.product_attribute_value_218i",
+ "product_configurator.product_attribute_value_steptronic",
+ "product_configurator.product_attribute_value_silver",
+ "product_configurator.product_attribute_value_rims_378",
+ "product_configurator.product_attribute_value_tapistry_black",
+ "product_configurator.product_attribute_value_sport_line",
+ "product_configurator.product_attribute_value_armrest",
+ ]
+ pavs_list = [self.env.ref(xmlid) for xmlid in pavs_xmlids]
+ session.value_ids = reduce(operator.or_, pavs_list)
+ session.action_confirm()
+
+ session_url = "/product_configurator/product/%s" % session.id
+ self.start_tour(
+ session_url,
+ "website_product_configurator.reconfigure_cart_line",
+ login=admin_user.login,
+ )
diff --git a/website_product_configurator/views/templates.xml b/website_product_configurator/views/templates.xml
index 29dc5fdcfb..723758a355 100644
--- a/website_product_configurator/views/templates.xml
+++ b/website_product_configurator/views/templates.xml
@@ -41,4 +41,28 @@
+
+
+ |
+
+
+
+
+
+
+
+
+
+ |
+
+