From 8156d6a2d8d3c9e91cd19dfa02d672994d462c03 Mon Sep 17 00:00:00 2001
From: "Pedram (PEBR)" <pebr@odoo.com>
Date: Wed, 30 Aug 2023 10:25:43 +0200
Subject: [PATCH] [FIX] pos_stripe: get stripe payment provider based on
 company

The problem was that if you have multiple stripe payment providers in
different companies, it may cause issues in getting the stripe payment
provider. That was because of using sudo in
calling `_get_stripe_payment_provider`.

The solution is to filter the result based on the company.

opw-3473577

closes odoo/odoo#133578

Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
---
 addons/pos_stripe/i18n/pos_stripe.pot             |  4 ++--
 addons/pos_stripe/models/pos_payment_method.py    |  9 ++++++---
 addons/pos_stripe/static/src/js/payment_stripe.js | 12 +++++++++---
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/addons/pos_stripe/i18n/pos_stripe.pot b/addons/pos_stripe/i18n/pos_stripe.pot
index e1119e16c935..a79635af0e67 100644
--- a/addons/pos_stripe/i18n/pos_stripe.pot
+++ b/addons/pos_stripe/i18n/pos_stripe.pot
@@ -19,7 +19,7 @@ msgstr ""
 #. odoo-python
 #: code:addons/pos_stripe/models/pos_payment_method.py:0
 #, python-format
-msgid "Complete the Stripe onboarding."
+msgid "Complete the Stripe onboarding for company %s."
 msgstr ""
 
 #. module: pos_stripe
@@ -106,7 +106,7 @@ msgstr ""
 #. odoo-python
 #: code:addons/pos_stripe/models/pos_payment_method.py:0
 #, python-format
-msgid "Stripe payment provider is missing"
+msgid "Stripe payment provider for company %s is missing"
 msgstr ""
 
 #. module: pos_stripe
diff --git a/addons/pos_stripe/models/pos_payment_method.py b/addons/pos_stripe/models/pos_payment_method.py
index 1f4f939b9c2f..bd9bab2dfb2a 100644
--- a/addons/pos_stripe/models/pos_payment_method.py
+++ b/addons/pos_stripe/models/pos_payment_method.py
@@ -32,10 +32,13 @@ class PosPaymentMethod(models.Model):
                      payment_method.stripe_serial_number, existing_payment_method.display_name))
 
     def _get_stripe_payment_provider(self):
-        stripe_payment_provider = self.env['payment.provider'].search([('code', '=', 'stripe')], limit=1)
+        stripe_payment_provider = self.env['payment.provider'].search([
+            ('code', '=', 'stripe'),
+            ('company_id', '=', self.env.company.id)
+        ], limit=1)
 
         if not stripe_payment_provider:
-            raise UserError(_("Stripe payment provider is missing"))
+            raise UserError(_("Stripe payment provider for company %s is missing", self.env.company.name))
 
         return stripe_payment_provider
 
@@ -44,7 +47,7 @@ class PosPaymentMethod(models.Model):
         stripe_secret_key = self._get_stripe_payment_provider().stripe_secret_key
 
         if not stripe_secret_key:
-            raise ValidationError(_('Complete the Stripe onboarding.'))
+            raise ValidationError(_('Complete the Stripe onboarding for company %s.', self.env.company.name))
 
         return stripe_secret_key
 
diff --git a/addons/pos_stripe/static/src/js/payment_stripe.js b/addons/pos_stripe/static/src/js/payment_stripe.js
index db7f532081e5..6fef8655bcfb 100644
--- a/addons/pos_stripe/static/src/js/payment_stripe.js
+++ b/addons/pos_stripe/static/src/js/payment_stripe.js
@@ -26,6 +26,7 @@ let PaymentStripe = PaymentInterface.extend({
             let data = await rpc.query({
                 model: 'pos.payment.method',
                 method: 'stripe_connection_token',
+                kwargs: { context: this.pos.env.session.user_context },
             }, {
                 silent: true,
             });
@@ -34,7 +35,8 @@ let PaymentStripe = PaymentInterface.extend({
             }
             return data.secret;
         } catch (error) {
-            this._showError(error.message.message, 'Fetch Token');
+            const message = error.message.code === 200 ? error.message.data.message : error.message.message;
+            this._showError(message, 'Fetch Token');
             this.terminal = false;
         };
     },
@@ -194,6 +196,7 @@ let PaymentStripe = PaymentInterface.extend({
                 model: 'pos.payment.method',
                 method: 'stripe_capture_payment',
                 args: [paymentIntentId],
+                kwargs: { context: this.pos.env.session.user_context },
             }, {
                 silent: true,
             });
@@ -202,7 +205,8 @@ let PaymentStripe = PaymentInterface.extend({
             }
             return data;
         } catch (error) {
-            this._showError(error.message.message, 'Capture Payment');
+            const message = error.message.code === 200 ? error.message.data.message : error.message.message;
+            this._showError(message, 'Capture Payment');
             return false;
         };
     },
@@ -213,6 +217,7 @@ let PaymentStripe = PaymentInterface.extend({
                 model: 'pos.payment.method',
                 method: 'stripe_payment_intent',
                 args: [[payment_method.id], amount],
+                kwargs: { context: this.pos.env.session.user_context },
             }, {
                 silent: true,
             });
@@ -221,7 +226,8 @@ let PaymentStripe = PaymentInterface.extend({
             }
             return data.client_secret;
         } catch (error) {
-            this._showError(error.message.message, 'Fetch Secret');
+            const message = error.message.code === 200 ? error.message.data.message : error.message.message;
+            this._showError(message, 'Fetch Secret');
             return false;
         };
     },
-- 
GitLab