Files
odoo_source/addons/payment_sips/models/payment_acquirer.py
T
Nicolas (vin) f7b45aa032 [FIX] payment: suitable payment token and acquirer fix
Fix two issues:

The search of suitable payment token was searching on the journal_id
field of the payment acquirer that is no longer stored.
Change it to now search on the acquirer_id directly, since we have
this information.

The _inverse_journal_id method on payment acquirers would create
new payment line with the manual payment method when no provider
are given to an acquirer, or no payment method is existing for
a given provider. This would cause issues with the creation of
multiple line with the same name on a same journal, which would
trigger the constrains blocking that.

closes odoo/odoo#74990

X-original-commit: a3a2fcb0b299fafbf359ec9015da5c85cdb57b3a
Related: odoo/enterprise#20193
Signed-off-by: Laurent Smet <smetl@users.noreply.github.com>
2021-08-12 07:56:16 +00:00

63 lines
2.4 KiB
Python

# 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 api, fields, models
from .const import SUPPORTED_CURRENCIES
class PaymentAcquirer(models.Model):
_inherit = 'payment.acquirer'
provider = 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-atos.com/paymentInit")
sips_prod_url = fields.Char(
string="Production URL", required_if_provider='sips',
default="https://payment-webinit.sips-atos.com/paymentInit")
sips_version = fields.Char(
string="Interface Version", required_if_provider='sips', default="HP_2.31")
@api.model
def _get_compatible_acquirers(self, *args, currency_id=None, **kwargs):
""" Override of payment to unlist Sips acquirers when the currency is not supported. """
acquirers = super()._get_compatible_acquirers(*args, currency_id=currency_id, **kwargs)
currency = self.env['res.currency'].browse(currency_id).exists()
if currency and currency.name not in SUPPORTED_CURRENCIES:
acquirers = acquirers.filtered(lambda a: a.provider != 'sips')
return acquirers
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()
def _get_default_payment_method_id(self):
self.ensure_one()
if self.provider != 'sips':
return super()._get_default_payment_method_id()
return self.env.ref('payment_sips.payment_method_sips').id