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
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
|