spree_vpago 0.1.0.pre.beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.env.example +3 -0
- data/.github/workflows/test_and_publish_gem.yml +96 -0
- data/.gitignore +24 -0
- data/.rspec +3 -0
- data/.rubocop.yml +56 -0
- data/.ruby-version +1 -0
- data/.tool-versions +1 -0
- data/.travis.yml +45 -0
- data/Appraisals +20 -0
- data/Gemfile +27 -0
- data/Gemfile.lock +656 -0
- data/LICENSE +26 -0
- data/README.md +151 -0
- data/Rakefile +21 -0
- data/app/.gitkeep +0 -0
- data/app/assets/config/spree_vpago_manifest.js +3 -0
- data/app/assets/images/backend-process.svg +3 -0
- data/app/assets/images/vpago/payway/abapay.png +0 -0
- data/app/assets/images/vpago/payway/cards.png +0 -0
- data/app/assets/javascripts/vpago/vpago_payments/request_process_payment.js +44 -0
- data/app/assets/javascripts/vpago/vpago_payments/user_informers/firebase.js +15802 -0
- data/app/controllers/.gitkeep +0 -0
- data/app/controllers/spree/acleda_redirects_controller.rb +22 -0
- data/app/controllers/spree/admin/payment_methods_controller_decorator.rb +65 -0
- data/app/controllers/spree/admin/payment_payway_base_controller.rb +25 -0
- data/app/controllers/spree/admin/payment_payway_checkers_controller.rb +34 -0
- data/app/controllers/spree/admin/payment_payway_markers_controller.rb +44 -0
- data/app/controllers/spree/admin/payment_payway_queriers_controller.rb +39 -0
- data/app/controllers/spree/admin/payment_wing_sdk_base_controller.rb +21 -0
- data/app/controllers/spree/admin/payment_wing_sdk_checkers_controller.rb +26 -0
- data/app/controllers/spree/admin/payment_wing_sdk_markers_controller.rb +36 -0
- data/app/controllers/spree/admin/payment_wing_sdk_queriers_controller.rb +20 -0
- data/app/controllers/spree/admin/payments_controller_decorator.rb +19 -0
- data/app/controllers/spree/admin/payout_profile_products_controller.rb +21 -0
- data/app/controllers/spree/admin/payout_profile_shipping_methods_controller.rb +21 -0
- data/app/controllers/spree/admin/payout_profiles_controller.rb +91 -0
- data/app/controllers/spree/admin/payouts_controller.rb +16 -0
- data/app/controllers/spree/api/v2/storefront/checkout_controller_decorator.rb +84 -0
- data/app/controllers/spree/payway_card_popups_controller.rb +20 -0
- data/app/controllers/spree/payway_results_controller.rb +11 -0
- data/app/controllers/spree/payway_v2_card_popups_controller.rb +20 -0
- data/app/controllers/spree/vpago_payments_controller.rb +71 -0
- data/app/controllers/spree/webhook/acleda_mobiles_controller.rb +88 -0
- data/app/controllers/spree/webhook/acledas_controller.rb +80 -0
- data/app/controllers/spree/webhook/base_controller.rb +6 -0
- data/app/controllers/spree/webhook/payways_controller.rb +77 -0
- data/app/controllers/spree/webhook/wings_controller.rb +63 -0
- data/app/controllers/spree/wing/base_controller.rb +29 -0
- data/app/controllers/spree/wing/transactions_controller.rb +27 -0
- data/app/controllers/spree/wing_redirects_controller.rb +20 -0
- data/app/helpers/vpago/admin/base_helper_decorator.rb +40 -0
- data/app/helpers/vpago/vpago_payments_helper.rb +12 -0
- data/app/javascripts/vpago/vpago_payments/user_informers/firebase.js +62 -0
- data/app/jobs/application_unique_job.rb +1 -0
- data/app/jobs/vpago/payment_processor_job.rb +8 -0
- data/app/models/.gitkeep +0 -0
- data/app/models/concerns/vpago/payoutable.rb +11 -0
- data/app/models/spree/gateway/acleda.rb +63 -0
- data/app/models/spree/gateway/acleda_mobile.rb +46 -0
- data/app/models/spree/gateway/payway.rb +66 -0
- data/app/models/spree/gateway/payway_v2.rb +174 -0
- data/app/models/spree/gateway/wing_sdk.rb +51 -0
- data/app/models/spree/payout.rb +23 -0
- data/app/models/spree/payout_profile.rb +107 -0
- data/app/models/spree/payout_profile_product.rb +14 -0
- data/app/models/spree/payout_profile_shipping_method.rb +14 -0
- data/app/models/spree/payout_profiles/payway_v2.rb +40 -0
- data/app/models/spree/vpago_payment_source.rb +21 -0
- data/app/models/vpago/adjustment_decorator.rb +28 -0
- data/app/models/vpago/line_item_decorator.rb +75 -0
- data/app/models/vpago/order_decorator.rb +78 -0
- data/app/models/vpago/payment_decorator.rb +44 -0
- data/app/models/vpago/payment_method_decorator.rb +91 -0
- data/app/models/vpago/payouts_generator.rb +125 -0
- data/app/models/vpago/product_decorator.rb +30 -0
- data/app/models/vpago/promotion_action_decorator.rb +9 -0
- data/app/models/vpago/shipment_decorator.rb +23 -0
- data/app/models/vpago/shipping_method_decorator.rb +33 -0
- data/app/models/vpago/shipping_rate_decorator.rb +25 -0
- data/app/models/vpago/store_decorator.rb +17 -0
- data/app/models/vpago/tax_category_decorator.rb +9 -0
- data/app/models/vpago/variant_decorator.rb +22 -0
- data/app/models/vpago/vendor_decorator.rb +10 -0
- data/app/overrides/spree/admin/adjustments/_adjustment/handle_by_table_body.html.erb.deface +11 -0
- data/app/overrides/spree/admin/adjustments/_adjustments_table/handle_by_table_header.html.erb.deface +3 -0
- data/app/overrides/spree/admin/adjustments/_form/handle_by_field.html.erb.deface +10 -0
- data/app/overrides/spree/admin/orders/_shipment/edit_method.html.erb.deface +26 -0
- data/app/overrides/spree/admin/orders/_shipment/show_method.html.erb.deface +27 -0
- data/app/overrides/spree/admin/payment_methods/_form/enable_pre_auth_field.html.erb.deface +17 -0
- data/app/overrides/spree/admin/payment_methods/_form/vendor_field.html.erb.deface +6 -0
- data/app/overrides/spree/admin/payment_methods/index/list.html.erb.deface +45 -0
- data/app/overrides/spree/admin/payment_methods/index/payment_methods_tabs.html.erb.deface +9 -0
- data/app/overrides/spree/admin/payment_methods/index/vendor_body.html.erb.deface +5 -0
- data/app/overrides/spree/admin/payment_methods/index/vendor_header.html.erb.deface +5 -0
- data/app/overrides/spree/admin/payments/_list/actions.html.erb.deface +13 -0
- data/app/overrides/spree/admin/promotions/_promotion_action/run_by_field.html.erb.deface +13 -0
- data/app/overrides/spree/admin/shared/_order_tabs/payouts.html.erb.deface +8 -0
- data/app/overrides/spree/admin/shared/_product_tabs/payout_profile_products.html.erb.deface +8 -0
- data/app/overrides/spree/admin/shared/sub_menu/_integrations/payout_profiles.html.erb.deface +3 -0
- data/app/overrides/spree/admin/shipping_methods/_form/handle_by.html.erb.deface +12 -0
- data/app/overrides/spree/admin/shipping_methods/edit/shipping_method_tabs.html.erb.deface +3 -0
- data/app/overrides/spree/admin/tax_categories/_form/collect_by_field.html.erb.deface +10 -0
- data/app/overrides/spree/admin/tax_categories/index/collect_by_table_body.html.erb.deface +4 -0
- data/app/overrides/spree/admin/tax_categories/index/collect_by_table_header.html.erb.deface +4 -0
- data/app/serializers/spree/api/v2/platform/vpago_payment_source_serializer.rb +11 -0
- data/app/serializers/spree/v2/storefront/payment_method_serializer_decorator.rb +23 -0
- data/app/serializers/spree/v2/storefront/payment_redirect_serializer.rb +13 -0
- data/app/serializers/spree/v2/storefront/payment_serializer_decorator.rb +13 -0
- data/app/serializers/spree/v2/storefront/vpago_payment_source_serializer.rb +9 -0
- data/app/services/.gitkeep +0 -0
- data/app/services/vpago/payment_finder.rb +27 -0
- data/app/services/vpago/payment_processor.rb +72 -0
- data/app/services/vpago/payment_redirect_handler.rb +194 -0
- data/app/services/vpago/payment_url_constructor.rb +32 -0
- data/app/services/vpago/payments/find_or_create.rb +51 -0
- data/app/services/vpago/payout_profiles/payway/base_payout_profile_request.rb +38 -0
- data/app/services/vpago/payout_profiles/payway/open_ssl_encrypter.rb +31 -0
- data/app/services/vpago/payout_profiles/payway/payout_profile_request_creator.rb +50 -0
- data/app/services/vpago/payout_profiles/payway/payout_profile_request_params_builder.rb +58 -0
- data/app/services/vpago/payout_profiles/payway/payout_profile_request_updater.rb +28 -0
- data/app/services/vpago/payway_return_options_builder.rb +39 -0
- data/app/services/vpago/user_informers/firebase.rb +52 -0
- data/app/views/.gitkeep +0 -0
- data/app/views/layouts/acleda.html.erb +18 -0
- data/app/views/layouts/payway.html.erb +24 -0
- data/app/views/layouts/payway_v2.html.erb +18 -0
- data/app/views/layouts/vpago_payments.html.erb +18 -0
- data/app/views/layouts/wing.html.erb +18 -0
- data/app/views/spree/_payment_icon.html.erb +25 -0
- data/app/views/spree/acleda_redirects/show.html.erb +3 -0
- data/app/views/spree/admin/payments/source_forms/_payment_payway.html.erb +4 -0
- data/app/views/spree/admin/payments/source_forms/_payway_v2.html.erb +7 -0
- data/app/views/spree/admin/payments/source_views/_acleda.html.erb +1 -0
- data/app/views/spree/admin/payments/source_views/_acleda_mobile.html.erb +1 -0
- data/app/views/spree/admin/payments/source_views/_payment_payway.html.erb +98 -0
- data/app/views/spree/admin/payments/source_views/_payway_v2.html.erb +5 -0
- data/app/views/spree/admin/payments/source_views/_vpago_payment_tmpl.html.erb +113 -0
- data/app/views/spree/admin/payments/source_views/_wingsdk.html.erb +5 -0
- data/app/views/spree/admin/payout_profile_products/_form.html.erb +28 -0
- data/app/views/spree/admin/payout_profile_products/edit.html.erb +18 -0
- data/app/views/spree/admin/payout_profile_products/index.html.erb +58 -0
- data/app/views/spree/admin/payout_profile_products/new.html.erb +22 -0
- data/app/views/spree/admin/payout_profile_shipping_methods/_form.html.erb +28 -0
- data/app/views/spree/admin/payout_profile_shipping_methods/edit.html.erb +22 -0
- data/app/views/spree/admin/payout_profile_shipping_methods/index.html.erb +6 -0
- data/app/views/spree/admin/payout_profile_shipping_methods/new.html.erb +27 -0
- data/app/views/spree/admin/payout_profiles/_filter.html.erb +19 -0
- data/app/views/spree/admin/payout_profiles/_form.html.erb +72 -0
- data/app/views/spree/admin/payout_profiles/edit.html.erb +33 -0
- data/app/views/spree/admin/payout_profiles/index.html.erb +63 -0
- data/app/views/spree/admin/payout_profiles/new.html.erb +13 -0
- data/app/views/spree/admin/payouts/_line_item_info_with_popover.html.erb +43 -0
- data/app/views/spree/admin/payouts/index.html.erb +46 -0
- data/app/views/spree/admin/shared/_payment_methods_tabs.html.erb +15 -0
- data/app/views/spree/admin/shared/_shipping_method_tabs.html.erb +19 -0
- data/app/views/spree/admin/shared/payout_profile/_info_card.html.erb +24 -0
- data/app/views/spree/admin/shared/payout_profile/_status.html.erb +11 -0
- data/app/views/spree/checkout/payment/_acleda.html.erb +1 -0
- data/app/views/spree/checkout/payment/_acleda_checkout_form.html.erb +14 -0
- data/app/views/spree/checkout/payment/_acleda_mobile.html.erb +0 -0
- data/app/views/spree/checkout/payment/_payment_payway.html.erb +21 -0
- data/app/views/spree/checkout/payment/_payway_loader.html.erb +2 -0
- data/app/views/spree/checkout/payment/_payway_root.html.erb +9 -0
- data/app/views/spree/checkout/payment/_payway_script.html.erb +77 -0
- data/app/views/spree/checkout/payment/_payway_v2.html.erb +1 -0
- data/app/views/spree/checkout/payment/_payway_v2_loader.html.erb +2 -0
- data/app/views/spree/checkout/payment/_payway_v2_root.html.erb +9 -0
- data/app/views/spree/checkout/payment/_payway_v2_script.html.erb +79 -0
- data/app/views/spree/checkout/payment/_wing_checkout_form.html.erb +18 -0
- data/app/views/spree/checkout/payment/_wingsdk.html.erb +1 -0
- data/app/views/spree/checkout/payment/acleda_form.html.erb +3 -0
- data/app/views/spree/checkout/payment/payway_form.html.erb +10 -0
- data/app/views/spree/checkout/payment/payway_v2_form.html.erb +10 -0
- data/app/views/spree/checkout/payment/wingsdk_form.html.erb +3 -0
- data/app/views/spree/payway_card_popups/_form.html.erb +10 -0
- data/app/views/spree/payway_card_popups/show.html.erb +5 -0
- data/app/views/spree/payway_results/failed.html.erb +1 -0
- data/app/views/spree/payway_results/success.html.erb +1 -0
- data/app/views/spree/payway_v2_card_popups/_form.html.erb +15 -0
- data/app/views/spree/payway_v2_card_popups/show.html.erb +3 -0
- data/app/views/spree/vpago_payments/checkout.html.erb +3 -0
- data/app/views/spree/vpago_payments/forms/spree/gateway/_payway_v2.html.erb +13 -0
- data/app/views/spree/vpago_payments/processing.html.erb +49 -0
- data/app/views/spree/vpago_payments/success.html.erb +3 -0
- data/app/views/spree/wing_redirects/show.html.erb +3 -0
- data/bin/rails +8 -0
- data/build.js +9 -0
- data/config/initializers/assets.rb +1 -0
- data/config/initializers/spree_permitted_attributes.rb +5 -0
- data/config/locales/en.yml +28 -0
- data/config/locales/km.yml +24 -0
- data/config/routes.rb +92 -0
- data/db/migrate/20210128040625_create_spree_vpago_payment_sources.rb +14 -0
- data/db/migrate/20210430052432_add_fields_to_payment_sources.rb +7 -0
- data/db/migrate/20210824044737_add_preference_to_spree_vpago_payment_source.rb +5 -0
- data/db/migrate/20240506095140_create_spree_payout_profiles.rb +22 -0
- data/db/migrate/20240506095148_create_spree_payout_profile_products.rb +10 -0
- data/db/migrate/20240523070757_add_optional_spere_payout_profile_products.rb +5 -0
- data/db/migrate/20240715091228_create_spree_payouts.rb +25 -0
- data/db/migrate/20240718195510_create_spree_payout_profile_shipping_methods.rb +15 -0
- data/db/migrate/20240718201453_add_handle_by_to_spree_adjustments.rb +5 -0
- data/db/migrate/20240718201509_add_run_by_to_spree_promotion_actions.rb +5 -0
- data/db/migrate/20240718201523_add_collect_by_to_spree_tax_categories.rb +5 -0
- data/db/migrate/20240718201538_add_handle_by_to_spree_shipping_method.rb +5 -0
- data/db/migrate/20240718201554_add_handle_by_to_spree_shipping_rates.rb +5 -0
- data/db/migrate/20240808102853_add_vendor_reference_to_spree_payment_methods.rb +7 -0
- data/db/migrate/20240904030132_add_gateway_status_to_spree_payments.rb +5 -0
- data/db/migrate/20241029071959_add_pre_auth_response_to_spree_payment.rb +5 -0
- data/db/migrate/20241202104014_add_enable_pre_auth_to_spree_payment_method.rb +5 -0
- data/db/migrate/20250121044614_add_transaction_response_to_spree_payments.rb +5 -0
- data/docs/acleda.md +65 -0
- data/gemfiles/spree_3_7.gemfile +9 -0
- data/gemfiles/spree_4_0.gemfile +8 -0
- data/gemfiles/spree_4_1.gemfile +9 -0
- data/gemfiles/spree_master.gemfile +8 -0
- data/lib/generators/spree_vpago/install/install_generator.rb +26 -0
- data/lib/generators/spree_vpago/install/templates/app/assets/images/vpago/payway/acleda_merchant_logo_300x300.png +0 -0
- data/lib/spree_vpago/engine.rb +36 -0
- data/lib/spree_vpago/factories.rb +6 -0
- data/lib/spree_vpago/version.rb +9 -0
- data/lib/spree_vpago.rb +5 -0
- data/lib/vpago/acleda/base.rb +111 -0
- data/lib/vpago/acleda/checkout.rb +105 -0
- data/lib/vpago/acleda/deeplink_checkout.rb +74 -0
- data/lib/vpago/acleda/payment_request_updater.rb +38 -0
- data/lib/vpago/acleda/transaction_status.rb +71 -0
- data/lib/vpago/acleda_mobile/base.rb +28 -0
- data/lib/vpago/acleda_mobile/callback_validator.php +35 -0
- data/lib/vpago/acleda_mobile/callback_validator.rb +38 -0
- data/lib/vpago/acleda_mobile/checkout.rb +78 -0
- data/lib/vpago/acleda_mobile/payment_request_updater.rb +34 -0
- data/lib/vpago/acleda_mobile/payment_retriever.rb +24 -0
- data/lib/vpago/acleda_mobile/transaction_status.rb +35 -0
- data/lib/vpago/payment_amount_calculator.rb +23 -0
- data/lib/vpago/payment_request_updater.rb +19 -0
- data/lib/vpago/payment_status_marker.rb +109 -0
- data/lib/vpago/payway/base.rb +112 -0
- data/lib/vpago/payway/checkout.rb +24 -0
- data/lib/vpago/payway/payment_request_updater.rb +31 -0
- data/lib/vpago/payway/payment_status_marker.rb +84 -0
- data/lib/vpago/payway/transaction_status.rb +74 -0
- data/lib/vpago/payway.rb +13 -0
- data/lib/vpago/payway_v2/base.rb +153 -0
- data/lib/vpago/payway_v2/checkout.rb +35 -0
- data/lib/vpago/payway_v2/payment_request_updater.rb +65 -0
- data/lib/vpago/payway_v2/payouts_params_constructor.rb +47 -0
- data/lib/vpago/payway_v2/pre_auth_canceler.rb +43 -0
- data/lib/vpago/payway_v2/pre_auth_completer.rb +76 -0
- data/lib/vpago/payway_v2/transaction_status.rb +85 -0
- data/lib/vpago/wing_sdk/base.rb +58 -0
- data/lib/vpago/wing_sdk/checkout.rb +20 -0
- data/lib/vpago/wing_sdk/payment_request_updater.rb +46 -0
- data/lib/vpago/wing_sdk/payment_retriever.rb +34 -0
- data/lib/vpago/wing_sdk/transaction_status_checker.rb +64 -0
- data/lib/vpago/wing_sdk/transaction_status_response.rb +33 -0
- data/node_modules/.yarn-integrity +147 -0
- data/package-lock.json +1491 -0
- data/package.json +10 -0
- data/spree_vpago.gemspec +33 -0
- data/yarn.lock +921 -0
- metadata +403 -0
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Spree
|
2
|
+
class AcledaRedirectsController < ApplicationController
|
3
|
+
layout 'acleda'
|
4
|
+
before_action :load_payment, only: [:show]
|
5
|
+
|
6
|
+
def show
|
7
|
+
if @payment.present?
|
8
|
+
options = {
|
9
|
+
app_checkout: true
|
10
|
+
}
|
11
|
+
|
12
|
+
@client_redirect = ActiveRecord::Base.connected_to(role: :writing) do
|
13
|
+
::Vpago::Acleda::Checkout.new(@payment, options)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def load_payment
|
19
|
+
@payment = ::Spree::Payment.find_by(number: params[:payment_number])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
module PaymentMethodsControllerDecorator
|
4
|
+
def scope
|
5
|
+
scope = current_store.payment_methods_including_vendor.accessible_by(current_ability, :index)
|
6
|
+
scope = scope.where.not(vendor_id: nil) if params[:tab] == 'vendors'
|
7
|
+
scope
|
8
|
+
end
|
9
|
+
|
10
|
+
# overrdie
|
11
|
+
# handling error response
|
12
|
+
def create
|
13
|
+
@payment_method = params[:payment_method].delete(:type).constantize.new(payment_method_params)
|
14
|
+
@object = @payment_method
|
15
|
+
set_current_store
|
16
|
+
invoke_callbacks(:create, :before)
|
17
|
+
if @payment_method.save
|
18
|
+
invoke_callbacks(:create, :after)
|
19
|
+
flash[:success] = Spree.t(:successfully_created, resource: Spree.t(:payment_method))
|
20
|
+
redirect_to location_after_create
|
21
|
+
else
|
22
|
+
invoke_callbacks(:create, :fails)
|
23
|
+
respond_with(@object) do |format|
|
24
|
+
format.html { render action: :new, status: :unprocessable_entity }
|
25
|
+
format.js { render layout: false, status: :unprocessable_entity }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# overrdie
|
31
|
+
# handling error response
|
32
|
+
def update
|
33
|
+
invoke_callbacks(:update, :before)
|
34
|
+
payment_method_type = params[:payment_method].delete(:type)
|
35
|
+
if @payment_method['type'].to_s != payment_method_type
|
36
|
+
@payment_method.update_columns(
|
37
|
+
type: payment_method_type,
|
38
|
+
updated_at: Time.current
|
39
|
+
)
|
40
|
+
@payment_method = scope.find(params[:id])
|
41
|
+
end
|
42
|
+
|
43
|
+
attributes = payment_method_params.merge(preferences_params)
|
44
|
+
attributes.each do |k, _v|
|
45
|
+
attributes.delete(k) if k.include?('password') && attributes[k].blank?
|
46
|
+
end
|
47
|
+
|
48
|
+
if @payment_method.update(attributes)
|
49
|
+
set_current_store
|
50
|
+
invoke_callbacks(:update, :after)
|
51
|
+
flash[:success] = Spree.t(:successfully_updated, resource: Spree.t(:payment_method))
|
52
|
+
redirect_to spree.edit_admin_payment_method_path(@payment_method)
|
53
|
+
else
|
54
|
+
invoke_callbacks(:update, :fails)
|
55
|
+
respond_with(@payment_method) do |format|
|
56
|
+
format.html { render :edit, status: :unprocessable_entity }
|
57
|
+
format.json { render json: @payment_method.errors.full_messages.to_sentence, status: :unprocessable_entity }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
Spree::Admin::PaymentMethodsController.prepend(Spree::Admin::PaymentMethodsControllerDecorator)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PaymentPaywayBaseController < Spree::Admin::BaseController
|
4
|
+
include Spree::Backend::Callbacks
|
5
|
+
|
6
|
+
before_action :load_payment, only: %i[show update]
|
7
|
+
# before_action :validate_order, only: [:update]
|
8
|
+
|
9
|
+
def validate_order
|
10
|
+
return unless @payment.order.completed?
|
11
|
+
|
12
|
+
flash[:error] = Spree.t('vpago.payments.not_allow_for_order_completed')
|
13
|
+
redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
14
|
+
end
|
15
|
+
|
16
|
+
def load_payment
|
17
|
+
@payment = Payment.find_by!(number: params[:id])
|
18
|
+
end
|
19
|
+
|
20
|
+
def model_class
|
21
|
+
Spree::Payment
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PaymentPaywayCheckersController < PaymentPaywayBaseController
|
4
|
+
include Spree::Backend::Callbacks
|
5
|
+
|
6
|
+
def update
|
7
|
+
options = {
|
8
|
+
updated_by_user_id: try_spree_current_user.id,
|
9
|
+
updated_reason: Spree.t('vpago.payments.checker_updated_by_description')
|
10
|
+
}
|
11
|
+
spree_updater = payment_request_update_service.new(@payment, options)
|
12
|
+
spree_updater.call
|
13
|
+
|
14
|
+
@payment.reload
|
15
|
+
|
16
|
+
if @payment.order.completed?
|
17
|
+
flash[:success] = Spree.t(:successfully_updated, resource: Spree.t(:payments))
|
18
|
+
else
|
19
|
+
flash[:error] = Spree.t(:unsuccessfully_updated, resource: Spree.t(:payments))
|
20
|
+
end
|
21
|
+
|
22
|
+
redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
23
|
+
end
|
24
|
+
|
25
|
+
def payment_request_update_service
|
26
|
+
if @payment.payment_method.type_payway_v2?
|
27
|
+
Vpago::PaywayV2::PaymentRequestUpdater
|
28
|
+
elsif @payment.payment_method.type_payway?
|
29
|
+
Vpago::Payway::PaymentRequestUpdater
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PaymentPaywayMarkersController < PaymentPaywayBaseController
|
4
|
+
include Spree::Backend::Callbacks
|
5
|
+
|
6
|
+
def update
|
7
|
+
reason = params[:updated_reason]&.strip
|
8
|
+
|
9
|
+
if reason.blank?
|
10
|
+
flash[:error] = Spree.t('vpago.payments.failed_require_updated_reason')
|
11
|
+
return redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
12
|
+
end
|
13
|
+
|
14
|
+
options = {
|
15
|
+
updated_by_user_id: try_spree_current_user.id,
|
16
|
+
updated_reason: reason,
|
17
|
+
status: true,
|
18
|
+
description: 'vpago.payments.mark_with_reason'
|
19
|
+
}
|
20
|
+
|
21
|
+
spree_updater = status_marker_service.new(@payment, options)
|
22
|
+
spree_updater.call
|
23
|
+
|
24
|
+
@payment.reload
|
25
|
+
|
26
|
+
if @payment.order.completed?
|
27
|
+
flash[:success] = Spree.t(:successfully_updated, resource: Spree.t(:payments))
|
28
|
+
else
|
29
|
+
flash[:error] = Spree.t(:unsuccessfully_updated, resource: Spree.t(:payments))
|
30
|
+
end
|
31
|
+
|
32
|
+
redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
33
|
+
end
|
34
|
+
|
35
|
+
def status_marker_service
|
36
|
+
if @payment.payment_method.type_payway_v2?
|
37
|
+
Vpago::PaymentStatusMarker
|
38
|
+
elsif @payment.payment_method.type_payway?
|
39
|
+
Vpago::Payway::PaymentStatusMarker
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PaymentPaywayQueriersController < PaymentPaywayBaseController
|
4
|
+
include Spree::Backend::Callbacks
|
5
|
+
around_action :set_writing_role, only: %i[show]
|
6
|
+
|
7
|
+
def show
|
8
|
+
tran_status = transaction_status_service.new(@payment)
|
9
|
+
tran_status.call
|
10
|
+
|
11
|
+
if tran_status.success?
|
12
|
+
@payment.update_column(:gateway_status, true)
|
13
|
+
flash[:success] =
|
14
|
+
Spree.t('vpago.payments.payment_found_with_result', result: tran_status.json_response)
|
15
|
+
else
|
16
|
+
flash[:error] = Spree.t('vpago.payments.payment_not_found_with_error', error: tran_status.error_message)
|
17
|
+
end
|
18
|
+
|
19
|
+
redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
20
|
+
end
|
21
|
+
|
22
|
+
def transaction_status_service
|
23
|
+
if @payment.payment_method.type_payway_v2?
|
24
|
+
Vpago::PaywayV2::TransactionStatus
|
25
|
+
elsif @payment.payment_method.type_payway?
|
26
|
+
Vpago::Payway::TransactionStatus
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def set_writing_role
|
33
|
+
ActiveRecord::Base.connected_to(role: :writing) do
|
34
|
+
yield if block_given?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PaymentWingSdkBaseController < Spree::Admin::BaseController
|
4
|
+
include Spree::Backend::Callbacks
|
5
|
+
|
6
|
+
before_action :load_payment, only: %i[show update]
|
7
|
+
before_action :validate_order, only: [:update]
|
8
|
+
|
9
|
+
def validate_order
|
10
|
+
if @payment.order.completed?
|
11
|
+
flash[:error] = Spree.t('vpago.payments.not_allow_for_order_completed')
|
12
|
+
redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def load_payment
|
17
|
+
@payment = Payment.find_by!(number: params[:id])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PaymentWingSdkCheckersController < PaymentWingSdkBaseController
|
4
|
+
include Spree::Backend::Callbacks
|
5
|
+
|
6
|
+
def update
|
7
|
+
options = {
|
8
|
+
updated_by_user_id: try_spree_current_user.id,
|
9
|
+
updated_reason: Spree.t('vpago.payments.checker_updated_by_description')
|
10
|
+
}
|
11
|
+
spree_updater = Vpago::WingSdk::PaymentRequestUpdater.new(@payment, options)
|
12
|
+
spree_updater.call
|
13
|
+
|
14
|
+
@payment.reload
|
15
|
+
|
16
|
+
if @payment.order.completed?
|
17
|
+
flash[:success] = Spree.t(:successfully_updated, resource: Spree.t(:payments))
|
18
|
+
else
|
19
|
+
flash[:error] = Spree.t(:unsuccessfully_updated, resource: Spree.t(:payments))
|
20
|
+
end
|
21
|
+
|
22
|
+
redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PaymentWingSdkMarkersController < PaymentWingSdkBaseController
|
4
|
+
include Spree::Backend::Callbacks
|
5
|
+
|
6
|
+
def update
|
7
|
+
reason = params[:updated_reason]&.strip
|
8
|
+
|
9
|
+
if reason.blank?
|
10
|
+
flash[:error] = Spree.t('vpago.payments.failed_require_updated_reason')
|
11
|
+
return redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
12
|
+
end
|
13
|
+
|
14
|
+
options = {
|
15
|
+
updated_by_user_id: try_spree_current_user.id,
|
16
|
+
updated_reason: reason,
|
17
|
+
status: true,
|
18
|
+
description: 'vpago.payments.mark_with_reason'
|
19
|
+
}
|
20
|
+
|
21
|
+
spree_updater = Vpago::PaymentStatusMarker.new(@payment, options)
|
22
|
+
spree_updater.call
|
23
|
+
|
24
|
+
@payment.reload
|
25
|
+
|
26
|
+
if @payment.order.completed?
|
27
|
+
flash[:success] = Spree.t(:successfully_updated, resource: Spree.t(:payments))
|
28
|
+
else
|
29
|
+
flash[:error] = Spree.t(:unsuccessfully_updated, resource: Spree.t(:payments))
|
30
|
+
end
|
31
|
+
|
32
|
+
redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PaymentWingSdkQueriersController < PaymentWingSdkBaseController
|
4
|
+
include Spree::Backend::Callbacks
|
5
|
+
|
6
|
+
def show
|
7
|
+
tran_status = Vpago::WingSdk::TransactionStatusChecker.new(@payment)
|
8
|
+
tran_status.call
|
9
|
+
|
10
|
+
if tran_status.success?
|
11
|
+
flash[:success] = Spree.t('vpago.payments.payment_found_with_result', result: tran_status.result)
|
12
|
+
else
|
13
|
+
flash[:error] = Spree.t('vpago.payments.payment_not_found_with_error', error: tran_status.error_message)
|
14
|
+
end
|
15
|
+
|
16
|
+
redirect_to admin_order_payment_path(order_id: @payment.order.number, id: @payment.number)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
module PaymentsControllerDecorator
|
4
|
+
def self.prepended(base)
|
5
|
+
base.before_action :set_vpago_payment_source, only: %i[create update]
|
6
|
+
end
|
7
|
+
|
8
|
+
def set_vpago_payment_source
|
9
|
+
payment_method ||= Spree::PaymentMethod.find(params[:payment][:payment_method_id])
|
10
|
+
return unless payment_method.vpago_payment?
|
11
|
+
|
12
|
+
source_params = { payment_option: payment_method.preferred_payment_option }
|
13
|
+
params[:payment][:source_attributes] = source_params
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Spree::Admin::PaymentsController.prepend(Spree::Admin::PaymentsControllerDecorator)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PayoutProfileProductsController < Spree::Admin::ResourceController
|
4
|
+
before_action :redirect_to_object, only: [:index]
|
5
|
+
|
6
|
+
belongs_to 'spree/product', find_by: :slug
|
7
|
+
|
8
|
+
def redirect_to_object
|
9
|
+
if parent.payout_profile_products.any?
|
10
|
+
redirect_to edit_object_url(parent.payout_profile_products.first)
|
11
|
+
else
|
12
|
+
redirect_to new_object_url
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def model_class
|
17
|
+
Spree::PayoutProfileProduct
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PayoutProfileShippingMethodsController < Spree::Admin::ResourceController
|
4
|
+
before_action :redirect_to_object, only: [:index]
|
5
|
+
|
6
|
+
belongs_to 'spree/shipping_method'
|
7
|
+
|
8
|
+
def redirect_to_object
|
9
|
+
if parent.payout_profile_shipping_methods.any?
|
10
|
+
redirect_to edit_object_url(parent.payout_profile_shipping_methods.first)
|
11
|
+
else
|
12
|
+
redirect_to new_object_url
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def model_class
|
17
|
+
Spree::PayoutProfileShippingMethod
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PayoutProfilesController < Spree::Admin::ResourceController
|
4
|
+
before_action :load_types
|
5
|
+
|
6
|
+
skip_before_action :load_resource, only: %i[index verify_with_bank]
|
7
|
+
|
8
|
+
create.after :reset_verification
|
9
|
+
update.after :reset_verification
|
10
|
+
|
11
|
+
update.after :save_defaults!
|
12
|
+
create.after :save_defaults!
|
13
|
+
|
14
|
+
# when updated, active must be false.
|
15
|
+
# call verify_with_bank to reactivate with bank.
|
16
|
+
def reset_verification
|
17
|
+
@object.reset_verification!
|
18
|
+
end
|
19
|
+
|
20
|
+
def save_defaults!
|
21
|
+
instance = Spree::PayoutProfile.find(@object.id)
|
22
|
+
|
23
|
+
instance.default = Spree::Store.default.name == instance.name
|
24
|
+
instance.set_default_preferences if instance.respond_to?(:set_default_preferences)
|
25
|
+
instance.save!
|
26
|
+
end
|
27
|
+
|
28
|
+
def load_types
|
29
|
+
@types = ['Spree::PayoutProfiles::PaywayV2']
|
30
|
+
end
|
31
|
+
|
32
|
+
def verify_with_bank
|
33
|
+
@object = Spree::PayoutProfile.find(params[:id])
|
34
|
+
|
35
|
+
instance = if @object.registered_in_bank?
|
36
|
+
request_updater.new(@object)
|
37
|
+
else
|
38
|
+
request_creator.new(@object)
|
39
|
+
end
|
40
|
+
|
41
|
+
if instance.call
|
42
|
+
flash[:success] = flash_message_for(@object, :successfully_updated)
|
43
|
+
else
|
44
|
+
flash[:error] = instance.error_messages.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
redirect_to edit_object_url(@object)
|
48
|
+
end
|
49
|
+
|
50
|
+
def request_updater
|
51
|
+
::Vpago::PayoutProfiles::Payway::PayoutProfileRequestUpdater
|
52
|
+
end
|
53
|
+
|
54
|
+
def request_creator
|
55
|
+
::Vpago::PayoutProfiles::Payway::PayoutProfileRequestCreator
|
56
|
+
end
|
57
|
+
|
58
|
+
def index
|
59
|
+
@search = Spree::PayoutProfile.ransack(params[:q])
|
60
|
+
@payout_profiles = @search.result.page(page).per(per_page).order(default: :desc)
|
61
|
+
end
|
62
|
+
|
63
|
+
# override
|
64
|
+
def location_after_save
|
65
|
+
edit_object_url(@object)
|
66
|
+
end
|
67
|
+
|
68
|
+
# override
|
69
|
+
# permit all attributes for now.
|
70
|
+
def permitted_resource_params
|
71
|
+
key = ActiveModel::Naming.param_key(@object)
|
72
|
+
permit_keys = params.require(key).keys
|
73
|
+
|
74
|
+
params.require(key).permit(permit_keys)
|
75
|
+
end
|
76
|
+
|
77
|
+
# override
|
78
|
+
def model_class
|
79
|
+
Spree::PayoutProfile
|
80
|
+
end
|
81
|
+
|
82
|
+
def page
|
83
|
+
params[:page] || 1
|
84
|
+
end
|
85
|
+
|
86
|
+
def per_page
|
87
|
+
params[:per_page] || 12
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class PayoutsController < Spree::Admin::ResourceController
|
4
|
+
belongs_to 'spree/order', find_by: :number
|
5
|
+
|
6
|
+
skip_before_action :load_resource
|
7
|
+
|
8
|
+
def index
|
9
|
+
@payouts = parent.payouts
|
10
|
+
.order(:created_at)
|
11
|
+
.where(state: params[:state] || 'confirmed')
|
12
|
+
.includes(:payoutable, :payout_profile, payment: :order)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
module CheckoutControllerDecorator
|
6
|
+
def self.prepended(base)
|
7
|
+
base.skip_before_action :ensure_order, only: [:request_update_payment]
|
8
|
+
end
|
9
|
+
|
10
|
+
# override
|
11
|
+
def create_payment_service
|
12
|
+
Vpago::Payments::FindOrCreate
|
13
|
+
end
|
14
|
+
|
15
|
+
# This API are deprecated
|
16
|
+
# :order_token, :payment_number
|
17
|
+
def request_update_payment
|
18
|
+
# this action is mostly called after order is completed.
|
19
|
+
# spree_current_order will be nil in this case, so we need to manual find.
|
20
|
+
order = find_order_by_token(params[:order_token])
|
21
|
+
|
22
|
+
if order.paid?
|
23
|
+
render_serialized_payload { serialize_resource(order) }
|
24
|
+
else
|
25
|
+
payment = find_payment(order, params[:payment_number])
|
26
|
+
context = payment.request_update
|
27
|
+
|
28
|
+
if context.success? && context.error_message.blank?
|
29
|
+
render_serialized_payload { serialize_resource(order) }
|
30
|
+
else
|
31
|
+
render_error_payload(context.error_message)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# This API are deprecated
|
37
|
+
def payment_redirect
|
38
|
+
payments = spree_current_order.payments
|
39
|
+
raise ActiveRecord::RecordNotFound if payments.blank?
|
40
|
+
|
41
|
+
last_payment = payments.last
|
42
|
+
payment_redirect = ::Vpago::PaymentRedirectHandler.new(
|
43
|
+
payment: last_payment,
|
44
|
+
override_return_deeplink_url: params[:override_return_deeplink_url]
|
45
|
+
).process
|
46
|
+
|
47
|
+
if payment_redirect.error_message.blank?
|
48
|
+
render_serialized_payload do
|
49
|
+
payment_redirect_serializer.new(payment_redirect, params: serializer_params).serializable_hash
|
50
|
+
end
|
51
|
+
else
|
52
|
+
render_error_payload(payment_redirect.error_message)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def payment_redirect_serializer
|
57
|
+
Spree::V2::Storefront::PaymentRedirectSerializer
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def find_payment(order, payment_number)
|
63
|
+
payment = order.payments.find_by(number: payment_number)
|
64
|
+
|
65
|
+
raise ActiveRecord::RecordNotFound if payment.nil?
|
66
|
+
|
67
|
+
payment
|
68
|
+
end
|
69
|
+
|
70
|
+
def find_order_by_token(token)
|
71
|
+
order = Spree::Order.find_by(token: token)
|
72
|
+
|
73
|
+
raise ActiveRecord::RecordNotFound if order.nil?
|
74
|
+
raise ActiveRecord::RecordNotFound if order.payments.blank?
|
75
|
+
|
76
|
+
order
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
Spree::Api::V2::Storefront::CheckoutController.prepend(Spree::Api::V2::Storefront::CheckoutControllerDecorator)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spree
|
2
|
+
class PaywayCardPopupsController < ApplicationController
|
3
|
+
layout 'payway'
|
4
|
+
before_action :load_payment, only: [:show]
|
5
|
+
|
6
|
+
def show
|
7
|
+
if @payment.present?
|
8
|
+
options = {
|
9
|
+
app_checkout: true
|
10
|
+
}
|
11
|
+
|
12
|
+
@client_redirect = ::Vpago::Payway::Checkout.new(@payment, options)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def load_payment
|
17
|
+
@payment = ::Spree::Payment.find_by(number: params[:payment_number])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spree
|
2
|
+
class PaywayV2CardPopupsController < ApplicationController
|
3
|
+
layout 'payway_v2'
|
4
|
+
before_action :load_payment, only: [:show]
|
5
|
+
|
6
|
+
def show
|
7
|
+
if @payment.present?
|
8
|
+
options = {
|
9
|
+
app_checkout: true
|
10
|
+
}
|
11
|
+
|
12
|
+
@client_redirect = ::Vpago::PaywayV2::Checkout.new(@payment, options)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def load_payment
|
17
|
+
@payment = ::Spree::Payment.find_by(number: params[:payment_number])
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|