From 3ce3d8aa285007af765dabc86e142f8217333e2d Mon Sep 17 00:00:00 2001 From: odoo Date: Tue, 26 May 2026 12:38:50 +0530 Subject: [PATCH 1/3] [ADD] web_sale_purchase: extend eCommerce to support both sales and purchases Developing a new ecommerce module that extends website_sale to manage both selling and purchasing operations. It will allow users to perform purchase related activities directly from the website, reducing manual processes. Improves workflow efficiency, provides greater flexibility, and creates a more complete eCommerce experience for users. --- web_sale_purchase/__init__.py | 1 + web_sale_purchase/__manifest__.py | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 web_sale_purchase/__init__.py create mode 100644 web_sale_purchase/__manifest__.py diff --git a/web_sale_purchase/__init__.py b/web_sale_purchase/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/web_sale_purchase/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/web_sale_purchase/__manifest__.py b/web_sale_purchase/__manifest__.py new file mode 100644 index 00000000000..39240164fa8 --- /dev/null +++ b/web_sale_purchase/__manifest__.py @@ -0,0 +1,11 @@ +{ + "name": "ecommerce purchase", + "depends": [ + "website_sale", + "sale", + "website", + ], + "installable": True, + "author": "RADHR", + "license": "LGPL-3", +} From 6aa006c02dfe12bc7b3bd23530c813b149b10887 Mon Sep 17 00:00:00 2001 From: odoo Date: Fri, 29 May 2026 15:14:44 +0530 Subject: [PATCH 2/3] [IMP] web_sale_purchase: add marketplace configuration setting Added configuration settings to enable marketplace purchase functionality and support the C2C workflow. Allows administrators to control eCommerce purchase flow directly from system settings. Improves platform flexibility and provides a more scalable marketplace experience for users. --- web_sale_purchase/__manifest__.py | 9 ++++++++- web_sale_purchase/models/__init__.py | 1 + web_sale_purchase/models/res_config_settings.py | 12 ++++++++++++ .../views/res_config_settings_views.xml | 15 +++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 web_sale_purchase/models/__init__.py create mode 100644 web_sale_purchase/models/res_config_settings.py create mode 100644 web_sale_purchase/views/res_config_settings_views.xml diff --git a/web_sale_purchase/__manifest__.py b/web_sale_purchase/__manifest__.py index 39240164fa8..9d72c29d15e 100644 --- a/web_sale_purchase/__manifest__.py +++ b/web_sale_purchase/__manifest__.py @@ -1,11 +1,18 @@ { "name": "ecommerce purchase", + "category": "Website", "depends": [ "website_sale", "sale", "website", + "auth_signup" + + ], + "data":[ + "views/res_config_settings_views.xml" ], "installable": True, + "application": True, "author": "RADHR", "license": "LGPL-3", -} +} \ No newline at end of file diff --git a/web_sale_purchase/models/__init__.py b/web_sale_purchase/models/__init__.py new file mode 100644 index 00000000000..0deb68c4680 --- /dev/null +++ b/web_sale_purchase/models/__init__.py @@ -0,0 +1 @@ +from . import res_config_settings diff --git a/web_sale_purchase/models/res_config_settings.py b/web_sale_purchase/models/res_config_settings.py new file mode 100644 index 00000000000..5f1084d06fc --- /dev/null +++ b/web_sale_purchase/models/res_config_settings.py @@ -0,0 +1,12 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + is_marketplace_enabled = fields.Boolean( + string="Enable Multi-Vendor Marketplace", + config_parameter="web_sale.is_marketplace_enabled", + default=False, + help="Enable this option to allow multiple vendors to sell their products on your website. Each vendor will have their own shop and product listings, and customers can purchase from multiple vendors in a single order.", + ) \ No newline at end of file diff --git a/web_sale_purchase/views/res_config_settings_views.xml b/web_sale_purchase/views/res_config_settings_views.xml new file mode 100644 index 00000000000..33b345fdac3 --- /dev/null +++ b/web_sale_purchase/views/res_config_settings_views.xml @@ -0,0 +1,15 @@ + + + + res.config.settings.view.form.inherit.website_sale + res.config.settings + + + + + + + + + + \ No newline at end of file From b63c68da6390e2635f72ef5b00132fc1095fd6ea Mon Sep 17 00:00:00 2001 From: odoo Date: Fri, 29 May 2026 18:36:28 +0530 Subject: [PATCH 3/3] [IMP] web_sale_purchase: implement role-based access for multivendor users Added role-based login and access control for multivendor website users. Ensures users can only access features and operations permitted for their assigned roles. Improves security, simplifies user management, and provides a more controlled and efficient workflow in Odoo. --- web_sale_purchase/__init__.py | 1 + web_sale_purchase/__manifest__.py | 15 +++----- web_sale_purchase/controllers/__init__.py | 1 + web_sale_purchase/controllers/auth.py | 36 +++++++++++++++++++ .../models/res_config_settings.py | 24 +++++++++++-- .../auth_signup_web_sale_purchase_view.xml | 12 +++++++ 6 files changed, 77 insertions(+), 12 deletions(-) create mode 100644 web_sale_purchase/controllers/__init__.py create mode 100644 web_sale_purchase/controllers/auth.py create mode 100644 web_sale_purchase/views/auth_signup_web_sale_purchase_view.xml diff --git a/web_sale_purchase/__init__.py b/web_sale_purchase/__init__.py index 0650744f6bc..f7209b17100 100644 --- a/web_sale_purchase/__init__.py +++ b/web_sale_purchase/__init__.py @@ -1 +1,2 @@ from . import models +from . import controllers diff --git a/web_sale_purchase/__manifest__.py b/web_sale_purchase/__manifest__.py index 9d72c29d15e..5ce0f5df6c6 100644 --- a/web_sale_purchase/__manifest__.py +++ b/web_sale_purchase/__manifest__.py @@ -1,18 +1,13 @@ { "name": "ecommerce purchase", "category": "Website", - "depends": [ - "website_sale", - "sale", - "website", - "auth_signup" - - ], - "data":[ - "views/res_config_settings_views.xml" + "depends": ["website_sale", "sale", "website", "auth_signup"], + "data": [ + "views/res_config_settings_views.xml", + "views/auth_signup_web_sale_purchase_view.xml", ], "installable": True, "application": True, "author": "RADHR", "license": "LGPL-3", -} \ No newline at end of file +} diff --git a/web_sale_purchase/controllers/__init__.py b/web_sale_purchase/controllers/__init__.py new file mode 100644 index 00000000000..25d9ef7490a --- /dev/null +++ b/web_sale_purchase/controllers/__init__.py @@ -0,0 +1 @@ +from . import auth diff --git a/web_sale_purchase/controllers/auth.py b/web_sale_purchase/controllers/auth.py new file mode 100644 index 00000000000..2f5708e94de --- /dev/null +++ b/web_sale_purchase/controllers/auth.py @@ -0,0 +1,36 @@ +from odoo.addons.auth_signup.controllers.main import AuthSignupHome +from odoo import http +from odoo.http import request +from odoo.exceptions import UserError + + +class MarketPlaceSignup(AuthSignupHome): + @http.route() + def web_auth_signup(self, *args, **kw): + is_marketplace_enabled = ( + request.env["ir.config_parameter"] + .sudo() + .get_param("website_sale.is_marketplace_enabled") + ) + + user_role = kw.get("user_role") + + if request.httprequest.method == "POST": + if not is_marketplace_enabled: + kw["error"] = ( + "The marketplace feature is currently disabled. Please contact the administrator." + ) + return request.render("auth_signup.signup", kw) + + response = super(MarketPlaceSignup, self).web_auth_signup(*args, **kw) + return response + + def do_signup(self, qcontext): + super(MarketPlaceSignup, self).do_signup(qcontext) + + user_role = qcontext.get("user_role") + + if user_role == "vendor": + current_user = request.env.user + if current_user and current_user.partner_id: + current_user.partner_id.sudo().write({"is_seller": True}) diff --git a/web_sale_purchase/models/res_config_settings.py b/web_sale_purchase/models/res_config_settings.py index 5f1084d06fc..bfaca76c470 100644 --- a/web_sale_purchase/models/res_config_settings.py +++ b/web_sale_purchase/models/res_config_settings.py @@ -6,7 +6,27 @@ class ResConfigSettings(models.TransientModel): is_marketplace_enabled = fields.Boolean( string="Enable Multi-Vendor Marketplace", - config_parameter="web_sale.is_marketplace_enabled", + config_parameter="website_sale.is_marketplace_enabled", default=False, help="Enable this option to allow multiple vendors to sell their products on your website. Each vendor will have their own shop and product listings, and customers can purchase from multiple vendors in a single order.", - ) \ No newline at end of file + ) + + def get_values(self): + res = super(ResConfigSettings, self).get_values() + + params = self.env["ir.config_parameter"].sudo() + res.update( + is_marketplace_enabled=params.get_param( + "website_sale.is_marketplace_enabled", default=False + ) + ) + + return res + + def set_values(self): + super(ResConfigSettings, self).set_values() + + if self.is_marketplace_enabled: + website = self.env["website"].sudo().search([]) + if website.auth_signup_uninvited != "b2c": + website.sudo().write({"auth_signup_uninvited": "b2c"}) diff --git a/web_sale_purchase/views/auth_signup_web_sale_purchase_view.xml b/web_sale_purchase/views/auth_signup_web_sale_purchase_view.xml new file mode 100644 index 00000000000..45982eb4a82 --- /dev/null +++ b/web_sale_purchase/views/auth_signup_web_sale_purchase_view.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file