# Part of Odoo. See LICENSE file for full copyright and licensing details. # Original Copyright 2015 Eezee-It, modified and maintained by Odoo. from hashlib import sha256 from odoo import fields, models from odoo.addons.payment_sips import const class PaymentProvider(models.Model): _inherit = 'payment.provider' code = fields.Selection( selection_add=[('sips', "Sips")], ondelete={'sips': 'set default'}) sips_merchant_id = fields.Char( string="Merchant ID", help="The ID solely used to identify the merchant account with Sips", required_if_provider='sips') sips_secret = fields.Char( string="SIPS Secret Key", size=64, required_if_provider='sips', groups='base.group_system') sips_key_version = fields.Integer( string="Secret Key Version", required_if_provider='sips', default=2) sips_test_url = fields.Char( string="Test URL", required_if_provider='sips', default="https://payment-webinit.simu.sips-services.com/paymentInit") sips_prod_url = fields.Char( string="Production URL", required_if_provider='sips', default="https://payment-webinit.sips-services.com/paymentInit") sips_version = fields.Char( string="Interface Version", required_if_provider='sips', default="HP_2.31") def _get_supported_currencies(self): """ Override of `payment` to return the supported currencies. """ supported_currencies = super()._get_supported_currencies() if self.code == 'sips': supported_currencies = supported_currencies.filtered( lambda c: c.name in const.SUPPORTED_CURRENCIES.keys() ) return supported_currencies def _sips_generate_shasign(self, data): """ Generate the shasign for incoming or outgoing communications. Note: self.ensure_one() :param str data: The data to use to generate the shasign :return: shasign :rtype: str """ self.ensure_one() key = self.sips_secret shasign = sha256((data + key).encode('utf-8')) return shasign.hexdigest() # === BUSINESS METHODS ===# def _get_default_payment_method_codes(self): """ Override of `payment` to return the default payment method codes. """ default_codes = super()._get_default_payment_method_codes() if self.code != 'sips': return default_codes return const.DEFAULT_PAYMENT_METHODS_CODES