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

  1. import logging
  2. from odoo import models, fields, api, _
  3. _logger = logging.getLogger(__name__)
  4. class PaymentProvider(models.Model):
  5. _inherit = "payment.provider"
  6. forbidden_category_ids = fields.Many2many(
  7. comodel_name="product.category",
  8. column1="provider_id",
  9. column2="category_id",
  10. relation="forbidden_category_provider_rel",
  11. string="Forbidden categories",
  12. )
  13. @api.model
  14. def _get_compatible_providers(
  15. self, *args, sale_order_id=None, website_id=None, **kwargs
  16. ):
  17. """Override of payment to exclude forbidden providers set ont order products categories.
  18. :param int sale_order_id: The sale order to be paid, if any, as a `sale.order` id
  19. :param int website_id: The provided website, as a `website` id
  20. :return: The compatible providers
  21. :rtype: recordset of `payment.provider`
  22. """
  23. compatible_providers = super()._get_compatible_providers(
  24. *args, sale_order_id=sale_order_id, website_id=website_id, **kwargs
  25. )
  26. # Get order if set int the args
  27. order = self.env["sale.order"].browse(sale_order_id).exists()
  28. # If order exists, remove forbidden providers from the list
  29. if order:
  30. compatible_providers -= order.order_line.mapped(
  31. "product_id.categ_id.forbidden_provider_ids"
  32. )
  33. return compatible_providers