From 1bbb8c3965072e858aceabf6382526380945d5fd Mon Sep 17 00:00:00 2001 From: Sylvain Date: Thu, 15 Apr 2021 17:01:52 +0200 Subject: [PATCH] move the architecture from stripe-only to gateway-generic --- app/controllers/api/payzen_controller.rb | 2 +- app/controllers/api/stripe_controller.rb | 4 +- .../src/javascript/directives/cart.js | 50 +++++------ app/frontend/src/javascript/router.js | 9 +- .../templates/dashboard/settings.html | 2 +- app/frontend/templates/shared/_cart.html | 10 +-- app/services/invoices_service.rb | 13 ++- app/services/payment_schedule_service.rb | 13 +-- app/services/reservations/reserve.rb | 23 +++-- app/services/subscriptions/subscribe.rb | 25 +++--- app/workers/payment_schedule_item_worker.rb | 2 +- test/fixtures/history_values.yml | 88 +++++++++++++++++++ test/fixtures/settings.yml | 66 ++++++++++++++ 13 files changed, 239 insertions(+), 68 deletions(-) diff --git a/app/controllers/api/payzen_controller.rb b/app/controllers/api/payzen_controller.rb index 6b4de2bd0..f564285ba 100644 --- a/app/controllers/api/payzen_controller.rb +++ b/app/controllers/api/payzen_controller.rb @@ -66,7 +66,7 @@ class API::PayzenController < API::PaymentsController is_reserve = Reservations::Reserve.new(user_id, current_user.invoicing_profile.id) .pay_and_save(@reservation, payment_details: details, - intent_id: order_id, # TODO: change to gateway_id + payment_id: order_id, schedule: params[:cart_items][:reservation][:payment_schedule], payment_method: payment_method) if is_reserve diff --git a/app/controllers/api/stripe_controller.rb b/app/controllers/api/stripe_controller.rb index d4c6f61ae..afadfac8b 100644 --- a/app/controllers/api/stripe_controller.rb +++ b/app/controllers/api/stripe_controller.rb @@ -117,7 +117,7 @@ class API::StripeController < API::PaymentsController is_reserve = Reservations::Reserve.new(user_id, current_user.invoicing_profile.id) .pay_and_save(@reservation, payment_details: details, - intent_id: intent.id, + payment_id: intent.id, schedule: params[:cart_items][:reservation][:payment_schedule], payment_method: payment_method) if intent.class == Stripe::PaymentIntent @@ -147,7 +147,7 @@ class API::StripeController < API::PaymentsController is_subscribe = Subscriptions::Subscribe.new(current_user.invoicing_profile.id, user_id) .pay_and_save(@subscription, payment_details: details, - intent_id: intent.id, + payment_id: intent.id, schedule: params[:cart_items][:subscription][:payment_schedule], payment_method: 'stripe') if intent.class == Stripe::PaymentIntent diff --git a/app/frontend/src/javascript/directives/cart.js b/app/frontend/src/javascript/directives/cart.js index 6510b643e..c58fd0b80 100644 --- a/app/frontend/src/javascript/directives/cart.js +++ b/app/frontend/src/javascript/directives/cart.js @@ -73,8 +73,8 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', payment_schedule: undefined // the effective computed payment schedule }; - // online payments (stripe) - $scope.stripe = { + // online payments (by card) + $scope.onlinePayment = { showModal: false, cartItems: undefined }; @@ -313,11 +313,11 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', }; /** - * This will open/close the stripe payment modal + * This will open/close the online payment modal */ - $scope.toggleStripeModal = (beforeApply) => { + $scope.toggleOnlinePaymentModal = (beforeApply) => { setTimeout(() => { - $scope.stripe.showModal = !$scope.stripe.showModal; + $scope.onlinePayment.showModal = !$scope.onlinePayment.showModal; if (typeof beforeApply === 'function') { beforeApply(); } @@ -326,11 +326,11 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', }; /** - * Invoked atfer a successful Stripe payment + * Invoked atfer a successful card payment * @param result {*} may be a reservation or a subscription */ - $scope.afterStripeSuccess = (result) => { - $scope.toggleStripeModal(); + $scope.afterOnlinePaymentSuccess = (result) => { + $scope.toggleOnlinePaymentModal(); afterPayment(result); }; @@ -682,7 +682,7 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', * @param planId {number} * @param userId {number} * @param schedule {boolean} - * @param method {String} 'stripe' | '' + * @param method {String} 'stripe' | 'payzen' | '' * @return {{subscription: {payment_schedule: boolean, user_id: number, plan_id: number}}} */ const mkSubscription = function (planId, userId, schedule, method) { @@ -715,13 +715,13 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', /** * Open a modal window that allows the user to process a credit card payment for his current shopping cart. */ - const payByStripe = function (reservation) { + const payOnline = function (reservation) { // check that the online payment is enabled if ($scope.settings.online_payment_module !== 'true') { growl.error(_t('app.shared.cart.online_payment_disabled')); } else { - $scope.toggleStripeModal(() => { - $scope.stripe.cartItems = mkCartItems(reservation, 'stripe'); + $scope.toggleOnlinePaymentModal(() => { + $scope.onlinePayment.cartItems = mkCartItems(reservation, $scope.settings.payment_gateway); }); } }; @@ -740,7 +740,7 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', return Price.compute(mkRequestParams({ reservation }, $scope.coupon.applied)).$promise; }, cartItems () { - return mkCartItems(reservation, 'stripe'); + return mkCartItems(reservation, $scope.settings.payment_gateway); }, wallet () { return Wallet.getWalletByUser({ user_id: reservation.user_id }).$promise; @@ -787,15 +787,15 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', // how should we collect payments for the payment schedule $scope.method = { - payment_method: 'stripe' + payment_method: settings.payment_gateway }; // "valid" Button label $scope.validButtonName = ''; - // stripe modal state + // online payment modal state // this is used to collect card data when a payment-schedule was selected, and paid with a card - $scope.isOpenStripeModal = false; + $scope.isOpenOnlinePaymentModal = false; // the customer $scope.user = user; @@ -804,12 +804,12 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', * Callback to process the local payment, triggered on button click */ $scope.ok = function () { - if ($scope.schedule && $scope.method.payment_method === 'stripe') { + if ($scope.schedule && $scope.method.payment_method === settings.payment_gateway) { // check that the online payment is enabled if (settings.online_payment_module !== 'true') { return growl.error(_t('app.shared.cart.online_payment_disabled')); } else { - return $scope.toggleStripeModal(); + return $scope.toggleOnlinePaymentModal(); } } $scope.attempting = true; @@ -844,11 +844,11 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); }; /** - * Asynchronously updates the status of the stripe modal + * Asynchronously updates the status of the online payment modal */ - $scope.toggleStripeModal = function () { + $scope.toggleOnlinePaymentModal = function () { setTimeout(() => { - $scope.isOpenStripeModal = !$scope.isOpenStripeModal; + $scope.isOpenOnlinePaymentModal = !$scope.isOpenOnlinePaymentModal; $scope.$apply(); }, 50); }; @@ -858,7 +858,7 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', * @param result {*} Reservation or Subscription */ $scope.afterCreatePaymentSchedule = function (result) { - $scope.toggleStripeModal(); + $scope.toggleOnlinePaymentModal(); $uibModalInstance.close(result); }; @@ -883,7 +883,7 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', if (AuthService.isAuthorized(['admin', 'manager']) && $rootScope.currentUser.id !== reservation.user_id) { method = $scope.method.payment_method; } else { - method = 'stripe'; + method = settings.payment_gateway; } } if ($scope.amount > 0) { @@ -931,7 +931,7 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', }; /** - * Actions to pay slots + * Actions to pay slots (or subscription) */ const paySlots = function () { const reservation = mkReservation($scope.user, $scope.events.reserved, $scope.selectedPlan); @@ -940,7 +940,7 @@ Application.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', const amountToPay = helpers.getAmountToPay($scope.amountTotal, wallet.amount); if ((AuthService.isAuthorized(['member']) && (amountToPay > 0 || (amountToPay === 0 && hasOtherDeadlines()))) || (AuthService.isAuthorized('manager') && $scope.user.id === $rootScope.currentUser.id && amountToPay > 0)) { - return payByStripe(reservation); + return payOnline(reservation); } else { if (AuthService.isAuthorized(['admin']) || (AuthService.isAuthorized('manager') && $scope.user.id !== $rootScope.currentUser.id) || diff --git a/app/frontend/src/javascript/router.js b/app/frontend/src/javascript/router.js index 4433197ba..8632754d9 100644 --- a/app/frontend/src/javascript/router.js +++ b/app/frontend/src/javascript/router.js @@ -363,7 +363,7 @@ angular.module('application.router', ['ui.router']) return Setting.query({ names: "['machine_explications_alert', 'booking_window_start', 'booking_window_end', 'booking_move_enable', " + "'booking_move_delay', 'booking_cancel_enable', 'booking_cancel_delay', 'subscription_explications_alert', " + - "'online_payment_module']" + "'online_payment_module', 'payment_gateway']" }).$promise; }] } @@ -449,7 +449,7 @@ angular.module('application.router', ['ui.router']) return Setting.query({ names: "['booking_window_start', 'booking_window_end', 'booking_move_enable', 'booking_move_delay', " + "'booking_cancel_enable', 'booking_cancel_delay', 'subscription_explications_alert', " + - "'space_explications_alert', 'online_payment_module']" + "'space_explications_alert', 'online_payment_module', 'payment_gateway']" }).$promise; }] } @@ -502,7 +502,8 @@ angular.module('application.router', ['ui.router']) return Setting.query({ names: "['booking_window_start', 'booking_window_end', 'booking_move_enable', 'booking_move_delay', " + "'booking_cancel_enable', 'booking_cancel_delay', 'subscription_explications_alert', " + - "'training_explications_alert', 'training_information_message', 'online_payment_module']" + "'training_explications_alert', 'training_information_message', 'online_payment_module', " + + "'payment_gateway']" }).$promise; }] } @@ -532,7 +533,7 @@ angular.module('application.router', ['ui.router']) subscriptionExplicationsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'subscription_explications_alert' }).$promise; }], plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }], groupsPromise: ['Group', function (Group) { return Group.query().$promise; }], - settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: "['online_payment_module']" }).$promise; }] + settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: "['online_payment_module', 'payment_gateway']" }).$promise; }] } }) diff --git a/app/frontend/templates/dashboard/settings.html b/app/frontend/templates/dashboard/settings.html index 31d498c27..4890f310f 100644 --- a/app/frontend/templates/dashboard/settings.html +++ b/app/frontend/templates/dashboard/settings.html @@ -84,7 +84,7 @@
{{ 'app.logged.dashboard.settings.cookies_unset' }}
-
+
diff --git a/app/frontend/templates/shared/_cart.html b/app/frontend/templates/shared/_cart.html index fa45a0376..1f37dfa24 100644 --- a/app/frontend/templates/shared/_cart.html +++ b/app/frontend/templates/shared/_cart.html @@ -199,11 +199,11 @@ -
- + diff --git a/app/services/invoices_service.rb b/app/services/invoices_service.rb index bda6c5fa1..01060cc90 100644 --- a/app/services/invoices_service.rb +++ b/app/services/invoices_service.rb @@ -66,19 +66,24 @@ class InvoicesService # @param operator_profile_id {Number} ID of the user that operates the invoice generation (may be an admin, a manager or the customer himself) # @param reservation {Reservation} the booking reservation, if any # @param subscription {Subscription} the booking subscription, if any - # @param payment_intent_id {String} ID of the Stripe::PaymentIntend, if the current invoice is paid by stripe + # @param payment_id {String} ID of the payment, a returned by the gateway, if the current invoice is paid by card + # @param payment_method {String} the payment method used ## - def self.create(payment_details, operator_profile_id, reservation: nil, subscription: nil, payment_intent_id: nil) + def self.create(payment_details, operator_profile_id, reservation: nil, subscription: nil, payment_id: nil, payment_method: nil) user = reservation&.user || subscription&.user operator = InvoicingProfile.find(operator_profile_id)&.user - method = operator&.admin? || (operator&.manager? && operator != user) ? nil : 'stripe' + method = if payment_method + payment_method + else + operator&.admin? || (operator&.manager? && operator != user) ? nil : Setting.get('payment_gateway') + end invoice = Invoice.new( invoiced: subscription || reservation, invoicing_profile: user.invoicing_profile, statistic_profile: user.statistic_profile, operator_profile_id: operator_profile_id, - stp_payment_intent_id: payment_intent_id, + stp_payment_intent_id: payment_id, payment_method: method ) diff --git a/app/services/payment_schedule_service.rb b/app/services/payment_schedule_service.rb index 30fa34ead..0291d636e 100644 --- a/app/services/payment_schedule_service.rb +++ b/app/services/payment_schedule_service.rb @@ -49,7 +49,7 @@ class PaymentScheduleService { payment_schedule: ps, items: items } end - def create(subscription, total, coupon: nil, operator: nil, payment_method: nil, reservation: nil, user: nil, setup_intent_id: nil) + def create(subscription, total, coupon: nil, operator: nil, payment_method: nil, reservation: nil, user: nil, payment_id: nil) subscription = reservation.generate_subscription if !subscription && reservation&.plan_id raise InvalidSubscriptionError unless subscription&.persisted? @@ -59,7 +59,7 @@ class PaymentScheduleService ps.scheduled = reservation || subscription ps.payment_method = payment_method - ps.stp_setup_intent_id = setup_intent_id + ps.stp_setup_intent_id = payment_id ps.operator_profile = operator.invoicing_profile ps.invoicing_profile = user.invoicing_profile ps.statistic_profile = user.statistic_profile @@ -72,17 +72,18 @@ class PaymentScheduleService ## # Generate the invoice associated with the given PaymentScheduleItem, with the children elements (InvoiceItems). - # @param stp_invoice is used to determine if the invoice was paid using stripe + # @param payment_method {String} the payment method or gateway in use + # @param payment_id {String} the identifier of the payment as provided by the payment gateway, in case of card payment ## - def generate_invoice(payment_schedule_item, stp_invoice = nil) + def generate_invoice(payment_schedule_item, payment_method: nil, payment_id: nil) # build the base invoice invoice = Invoice.new( invoiced: payment_schedule_item.payment_schedule.scheduled, invoicing_profile: payment_schedule_item.payment_schedule.invoicing_profile, statistic_profile: payment_schedule_item.payment_schedule.statistic_profile, operator_profile_id: payment_schedule_item.payment_schedule.operator_profile_id, - stp_payment_intent_id: stp_invoice&.payment_intent, - payment_method: stp_invoice ? 'stripe' : nil + stp_payment_intent_id: payment_id, + payment_method: payment_method ) # complete the invoice with some InvoiceItem if payment_schedule_item.first? diff --git a/app/services/reservations/reserve.rb b/app/services/reservations/reserve.rb index 5c5009579..dc006e193 100644 --- a/app/services/reservations/reserve.rb +++ b/app/services/reservations/reserve.rb @@ -10,10 +10,10 @@ class Reservations::Reserve end ## - # Confirm the payment of the given reservation, generate the associated documents and save teh record into + # Confirm the payment of the given reservation, generate the associated documents and save the record into # the database. ## - def pay_and_save(reservation, payment_details: nil, intent_id: nil, schedule: false, payment_method: nil) + def pay_and_save(reservation, payment_details: nil, payment_id: nil, schedule: false, payment_method: nil) user = User.find(user_id) reservation.statistic_profile_id = StatisticProfile.find_by(user_id: user_id).id @@ -26,15 +26,19 @@ class Reservations::Reserve user: user, payment_method: payment_method, coupon: payment_details[:coupon], - setup_intent_id: intent_id) + payment_id: payment_id) else - generate_invoice(reservation, operator_profile_id, payment_details, intent_id) + generate_invoice(reservation, + operator_profile_id, + payment_details, + payment_id: payment_id, + payment_method: payment_method) end WalletService.debit_user_wallet(payment, user, reservation) reservation.save reservation.post_save payment.save - payment.post_save(intent_id) + payment.post_save(payment_id) end true end @@ -45,7 +49,7 @@ class Reservations::Reserve # Generate the invoice for the given reservation+subscription ## def generate_schedule(reservation: nil, total: nil, operator_profile_id: nil, user: nil, payment_method: nil, coupon: nil, - setup_intent_id: nil) + payment_id: nil) operator = InvoicingProfile.find(operator_profile_id)&.user PaymentScheduleService.new.create( @@ -56,19 +60,20 @@ class Reservations::Reserve payment_method: payment_method, user: user, reservation: reservation, - setup_intent_id: setup_intent_id + payment_id: payment_id ) end ## # Generate the invoice for the given reservation ## - def generate_invoice(reservation, operator_profile_id, payment_details, payment_intent_id = nil) + def generate_invoice(reservation, operator_profile_id, payment_details, payment_id: nil, payment_method: nil) InvoicesService.create( payment_details, operator_profile_id, reservation: reservation, - payment_intent_id: payment_intent_id + payment_id: payment_id, + payment_method: payment_method ) end diff --git a/app/services/subscriptions/subscribe.rb b/app/services/subscriptions/subscribe.rb index 627340bf0..bc74b2a53 100644 --- a/app/services/subscriptions/subscribe.rb +++ b/app/services/subscriptions/subscribe.rb @@ -12,11 +12,11 @@ class Subscriptions::Subscribe ## # @param subscription {Subscription} # @param payment_details {Hash} as generated by Price.compute - # @param intent_id {String} from stripe + # @param payment_id {String} from the payment gateway # @param schedule {Boolean} # @param payment_method {String} only for schedules ## - def pay_and_save(subscription, payment_details: nil, intent_id: nil, schedule: false, payment_method: nil) + def pay_and_save(subscription, payment_details: nil, payment_id: nil, schedule: false, payment_method: nil) return false if user_id.nil? user = User.find(user_id) @@ -33,13 +33,17 @@ class Subscriptions::Subscribe user: user, payment_method: payment_method, coupon: payment_details[:coupon], - setup_intent_id: intent_id) + payment_id: payment_id) else - generate_invoice(subscription, operator_profile_id, payment_details, intent_id) + generate_invoice(subscription, + operator_profile_id, + payment_details, + payment_id: payment_id, + payment_method: payment_method) end WalletService.debit_user_wallet(payment, user, subscription) payment.save - payment.post_save(intent_id) + payment.post_save(payment_id) end true end @@ -61,7 +65,7 @@ class Subscriptions::Subscribe operator_profile_id: operator_profile_id, user: new_sub.user, payment_method: schedule.payment_method, - setup_intent_id: schedule.stp_setup_intent_id) + payment_id: schedule.stp_setup_intent_id) else generate_invoice(subscription, operator_profile_id, details) end @@ -79,7 +83,7 @@ class Subscriptions::Subscribe # Generate the invoice for the given subscription ## def generate_schedule(subscription: nil, total: nil, operator_profile_id: nil, user: nil, payment_method: nil, coupon: nil, - setup_intent_id: nil) + payment_id: nil) operator = InvoicingProfile.find(operator_profile_id)&.user PaymentScheduleService.new.create( @@ -89,19 +93,20 @@ class Subscriptions::Subscribe operator: operator, payment_method: payment_method, user: user, - setup_intent_id: setup_intent_id + payment_id: payment_id ) end ## # Generate the invoice for the given subscription ## - def generate_invoice(subscription, operator_profile_id, payment_details, payment_intent_id = nil) + def generate_invoice(subscription, operator_profile_id, payment_details, payment_id: nil, payment_method: nil) InvoicesService.create( payment_details, operator_profile_id, subscription: subscription, - payment_intent_id: payment_intent_id + payment_id: payment_id, + payment_method: payment_method ) end diff --git a/app/workers/payment_schedule_item_worker.rb b/app/workers/payment_schedule_item_worker.rb index 0120dbb78..f20582987 100644 --- a/app/workers/payment_schedule_item_worker.rb +++ b/app/workers/payment_schedule_item_worker.rb @@ -25,7 +25,7 @@ class PaymentScheduleItemWorker stp_invoice = Stripe::Invoice.retrieve(stp_subscription.latest_invoice, api_key: stripe_key) if stp_invoice.status == 'paid' ##### Stripe / Successfully paid - PaymentScheduleService.new.generate_invoice(psi, stp_invoice) + PaymentScheduleService.new.generate_invoice(psi, payment_method: 'stripe', payment_id: stp_invoice.payment_intent) psi.update_attributes(state: 'paid', payment_method: 'stripe', stp_invoice_id: stp_invoice.id) elsif stp_subscription.status == 'past_due' || stp_invoice.status == 'open' ##### Stripe / Payment error diff --git a/test/fixtures/history_values.yml b/test/fixtures/history_values.yml index be904051e..80f4f797e 100644 --- a/test/fixtures/history_values.yml +++ b/test/fixtures/history_values.yml @@ -696,6 +696,94 @@ history_value_73: value_history_74: id: 74 + setting_id: 74 + invoicing_profile_id: 1 + value: until_start + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_75: + id: 75 + setting_id: 75 + invoicing_profile_id: 1 + value: FabManager_paymentSchedule + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_76: + id: 76 + setting_id: 76 + invoicing_profile_id: 1 + value: true + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_77: + id: 77 + setting_id: 77 + invoicing_profile_id: 1 + value: false + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_78: + id: 78 + setting_id: 78 + invoicing_profile_id: 1 + value: stripe + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_79: + id: 79 + setting_id: 79 + invoicing_profile_id: 1 + value: + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_80: + id: 80 + setting_id: 80 + invoicing_profile_id: 1 + value: + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_81: + id: 81 + setting_id: 81 + invoicing_profile_id: 1 + value: + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_82: + id: 82 + setting_id: 82 + invoicing_profile_id: 1 + value: + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_83: + id: 83 + setting_id: 83 + invoicing_profile_id: 1 + value: + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_84: + id: 84 + setting_id: 84 + invoicing_profile_id: 1 + value: + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +value_history_85: + id: 85 setting_id: 10 invoicing_profile_id: 1 value: YYMMmmmX[/VL]R[/A]S[/E] diff --git a/test/fixtures/settings.yml b/test/fixtures/settings.yml index e27f6fc9f..804170395 100644 --- a/test/fixtures/settings.yml +++ b/test/fixtures/settings.yml @@ -431,3 +431,69 @@ setting_73: created_at: 2020-06-17 10:48:19.002417000 Z updated_at: 2020-06-17 10:48:19.002417000 Z +setting_74: + id: 74 + name: upcoming_events_shown + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_75: + id: 75 + name: payment_schedule_prefix + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_76: + id: 76 + name: trainings_module + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_77: + id: 77 + name: address_required + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_78: + id: 78 + name: payment_gateway + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_79: + id: 79 + name: payzen_username + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_80: + id: 80 + name: payzen_password + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_81: + id: 81 + name: payzen_endpoint + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_82: + id: 82 + name: payzen_public_key + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_83: + id: 83 + name: payzen_hmac + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z + +setting_84: + id: 84 + name: payzen_currency + created_at: 2020-04-15 14:38:40.000421500 Z + updated_at: 2020-04-15 14:38:40.000421500 Z +