From 76c17ab3f5dcde654543ba595821b76fe3bcadb8 Mon Sep 17 00:00:00 2001 From: Toufik Benjaa Date: Fri, 20 Apr 2018 18:08:19 +0200 Subject: [PATCH] [FIX] stripe: Fix float representation error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Stripe needs to have the amount in integer, so we have to multiply by 100 the amount. Which sometimes create float representation errors and remove/add ~1 cent on some transactions (i.e 72.60€) --- addons/payment_stripe/models/payment.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/payment_stripe/models/payment.py b/addons/payment_stripe/models/payment.py index 515dd3bcd1c..0d33fbe3d01 100644 --- a/addons/payment_stripe/models/payment.py +++ b/addons/payment_stripe/models/payment.py @@ -7,6 +7,7 @@ from odoo import api, fields, models, _ from odoo.addons.payment.models.payment_acquirer import ValidationError from odoo.exceptions import UserError from odoo.tools.safe_eval import safe_eval +from odoo.tools.float_utils import float_round _logger = logging.getLogger(__name__) @@ -90,7 +91,7 @@ class PaymentTransactionStripe(models.Model): def _create_stripe_charge(self, acquirer_ref=None, tokenid=None, email=None): api_url_charge = 'https://%s/charges' % (self.acquirer_id._get_stripe_api_url()) charge_params = { - 'amount': int(self.amount if self.currency_id.name in INT_CURRENCIES else self.amount*100), + 'amount': int(self.amount if self.currency_id.name in INT_CURRENCIES else float_round(self.amount * 100, 2)), 'currency': self.currency_id.name, 'metadata[reference]': self.reference }