solidus_core 4.1.6 → 4.5.1
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 +4 -4
- data/app/assets/images/logo/solidus.svg +18 -1
- data/app/assets/images/logo/solidus_logo.png +0 -0
- data/app/helpers/spree/base_helper.rb +2 -2
- data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
- data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
- data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
- data/app/helpers/spree/core/controller_helpers/pricing.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
- data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
- data/app/mailers/spree/base_mailer.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +1 -1
- data/app/mailers/spree/order_mailer.rb +3 -3
- data/app/mailers/spree/reimbursement_mailer.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
- data/app/models/concerns/spree/display_money.rb +1 -1
- data/app/models/concerns/spree/metadata.rb +64 -0
- data/app/models/concerns/spree/named_type.rb +2 -0
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/user_address_book.rb +8 -9
- data/app/models/concerns/spree/user_methods.rb +3 -3
- data/app/models/spree/address.rb +10 -8
- data/app/models/spree/adjustment.rb +15 -65
- data/app/models/spree/adjustment_reason.rb +2 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
- data/app/models/spree/carton.rb +2 -2
- data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
- data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
- data/app/models/spree/core/state_machines/order.rb +42 -0
- data/app/models/spree/core/state_machines/payment.rb +61 -0
- data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
- data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
- data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
- data/app/models/spree/core/state_machines/shipment.rb +58 -0
- data/app/models/spree/credit_card.rb +12 -9
- data/app/models/spree/customer_return.rb +2 -0
- data/app/models/spree/deprecated_configurable_class.rb +40 -0
- data/app/models/spree/fulfilment_changer.rb +4 -4
- data/app/models/spree/inventory_unit.rb +2 -2
- data/app/models/spree/item_total.rb +28 -0
- data/app/models/spree/legacy_user.rb +1 -0
- data/app/models/spree/line_item.rb +22 -4
- data/app/models/spree/money.rb +120 -0
- data/app/models/spree/null_promotion_adjuster.rb +13 -0
- data/app/models/spree/null_promotion_advertiser.rb +9 -0
- data/app/models/spree/null_promotion_finder.rb +9 -0
- data/app/models/spree/null_promotion_handler.rb +44 -0
- data/app/models/spree/option_value.rb +1 -0
- data/app/models/spree/order.rb +54 -36
- data/app/models/spree/order_cancellations.rb +8 -8
- data/app/models/spree/order_inventory.rb +6 -4
- data/app/models/spree/order_merger.rb +1 -1
- data/app/models/spree/order_mutex.rb +2 -2
- data/app/models/spree/order_shipping.rb +9 -9
- data/app/models/spree/order_taxation.rb +1 -0
- data/app/models/spree/order_updater.rb +19 -40
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment.rb +3 -2
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +14 -9
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +12 -6
- data/app/models/spree/payment_method/store_credit.rb +1 -1
- data/app/models/spree/payment_method.rb +3 -1
- data/app/models/spree/payment_source.rb +5 -1
- data/app/models/spree/permission_set.rb +11 -0
- data/app/models/spree/permission_sets/base.rb +45 -0
- data/app/models/spree/permission_sets/configuration_display.rb +53 -0
- data/app/models/spree/permission_sets/configuration_management.rb +52 -0
- data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
- data/app/models/spree/permission_sets/default_customer.rb +83 -0
- data/app/models/spree/permission_sets/order_display.rb +50 -0
- data/app/models/spree/permission_sets/order_management.rb +50 -0
- data/app/models/spree/permission_sets/product_display.rb +43 -0
- data/app/models/spree/permission_sets/product_management.rb +47 -0
- data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
- data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
- data/app/models/spree/permission_sets/stock_display.rb +26 -0
- data/app/models/spree/permission_sets/stock_management.rb +26 -0
- data/app/models/spree/permission_sets/super_user.rb +26 -0
- data/app/models/spree/permission_sets/user_display.rb +27 -0
- data/app/models/spree/permission_sets/user_management.rb +44 -0
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/product.rb +13 -9
- data/app/models/spree/refund.rb +3 -1
- data/app/models/spree/refund_reason.rb +6 -1
- data/app/models/spree/reimbursement.rb +4 -4
- data/app/models/spree/reimbursement_performer.rb +3 -3
- data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
- data/app/models/spree/reimbursement_type/credit.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
- data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +6 -1
- data/app/models/spree/return_authorization.rb +2 -0
- data/app/models/spree/return_item.rb +10 -10
- data/app/models/spree/return_reason.rb +6 -1
- data/app/models/spree/role.rb +3 -1
- data/app/models/spree/role_permission.rb +8 -0
- data/app/models/spree/shipment.rb +9 -7
- data/app/models/spree/shipping_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +2 -3
- data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +8 -12
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
- data/app/models/spree/stock/package.rb +2 -2
- data/app/models/spree/stock/simple_coordinator.rb +36 -22
- data/app/models/spree/stock_item.rb +1 -0
- data/app/models/spree/stock_location.rb +5 -5
- data/app/models/spree/store.rb +3 -1
- data/app/models/spree/store_credit.rb +17 -15
- data/app/models/spree/store_credit_event.rb +4 -3
- data/app/models/spree/store_credit_reason.rb +6 -1
- data/app/models/spree/store_selector/by_server_name.rb +1 -1
- data/app/models/spree/tax/tax_helpers.rb +12 -1
- data/app/models/spree/tax_calculator/default.rb +3 -3
- data/app/models/spree/tax_calculator/shipping_rate.rb +1 -1
- data/app/models/spree/tax_category.rb +3 -1
- data/app/models/spree/tax_rate.rb +7 -3
- data/app/models/spree/taxon.rb +22 -2
- data/app/models/spree/taxon_brand_selector.rb +22 -0
- data/app/models/spree/taxonomy.rb +2 -2
- data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
- data/app/models/spree/unit_cancel.rb +1 -2
- data/app/models/spree/user_address.rb +9 -3
- data/app/models/spree/variant/scopes.rb +4 -0
- data/app/models/spree/variant/vat_price_generator.rb +1 -1
- data/app/models/spree/variant.rb +21 -8
- data/app/models/spree/wallet.rb +2 -2
- data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
- data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
- data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
- data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
- data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
- data/config/locales/en.yml +33 -90
- data/db/default/spree/permission_sets.rb +10 -0
- data/db/default/spree/return_reasons.rb +3 -1
- data/db/default/spree/states.rb +1 -1
- data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
- data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
- data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +1 -1
- data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
- data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
- data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
- data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
- data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
- data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
- data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
- data/db/seeds.rb +1 -0
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +0 -5
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/solidus/install/install_generator.rb +64 -15
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -12
- data/lib/generators/solidus/update/update_generator.rb +1 -1
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -1
- data/lib/generators/spree/dummy/templates/rails/database.yml +41 -93
- data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
- data/lib/spree/app_configuration.rb +102 -67
- data/lib/spree/core/class_constantizer.rb +2 -2
- data/lib/spree/core/controller_helpers/auth.rb +5 -61
- data/lib/spree/core/controller_helpers/common.rb +5 -80
- data/lib/spree/core/controller_helpers/order.rb +5 -86
- data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -163
- data/lib/spree/core/controller_helpers/pricing.rb +5 -17
- data/lib/spree/core/controller_helpers/search.rb +5 -14
- data/lib/spree/core/controller_helpers/store.rb +5 -17
- data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
- data/lib/spree/core/engine.rb +13 -5
- data/lib/spree/core/environment/calculators.rb +35 -3
- data/lib/spree/core/environment/promotions.rb +25 -4
- data/lib/spree/core/environment_extension.rb +16 -2
- data/lib/spree/core/importer/order.rb +5 -5
- data/lib/spree/core/importer/product.rb +3 -3
- data/lib/spree/core/nested_class_set.rb +28 -0
- data/lib/spree/core/null_promotion_configuration.rb +84 -0
- data/lib/spree/core/product_filters.rb +1 -1
- data/lib/spree/core/search/variant.rb +2 -2
- data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
- data/lib/spree/core/state_machines/order.rb +5 -251
- data/lib/spree/core/state_machines/payment.rb +5 -59
- data/lib/spree/core/state_machines/reimbursement.rb +5 -31
- data/lib/spree/core/state_machines/return_authorization.rb +5 -30
- data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
- data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
- data/lib/spree/core/state_machines/shipment.rb +5 -56
- data/lib/spree/core/state_machines.rb +48 -81
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +2 -14
- data/lib/spree/deprecator.rb +9 -0
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/mailer_previews/carton_preview.rb +1 -1
- data/lib/spree/money.rb +5 -118
- data/lib/spree/permission_sets/base.rb +5 -30
- data/lib/spree/permission_sets/configuration_display.rb +5 -41
- data/lib/spree/permission_sets/configuration_management.rb +5 -40
- data/lib/spree/permission_sets/dashboard_display.rb +5 -14
- data/lib/spree/permission_sets/default_customer.rb +5 -71
- data/lib/spree/permission_sets/order_display.rb +5 -38
- data/lib/spree/permission_sets/order_management.rb +5 -38
- data/lib/spree/permission_sets/product_display.rb +5 -31
- data/lib/spree/permission_sets/product_management.rb +5 -35
- data/lib/spree/permission_sets/restricted_stock_display.rb +5 -21
- data/lib/spree/permission_sets/restricted_stock_management.rb +5 -21
- data/lib/spree/permission_sets/stock_display.rb +5 -14
- data/lib/spree/permission_sets/stock_management.rb +5 -14
- data/lib/spree/permission_sets/super_user.rb +5 -14
- data/lib/spree/permission_sets/user_display.rb +5 -15
- data/lib/spree/permission_sets/user_management.rb +5 -32
- data/lib/spree/permission_sets.rb +5 -18
- data/lib/spree/permitted_attributes.rb +21 -9
- data/lib/spree/preferences/configuration.rb +4 -0
- data/lib/spree/preferences/persistable.rb +7 -1
- data/lib/spree/preferences/store.rb +2 -2
- data/lib/spree/testing_support/capybara_ext.rb +11 -1
- data/lib/spree/testing_support/common_rake.rb +1 -0
- data/lib/spree/testing_support/dummy_ability.rb +7 -0
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
- data/lib/spree/testing_support/dummy_app/database.yml +37 -46
- data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -6
- data/lib/spree/testing_support/dummy_app.rb +33 -19
- data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -2
- data/lib/spree/testing_support/factories/calculator_factory.rb +1 -5
- data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +3 -3
- data/lib/spree/testing_support/factories/order_factory.rb +13 -24
- data/lib/spree/testing_support/factories/product_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -1
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +3 -3
- data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
- data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
- data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
- data/lib/tasks/colorado_delivery_fee.rake +2 -2
- data/solidus_core.gemspec +7 -10
- metadata +107 -109
- data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
- data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
- data/app/models/spree/calculator/distributed_amount.rb +0 -33
- data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
- data/app/models/spree/calculator/flexi_rate.rb +0 -22
- data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
- data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
- data/app/models/spree/calculator/tiered_percent.rb +0 -62
- data/app/models/spree/line_item_action.rb +0 -8
- data/app/models/spree/order_promotion.rb +0 -27
- data/app/models/spree/promotion/actions/create_adjustment.rb +0 -81
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -98
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
- data/app/models/spree/promotion/actions/free_shipping.rb +0 -59
- data/app/models/spree/promotion/order_adjustments_recalculator.rb +0 -92
- data/app/models/spree/promotion/rules/first_order.rb +0 -38
- data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
- data/app/models/spree/promotion/rules/item_total.rb +0 -86
- data/app/models/spree/promotion/rules/nth_order.rb +0 -45
- data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
- data/app/models/spree/promotion/rules/option_value.rb +0 -50
- data/app/models/spree/promotion/rules/product.rb +0 -86
- data/app/models/spree/promotion/rules/store.rb +0 -26
- data/app/models/spree/promotion/rules/taxon.rb +0 -91
- data/app/models/spree/promotion/rules/user.rb +0 -34
- data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
- data/app/models/spree/promotion/rules/user_role.rb +0 -45
- data/app/models/spree/promotion.rb +0 -271
- data/app/models/spree/promotion_action.rb +0 -47
- data/app/models/spree/promotion_category.rb +0 -8
- data/app/models/spree/promotion_chooser.rb +0 -34
- data/app/models/spree/promotion_code/batch_builder.rb +0 -64
- data/app/models/spree/promotion_code.rb +0 -54
- data/app/models/spree/promotion_code_batch.rb +0 -27
- data/app/models/spree/promotion_handler/cart.rb +0 -75
- data/app/models/spree/promotion_handler/coupon.rb +0 -123
- data/app/models/spree/promotion_handler/page.rb +0 -26
- data/app/models/spree/promotion_handler/shipping.rb +0 -61
- data/app/models/spree/promotion_rule.rb +0 -55
- data/app/models/spree/promotion_rule_role.rb +0 -8
- data/app/models/spree/promotion_rule_store.rb +0 -10
- data/app/models/spree/promotion_rule_taxon.rb +0 -8
- data/app/models/spree/promotion_rule_user.rb +0 -10
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
- data/bin/rails +0 -13
- data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
- data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
- data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
- data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
- data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +0 -20
- data/db/migrate/20230322085416_remove_match_policy_from_spree_promotion.rb +0 -5
- data/db/migrate/20230325132905_remove_unused_columns_from_promotion_rules.rb +0 -6
- data/db/migrate/20230325161633_drop_unused_promo_action_line_items.rb +0 -13
- data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
- data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
- data/lib/spree/permission_sets/promotion_display.rb +0 -25
- data/lib/spree/permission_sets/promotion_management.rb +0 -25
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -7
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_factory.rb +0 -98
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
class NullPromotionHandler
|
5
|
+
attr_reader :order, :coupon_code
|
6
|
+
|
7
|
+
def initialize(order)
|
8
|
+
@order = order
|
9
|
+
@coupon_code = order.coupon_code&.downcase
|
10
|
+
end
|
11
|
+
|
12
|
+
def activate
|
13
|
+
@order
|
14
|
+
end
|
15
|
+
|
16
|
+
def apply
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def can_apply?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def error
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def success
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
def successful?
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
36
|
+
def status_code
|
37
|
+
:coupon_code_applied
|
38
|
+
end
|
39
|
+
|
40
|
+
def status
|
41
|
+
I18n.t(:coupon_code_applied, scope: [:spree, :null_promotion_handler])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -17,6 +17,7 @@ module Spree
|
|
17
17
|
delegate :name, :presentation, to: :option_type, prefix: :option_type
|
18
18
|
|
19
19
|
self.allowed_ransackable_attributes = %w[name presentation]
|
20
|
+
self.allowed_ransackable_associations = %w[variants]
|
20
21
|
|
21
22
|
# Updates the updated_at column on all the variants associated with this
|
22
23
|
# option value.
|
data/app/models/spree/order.rb
CHANGED
@@ -26,6 +26,7 @@ module Spree
|
|
26
26
|
include ::Spree::Config.state_machines.order
|
27
27
|
|
28
28
|
include Spree::Order::Payments
|
29
|
+
include Metadata
|
29
30
|
|
30
31
|
class InsufficientStock < StandardError
|
31
32
|
attr_reader :items
|
@@ -62,7 +63,7 @@ module Spree
|
|
62
63
|
go_to_state :confirm
|
63
64
|
end
|
64
65
|
|
65
|
-
self.allowed_ransackable_associations = %w[shipments user
|
66
|
+
self.allowed_ransackable_associations = %w[shipments user bill_address ship_address line_items]
|
66
67
|
self.allowed_ransackable_attributes = %w[completed_at created_at email number state payment_state shipment_state total store_id]
|
67
68
|
|
68
69
|
attr_reader :coupon_code
|
@@ -72,11 +73,15 @@ module Spree
|
|
72
73
|
|
73
74
|
# Customer info
|
74
75
|
belongs_to :user, class_name: Spree::UserClassHandle.new, optional: true
|
76
|
+
|
75
77
|
belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address', optional: true
|
76
|
-
|
78
|
+
alias_method :billing_address, :bill_address
|
79
|
+
alias_method :billing_address=, :bill_address=
|
77
80
|
|
78
81
|
belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address', optional: true
|
79
|
-
|
82
|
+
alias_method :shipping_address, :ship_address
|
83
|
+
alias_method :shipping_address=, :ship_address=
|
84
|
+
|
80
85
|
alias_attribute :ship_total, :shipment_total
|
81
86
|
|
82
87
|
belongs_to :store, class_name: 'Spree::Store', optional: true
|
@@ -104,8 +109,6 @@ module Spree
|
|
104
109
|
foreign_key: :order_id,
|
105
110
|
dependent: :destroy,
|
106
111
|
inverse_of: :order
|
107
|
-
has_many :order_promotions, class_name: 'Spree::OrderPromotion'
|
108
|
-
has_many :promotions, through: :order_promotions
|
109
112
|
|
110
113
|
# Payments
|
111
114
|
has_many :payments, dependent: :destroy, inverse_of: :order
|
@@ -135,7 +138,9 @@ module Spree
|
|
135
138
|
before_validation :set_currency
|
136
139
|
before_validation :generate_order_number, on: :create
|
137
140
|
before_validation :assign_billing_to_shipping_address, if: :use_billing?
|
141
|
+
before_validation :assign_shipping_to_billing_address, if: :use_shipping?
|
138
142
|
attr_accessor :use_billing
|
143
|
+
attr_accessor :use_shipping
|
139
144
|
|
140
145
|
before_create :create_token
|
141
146
|
before_create :link_by_email
|
@@ -159,8 +164,24 @@ module Spree
|
|
159
164
|
delegate :name, to: :bill_address, prefix: true, allow_nil: true
|
160
165
|
alias_method :billing_name, :bill_address_name
|
161
166
|
|
162
|
-
|
163
|
-
|
167
|
+
delegate :line_item_comparison_hooks, to: :class
|
168
|
+
class << self
|
169
|
+
def line_item_comparison_hooks=(value)
|
170
|
+
Spree::Config.line_item_comparison_hooks = value.to_a
|
171
|
+
end
|
172
|
+
line_item_hooks_deprecation_msg = "Use Spree::Config.line_item_comparison_hooks instead."
|
173
|
+
deprecate :line_item_comparison_hooks= => line_item_hooks_deprecation_msg, :deprecator => Spree.deprecator
|
174
|
+
|
175
|
+
def line_item_comparison_hooks
|
176
|
+
Spree::Config.line_item_comparison_hooks
|
177
|
+
end
|
178
|
+
deprecate line_item_comparison_hooks: line_item_hooks_deprecation_msg, deprecator: Spree.deprecator
|
179
|
+
|
180
|
+
def register_line_item_comparison_hook(hook)
|
181
|
+
Spree::Config.line_item_comparison_hooks << hook
|
182
|
+
end
|
183
|
+
deprecate register_line_item_comparison_hook: line_item_hooks_deprecation_msg, deprecator: Spree.deprecator
|
184
|
+
end
|
164
185
|
|
165
186
|
scope :created_between, ->(start_date, end_date) { where(created_at: start_date..end_date) }
|
166
187
|
scope :completed_between, ->(start_date, end_date) { where(completed_at: start_date..end_date) }
|
@@ -175,7 +196,7 @@ module Spree
|
|
175
196
|
end
|
176
197
|
|
177
198
|
def self.by_state(state)
|
178
|
-
where(state:
|
199
|
+
where(state:)
|
179
200
|
end
|
180
201
|
|
181
202
|
def self.complete
|
@@ -194,12 +215,6 @@ module Spree
|
|
194
215
|
where.not(state: 'canceled')
|
195
216
|
end
|
196
217
|
|
197
|
-
# Use this method in other gems that wish to register their own custom logic
|
198
|
-
# that should be called when determining if two line items are equal.
|
199
|
-
def self.register_line_item_comparison_hook(hook)
|
200
|
-
line_item_comparison_hooks.add(hook)
|
201
|
-
end
|
202
|
-
|
203
218
|
# For compatiblity with Calculator::PriceSack
|
204
219
|
def amount
|
205
220
|
line_items.sum(&:amount)
|
@@ -223,7 +238,7 @@ module Spree
|
|
223
238
|
end
|
224
239
|
|
225
240
|
def shipping_discount
|
226
|
-
shipment_adjustments.credit.
|
241
|
+
shipment_adjustments.credit.sum(:amount) * - 1
|
227
242
|
end
|
228
243
|
|
229
244
|
def to_param
|
@@ -271,6 +286,11 @@ module Spree
|
|
271
286
|
true
|
272
287
|
end
|
273
288
|
|
289
|
+
def assign_shipping_to_billing_address
|
290
|
+
self.bill_address = ship_address if ship_address
|
291
|
+
true
|
292
|
+
end
|
293
|
+
|
274
294
|
def allow_cancel?
|
275
295
|
return false unless completed? && state != 'canceled'
|
276
296
|
shipment_state.nil? || %w{ready backorder pending}.include?(shipment_state)
|
@@ -305,7 +325,7 @@ module Spree
|
|
305
325
|
|
306
326
|
if persisted?
|
307
327
|
# immediately persist the changes we just made, but don't use save since we might have an invalid address associated
|
308
|
-
self.class.unscoped.where(id:
|
328
|
+
self.class.unscoped.where(id:).update_all(attrs_to_set)
|
309
329
|
end
|
310
330
|
|
311
331
|
assign_attributes(attrs_to_set)
|
@@ -347,7 +367,7 @@ module Spree
|
|
347
367
|
def line_item_options_match(line_item, options)
|
348
368
|
return true unless options
|
349
369
|
|
350
|
-
line_item_comparison_hooks.all? { |hook|
|
370
|
+
Spree::Config.line_item_comparison_hooks.all? { |hook|
|
351
371
|
send(hook, line_item, options)
|
352
372
|
}
|
353
373
|
end
|
@@ -439,7 +459,7 @@ module Spree
|
|
439
459
|
line_items.destroy_all
|
440
460
|
adjustments.destroy_all
|
441
461
|
shipments.destroy_all
|
442
|
-
|
462
|
+
Spree::Bus.publish :order_emptied, order: self
|
443
463
|
|
444
464
|
recalculate
|
445
465
|
end
|
@@ -453,7 +473,7 @@ module Spree
|
|
453
473
|
end
|
454
474
|
|
455
475
|
def can_add_coupon?
|
456
|
-
Spree::
|
476
|
+
Spree::Config.promotions.coupon_code_handler_class.new(self).can_apply?
|
457
477
|
end
|
458
478
|
|
459
479
|
def shipped?
|
@@ -497,11 +517,6 @@ module Spree
|
|
497
517
|
end
|
498
518
|
end
|
499
519
|
|
500
|
-
def apply_shipping_promotions
|
501
|
-
Spree::PromotionHandler::Shipping.new(self).activate
|
502
|
-
recalculate
|
503
|
-
end
|
504
|
-
|
505
520
|
# Clean shipments and make order back to address state (or to whatever state
|
506
521
|
# is set by restart_checkout_flow in case of state machine modifications)
|
507
522
|
def check_shipments_and_restart_checkout
|
@@ -566,7 +581,7 @@ module Spree
|
|
566
581
|
|
567
582
|
def add_store_credit_payments
|
568
583
|
return if user.nil?
|
569
|
-
return if payments.store_credits.checkout.empty? && user.available_store_credit_total(currency:
|
584
|
+
return if payments.store_credits.checkout.empty? && user.available_store_credit_total(currency:).zero?
|
570
585
|
|
571
586
|
payments.store_credits.checkout.each(&:invalidate!)
|
572
587
|
|
@@ -577,7 +592,7 @@ module Spree
|
|
577
592
|
|
578
593
|
remaining_total = outstanding_balance - authorized_total
|
579
594
|
|
580
|
-
matching_store_credits = user.store_credits.where(currency:
|
595
|
+
matching_store_credits = user.store_credits.where(currency:)
|
581
596
|
|
582
597
|
if matching_store_credits.any?
|
583
598
|
payment_method = Spree::PaymentMethod::StoreCredit.first
|
@@ -589,7 +604,7 @@ module Spree
|
|
589
604
|
|
590
605
|
amount_to_take = [credit.amount_remaining, remaining_total].min
|
591
606
|
payments.create!(source: credit,
|
592
|
-
payment_method
|
607
|
+
payment_method:,
|
593
608
|
amount: amount_to_take,
|
594
609
|
state: 'checkout',
|
595
610
|
response_code: credit.generate_authorization_code)
|
@@ -613,13 +628,13 @@ module Spree
|
|
613
628
|
|
614
629
|
def covered_by_store_credit?
|
615
630
|
return false unless user
|
616
|
-
user.available_store_credit_total(currency:
|
631
|
+
user.available_store_credit_total(currency:) >= total
|
617
632
|
end
|
618
633
|
alias_method :covered_by_store_credit, :covered_by_store_credit?
|
619
634
|
|
620
635
|
def total_available_store_credit
|
621
636
|
return 0.0 unless user
|
622
|
-
user.available_store_credit_total(currency:
|
637
|
+
user.available_store_credit_total(currency:)
|
623
638
|
end
|
624
639
|
|
625
640
|
def order_total_after_store_credit
|
@@ -630,16 +645,16 @@ module Spree
|
|
630
645
|
if can_complete? || complete?
|
631
646
|
valid_store_credit_payments.to_a.sum(&:amount)
|
632
647
|
else
|
633
|
-
[total, user.try(:available_store_credit_total, currency:
|
648
|
+
[total, user.try(:available_store_credit_total, currency:) || 0.0].min
|
634
649
|
end
|
635
650
|
end
|
636
651
|
|
637
652
|
def display_total_applicable_store_credit
|
638
|
-
Spree::Money.new(-total_applicable_store_credit, { currency:
|
653
|
+
Spree::Money.new(-total_applicable_store_credit, { currency: })
|
639
654
|
end
|
640
655
|
|
641
656
|
def display_store_credit_remaining_after_capture
|
642
|
-
Spree::Money.new(total_available_store_credit - total_applicable_store_credit, { currency:
|
657
|
+
Spree::Money.new(total_available_store_credit - total_applicable_store_credit, { currency: })
|
643
658
|
end
|
644
659
|
|
645
660
|
def bill_address_attributes=(attributes)
|
@@ -788,10 +803,9 @@ module Spree
|
|
788
803
|
end
|
789
804
|
|
790
805
|
def ensure_promotions_eligible
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
if adjustment_changed
|
806
|
+
Spree::Config.promotions.order_adjuster_class.new(self).call
|
807
|
+
|
808
|
+
if promo_total_changed?
|
795
809
|
restart_checkout_flow
|
796
810
|
recalculate
|
797
811
|
errors.add(:base, I18n.t('spree.promotion_total_changed_before_complete'))
|
@@ -860,6 +874,10 @@ module Spree
|
|
860
874
|
use_billing.in?([true, 'true', '1'])
|
861
875
|
end
|
862
876
|
|
877
|
+
def use_shipping?
|
878
|
+
use_shipping.in?([true, 'true', '1'])
|
879
|
+
end
|
880
|
+
|
863
881
|
def set_currency
|
864
882
|
self.currency = Spree::Config[:currency] if self[:currency].nil?
|
865
883
|
end
|
@@ -36,7 +36,7 @@ class Spree::OrderCancellations
|
|
36
36
|
Spree::OrderMutex.with_lock!(@order) do
|
37
37
|
Spree::InventoryUnit.transaction do
|
38
38
|
inventory_units.each do |iu|
|
39
|
-
unit_cancels << short_ship_unit(iu, created_by:
|
39
|
+
unit_cancels << short_ship_unit(iu, created_by:)
|
40
40
|
end
|
41
41
|
|
42
42
|
update_shipped_shipments(inventory_units)
|
@@ -67,9 +67,9 @@ class Spree::OrderCancellations
|
|
67
67
|
|
68
68
|
Spree::OrderMutex.with_lock!(@order) do
|
69
69
|
unit_cancel = Spree::UnitCancel.create!(
|
70
|
-
inventory_unit
|
71
|
-
reason
|
72
|
-
created_by:
|
70
|
+
inventory_unit:,
|
71
|
+
reason:,
|
72
|
+
created_by:
|
73
73
|
)
|
74
74
|
|
75
75
|
inventory_unit.cancel!
|
@@ -89,8 +89,8 @@ class Spree::OrderCancellations
|
|
89
89
|
|
90
90
|
Spree::OrderMutex.with_lock!(@order) do
|
91
91
|
return_items = inventory_units.map(&:current_or_new_return_item)
|
92
|
-
reimbursement = Spree::Reimbursement.new(order: @order, return_items:
|
93
|
-
reimbursement.return_all(created_by:
|
92
|
+
reimbursement = Spree::Reimbursement.new(order: @order, return_items:)
|
93
|
+
reimbursement.return_all(created_by:)
|
94
94
|
end
|
95
95
|
|
96
96
|
reimbursement
|
@@ -100,9 +100,9 @@ class Spree::OrderCancellations
|
|
100
100
|
|
101
101
|
def short_ship_unit(inventory_unit, created_by: nil)
|
102
102
|
unit_cancel = Spree::UnitCancel.create!(
|
103
|
-
inventory_unit
|
103
|
+
inventory_unit:,
|
104
104
|
reason: Spree::UnitCancel::SHORT_SHIP,
|
105
|
-
created_by:
|
105
|
+
created_by:
|
106
106
|
)
|
107
107
|
unit_cancel.adjust!
|
108
108
|
inventory_unit.cancel!
|
@@ -61,10 +61,12 @@ module Spree
|
|
61
61
|
|
62
62
|
potential_shipments.detect do |shipment|
|
63
63
|
shipment.include?(variant)
|
64
|
-
end ||
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
end || begin
|
65
|
+
stock_items = variant.stock_items.sort_by(&:id) # cache stock items to avoid N+1
|
66
|
+
|
67
|
+
potential_shipments.detect do |shipment|
|
68
|
+
stock_item = stock_items.detect { |stock_item| stock_item.stock_location == shipment.stock_location }
|
69
|
+
stock_item.backorderable? || stock_item.count_on_hand >= quantity if stock_item
|
68
70
|
end
|
69
71
|
end || potential_shipments.detect do |shipment|
|
70
72
|
variant.stock_location_ids.include?(shipment.stock_location_id)
|
@@ -78,7 +78,7 @@ module Spree
|
|
78
78
|
def find_matching_line_item(other_order_line_item)
|
79
79
|
order.line_items.detect do |my_li|
|
80
80
|
my_li.variant == other_order_line_item.variant &&
|
81
|
-
|
81
|
+
Spree::Config.line_item_comparison_hooks.all? do |hook|
|
82
82
|
order.send(hook, my_li, other_order_line_item.serializable_hash)
|
83
83
|
end
|
84
84
|
end
|
@@ -16,10 +16,10 @@ module Spree
|
|
16
16
|
raise ArgumentError, "order must be supplied" if order.nil?
|
17
17
|
|
18
18
|
# limit the maximum lock time just in case a lock is somehow left in place accidentally
|
19
|
-
expired.where(order:
|
19
|
+
expired.where(order:).delete_all
|
20
20
|
|
21
21
|
begin
|
22
|
-
order_mutex = create!(order:
|
22
|
+
order_mutex = create!(order:)
|
23
23
|
rescue ActiveRecord::RecordNotUnique
|
24
24
|
error = LockFailed.new("Could not obtain lock on order #{order.id}")
|
25
25
|
logger.error error.inspect
|
@@ -22,11 +22,11 @@ class Spree::OrderShipping
|
|
22
22
|
address: shipment.order.ship_address,
|
23
23
|
shipping_method: shipment.shipping_method,
|
24
24
|
shipped_at: Time.current,
|
25
|
-
external_number
|
25
|
+
external_number:,
|
26
26
|
# TODO: Remove the `|| shipment.tracking` once Shipment#ship! is called by
|
27
27
|
# OrderShipping#ship rather than vice versa
|
28
28
|
tracking_number: tracking_number || shipment.tracking,
|
29
|
-
suppress_mailer:
|
29
|
+
suppress_mailer:
|
30
30
|
)
|
31
31
|
end
|
32
32
|
|
@@ -50,12 +50,12 @@ class Spree::OrderShipping
|
|
50
50
|
inventory_units.each(&:ship!)
|
51
51
|
|
52
52
|
carton = Spree::Carton.create!(
|
53
|
-
stock_location
|
54
|
-
address
|
55
|
-
shipping_method
|
56
|
-
inventory_units
|
57
|
-
shipped_at
|
58
|
-
external_number
|
53
|
+
stock_location:,
|
54
|
+
address:,
|
55
|
+
shipping_method:,
|
56
|
+
inventory_units:,
|
57
|
+
shipped_at:,
|
58
|
+
external_number:,
|
59
59
|
tracking: tracking_number
|
60
60
|
)
|
61
61
|
end
|
@@ -79,7 +79,7 @@ class Spree::OrderShipping
|
|
79
79
|
|
80
80
|
def send_shipment_emails(carton)
|
81
81
|
carton.orders.each do |order|
|
82
|
-
Spree::Config.carton_shipped_email_class.shipped_email(order
|
82
|
+
Spree::Config.carton_shipped_email_class.shipped_email(order:, carton:).deliver_later
|
83
83
|
end
|
84
84
|
end
|
85
85
|
end
|
@@ -26,7 +26,7 @@ module Spree
|
|
26
26
|
update_shipments
|
27
27
|
update_shipment_state
|
28
28
|
end
|
29
|
-
Spree::Bus.publish
|
29
|
+
Spree::Bus.publish(:order_recalculated, order:)
|
30
30
|
persist_totals
|
31
31
|
end
|
32
32
|
end
|
@@ -113,8 +113,7 @@ module Spree
|
|
113
113
|
# It also fits the criteria for sales tax as outlined here:
|
114
114
|
# http://www.boe.ca.gov/formspubs/pub113/
|
115
115
|
update_promotions
|
116
|
-
|
117
|
-
update_cancellations
|
116
|
+
update_tax_adjustments
|
118
117
|
update_item_totals
|
119
118
|
end
|
120
119
|
|
@@ -158,9 +157,9 @@ module Spree
|
|
158
157
|
recalculate_adjustments
|
159
158
|
|
160
159
|
all_items = line_items + shipments
|
161
|
-
order_tax_adjustments = adjustments.select(&:
|
160
|
+
order_tax_adjustments = adjustments.select(&:tax?)
|
162
161
|
|
163
|
-
order.adjustment_total = all_items.sum(&:adjustment_total) + adjustments.
|
162
|
+
order.adjustment_total = all_items.sum(&:adjustment_total) + adjustments.sum(&:amount)
|
164
163
|
order.included_tax_total = all_items.sum(&:included_tax_total) + order_tax_adjustments.select(&:included?).sum(&:amount)
|
165
164
|
order.additional_tax_total = all_items.sum(&:additional_tax_total) + order_tax_adjustments.reject(&:included?).sum(&:amount)
|
166
165
|
|
@@ -189,57 +188,37 @@ module Spree
|
|
189
188
|
order.state_changes.new(
|
190
189
|
previous_state: old_state,
|
191
190
|
next_state: new_state,
|
192
|
-
name
|
191
|
+
name:,
|
193
192
|
user_id: order.user_id
|
194
193
|
)
|
195
194
|
end
|
196
195
|
end
|
197
196
|
|
198
197
|
def update_promotions
|
199
|
-
Spree::Config.
|
198
|
+
Spree::Config.promotions.order_adjuster_class.new(order).call
|
200
199
|
end
|
201
200
|
|
202
|
-
def
|
201
|
+
def update_tax_adjustments
|
203
202
|
Spree::Config.tax_adjuster_class.new(order).adjust!
|
204
|
-
|
205
|
-
[*line_items, *shipments].each do |item|
|
206
|
-
tax_adjustments = item.adjustments.select(&:tax?)
|
207
|
-
# Tax adjustments come in not one but *two* exciting flavours:
|
208
|
-
# Included & additional
|
209
|
-
|
210
|
-
# Included tax adjustments are those which are included in the price.
|
211
|
-
# These ones should not affect the eventual total price.
|
212
|
-
#
|
213
|
-
# Additional tax adjustments are the opposite, affecting the final total.
|
214
|
-
item.included_tax_total = tax_adjustments.select(&:included?).sum(&:amount)
|
215
|
-
item.additional_tax_total = tax_adjustments.reject(&:included?).sum(&:amount)
|
216
|
-
end
|
217
203
|
end
|
218
204
|
|
219
205
|
def update_cancellations
|
220
|
-
line_items.each do |line_item|
|
221
|
-
line_item.adjustments.select(&:cancellation?).each(&:recalculate)
|
222
|
-
end
|
223
206
|
end
|
207
|
+
deprecate :update_cancellations, deprecator: Spree.deprecator
|
224
208
|
|
225
209
|
def update_item_totals
|
226
210
|
[*line_items, *shipments].each do |item|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
item.
|
236
|
-
|
237
|
-
|
238
|
-
additional_tax_total: item.additional_tax_total,
|
239
|
-
adjustment_total: item.adjustment_total,
|
240
|
-
updated_at: Time.current,
|
241
|
-
)
|
242
|
-
end
|
211
|
+
Spree::Config.item_total_class.new(item).recalculate!
|
212
|
+
|
213
|
+
next unless item.changed?
|
214
|
+
|
215
|
+
item.update_columns(
|
216
|
+
promo_total: item.promo_total,
|
217
|
+
included_tax_total: item.included_tax_total,
|
218
|
+
additional_tax_total: item.additional_tax_total,
|
219
|
+
adjustment_total: item.adjustment_total,
|
220
|
+
updated_at: Time.current,
|
221
|
+
)
|
243
222
|
end
|
244
223
|
end
|
245
224
|
end
|
@@ -64,7 +64,7 @@ module Spree
|
|
64
64
|
complete! if handle_response(response)
|
65
65
|
end
|
66
66
|
|
67
|
-
capture_events.create!(amount:
|
67
|
+
capture_events.create!(amount:)
|
68
68
|
end
|
69
69
|
|
70
70
|
# Takes the amount in cents to capture.
|
@@ -243,7 +243,7 @@ module Spree
|
|
243
243
|
cvv_result: response.cvv_result,
|
244
244
|
error_code: response.error_code,
|
245
245
|
emv_authorization: response.emv_authorization,
|
246
|
-
gateway_order_id
|
246
|
+
gateway_order_id:,
|
247
247
|
order_number: order.number
|
248
248
|
}
|
249
249
|
end
|
data/app/models/spree/payment.rb
CHANGED
@@ -7,6 +7,7 @@ module Spree
|
|
7
7
|
#
|
8
8
|
class Payment < Spree::Base
|
9
9
|
include Spree::Payment::Processing
|
10
|
+
include Metadata
|
10
11
|
|
11
12
|
IDENTIFIER_CHARS = (('A'..'Z').to_a + ('0'..'9').to_a - %w(0 1 I O)).freeze
|
12
13
|
NON_RISKY_AVS_CODES = ['B', 'D', 'H', 'J', 'M', 'Q', 'T', 'V', 'X', 'Y'].freeze
|
@@ -69,7 +70,7 @@ module Spree
|
|
69
70
|
|
70
71
|
# @return [Spree::Money] this amount of this payment as money object
|
71
72
|
def money
|
72
|
-
Spree::Money.new(amount, { currency:
|
73
|
+
Spree::Money.new(amount, { currency: })
|
73
74
|
end
|
74
75
|
alias display_amount money
|
75
76
|
|
@@ -211,7 +212,7 @@ module Spree
|
|
211
212
|
def set_unique_identifier
|
212
213
|
loop do
|
213
214
|
self.number = generate_identifier
|
214
|
-
break unless self.class.exists?(number:
|
215
|
+
break unless self.class.exists?(number:)
|
215
216
|
end
|
216
217
|
end
|
217
218
|
|
@@ -29,39 +29,44 @@ module Spree
|
|
29
29
|
|
30
30
|
def authorize(_money, credit_card, _options = {})
|
31
31
|
profile_id = credit_card.gateway_customer_profile_id
|
32
|
+
message_detail = " - #{__method__}"
|
32
33
|
if VALID_CCS.include?(credit_card.number) || (profile_id && profile_id.starts_with?('BGS-'))
|
33
|
-
ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'D' })
|
34
|
+
ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'D' })
|
34
35
|
else
|
35
|
-
ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE, { message: FAILURE_MESSAGE }, test: true)
|
36
|
+
ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, { message: FAILURE_MESSAGE + message_detail }, test: true)
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
40
|
def purchase(_money, credit_card, _options = {})
|
40
41
|
profile_id = credit_card.gateway_customer_profile_id
|
42
|
+
message_detail = " - #{__method__}"
|
41
43
|
if VALID_CCS.include?(credit_card.number) || (profile_id && profile_id.starts_with?('BGS-'))
|
42
|
-
ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'M' })
|
44
|
+
ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE, avs_result: { code: 'M' })
|
43
45
|
else
|
44
|
-
ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE, message: FAILURE_MESSAGE, test: true)
|
46
|
+
ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, message: FAILURE_MESSAGE + message_detail, test: true)
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
48
50
|
def credit(_money, _credit_card, _response_code, _options = {})
|
49
|
-
|
51
|
+
message_detail = " - #{__method__}"
|
52
|
+
ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE)
|
50
53
|
end
|
51
54
|
|
52
55
|
def capture(_money, authorization, _gateway_options)
|
56
|
+
message_detail = " - #{__method__}"
|
53
57
|
if authorization == '12345'
|
54
|
-
ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE, {}, test: true)
|
58
|
+
ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true)
|
55
59
|
else
|
56
|
-
ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE, error: FAILURE_MESSAGE, test: true)
|
60
|
+
ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, error: FAILURE_MESSAGE + message_detail, test: true)
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
60
64
|
def void(_response_code, _credit_card, options = {})
|
65
|
+
message_detail = " - #{__method__}"
|
61
66
|
if options[:originator].completed?
|
62
|
-
ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE, {}, test: true, authorization: AUTHORIZATION_CODE)
|
67
|
+
ActiveMerchant::Billing::Response.new(false, FAILURE_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE)
|
63
68
|
else
|
64
|
-
ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE, {}, test: true, authorization: AUTHORIZATION_CODE)
|
69
|
+
ActiveMerchant::Billing::Response.new(true, SUCCESS_MESSAGE + message_detail, {}, test: true, authorization: AUTHORIZATION_CODE)
|
65
70
|
end
|
66
71
|
end
|
67
72
|
|