You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

41 lines
1.4 KiB

import logging
from odoo import models, fields, api, _
_logger = logging.getLogger(__name__)
class PaymentProvider(models.Model):
_inherit = "payment.provider"
forbidden_category_ids = fields.Many2many(
comodel_name="product.category",
column1="provider_id",
column2="category_id",
relation="forbidden_category_provider_rel",
string="Forbidden categories",
)
@api.model
def _get_compatible_providers(
self, *args, sale_order_id=None, website_id=None, **kwargs
):
"""Override of payment to exclude forbidden providers set ont order products categories.
:param int sale_order_id: The sale order to be paid, if any, as a `sale.order` id
:param int website_id: The provided website, as a `website` id
:return: The compatible providers
:rtype: recordset of `payment.provider`
"""
compatible_providers = super()._get_compatible_providers(
*args, sale_order_id=sale_order_id, website_id=website_id, **kwargs
)
# Get order if set int the args
order = self.env["sale.order"].browse(sale_order_id).exists()
# If order exists, remove forbidden providers from the list
if order:
compatible_providers -= order.order_line.mapped(
"product_id.categ_id.forbidden_provider_ids"
)
return compatible_providers