Skip to content

Commit

Permalink
[MIG] website_sale_coupon_selection_wizard: Migration to version 16.0
Browse files Browse the repository at this point in the history
TT44379
  • Loading branch information
pilarvargas-tecnativa committed Mar 10, 2024
1 parent d11817a commit f01d199
Show file tree
Hide file tree
Showing 12 changed files with 709 additions and 131 deletions.
12 changes: 6 additions & 6 deletions website_sale_coupon_selection_wizard/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Coupons Selection for eCommerce
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:94c44400c8e0661ca641d2c4de75be1950d9d1107237aa4189128911a9d1b019
!! source digest: sha256:946847784b8adcc3237e89b81cc81c2020699d114df6d7150387332abe189ec6
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand All @@ -17,13 +17,13 @@ Coupons Selection for eCommerce
: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/15.0/website_sale_coupon_selection_wizard
:target: https://github.com/OCA/sale-promotion/tree/16.0/website_sale_coupon_selection_wizard
: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-15-0/sale-promotion-15-0-website_sale_coupon_selection_wizard
:target: https://translation.odoo-community.org/projects/sale-promotion-16-0/sale-promotion-16-0-website_sale_coupon_selection_wizard
: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=15.0
: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|
Expand Down Expand Up @@ -64,7 +64,7 @@ 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_coupon_selection_wizard%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/OCA/sale-promotion/issues/new?body=module:%20website_sale_coupon_selection_wizard%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.

Expand Down Expand Up @@ -104,6 +104,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-chienandalu|

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

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
15 changes: 6 additions & 9 deletions website_sale_coupon_selection_wizard/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,24 @@
{
"name": "Coupons Selection for eCommerce",
"summary": "Allows to apply and configure promotions directly from the website",
"version": "15.0.1.0.0",
"version": "16.0.1.0.0",
"development_status": "Beta",
"category": "eCommerce",
"website": "https://github.com/OCA/sale-promotion",
"author": "Tecnativa, Odoo Community Association (OCA)",
"maintainers": ["chienandalu"],
"license": "AGPL-3",
"depends": [
"sale_coupon_selection_wizard",
"sale_coupon_order_suggestion",
"website_sale_coupon_page",
"sale_loyalty",
"sale_loyalty_order_suggestion",
"website_sale_loyalty_page",
],
"data": ["templates/promotion_templates.xml"],
"data": ["templates/promotion_templates.xml", "templates/templates.xml"],
"assets": {
"web.assets_frontend": [
"/website_sale_coupon_selection_wizard/static/src/scss/"
"website_sale_coupon_selection.scss",
"/sale_coupon_selection_wizard/static/src/js/"
"coupon_selection_wizard_mixin.js",
"/website_sale_coupon_selection_wizard/static/src/js/"
"website_sale_coupon_selection_wizard.js",
"/website_sale_coupon_selection_wizard/static/src/js/*",
]
},
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
from . import coupon_page
from . import promotion_page
from . import main
from . import promotion_wizard
49 changes: 23 additions & 26 deletions website_sale_coupon_selection_wizard/controllers/main.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
# Copyright 2021 Tecnativa - David Vidal
# 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.controllers.main import WebsiteSale


class WebsiteSaleCouponWizard(WebsiteSale):
def _get_sale_loyalty_reward_wizard(self, order, program):
wizard = (

Check warning on line 11 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L11

Added line #L11 was not covered by tests
request.env["sale.loyalty.reward.wizard"]
.with_context(active_id=order.id)
.create({"selected_reward_id": program.reward_ids[:1].id})
)
return wizard.id

Check warning on line 16 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L16

Added line #L16 was not covered by tests

@route(
["/promotions/<int:program_id>/apply"], type="http", auth="public", website=True
)
def promotion_program_apply(self, program_id, **kwargs):
program = request.env["coupon.program"].sudo().browse(program_id).exists()
program = request.env["loyalty.program"].sudo().browse(program_id).exists()

Check warning on line 22 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L22

Added line #L22 was not covered by tests
if not program or not program.active or not program.is_published:
return

Check warning on line 24 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L24

Added line #L24 was not covered by tests
# Prevent to apply a promotion to a processed order
Expand All @@ -19,42 +28,30 @@ def promotion_program_apply(self, program_id, **kwargs):
request.session["sale_order_id"] = None
order = request.website.sale_get_order()

Check warning on line 29 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L28-L29

Added lines #L28 - L29 were not covered by tests
# We won't apply it twice
if program in (order.no_code_promo_program_ids | order.code_promo_program_id):
if program in order._get_reward_programs():
return

Check warning on line 32 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L32

Added line #L32 was not covered by tests
# If the promotion is directly applicable (promotion code), just apply without
# further ado.
if program.promo_code_usage == "code_needed" and (
program not in order.sudo()._available_multi_criteria_multi_gift_programs()
):
return self.pricelist(program.promo_code)
# Let's inject some context into the view
request.session["promotion_id"] = program.id
request.session["order_id"] = order.id
return request.redirect("/shop/cart")

Check warning on line 36 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L34-L36

Added lines #L34 - L36 were not covered by tests

@route()
def pricelist(self, promo, **post):
"""When applying a configurable promotion code, we'll offer the customer
to configure it."""
if promo:
order = request.website.sale_get_order()
program = (
request.env["coupon.program"]
.sudo()
.search([("promo_code", "=", promo)])
)
if program in order.sudo()._available_multi_criteria_multi_gift_programs():
request.session["promotion_id"] = program.id
return request.redirect("/shop/cart")
return super().pricelist(promo)

@route()
def cart(self, **post):
response = super().cart(**post)
promotion = request.session.get("promotion_id")
order = request.session.get("sale_order_id")

Check warning on line 42 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L40-L42

Added lines #L40 - L42 were not covered by tests
if promotion:
response.qcontext["promotion_id"] = (
request.env["coupon.program"].sudo().browse(promotion)
program_id = request.env["loyalty.program"].browse(promotion)
order_id = request.env["sale.order"].browse(order)
wizard_id = self._get_sale_loyalty_reward_wizard(order_id, program_id)
mandatory_program_options = (

Check warning on line 47 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L44-L47

Added lines #L44 - L47 were not covered by tests
request.env["sale.loyalty.reward.wizard"]
.browse(wizard_id)
.loyalty_rule_line_ids
)
response.qcontext["promotion_id"] = program_id
response.qcontext["order_id"] = order_id
response.qcontext["mandatory_program_options"] = mandatory_program_options
return response

Check warning on line 55 in website_sale_coupon_selection_wizard/controllers/main.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/main.py#L52-L55

Added lines #L52 - L55 were not covered by tests

@route(["/promotions/dismiss"], type="http", auth="public", website=True)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo.http import request, route

from odoo.addons.website_sale_coupon_page.controllers.main import WebsiteSale
from odoo.addons.website_sale_loyalty_page.controllers.main import WebsiteSale


class CouponPage(WebsiteSale):
Expand All @@ -16,13 +16,8 @@ def promotion(self, **post):
promo_values = response.qcontext.get("promos", [])
for promo_dict in promo_values:
promo_dict["applicable"] = False
promo = request.env["coupon.program"].sudo().browse(promo_dict["id"])
if (
promo in (order.no_code_promo_program_ids | order.code_promo_program_id)
) or (
promo
not in order.sudo()._available_multi_criteria_multi_gift_programs()
):
promo = request.env["loyalty.program"].sudo().browse(promo_dict["id"])
if promo not in order.sudo()._get_available_programs():
continue
promo_dict["applicable"] = True

Check warning on line 22 in website_sale_coupon_selection_wizard/controllers/promotion_page.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_page.py#L22

Added line #L22 was not covered by tests
return response
114 changes: 88 additions & 26 deletions website_sale_coupon_selection_wizard/controllers/promotion_wizard.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,67 @@
# Copyright 2021 Tecnativa - David Vidal
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _
from odoo import fields
from odoo.exceptions import ValidationError
from odoo.http import request, route
from odoo.tests import Form

from odoo.addons.sale_coupon_selection_wizard.controllers.main import (
CouponSelectionWizardController,
)
from odoo.addons.website_sale_loyalty.controllers.main import WebsiteSale


class CouponSelectionWizardController(CouponSelectionWizardController):
class CouponSelectionWizardController(WebsiteSale):
def _get_existing_order_line(self, order, product_id):
return order.sudo().order_line.filtered(
lambda x: x.product_id == product_id and not x.is_reward_line
)

def _try_to_apply_promotion(
self, program_id, sale_order_id, promotion_lines, reward_line_options, **kw
):
"""Wrapped method"""
import wdb

Check warning on line 21 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L21

Added line #L21 was not covered by tests

wdb.set_trace()
order = request.env["sale.order"].browse(int(sale_order_id))
program_id = request.env["loyalty.program"].browse(int(program_id))
sale_form = Form(order)

Check warning on line 26 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L23-L26

Added lines #L23 - L26 were not covered by tests
for product, qty in promotion_lines.items():
if not qty:
continue
product = request.env["product.product"].browse(int(product))
order_line = fields.first(self._get_existing_order_line(order, product))

Check warning on line 31 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L29-L31

Added lines #L29 - L31 were not covered by tests
if order_line:
index = order.order_line.ids.index(order_line.id)

Check warning on line 33 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L33

Added line #L33 was not covered by tests
with sale_form.order_line.edit(index) as line_form:
line_form.product_uom_qty += qty

Check warning on line 35 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L35

Added line #L35 was not covered by tests
else:
with sale_form.order_line.new() as line_form:
line_form.product_id = product
line_form.product_uom_qty = qty
reward_line_options = reward_line_options or {}

Check warning on line 40 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L38-L40

Added lines #L38 - L40 were not covered by tests
# We don't want to apply the changes to the sales order yet, but we need to
# simulate that the promo is applicable first.
new_sale = (

Check warning on line 43 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L43

Added line #L43 was not covered by tests
request.env["sale.order"]
.sudo()
.new(sale_form._values_to_save(all_fields=True))
)
# Force company, otherwise defaults apply
new_sale.company_id = order.company_id

Check warning on line 49 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L49

Added line #L49 was not covered by tests
# It's going to raise an exception if the program isn't applicable anyway
error = order.sudo()._program_check_compute_points(program_id).get("error")
return error, sale_form, program_id

Check warning on line 52 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L51-L52

Added lines #L51 - L52 were not covered by tests

def _apply_promotion(self, order, program_id, reward_line_options):
order = order.with_context(

Check warning on line 55 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L55

Added line #L55 was not covered by tests
reward_line_options=reward_line_options,
selection_wizard_program=program_id.id,
)
# This context ensures our selection priority
# order.recompute_coupon_lines()
# if program_id not in order.no_code_promo_program_ids:
# return False
return True

Check warning on line 63 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L63

Added line #L63 was not covered by tests

@route(
"/website_sale_coupon_selection_wizard/apply",
type="json",
Expand All @@ -18,25 +71,34 @@ class CouponSelectionWizardController(CouponSelectionWizardController):
def apply_promotion_public(
self, program_id, sale_order_id, promotion_lines, reward_line_options, **kw
):
# import wdb; wdb.set_trace()
"""Frontend controller that wraps common methods and handles errors properly"""
error, sale_form, program = self._try_to_apply_promotion(
program_id, sale_order_id, promotion_lines, reward_line_options, **kw
)
if error:
request.session["error_promo_code"] = error
return
# Once checked write the new lines and force the code if the promo has one
order = sale_form.save()
promo_applied = self._apply_promotion(order, program, reward_line_options)
if not promo_applied:
request.session["error_promo_code"] = _(
"This promotion can't be applied to this order"
)
request.session.pop("promotion_id", None)
request.session.pop("error_promo_code", None)

@route(website=True)
def configure_promotion(self, program_id, **kw):
if not self._get_order(kw.get("sale_order_id")):
kw["sale_order_id"] = request.website.sale_get_order(force_create=True)
return super().configure_promotion(program_id, **kw)
order = request.env["sale.order"].browse(sale_order_id)
program = request.env["loyalty.program"].browse(program_id)
wizard_id = self._get_sale_loyalty_reward_wizard(order, program)
wiz = request.env["sale.loyalty.reward.wizard"].browse(wizard_id)
reward = reward_line_options.get("reward")

Check warning on line 80 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L76-L80

Added lines #L76 - L80 were not covered by tests
if reward:
wiz.selected_reward_id = int(reward)
try:
wiz.action_apply()
except ValidationError as e:
request.session["error_promo_code"] = str(e)
return
request.session.pop("promotion_id", None)
request.session.pop("error_promo_code", None)

Check warning on line 89 in website_sale_coupon_selection_wizard/controllers/promotion_wizard.py

View check run for this annotation

Codecov / codecov/patch

website_sale_coupon_selection_wizard/controllers/promotion_wizard.py#L82-L89

Added lines #L82 - L89 were not covered by tests
# error, sale_form, program = self._try_to_apply_promotion(
# program_id, sale_order_id, promotion_lines, reward_line_options, **kw
# )
# if error:
# request.session["error_promo_code"] = error
# return
# # Once checked write the new lines and force the code if the promo has one
# order = sale_form.save()
# promo_applied = self._apply_promotion(order, program, reward_line_options)
# if not promo_applied:
# request.session["error_promo_code"] = _(
# "This promotion can't be applied to this order"
# )
# request.session.pop("promotion_id", None)
# request.session.pop("error_promo_code", None)
Original file line number Diff line number Diff line change
Expand Up @@ -367,9 +367,9 @@ <h1 class="title">Coupons Selection for eCommerce</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:94c44400c8e0661ca641d2c4de75be1950d9d1107237aa4189128911a9d1b019
!! source digest: sha256:946847784b8adcc3237e89b81cc81c2020699d114df6d7150387332abe189ec6
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/sale-promotion/tree/15.0/website_sale_coupon_selection_wizard"><img alt="OCA/sale-promotion" src="https://img.shields.io/badge/github-OCA%2Fsale--promotion-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-promotion-15-0/sale-promotion-15-0-website_sale_coupon_selection_wizard"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/sale-promotion&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/sale-promotion/tree/16.0/website_sale_coupon_selection_wizard"><img alt="OCA/sale-promotion" src="https://img.shields.io/badge/github-OCA%2Fsale--promotion-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-promotion-16-0/sale-promotion-16-0-website_sale_coupon_selection_wizard"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/sale-promotion&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module allows to apply multi-gift mult-criteria promotion with a fancy wizard on
the eCommerce.</p>
<p><strong>Table of contents</strong></p>
Expand Down Expand Up @@ -411,7 +411,7 @@ <h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/sale-promotion/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/sale-promotion/issues/new?body=module:%20website_sale_coupon_selection_wizard%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<a class="reference external" href="https://github.com/OCA/sale-promotion/issues/new?body=module:%20website_sale_coupon_selection_wizard%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
Expand Down Expand Up @@ -440,7 +440,7 @@ <h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/chienandalu"><img alt="chienandalu" src="https://github.com/chienandalu.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-promotion/tree/15.0/website_sale_coupon_selection_wizard">OCA/sale-promotion</a> project on GitHub.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-promotion/tree/16.0/website_sale_coupon_selection_wizard">OCA/sale-promotion</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
Expand Down
Loading

0 comments on commit f01d199

Please sign in to comment.