Skip to content

Commit

Permalink
[ADD] sale_loyalty_partner_applicability: New module
Browse files Browse the repository at this point in the history
TT45413
  • Loading branch information
pilarvargas-tecnativa committed Oct 24, 2023
1 parent f080b8c commit f88cb3b
Show file tree
Hide file tree
Showing 14 changed files with 769 additions and 0 deletions.
94 changes: 94 additions & 0 deletions sale_loyalty_partner_applicability/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
==================================
Sale Loyalty Partner Applicability
==================================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:9332aae6140978b18c7f33e4daca2b50f8899956b118ccbc53061d20dd2b9564
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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/sale_loyalty_partner_applicability
: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-sale_loyalty_partner_applicability
: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 loyalty_partner_applicability functionality. When this filter
is defined, the promotion rule will only be applied to customers who meet the specified
conditions in the filter.

**Table of contents**

.. contents::
:local:

Configuration
=============

To configure the partner based promotion filter:

Go to Sales > Products > Discount & Loyalty and select or create a new one.
In conditional rules set the condition based on customers.

Usage
=====

Go to a sales order and apply the promotion accordingly. If the sales order meets the
requirements set in the partner based filter the promotion will be applied to that order.

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:%20sale_loyalty_partner_applicability%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.

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

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions sale_loyalty_partner_applicability/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
13 changes: 13 additions & 0 deletions sale_loyalty_partner_applicability/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright 2023 Tecnativa - Pilar Vargas
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Sale Loyalty Partner Applicability",
"summary": "Enables the definition of a customer filter for promotion rules that will "
"only be applied to customers who meet the specified conditions in the filter.",
"version": "16.0.1.0.0",
"category": "Sale",
"website": "https://github.com/OCA/sale-promotion",
"author": "Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"depends": ["sale_loyalty", "loyalty_partner_applicability"],
}
1 change: 1 addition & 0 deletions sale_loyalty_partner_applicability/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import sale_order
40 changes: 40 additions & 0 deletions sale_loyalty_partner_applicability/models/sale_order.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Copyright 2023 Tecnativa - Pilar Vargas
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import ast

from odoo import _, models


class SaleOrder(models.Model):
_inherit = "sale.order"

def _is_valid_partner(self, program):
is_valid = False
for rule in program.rule_ids:
if not is_valid and rule.rule_partners_domain != "[]":
domain = ast.literal_eval(rule.rule_partners_domain) + [
("id", "=", self.partner_id.id)
]
is_valid = bool(self.env["res.partner"].search_count(domain))
else:
is_valid = True
break
return is_valid

def _program_check_compute_points(self, programs):
res = super()._program_check_compute_points(programs)
# Iterate through the programs that initially have no errors
for program, result in res.items():
if result == "error":
continue
if not self._is_valid_partner(program):
res[program] = {
"error": _("The customer doesn't have access to this reward.")
}
return res

def __try_apply_program(self, program, coupon, status):
res = super().__try_apply_program(program, coupon, status)
if not self._is_valid_partner(program):
return {"error": _("The customer doesn't have access to this reward.")}
return res
4 changes: 4 additions & 0 deletions sale_loyalty_partner_applicability/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
To configure the partner based promotion filter:

Go to Sales > Products > Discount & Loyalty and select or create a new one.
In conditional rules set the condition based on customers.
3 changes: 3 additions & 0 deletions sale_loyalty_partner_applicability/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* `Tecnativa <https://www.tecnativa.com>`_:

* Pilar Vargas
3 changes: 3 additions & 0 deletions sale_loyalty_partner_applicability/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
This module extends the loyalty_partner_applicability functionality. When this filter
is defined, the promotion rule will only be applied to customers who meet the specified
conditions in the filter.
2 changes: 2 additions & 0 deletions sale_loyalty_partner_applicability/readme/USAGE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Go to a sales order and apply the promotion accordingly. If the sales order meets the
requirements set in the partner based filter the promotion will be applied to that order.
Loading

0 comments on commit f88cb3b

Please sign in to comment.