solidus_core 4.6.1 → 4.7.0
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/Rakefile +13 -13
- data/app/controllers/spree/base_controller.rb +2 -2
- data/app/helpers/spree/base_helper.rb +24 -24
- data/app/helpers/spree/checkout_helper.rb +7 -7
- data/app/helpers/spree/core/controller_helpers/auth.rb +1 -1
- data/app/helpers/spree/core/controller_helpers/common.rb +3 -2
- data/app/helpers/spree/core/controller_helpers/order.rb +3 -5
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +1 -2
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +10 -10
- data/app/helpers/spree/products_helper.rb +5 -5
- data/app/helpers/spree/store_helper.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +3 -3
- data/app/mailers/spree/order_mailer.rb +4 -4
- data/app/mailers/spree/reimbursement_mailer.rb +2 -2
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter.rb +2 -2
- data/app/models/concerns/spree/adjustment_source.rb +4 -4
- data/app/models/concerns/spree/display_money.rb +2 -2
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/preferences/persistable.rb +1 -1
- data/app/models/concerns/spree/ransackable_attributes.rb +1 -0
- data/app/models/concerns/spree/soft_deletable.rb +2 -1
- data/app/models/concerns/spree/state_change_tracking.rb +11 -7
- data/app/models/concerns/spree/user_address_book.rb +12 -12
- data/app/models/concerns/spree/user_methods.rb +9 -9
- data/app/models/concerns/spree/user_reporting.rb +1 -0
- data/app/models/spree/ability.rb +1 -1
- data/app/models/spree/address/name.rb +1 -1
- data/app/models/spree/address.rb +7 -7
- data/app/models/spree/adjustment.rb +11 -10
- data/app/models/spree/adjustment_reason.rb +2 -2
- data/app/models/spree/billing_integration.rb +2 -2
- data/app/models/spree/calculator/default_tax.rb +2 -2
- data/app/models/spree/calculator/flat_fee.rb +1 -1
- data/app/models/spree/calculator/flat_rate.rb +2 -2
- data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -3
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +2 -2
- data/app/models/spree/calculator/shipping/flat_rate.rb +3 -3
- data/app/models/spree/calculator/shipping/flexi_rate.rb +8 -8
- data/app/models/spree/calculator/shipping/per_item.rb +3 -3
- data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
- data/app/models/spree/calculator.rb +31 -6
- data/app/models/spree/carton.rb +4 -4
- data/app/models/spree/classification.rb +2 -2
- data/app/models/spree/core/state_machines/order/class_methods.rb +3 -3
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +1 -1
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/credit_card.rb +27 -27
- data/app/models/spree/customer_return.rb +5 -4
- data/app/models/spree/distributed_amounts_handler.rb +1 -1
- data/app/models/spree/fulfilment_changer.rb +22 -22
- data/app/models/spree/image/active_storage_attachment.rb +2 -2
- data/app/models/spree/image/paperclip_attachment.rb +8 -8
- data/app/models/spree/in_memory_order_updater.rb +262 -0
- data/app/models/spree/inventory_unit.rb +11 -11
- data/app/models/spree/item_total.rb +1 -1
- data/app/models/spree/legacy_user.rb +2 -2
- data/app/models/spree/line_item.rb +21 -11
- data/app/models/spree/log_entry.rb +3 -3
- data/app/models/spree/mergeable_orders_finder.rb +44 -0
- data/app/models/spree/money.rb +2 -1
- data/app/models/spree/null_promotion_adjuster.rb +1 -1
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order/number_generator.rb +1 -1
- data/app/models/spree/order.rb +66 -64
- data/app/models/spree/order_cancellations.rb +1 -3
- data/app/models/spree/order_inventory.rb +5 -8
- data/app/models/spree/order_mutex.rb +1 -1
- data/app/models/spree/order_shipping.rb +1 -1
- data/app/models/spree/order_updater.rb +59 -37
- data/app/models/spree/payment/cancellation.rb +2 -2
- data/app/models/spree/payment/processing.rb +22 -22
- data/app/models/spree/payment.rb +26 -26
- data/app/models/spree/payment_capture_event.rb +2 -2
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +18 -18
- data/app/models/spree/payment_method/check.rb +3 -3
- data/app/models/spree/payment_method/credit_card.rb +1 -1
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +3 -3
- data/app/models/spree/payment_method/store_credit.rb +13 -13
- data/app/models/spree/payment_method.rb +12 -11
- data/app/models/spree/payment_source.rb +2 -2
- data/app/models/spree/permission_sets/dashboard_display.rb +3 -3
- data/app/models/spree/permission_sets/default_customer.rb +1 -1
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +7 -6
- data/app/models/spree/product/scopes.rb +23 -23
- data/app/models/spree/product.rb +37 -41
- data/app/models/spree/product_option_type.rb +2 -2
- data/app/models/spree/product_property.rb +3 -3
- data/app/models/spree/refund.rb +10 -10
- data/app/models/spree/refund_reason.rb +2 -2
- data/app/models/spree/reimbursement/credit.rb +1 -1
- data/app/models/spree/reimbursement.rb +8 -8
- data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +2 -2
- data/app/models/spree/return_authorization.rb +7 -6
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
- data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +6 -6
- data/app/models/spree/return_item.rb +31 -30
- data/app/models/spree/return_reason.rb +1 -1
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/role_user.rb +1 -1
- data/app/models/spree/shipment.rb +37 -29
- data/app/models/spree/shipping_method.rb +9 -9
- data/app/models/spree/shipping_method_category.rb +2 -2
- data/app/models/spree/shipping_rate.rb +12 -10
- data/app/models/spree/shipping_rate_tax.rb +5 -4
- data/app/models/spree/simple_order_contents.rb +2 -2
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/state_change_tracker.rb +31 -0
- data/app/models/spree/stock/availability.rb +9 -9
- data/app/models/spree/stock/availability_validator.rb +3 -3
- data/app/models/spree/stock/differentiator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +4 -4
- data/app/models/spree/stock/inventory_validator.rb +1 -1
- data/app/models/spree/stock/package.rb +3 -3
- data/app/models/spree/stock_item.rb +5 -5
- data/app/models/spree/stock_location.rb +6 -6
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/stock_quantities.rb +2 -2
- data/app/models/spree/store.rb +3 -3
- data/app/models/spree/store_credit.rb +30 -29
- data/app/models/spree/store_credit_category.rb +2 -2
- data/app/models/spree/store_credit_event.rb +6 -6
- data/app/models/spree/store_credit_reason.rb +1 -1
- data/app/models/spree/store_credit_type.rb +3 -3
- data/app/models/spree/store_selector/by_server_name.rb +1 -1
- data/app/models/spree/store_selector/legacy.rb +1 -1
- data/app/models/spree/tax/item_tax.rb +1 -0
- data/app/models/spree/tax/order_tax.rb +1 -0
- data/app/models/spree/tax_category.rb +3 -3
- data/app/models/spree/tax_rate.rb +5 -5
- data/app/models/spree/tax_rate_tax_category.rb +2 -2
- data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
- data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
- data/app/models/spree/taxon.rb +16 -17
- data/app/models/spree/taxon_brand_selector.rb +3 -3
- data/app/models/spree/unauthorized_redirect_handler.rb +1 -1
- data/app/models/spree/unit_cancel.rb +4 -4
- data/app/models/spree/user_address.rb +3 -3
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +6 -8
- data/app/models/spree/user_last_url_storer.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +1 -1
- data/app/models/spree/variant/scopes.rb +9 -9
- data/app/models/spree/variant.rb +25 -25
- data/app/models/spree/variant_property_rule.rb +2 -2
- data/app/models/spree/variant_property_rule_condition.rb +1 -1
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
- data/app/models/spree/wallet/default_payment_builder.rb +1 -1
- data/app/models/spree/wallet_payment_source.rb +2 -2
- data/app/models/spree/zone.rb +18 -18
- data/app/models/spree/zone_member.rb +1 -1
- data/app/subscribers/spree/carton_shipped_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_cancel_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_confirmation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/reimbursement_mailer_subscriber.rb +2 -2
- data/config/initializers/assets.rb +1 -1
- data/config/initializers/db_query_matchers.rb +9 -0
- data/config/initializers/friendly_id.rb +2 -2
- data/config/initializers/inflections.rb +1 -1
- data/config/initializers/money.rb +1 -1
- data/config/locales/en.yml +1 -0
- data/db/default/spree/countries.rb +7 -7
- data/db/default/spree/return_reasons.rb +11 -11
- data/db/default/spree/stock_locations.rb +1 -1
- data/db/default/spree/store_credit.rb +3 -4
- data/db/default/spree/stores.rb +1 -1
- data/db/default/spree/zones.rb +5 -5
- data/db/migrate/20160101010000_solidus_one_four.rb +16 -16
- data/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb +3 -3
- data/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb +7 -6
- data/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +10 -10
- data/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +6 -6
- data/db/migrate/20161129035810_add_index_to_spree_payments_number.rb +1 -1
- data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +4 -4
- data/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb +9 -16
- data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +1 -0
- data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +3 -3
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +1 -1
- data/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb +1 -1
- data/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb +1 -1
- data/db/migrate/20250605105424_add_shipping_category_foreign_keys.rb +3 -3
- data/db/seeds.rb +3 -3
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +2 -2
- data/lib/generators/solidus/install/app_templates/authentication/devise.rb +3 -3
- data/lib/generators/solidus/install/app_templates/authentication/existing.rb +3 -1
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +2 -2
- data/lib/generators/solidus/install/install_generator.rb +51 -51
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +3 -0
- data/lib/generators/solidus/update/update_generator.rb +29 -29
- data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -6
- data/lib/generators/spree/dummy/dummy_generator.rb +22 -24
- data/lib/generators/spree/dummy/templates/rails/boot.rb +3 -3
- data/lib/generators/spree/dummy/templates/rails/test.rb +4 -4
- data/lib/solidus_core.rb +1 -1
- data/lib/spree/app_configuration.rb +66 -47
- data/lib/spree/bus.rb +1 -1
- data/lib/spree/config.rb +1 -1
- data/lib/spree/core/active_merchant_dependencies.rb +8 -8
- data/lib/spree/core/class_constantizer.rb +1 -1
- data/lib/spree/core/engine.rb +15 -15
- data/lib/spree/core/environment.rb +1 -1
- data/lib/spree/core/environment_extension.rb +2 -2
- data/lib/spree/core/importer/order.rb +15 -15
- data/lib/spree/core/importer/product.rb +4 -4
- data/lib/spree/core/importer.rb +2 -2
- data/lib/spree/core/null_promotion_configuration.rb +7 -7
- data/lib/spree/core/permalinks.rb +1 -1
- data/lib/spree/core/product_filters.rb +94 -93
- data/lib/spree/core/role_configuration.rb +3 -3
- data/lib/spree/core/search/base.rb +5 -6
- data/lib/spree/core/search/variant.rb +3 -3
- data/lib/spree/core/stock_configuration.rb +10 -49
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +3 -3
- data/lib/spree/core/versioned_value.rb +4 -6
- data/lib/spree/core.rb +49 -49
- data/lib/spree/deprecated_instance_variable_proxy.rb +1 -1
- data/lib/spree/deprecation.rb +1 -1
- data/lib/spree/deprecator.rb +2 -2
- data/lib/spree/i18n.rb +2 -2
- data/lib/spree/localized_number.rb +3 -3
- data/lib/spree/manipulative_query_monitor.rb +19 -0
- data/lib/spree/migrations.rb +2 -2
- data/lib/spree/permitted_attributes.rb +10 -10
- data/lib/spree/preferences/configuration.rb +5 -5
- data/lib/spree/preferences/preferable.rb +8 -10
- data/lib/spree/preferences/preferable_class_methods.rb +16 -16
- data/lib/spree/preferences/preference_differentiator.rb +1 -1
- data/lib/spree/preferences/scoped_store.rb +2 -2
- data/lib/spree/preferences/static_model_preferences.rb +2 -2
- data/lib/spree/preferences/store.rb +6 -6
- data/lib/spree/testing_support/ability_helpers.rb +30 -30
- data/lib/spree/testing_support/authorization_helpers.rb +6 -5
- data/lib/spree/testing_support/blacklist_urls.rb +1 -1
- data/lib/spree/testing_support/bus_helpers.rb +1 -1
- data/lib/spree/testing_support/capybara_driver.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +12 -12
- data/lib/spree/testing_support/common_rake.rb +17 -16
- data/lib/spree/testing_support/dummy_ability.rb +1 -1
- data/lib/spree/testing_support/dummy_app/migrations.rb +1 -1
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +5 -5
- data/lib/spree/testing_support/dummy_app/routes.rb +1 -1
- data/lib/spree/testing_support/dummy_app.rb +34 -34
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +12 -12
- data/lib/spree/testing_support/factories/adjustment_factory.rb +7 -7
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_factory.rb +6 -6
- data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +3 -3
- data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -3
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/image_factory.rb +2 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_value_factory.rb +2 -2
- data/lib/spree/testing_support/factories/order_factory.rb +16 -16
- data/lib/spree/testing_support/factories/payment_factory.rb +9 -9
- data/lib/spree/testing_support/factories/payment_method_factory.rb +10 -10
- data/lib/spree/testing_support/factories/price_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/property_factory.rb +3 -3
- data/lib/spree/testing_support/factories/refund_factory.rb +2 -2
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +3 -3
- data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/role_factory.rb +2 -2
- data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +7 -7
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/state_factory.rb +4 -4
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
- data/lib/spree/testing_support/factories/stock_package_factory.rb +3 -3
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -8
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +6 -6
- data/lib/spree/testing_support/factories/store_factory.rb +2 -2
- data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +3 -3
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
- data/lib/spree/testing_support/factory_bot.rb +1 -1
- data/lib/spree/testing_support/flaky.rb +3 -2
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +7 -7
- data/lib/spree/testing_support/preferences.rb +1 -1
- data/lib/spree/testing_support/rake.rb +1 -1
- data/lib/spree/testing_support/shared_examples/calculator.rb +1 -1
- data/lib/spree/testing_support/shared_examples/gallery.rb +7 -7
- data/lib/spree/testing_support/shared_examples/order_factory.rb +9 -9
- data/lib/spree/testing_support/shared_examples/state_change_tracking.rb +25 -0
- data/lib/spree/testing_support/shared_examples/working_factory.rb +1 -1
- data/lib/spree/testing_support/translations.rb +1 -1
- data/lib/spree_core.rb +1 -1
- data/lib/tasks/payment_method.rake +2 -2
- data/solidus_core.gemspec +49 -49
- metadata +62 -54
|
@@ -5,21 +5,25 @@ module Spree
|
|
|
5
5
|
extend ActiveSupport::Concern
|
|
6
6
|
|
|
7
7
|
included do
|
|
8
|
-
after_update :enqueue_state_change_tracking, if: :
|
|
8
|
+
after_update :enqueue_state_change_tracking, if: :track_state_change?
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
private
|
|
12
12
|
|
|
13
|
+
def track_state_change?
|
|
14
|
+
saved_change_to_state?
|
|
15
|
+
end
|
|
16
|
+
|
|
13
17
|
# Enqueue background job to track state changes asynchronously
|
|
14
18
|
def enqueue_state_change_tracking
|
|
15
|
-
previous_state, current_state = saved_changes[
|
|
19
|
+
previous_state, current_state = saved_changes["state"]
|
|
16
20
|
|
|
17
21
|
# Enqueue the job to track this state change
|
|
18
|
-
|
|
19
|
-
self,
|
|
20
|
-
previous_state
|
|
21
|
-
current_state
|
|
22
|
-
Time.current
|
|
22
|
+
Spree::Config.state_change_tracking_class.call(
|
|
23
|
+
stateful: self,
|
|
24
|
+
previous_state:,
|
|
25
|
+
current_state:,
|
|
26
|
+
transition_timestamp: Time.current
|
|
23
27
|
)
|
|
24
28
|
end
|
|
25
29
|
end
|
|
@@ -11,7 +11,7 @@ module Spree
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def mark_default(user_address, address_type: :shipping)
|
|
14
|
-
column_for_default = address_type == :shipping ? :default : :default_billing
|
|
14
|
+
column_for_default = (address_type == :shipping) ? :default : :default_billing
|
|
15
15
|
ActiveRecord::Base.transaction do
|
|
16
16
|
(self - [user_address]).each do |address| # update_all would be nice, but it bypasses ActiveRecord callbacks
|
|
17
17
|
if address.persisted?
|
|
@@ -33,9 +33,9 @@ module Spree
|
|
|
33
33
|
has_many :addresses, through: :user_addresses
|
|
34
34
|
|
|
35
35
|
has_one :default_user_bill_address,
|
|
36
|
-
->{ default_billing },
|
|
37
|
-
class_name:
|
|
38
|
-
foreign_key:
|
|
36
|
+
-> { default_billing },
|
|
37
|
+
class_name: "Spree::UserAddress",
|
|
38
|
+
foreign_key: "user_id",
|
|
39
39
|
inverse_of: false,
|
|
40
40
|
dependent: false
|
|
41
41
|
has_one :bill_address,
|
|
@@ -45,9 +45,9 @@ module Spree
|
|
|
45
45
|
dependent: false
|
|
46
46
|
|
|
47
47
|
has_one :default_user_ship_address,
|
|
48
|
-
->{ default_shipping },
|
|
49
|
-
class_name:
|
|
50
|
-
foreign_key:
|
|
48
|
+
-> { default_shipping },
|
|
49
|
+
class_name: "Spree::UserAddress",
|
|
50
|
+
foreign_key: "user_id",
|
|
51
51
|
inverse_of: false,
|
|
52
52
|
dependent: false
|
|
53
53
|
has_one :ship_address,
|
|
@@ -66,7 +66,7 @@ module Spree
|
|
|
66
66
|
def ship_address=(address)
|
|
67
67
|
if address
|
|
68
68
|
save_in_address_book(address.attributes,
|
|
69
|
-
|
|
69
|
+
Spree::Config.automatic_default_address)
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
|
|
@@ -77,8 +77,8 @@ module Spree
|
|
|
77
77
|
def bill_address=(address)
|
|
78
78
|
if address
|
|
79
79
|
save_in_address_book(address.attributes,
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
Spree::Config.automatic_default_address,
|
|
81
|
+
:billing)
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
@@ -185,8 +185,8 @@ module Spree
|
|
|
185
185
|
end
|
|
186
186
|
|
|
187
187
|
def remove_user_address_reference(address_id)
|
|
188
|
-
self.bill_address_id = bill_address_id == address_id.to_i ? nil : bill_address_id
|
|
189
|
-
self.ship_address_id = ship_address_id == address_id.to_i ? nil : ship_address_id
|
|
188
|
+
self.bill_address_id = (bill_address_id == address_id.to_i) ? nil : bill_address_id
|
|
189
|
+
self.ship_address_id = (ship_address_id == address_id.to_i) ? nil : ship_address_id
|
|
190
190
|
save if changed?
|
|
191
191
|
end
|
|
192
192
|
end
|
|
@@ -59,15 +59,15 @@ module Spree
|
|
|
59
59
|
inverse_of: :user
|
|
60
60
|
|
|
61
61
|
has_many :wallet_payment_sources,
|
|
62
|
-
foreign_key:
|
|
63
|
-
class_name:
|
|
62
|
+
foreign_key: "user_id",
|
|
63
|
+
class_name: "Spree::WalletPaymentSource",
|
|
64
64
|
inverse_of: :user,
|
|
65
65
|
dependent: :destroy
|
|
66
66
|
|
|
67
67
|
after_create :auto_generate_spree_api_key
|
|
68
68
|
before_destroy :check_for_deletion
|
|
69
69
|
|
|
70
|
-
include Spree::RansackableAttributes unless
|
|
70
|
+
include Spree::RansackableAttributes unless include?(Spree::RansackableAttributes)
|
|
71
71
|
|
|
72
72
|
ransack_alias :name, :addresses_name
|
|
73
73
|
self.allowed_ransackable_associations = %w[addresses spree_roles]
|
|
@@ -97,22 +97,22 @@ module Spree
|
|
|
97
97
|
self_orders = orders
|
|
98
98
|
self_orders = self_orders.where(frontend_viewable: true) if only_frontend_viewable
|
|
99
99
|
self_orders = self_orders.where(store:) if store
|
|
100
|
-
self_orders = self_orders.where(
|
|
101
|
-
self_orders = self_orders.where(
|
|
100
|
+
self_orders = self_orders.where("updated_at > ?", Spree::Config.completable_order_updated_cutoff_days.days.ago) if Spree::Config.completable_order_updated_cutoff_days
|
|
101
|
+
self_orders = self_orders.where("created_at > ?", Spree::Config.completable_order_created_cutoff_days.days.ago) if Spree::Config.completable_order_created_cutoff_days
|
|
102
102
|
last_order = self_orders.order(:created_at).last
|
|
103
103
|
last_order unless last_order.try!(:completed?)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def available_store_credit_total(currency:)
|
|
107
|
-
store_credits.to_a
|
|
108
|
-
select { |credit| credit.currency == currency }
|
|
109
|
-
sum(&:amount_remaining)
|
|
107
|
+
store_credits.to_a
|
|
108
|
+
.select { |credit| credit.currency == currency }
|
|
109
|
+
.sum(&:amount_remaining)
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
def display_available_store_credit_total(currency:)
|
|
113
113
|
Spree::Money.new(
|
|
114
114
|
available_store_credit_total(currency:),
|
|
115
|
-
currency
|
|
115
|
+
currency:
|
|
116
116
|
)
|
|
117
117
|
end
|
|
118
118
|
|
data/app/models/spree/ability.rb
CHANGED
data/app/models/spree/address.rb
CHANGED
|
@@ -22,9 +22,9 @@ module Spree
|
|
|
22
22
|
self.class.state_validator_class.new(self).perform
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
self.ignored_columns = %w
|
|
26
|
-
DB_ONLY_ATTRS = %w
|
|
27
|
-
TAXATION_ATTRS = %w
|
|
25
|
+
self.ignored_columns = %w[firstname lastname]
|
|
26
|
+
DB_ONLY_ATTRS = %w[id updated_at created_at].freeze
|
|
27
|
+
TAXATION_ATTRS = %w[state_id country_id zipcode].freeze
|
|
28
28
|
|
|
29
29
|
self.allowed_ransackable_attributes = %w[name]
|
|
30
30
|
|
|
@@ -95,9 +95,9 @@ module Spree
|
|
|
95
95
|
# @note This compares the addresses based on only the fields that make up
|
|
96
96
|
# the logical "address" and excludes the database specific fields (id, created_at, updated_at).
|
|
97
97
|
# @return [Boolean] true if the two addresses have the same address fields
|
|
98
|
-
def ==(
|
|
99
|
-
return false unless
|
|
100
|
-
value_attributes ==
|
|
98
|
+
def ==(other)
|
|
99
|
+
return false unless other&.respond_to?(:value_attributes)
|
|
100
|
+
value_attributes == other.value_attributes
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
# @return [Hash] an ActiveMerchant compatible address hash
|
|
@@ -142,7 +142,7 @@ module Spree
|
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
def country_iso
|
|
145
|
-
country
|
|
145
|
+
country&.iso
|
|
146
146
|
end
|
|
147
147
|
end
|
|
148
148
|
end
|
|
@@ -9,8 +9,8 @@ module Spree
|
|
|
9
9
|
class Adjustment < Spree::Base
|
|
10
10
|
belongs_to :adjustable, polymorphic: true, touch: true, optional: true
|
|
11
11
|
belongs_to :source, polymorphic: true, optional: true
|
|
12
|
-
belongs_to :order, class_name:
|
|
13
|
-
belongs_to :adjustment_reason, class_name:
|
|
12
|
+
belongs_to :order, class_name: "Spree::Order", inverse_of: false, optional: true
|
|
13
|
+
belongs_to :adjustment_reason, class_name: "Spree::AdjustmentReason", inverse_of: :adjustments, optional: true
|
|
14
14
|
|
|
15
15
|
validates :adjustable, presence: true
|
|
16
16
|
validates :order, presence: true
|
|
@@ -19,14 +19,14 @@ module Spree
|
|
|
19
19
|
|
|
20
20
|
scope :not_finalized, -> { where(finalized: false) }
|
|
21
21
|
scope :finalized, -> { where(finalized: true) }
|
|
22
|
-
scope :cancellation, -> { where(source_type:
|
|
23
|
-
scope :tax, -> { where(source_type:
|
|
22
|
+
scope :cancellation, -> { where(source_type: "Spree::UnitCancel") }
|
|
23
|
+
scope :tax, -> { where(source_type: "Spree::TaxRate") }
|
|
24
24
|
scope :non_tax, -> do
|
|
25
25
|
source_type = arel_table[:source_type]
|
|
26
|
-
where(source_type.not_eq(
|
|
26
|
+
where(source_type.not_eq("Spree::TaxRate").or(source_type.eq(nil)))
|
|
27
27
|
end
|
|
28
|
-
scope :price, -> { where(adjustable_type:
|
|
29
|
-
scope :shipping, -> { where(adjustable_type:
|
|
28
|
+
scope :price, -> { where(adjustable_type: "Spree::LineItem") }
|
|
29
|
+
scope :shipping, -> { where(adjustable_type: "Spree::Shipment") }
|
|
30
30
|
scope :eligible, -> { all }
|
|
31
31
|
class << self
|
|
32
32
|
deprecate :eligible, deprecator: Spree.deprecator
|
|
@@ -42,9 +42,10 @@ module Spree
|
|
|
42
42
|
|
|
43
43
|
singleton_class.deprecate :return_authorization, deprecator: Spree.deprecator
|
|
44
44
|
|
|
45
|
-
allowed_ransackable_attributes <<
|
|
45
|
+
allowed_ransackable_attributes << "label"
|
|
46
46
|
|
|
47
47
|
extend DisplayMoney
|
|
48
|
+
|
|
48
49
|
money_methods :amount
|
|
49
50
|
|
|
50
51
|
def finalize!
|
|
@@ -74,12 +75,12 @@ module Spree
|
|
|
74
75
|
|
|
75
76
|
# @return [Boolean] true when this is a tax adjustment (Tax adjustments have a {TaxRate} source)
|
|
76
77
|
def tax?
|
|
77
|
-
source_type ==
|
|
78
|
+
source_type == "Spree::TaxRate"
|
|
78
79
|
end
|
|
79
80
|
|
|
80
81
|
# @return [Boolean] true when this is a cancellation adjustment (Cancellation adjustments have a {UnitCancel} source)
|
|
81
82
|
def cancellation?
|
|
82
|
-
source_type ==
|
|
83
|
+
source_type == "Spree::UnitCancel"
|
|
83
84
|
end
|
|
84
85
|
|
|
85
86
|
def eligible?
|
|
@@ -4,8 +4,8 @@ module Spree
|
|
|
4
4
|
class AdjustmentReason < Spree::Base
|
|
5
5
|
has_many :adjustments, inverse_of: :adjustment_reason, dependent: :restrict_with_error
|
|
6
6
|
|
|
7
|
-
validates :name, presence: true, uniqueness: {
|
|
8
|
-
validates :code, presence: true, uniqueness: {
|
|
7
|
+
validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true}
|
|
8
|
+
validates :code, presence: true, uniqueness: {case_sensitive: false, allow_blank: true}
|
|
9
9
|
|
|
10
10
|
scope :active, -> { where(active: true) }
|
|
11
11
|
|
|
@@ -4,14 +4,14 @@ module Spree
|
|
|
4
4
|
class BillingIntegration < PaymentMethod
|
|
5
5
|
validates :name, presence: true
|
|
6
6
|
|
|
7
|
-
preference :server, :string, default:
|
|
7
|
+
preference :server, :string, default: "test"
|
|
8
8
|
preference :test_mode, :boolean, default: true
|
|
9
9
|
|
|
10
10
|
def gateway
|
|
11
11
|
integration_options = options
|
|
12
12
|
|
|
13
13
|
# All environments except production considered to be test
|
|
14
|
-
test_server = integration_options[:server] !=
|
|
14
|
+
test_server = integration_options[:server] != "production"
|
|
15
15
|
test_mode = integration_options[:test_mode]
|
|
16
16
|
|
|
17
17
|
integration_options[:test] = (test_server || test_mode)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_dependency
|
|
3
|
+
require_dependency "spree/calculator"
|
|
4
4
|
|
|
5
5
|
module Spree
|
|
6
6
|
class Calculator::DefaultTax < Calculator
|
|
@@ -17,7 +17,7 @@ module Spree
|
|
|
17
17
|
|
|
18
18
|
line_items_total = matched_line_items.sum(&:total_before_tax)
|
|
19
19
|
if rate.included_in_price
|
|
20
|
-
round_to_two_places(line_items_total - (
|
|
20
|
+
round_to_two_places(line_items_total - (line_items_total / (1 + rate.amount)))
|
|
21
21
|
else
|
|
22
22
|
round_to_two_places(line_items_total * rate.amount)
|
|
23
23
|
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_dependency
|
|
3
|
+
require_dependency "spree/calculator"
|
|
4
4
|
|
|
5
5
|
module Spree
|
|
6
6
|
class Calculator::FlatRate < Calculator
|
|
7
7
|
preference :amount, :decimal, default: 0
|
|
8
|
-
preference :currency, :string, default: ->{ Spree::Config[:currency] }
|
|
8
|
+
preference :currency, :string, default: -> { Spree::Config[:currency] }
|
|
9
9
|
|
|
10
10
|
def compute(object = nil)
|
|
11
11
|
if object && preferred_currency.casecmp(object.currency).zero?
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_dependency
|
|
4
|
-
require_dependency
|
|
3
|
+
require_dependency "spree/calculator"
|
|
4
|
+
require_dependency "spree/returns_calculator"
|
|
5
5
|
|
|
6
6
|
module Spree
|
|
7
7
|
module Calculator::Returns
|
|
8
8
|
class DefaultRefundAmount < ReturnsCalculator
|
|
9
9
|
def compute(return_item)
|
|
10
|
-
return 0.0
|
|
10
|
+
return BigDecimal("0.0") if return_item.part_of_exchange?
|
|
11
11
|
weighted_order_adjustment_amount(return_item.inventory_unit) + weighted_line_item_amount(return_item.inventory_unit)
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_dependency
|
|
4
|
-
require_dependency
|
|
3
|
+
require_dependency "spree/calculator"
|
|
4
|
+
require_dependency "spree/shipping_calculator"
|
|
5
5
|
|
|
6
6
|
module Spree
|
|
7
7
|
module Calculator::Shipping
|
|
8
8
|
class FlatRate < ShippingCalculator
|
|
9
9
|
preference :amount, :decimal, default: 0
|
|
10
|
-
preference :currency, :string, default: ->{ Spree::Config[:currency] }
|
|
10
|
+
preference :currency, :string, default: -> { Spree::Config[:currency] }
|
|
11
11
|
|
|
12
12
|
def compute_package(_package)
|
|
13
13
|
preferred_amount
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_dependency
|
|
4
|
-
require_dependency
|
|
3
|
+
require_dependency "spree/calculator"
|
|
4
|
+
require_dependency "spree/shipping_calculator"
|
|
5
5
|
|
|
6
6
|
module Spree
|
|
7
7
|
module Calculator::Shipping
|
|
8
8
|
class FlexiRate < ShippingCalculator
|
|
9
|
-
preference :first_item,
|
|
9
|
+
preference :first_item, :decimal, default: 0.0
|
|
10
10
|
preference :additional_item, :decimal, default: 0.0
|
|
11
|
-
preference :max_items,
|
|
12
|
-
preference :currency,
|
|
11
|
+
preference :max_items, :integer, default: 0
|
|
12
|
+
preference :currency, :string, default: -> { Spree::Config[:currency] }
|
|
13
13
|
|
|
14
14
|
def compute_package(package)
|
|
15
15
|
compute_from_quantity(package.contents.sum(&:quantity))
|
|
@@ -20,10 +20,10 @@ module Spree
|
|
|
20
20
|
max = preferred_max_items.to_i
|
|
21
21
|
quantity.times do |index|
|
|
22
22
|
# check max value to avoid divide by 0 errors
|
|
23
|
-
if (max == 0 && index == 0) || (max > 0) && (index % max == 0)
|
|
24
|
-
|
|
23
|
+
sum += if (max == 0 && index == 0) || (max > 0) && (index % max == 0)
|
|
24
|
+
preferred_first_item.to_f
|
|
25
25
|
else
|
|
26
|
-
|
|
26
|
+
preferred_additional_item.to_f
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_dependency
|
|
4
|
-
require_dependency
|
|
3
|
+
require_dependency "spree/calculator"
|
|
4
|
+
require_dependency "spree/shipping_calculator"
|
|
5
5
|
|
|
6
6
|
module Spree
|
|
7
7
|
module Calculator::Shipping
|
|
8
8
|
class PerItem < ShippingCalculator
|
|
9
9
|
preference :amount, :decimal, default: 0
|
|
10
|
-
preference :currency, :string, default: ->{ Spree::Config[:currency] }
|
|
10
|
+
preference :currency, :string, default: -> { Spree::Config[:currency] }
|
|
11
11
|
|
|
12
12
|
def compute_package(package)
|
|
13
13
|
compute_from_quantity(package.contents.sum(&:quantity))
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_dependency
|
|
4
|
-
require_dependency
|
|
3
|
+
require_dependency "spree/calculator"
|
|
4
|
+
require_dependency "spree/shipping_calculator"
|
|
5
5
|
|
|
6
6
|
module Spree
|
|
7
7
|
module Calculator::Shipping
|
|
@@ -9,7 +9,7 @@ module Spree
|
|
|
9
9
|
preference :minimal_amount, :decimal, default: 0
|
|
10
10
|
preference :normal_amount, :decimal, default: 0
|
|
11
11
|
preference :discount_amount, :decimal, default: 0
|
|
12
|
-
preference :currency, :string, default: ->{ Spree::Config[:currency] }
|
|
12
|
+
preference :currency, :string, default: -> { Spree::Config[:currency] }
|
|
13
13
|
|
|
14
14
|
def compute_package(package)
|
|
15
15
|
compute_from_price(total(package.contents))
|
|
@@ -6,16 +6,41 @@ module Spree
|
|
|
6
6
|
|
|
7
7
|
belongs_to :calculable, polymorphic: true, optional: true
|
|
8
8
|
|
|
9
|
-
#
|
|
9
|
+
# Computes an amount based on the calculable and the computable parameter.
|
|
10
10
|
#
|
|
11
|
-
#
|
|
12
|
-
|
|
11
|
+
# This method dynamically calls a compute_<computable> method based on the class
|
|
12
|
+
# of the computable parameter. Concrete calculator classes must implement the
|
|
13
|
+
# appropriate compute method for each computable type they support.
|
|
14
|
+
#
|
|
15
|
+
# For example, if the computable is a Spree::LineItem, this will call
|
|
16
|
+
# compute_line_item(computable, ...). If the computable is a Spree::Order,
|
|
17
|
+
# it will call compute_order(computable, ...).
|
|
18
|
+
#
|
|
19
|
+
# @param computable [Object] The object to compute the amount for (e.g.,
|
|
20
|
+
# Spree::LineItem, Spree::Order, Spree::Shipment,
|
|
21
|
+
# Spree::ShippingRate)
|
|
22
|
+
# @param ... [args, kwargs] Additional arguments passed to the specific compute method
|
|
23
|
+
#
|
|
24
|
+
# @return [BigDecimal, Numeric] The computed amount
|
|
25
|
+
#
|
|
26
|
+
# @raise [NotImplementedError] If the calculator doesn't implement the required compute method
|
|
27
|
+
#
|
|
28
|
+
# @example Implementing a calculator for line items
|
|
29
|
+
# class MyCalculator < Spree::Calculator
|
|
30
|
+
# def compute_line_item(line_item)
|
|
31
|
+
# line_item.amount * 0.1 # 10% of line item amount
|
|
32
|
+
# end
|
|
33
|
+
# end
|
|
34
|
+
#
|
|
35
|
+
# @see Spree::CalculatedAdjustments for how calculators connect to calculables, such as
|
|
36
|
+
# Spree::TaxRate, Spree::ShippingRate, SolidusPromotions::Benefit, or Spree::PromotionAction
|
|
37
|
+
def compute(computable, ...)
|
|
13
38
|
# Spree::LineItem -> :compute_line_item
|
|
14
39
|
computable_name = computable.class.name.demodulize.underscore
|
|
15
|
-
method_name = "compute_#{computable_name}"
|
|
40
|
+
method_name = :"compute_#{computable_name}"
|
|
16
41
|
calculator_class = self.class
|
|
17
42
|
if respond_to?(method_name)
|
|
18
|
-
send(method_name, computable)
|
|
43
|
+
send(method_name, computable, ...)
|
|
19
44
|
else
|
|
20
45
|
raise NotImplementedError, "Please implement '#{method_name}(#{computable_name})' in your calculator: #{calculator_class.name}"
|
|
21
46
|
end
|
|
@@ -30,7 +55,7 @@ module Spree
|
|
|
30
55
|
###################################################################
|
|
31
56
|
|
|
32
57
|
def to_s
|
|
33
|
-
self.class.name.titleize.gsub("Calculator
|
|
58
|
+
self.class.name.titleize.gsub("Calculator/", "")
|
|
34
59
|
end
|
|
35
60
|
|
|
36
61
|
def description
|
data/app/models/spree/carton.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class Spree::Carton < Spree::Base
|
|
4
|
-
belongs_to :address, class_name:
|
|
5
|
-
belongs_to :stock_location, class_name:
|
|
6
|
-
belongs_to :shipping_method, -> { with_discarded }, class_name:
|
|
4
|
+
belongs_to :address, class_name: "Spree::Address", optional: true
|
|
5
|
+
belongs_to :stock_location, class_name: "Spree::StockLocation", inverse_of: :cartons, optional: true
|
|
6
|
+
belongs_to :shipping_method, -> { with_discarded }, class_name: "Spree::ShippingMethod", inverse_of: :cartons, optional: true
|
|
7
7
|
|
|
8
8
|
has_many :inventory_units, class_name: "Spree::InventoryUnit", inverse_of: :carton, dependent: :nullify
|
|
9
9
|
has_many :orders, -> { distinct }, through: :inventory_units
|
|
@@ -22,7 +22,7 @@ class Spree::Carton < Spree::Base
|
|
|
22
22
|
# @return [boolean, NilClass] Whether the email should be suppressed.
|
|
23
23
|
attr_accessor :suppress_email
|
|
24
24
|
|
|
25
|
-
make_permalink field: :number, length: 11, prefix:
|
|
25
|
+
make_permalink field: :number, length: 11, prefix: "C"
|
|
26
26
|
|
|
27
27
|
scope :trackable, -> { where("tracking IS NOT NULL AND tracking != ''") }
|
|
28
28
|
# sort by most recent shipped_at, falling back to created_at. add "id desc" to make specs that involve this scope more deterministic.
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module Spree
|
|
4
4
|
class Classification < Spree::Base
|
|
5
|
-
self.table_name =
|
|
5
|
+
self.table_name = "spree_products_taxons"
|
|
6
6
|
acts_as_list scope: :taxon
|
|
7
7
|
belongs_to :product, class_name: "Spree::Product", inverse_of: :classifications, touch: true
|
|
8
8
|
belongs_to :taxon, class_name: "Spree::Taxon", inverse_of: :classifications, touch: true
|
|
9
9
|
|
|
10
10
|
# For https://github.com/spree/spree/issues/3494
|
|
11
|
-
validates :taxon_id, uniqueness: {
|
|
11
|
+
validates :taxon_id, uniqueness: {scope: :product_id, message: :already_linked}
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -101,7 +101,7 @@ module Spree
|
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
after_transition to: :complete, do: :finalize
|
|
104
|
-
after_transition to: :resumed,
|
|
104
|
+
after_transition to: :resumed, do: :after_resume
|
|
105
105
|
after_transition to: :canceled, do: :after_cancel
|
|
106
106
|
|
|
107
107
|
after_transition from: any - :cart, to: any - [:confirm, :complete] do |order|
|
|
@@ -121,7 +121,7 @@ module Spree
|
|
|
121
121
|
def go_to_state(name, options = {})
|
|
122
122
|
checkout_steps[name] = options
|
|
123
123
|
previous_states.each do |state|
|
|
124
|
-
add_transition({
|
|
124
|
+
add_transition({from: state, to: name}.merge(options))
|
|
125
125
|
end
|
|
126
126
|
if options[:if]
|
|
127
127
|
previous_states << name
|
|
@@ -188,7 +188,7 @@ module Spree
|
|
|
188
188
|
end
|
|
189
189
|
|
|
190
190
|
def add_transition(options)
|
|
191
|
-
next_event_transitions << {
|
|
191
|
+
next_event_transitions << {options.delete(:from) => options.delete(:to)}.merge(options)
|
|
192
192
|
end
|
|
193
193
|
|
|
194
194
|
def removed_transitions
|
|
@@ -41,7 +41,7 @@ module Spree
|
|
|
41
41
|
transition to: :manual_intervention_required, from: [:accepted, :pending, :manual_intervention_required]
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
after_transition any => any, do
|
|
44
|
+
after_transition any => any, :do => :persist_acceptance_status_errors
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
end
|
data/app/models/spree/country.rb
CHANGED
|
@@ -28,7 +28,7 @@ module Spree
|
|
|
28
28
|
def self.available(restrict_to_zone: Spree::Config[:checkout_zone])
|
|
29
29
|
checkout_zone = Zone.find_by(name: restrict_to_zone)
|
|
30
30
|
|
|
31
|
-
return checkout_zone.country_list if checkout_zone.try(:kind) ==
|
|
31
|
+
return checkout_zone.country_list if checkout_zone.try(:kind) == "country"
|
|
32
32
|
|
|
33
33
|
all
|
|
34
34
|
end
|