From 7f07e96ea04aa6fb21c1a3a4cdc6a3415157e713 Mon Sep 17 00:00:00 2001 From: jcoux Date: Wed, 15 Dec 2021 11:03:57 +0100 Subject: [PATCH] [14.0][FIX] payment_environment: Fix state usage As state field is now managed as server environment fields, the field is considered as a computed fields. Then, we need to define a custom search function to be able to search on this field. --- .../models/payment_acquirer.py | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/payment_environment/models/payment_acquirer.py b/payment_environment/models/payment_acquirer.py index 0709c5a..ea147e9 100644 --- a/payment_environment/models/payment_acquirer.py +++ b/payment_environment/models/payment_acquirer.py @@ -2,7 +2,8 @@ # @author Iván Todorovich # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) -from odoo import models +from odoo import fields, models +from odoo.osv import expression class PaymentAcquirer(models.Model): @@ -21,3 +22,29 @@ class PaymentAcquirer(models.Model): } acquirer_fields.update(base_fields) return acquirer_fields + + state = fields.Selection( + search="_search_state", + ) + + def _search_state(self, operator, value): + """ + As state field is now managed as server environment fields, + the field is considered as a computed fields. + Then, we need to define a custom search function + to be able to search on this field. + + We don't want to cover all cases, + just search implemented in core function + to display the acquirers when generating the payment link. + + See module payment in controller/portal.py function pay() + + Used domain is: ('state', 'in', ['enabled', 'test']) + """ + if operator == "in" and isinstance(value, list): + valid_acquirers = self.search([]).filtered_domain([("state", "in", value)]) + if valid_acquirers: + return [("id", "in", valid_acquirers.ids)] + + return expression.FALSE_DOMAIN