Skip to content

Commit

Permalink
[ADD] website_sale_loyalty_suggestion_wizard_multi_product: New module
Browse files Browse the repository at this point in the history
TT48390
  • Loading branch information
pilarvargas-tecnativa committed Nov 18, 2024
1 parent cfc47e1 commit eb1810a
Show file tree
Hide file tree
Showing 14 changed files with 692 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
109 changes: 109 additions & 0 deletions website_sale_loyalty_suggestion_wizard_multi_product/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
====================================================
Website Sale Loyalty Suggestion Wizard Multi Product
====================================================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:33b7e6882d3523e6f682c36d2894eb223b5d2519b25d94f3ed7e301a622c5ea0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsale--promotion-lightgray.png?logo=github
:target: https://github.com/OCA/sale-promotion/tree/16.0/website_sale_loyalty_suggestion_wizard_multi_product
:alt: OCA/sale-promotion
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-promotion-16-0/sale-promotion-16-0-website_sale_loyalty_suggestion_wizard_multi_product
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/sale-promotion&target_branch=16.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module extends the promotion suggestions module on the website by making suggestions
for multi-product promotions, allowing you to configure and apply these promotions using the wizard.

**Table of contents**

.. contents::
:local:

Usage
=====

To apply promotions:

Option 1:

#. Go to /promotions and choose the one apply.
#. You'll be prompted to check the promotion configuration.
#. Apply after that.

Option 2:

#. Add a product in the promotion multi-product rules.
#. A cart suggestion will appear.
#. Add the promotion and configure the options.

Option 3:

#. Select a suggested promotion in the shopping cart from a list of "Suggested promotions".
#. Add the promotion and configure the options.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-promotion/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/sale-promotion/issues/new?body=module:%20website_sale_loyalty_suggestion_wizard_multi_product%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* Tecnativa

Contributors
~~~~~~~~~~~~

* `Tecnativa <https://www.tecnativa.com>`_:

* Pilar Vargas

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-pilarvargas-tecnativa| image:: https://github.com/pilarvargas-tecnativa.png?size=40px
:target: https://github.com/pilarvargas-tecnativa
:alt: pilarvargas-tecnativa

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-pilarvargas-tecnativa|

This module is part of the `OCA/sale-promotion <https://github.com/OCA/sale-promotion/tree/16.0/website_sale_loyalty_suggestion_wizard_multi_product>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import controllers
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2024 Tecnativa - Pilar Vargas
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Website Sale Loyalty Suggestion Wizard Multi Product",
"summary": "Suggests promotions multi-product and allows you to configure and apply these "
"promotions directly from the website",
"version": "16.0.1.0.0",
"category": "eCommerce",
"website": "https://github.com/OCA/sale-promotion",
"author": "Tecnativa, Odoo Community Association (OCA)",
"maintainers": ["pilarvargas-tecnativa"],
"license": "AGPL-3",
"depends": [
"website_sale_loyalty_suggestion_wizard",
"sale_loyalty_order_suggestion_multi_product",
],
"data": ["templates/wizard_templates.xml"],
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import main
from . import promotion_wizard
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Copyright 2024 Tecnativa - Pilar Vargas
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo.http import request, route

from odoo.addons.website_sale_loyalty.controllers.main import WebsiteSale


class WebsiteSaleLoyaltySuggestionWizardMultiProductController(WebsiteSale):
@route()
def cart(self, **post):
response = super().cart(**post)
promotion = request.session.get("promotion_id")
if promotion:
program_id = request.env["loyalty.program"].sudo().browse(promotion)
if program_id.rule_ids.filtered(
lambda x: x.loyalty_criteria == "multi_product"
):
order_id = request.env["sale.order"].browse(
request.session.get("sale_order_id")
)
wizard_id = self._get_sale_loyalty_reward_wizard(order_id, program_id)
product = next(
(
line.product_id
for line in order_id.order_line
if line.suggested_promotion_ids.filtered(
lambda x: x.is_published
)[:1].id
== 5
),
None,
)
if not product:
# If there are no products in the shopping cart that match the rules
# of the promotion being configured since it is being applied from
# "/promotions", the first multi-product rule is searched for and
# the first product is set up to calculate the "loyalty_rule_line_ids
# in the wizard_id
product = wizard_id.selected_reward_id.program_id.rule_ids.filtered(
lambda x: x.loyalty_criteria == "multi_product"
)[:1].loyalty_criteria_ids.product_ids[:1]
wizard_id.product_id = product.id
wizard_id._compute_loyalty_rule_line_ids()
# To use in _compute_loyalty_rule_line_ids when applying the
# configured promotion
request.session["multi_product_id"] = product.id
mandatory_program_options = wizard_id.loyalty_rule_line_ids
response.qcontext[
"mandatory_program_options"
] = mandatory_program_options
return response
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2024 Tecnativa - Pilar Vargas
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo.http import request

from odoo.addons.website_sale_loyalty.controllers.main import WebsiteSale


class WebsiteSaleLoyaltySuggestionWizardController(WebsiteSale):
def _process_promotion_lines(self, wizard_id, promotion_lines):
response = super()._process_promotion_lines(wizard_id, promotion_lines)
if wizard_id.multi_criteria:
wizard_id.product_id = request.session.get("multi_product_id")
wizard_id._compute_loyalty_rule_line_ids()
for line in wizard_id.loyalty_rule_line_ids:
if line.units_included >= line.units_required:
continue
line.units_to_include = line.units_required
return response
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* `Tecnativa <https://www.tecnativa.com>`_:

* Pilar Vargas
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This module extends the promotion suggestions module on the website by making suggestions
for multi-product promotions, allowing you to configure and apply these promotions using the wizard.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
To apply promotions:

Option 1:

#. Go to /promotions and choose the one apply.
#. You'll be prompted to check the promotion configuration.
#. Apply after that.

Option 2:

#. Add a product in the promotion multi-product rules.
#. A cart suggestion will appear.
#. Add the promotion and configure the options.

Option 3:

#. Select a suggested promotion in the shopping cart from a list of "Suggested promotions".
#. Add the promotion and configure the options.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit eb1810a

Please sign in to comment.