solidus_core 3.0.0 → 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/README.md +1 -2
- data/Rakefile +7 -2
- data/app/assets/images/logo/solidus.svg +18 -1
- data/app/assets/images/logo/solidus_logo.png +0 -0
- data/app/controllers/spree/base_controller.rb +1 -3
- data/app/helpers/spree/base_helper.rb +3 -3
- 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/{lib/spree/core/controller_helpers/current_host.rb → app/helpers/spree/core/controller_helpers/pricing.rb} +6 -4
- 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/helpers/spree/products_helper.rb +2 -2
- 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/attachment.rb +30 -11
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter.rb +1 -18
- data/app/models/concerns/spree/default_price.rb +30 -10
- 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/ransackable_attributes.rb +9 -5
- data/app/models/concerns/spree/user_address_book.rb +19 -10
- data/app/models/concerns/spree/user_methods.rb +40 -6
- data/app/models/spree/address.rb +11 -9
- data/app/models/spree/adjustment.rb +15 -76
- data/app/models/spree/adjustment_reason.rb +2 -0
- data/app/models/spree/calculator/flat_fee.rb +21 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
- data/app/models/spree/carton.rb +3 -3
- 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/country.rb +1 -1
- data/app/models/spree/credit_card.rb +13 -10
- data/app/models/spree/customer_return.rb +6 -3
- data/app/models/spree/deprecated_configurable_class.rb +40 -0
- data/app/models/spree/fulfilment_changer.rb +56 -29
- data/app/models/spree/image/active_storage_attachment.rb +2 -7
- data/app/models/spree/image/paperclip_attachment.rb +2 -2
- 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 +26 -8
- data/app/models/spree/log_entry.rb +98 -1
- 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_type.rb +1 -1
- data/app/models/spree/option_value.rb +4 -3
- data/app/models/spree/order/number_generator.rb +7 -1
- data/app/models/spree/order.rb +143 -96
- data/app/models/spree/order_cancellations.rb +8 -8
- data/app/models/spree/order_inventory.rb +7 -5
- data/app/models/spree/order_merger.rb +5 -7
- data/app/models/spree/order_mutex.rb +2 -2
- data/app/models/spree/order_shipping.rb +15 -19
- data/app/models/spree/order_taxation.rb +7 -4
- data/app/models/spree/order_update_attributes.rb +3 -1
- data/app/models/spree/order_updater.rb +25 -63
- data/app/models/spree/payment/processing.rb +60 -57
- data/app/models/spree/payment.rb +14 -27
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +18 -14
- data/app/models/spree/payment_method/credit_card.rb +0 -4
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +18 -4
- data/app/models/spree/payment_method/store_credit.rb +1 -1
- data/app/models/spree/payment_method.rb +29 -10
- 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/price.rb +3 -3
- data/app/models/spree/product/scopes.rb +23 -10
- data/app/models/spree/product.rb +30 -23
- data/app/models/spree/product_property.rb +1 -1
- data/app/models/spree/property.rb +1 -1
- data/app/models/spree/refund.rb +13 -3
- data/app/models/spree/refund_reason.rb +6 -1
- data/app/models/spree/reimbursement.rb +6 -6
- data/app/models/spree/reimbursement_performer.rb +3 -3
- data/app/models/spree/reimbursement_tax_calculator.rb +3 -3
- 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 +3 -1
- data/app/models/spree/return_item.rb +13 -15
- 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 +12 -10
- data/app/models/spree/shipping_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +2 -3
- data/app/models/spree/shipping_rate_tax.rb +1 -1
- data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +10 -13
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
- data/app/models/spree/stock/availability.rb +11 -3
- 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/quantifier.rb +12 -8
- data/app/models/spree/stock/simple_coordinator.rb +38 -28
- data/app/models/spree/stock/splitter/shipping_category.rb +1 -1
- data/app/models/spree/stock_item.rb +2 -1
- data/app/models/spree/stock_location.rb +7 -7
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/store.rb +3 -1
- data/app/models/spree/store_credit.rb +31 -16
- data/app/models/spree/store_credit_event.rb +4 -3
- data/app/models/spree/store_credit_prioritizer.rb +17 -0
- 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/item_tax.rb +3 -2
- data/app/models/spree/tax/order_tax.rb +3 -1
- data/app/models/spree/tax/tax_helpers.rb +14 -3
- data/app/models/spree/tax/tax_location.rb +4 -7
- data/app/models/spree/tax_calculator/default.rb +32 -1
- data/app/models/spree/tax_calculator/shipping_rate.rb +2 -2
- data/app/models/spree/tax_category.rb +3 -1
- data/app/models/spree/tax_rate.rb +14 -1
- 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 +25 -3
- data/app/models/spree/taxon_brand_selector.rb +22 -0
- data/app/models/spree/taxonomy.rb +4 -3
- 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/user_last_url_storer/rules/authentication_rule.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +25 -8
- 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 +64 -37
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
- data/app/models/spree/wallet.rb +2 -2
- data/app/models/spree/zone.rb +1 -1
- data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
- data/app/views/layouts/spree/base_mailer.html.erb +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/i18n-tasks.yml +134 -0
- data/config/locales/en.yml +439 -338
- data/db/default/spree/permission_sets.rb +10 -0
- data/db/default/spree/return_reasons.rb +3 -1
- data/db/default/spree/states.rb +2 -2
- data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
- data/db/migrate/20180710170104_create_spree_store_credit_reasons_table.rb +2 -2
- data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
- data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
- data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +16 -0
- data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
- data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
- data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
- data/db/migrate/20230321161854_change_column_null_option_values_option_type_id.rb +5 -0
- data/db/migrate/20230425103509_remove_taxon_position.rb +5 -0
- data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +11 -0
- 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 +5 -1
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +16 -0
- data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
- data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
- data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/frontend/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -0
- data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +5 -0
- data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +5 -0
- data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +5 -0
- data/lib/generators/solidus/install/install_generator.rb +210 -156
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +27 -33
- data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
- data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
- data/lib/generators/solidus/update/update_generator.rb +124 -0
- data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
- data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
- data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
- data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
- data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -2
- data/lib/generators/spree/dummy/templates/rails/database.yml +48 -63
- data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +7 -2
- data/lib/spree/app_configuration.rb +220 -71
- data/lib/spree/bus.rb +11 -0
- data/lib/spree/core/class_constantizer.rb +2 -2
- data/lib/spree/core/controller_helpers/auth.rb +5 -69
- 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 -165
- 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 +49 -16
- 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 +6 -6
- 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_duplicator.rb +1 -1
- data/lib/spree/core/product_filters.rb +2 -2
- data/lib/spree/core/search/base.rb +18 -9
- 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 -247
- 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/stock_configuration.rb +18 -0
- data/lib/spree/core/validators/email.rb +2 -4
- data/lib/spree/core/version.rb +5 -1
- data/lib/spree/core/versioned_value.rb +75 -0
- data/lib/spree/core.rb +40 -16
- data/lib/spree/deprecated_instance_variable_proxy.rb +57 -0
- data/lib/spree/deprecation.rb +3 -51
- 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/migration_helpers.rb +3 -3
- data/lib/spree/migrations.rb +13 -11
- 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 -23
- data/lib/spree/permission_sets/configuration_management.rb +5 -23
- data/lib/spree/permission_sets/dashboard_display.rb +5 -9
- data/lib/spree/permission_sets/default_customer.rb +5 -35
- data/lib/spree/permission_sets/order_display.rb +5 -19
- data/lib/spree/permission_sets/order_management.rb +5 -20
- data/lib/spree/permission_sets/product_display.rb +5 -17
- data/lib/spree/permission_sets/product_management.rb +5 -19
- data/lib/spree/permission_sets/restricted_stock_display.rb +5 -16
- data/lib/spree/permission_sets/restricted_stock_management.rb +5 -16
- data/lib/spree/permission_sets/stock_display.rb +5 -10
- data/lib/spree/permission_sets/stock_management.rb +5 -10
- data/lib/spree/permission_sets/super_user.rb +5 -9
- data/lib/spree/permission_sets/user_display.rb +5 -11
- data/lib/spree/permission_sets/user_management.rb +5 -23
- data/lib/spree/permission_sets.rb +5 -18
- data/lib/spree/permitted_attributes.rb +35 -14
- data/lib/spree/preferences/configuration.rb +88 -0
- data/lib/spree/preferences/persistable.rb +7 -1
- data/lib/spree/preferences/preferable.rb +13 -0
- data/lib/spree/preferences/preferable_class_methods.rb +12 -4
- data/lib/spree/preferences/preference_differentiator.rb +29 -0
- data/lib/spree/preferences/static_model_preferences.rb +25 -10
- data/lib/spree/preferences/store.rb +2 -2
- data/lib/spree/testing_support/blacklist_urls.rb +1 -1
- data/lib/spree/testing_support/bus_helpers.rb +101 -0
- data/lib/spree/testing_support/capybara_ext.rb +11 -1
- data/lib/spree/testing_support/common_rake.rb +76 -23
- data/lib/spree/testing_support/dummy_ability.rb +7 -0
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
- data/lib/spree/testing_support/dummy_app/database.yml +39 -28
- data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -10
- data/lib/spree/testing_support/dummy_app.rb +71 -42
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +9 -13
- data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -13
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/calculator_factory.rb +4 -10
- data/lib/spree/testing_support/factories/carton_factory.rb +2 -10
- data/lib/spree/testing_support/factories/country_factory.rb +1 -7
- data/lib/spree/testing_support/factories/credit_card_factory.rb +0 -5
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -11
- data/lib/spree/testing_support/factories/image_factory.rb +0 -5
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -14
- data/lib/spree/testing_support/factories/line_item_factory.rb +0 -8
- data/lib/spree/testing_support/factories/option_type_factory.rb +0 -8
- data/lib/spree/testing_support/factories/option_value_factory.rb +0 -5
- data/lib/spree/testing_support/factories/order_factory.rb +19 -38
- data/lib/spree/testing_support/factories/payment_factory.rb +0 -10
- data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -5
- data/lib/spree/testing_support/factories/price_factory.rb +0 -7
- data/lib/spree/testing_support/factories/product_factory.rb +5 -13
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +0 -8
- data/lib/spree/testing_support/factories/product_property_factory.rb +0 -8
- data/lib/spree/testing_support/factories/property_factory.rb +0 -5
- data/lib/spree/testing_support/factories/refund_factory.rb +0 -8
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +0 -7
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +0 -5
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +0 -9
- data/lib/spree/testing_support/factories/return_item_factory.rb +0 -9
- data/lib/spree/testing_support/factories/return_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/role_factory.rb +0 -5
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -11
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +0 -5
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +0 -9
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +0 -8
- data/lib/spree/testing_support/factories/state_factory.rb +8 -10
- data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -9
- data/lib/spree/testing_support/factories/stock_location_factory.rb +0 -9
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +0 -7
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -9
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +0 -8
- data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -13
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_factory.rb +0 -5
- data/lib/spree/testing_support/factories/tax_category_factory.rb +0 -8
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +0 -9
- data/lib/spree/testing_support/factories/taxon_factory.rb +5 -10
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -6
- data/lib/spree/testing_support/factories/user_factory.rb +6 -9
- data/lib/spree/testing_support/factories/variant_factory.rb +0 -10
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +0 -8
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +0 -9
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +0 -8
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -9
- data/lib/spree/testing_support/factory_bot.rb +6 -29
- data/lib/spree/testing_support/flaky.rb +22 -0
- data/lib/spree/testing_support/order_walkthrough.rb +7 -6
- data/lib/spree/testing_support/sequences.rb +0 -5
- 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/spree/testing_support/silence_deprecations.rb +9 -0
- data/lib/spree/user_class_handle.rb +2 -2
- data/lib/tasks/colorado_delivery_fee.rake +28 -0
- data/lib/tasks/payment_method.rake +29 -0
- data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
- data/solidus_core.gemspec +18 -8
- metadata +233 -117
- 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 -77
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -99
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
- data/app/models/spree/promotion/actions/free_shipping.rb +0 -58
- 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 -53
- 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 -74
- data/app/models/spree/promotion/rules/store.rb +0 -22
- data/app/models/spree/promotion/rules/taxon.rb +0 -87
- data/app/models/spree/promotion/rules/user.rb +0 -30
- 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 -284
- data/app/models/spree/promotion_action.rb +0 -43
- 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 -50
- data/app/models/spree/promotion_code_batch.rb +0 -27
- data/app/models/spree/promotion_handler/cart.rb +0 -55
- 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/models/spree/tax/shipping_rate_taxer.rb +0 -24
- data/app/subscribers/spree/mailer_subscriber.rb +0 -25
- 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/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/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
- data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
- 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/event/adapters/active_support_notifications.rb +0 -67
- data/lib/spree/event/configuration.rb +0 -25
- data/lib/spree/event/subscriber.rb +0 -86
- data/lib/spree/event/subscriber_registry.rb +0 -94
- data/lib/spree/event.rb +0 -119
- data/lib/spree/permission_sets/promotion_display.rb +0 -15
- data/lib/spree/permission_sets/promotion_management.rb +0 -15
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +0 -10
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +0 -9
- data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +0 -1
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -16
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -12
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -16
- data/lib/spree/testing_support/factories/promotion_factory.rb +0 -92
- data/lib/spree/testing_support/factories.rb +0 -11
- data/lib/spree/testing_support.rb +0 -31
- data/lib/tasks/upgrade.rake +0 -15
@@ -18,7 +18,7 @@ module Spree
|
|
18
18
|
if product.save
|
19
19
|
variants_attrs.each do |variant_attribute|
|
20
20
|
# make sure the product is assigned before the options=
|
21
|
-
product.variants.create({ product:
|
21
|
+
product.variants.create({ product: }.merge(variant_attribute))
|
22
22
|
end
|
23
23
|
|
24
24
|
set_up_options
|
@@ -35,7 +35,7 @@ module Spree
|
|
35
35
|
product.variants.find(variant_attribute['id'].to_i).update(variant_attribute)
|
36
36
|
else
|
37
37
|
# make sure the product is assigned before the options=
|
38
|
-
product.variants.create({ product:
|
38
|
+
product.variants.create({ product: }.merge(variant_attribute))
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -49,7 +49,7 @@ module Spree
|
|
49
49
|
|
50
50
|
def set_up_options
|
51
51
|
options_attrs.each do |name|
|
52
|
-
option_type = Spree::OptionType.where(name:
|
52
|
+
option_type = Spree::OptionType.where(name:).first_or_initialize do |ot|
|
53
53
|
ot.presentation = name
|
54
54
|
ot.save!
|
55
55
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spree/core/class_constantizer"
|
4
|
+
|
5
|
+
module Spree
|
6
|
+
module Core
|
7
|
+
class NestedClassSet
|
8
|
+
attr_reader :klass_sets
|
9
|
+
|
10
|
+
def initialize(hash = {})
|
11
|
+
@klass_sets = hash.map do |key, value|
|
12
|
+
[
|
13
|
+
key.to_s,
|
14
|
+
ClassConstantizer::Set.new(default: value)
|
15
|
+
]
|
16
|
+
end.to_h
|
17
|
+
end
|
18
|
+
|
19
|
+
def [](klass)
|
20
|
+
klass_sets[klass.to_s] || []
|
21
|
+
end
|
22
|
+
|
23
|
+
def []=(klass, klasses)
|
24
|
+
klass_sets[klass.to_s] = ClassConstantizer::Set.new(default: klasses.map(&:to_s))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module Core
|
5
|
+
class NullPromotionConfiguration < Spree::Preferences::Configuration
|
6
|
+
include Spree::Core::EnvironmentExtension
|
7
|
+
|
8
|
+
# order_adjuster_class allows extensions to provide their own Order Adjuster
|
9
|
+
class_name_attribute :order_adjuster_class, default: 'Spree::NullPromotionAdjuster'
|
10
|
+
|
11
|
+
# Allows providing a different coupon code handler.
|
12
|
+
# @!attribute [rw] coupon_code_handler_class
|
13
|
+
# @see Spree::NullPromotionHandler
|
14
|
+
# @return [Class] an object that conforms to the API of
|
15
|
+
# the standard coupon code handler class
|
16
|
+
# Spree::NullPromotionHandler.
|
17
|
+
class_name_attribute :coupon_code_handler_class, default: 'Spree::NullPromotionHandler'
|
18
|
+
|
19
|
+
# Allows providing a different promotion finder.
|
20
|
+
# @!attribute [rw] promotion_finder_class
|
21
|
+
# @see Spree::NullPromotionFinder
|
22
|
+
# @return [Class] an object that conforms to the API of
|
23
|
+
# the standard promotion finder class
|
24
|
+
# Spree::NullPromotionFinder.
|
25
|
+
class_name_attribute :promotion_finder_class, default: 'Spree::NullPromotionFinder'
|
26
|
+
|
27
|
+
# Allows getting and setting `Spree::Config.promotion_code_batch_mailer_class`.
|
28
|
+
# Both will issue a deprecation warning.
|
29
|
+
class_name_attribute :promotion_code_batch_mailer_class, default: 'Spree::DeprecatedConfigurableClass'
|
30
|
+
deprecate :promotion_code_batch_mailer_class, :promotion_code_batch_mailer_class=, deprecator: Spree.deprecator
|
31
|
+
|
32
|
+
# Allows getting and setting `Spree::Config.promotion_chooser_class`.
|
33
|
+
# Both will issue a deprecation warning.
|
34
|
+
class_name_attribute :promotion_chooser_class, default: 'Spree::DeprecatedConfigurableClass'
|
35
|
+
deprecate :promotion_chooser_class, :promotion_chooser_class=, deprecator: Spree.deprecator
|
36
|
+
|
37
|
+
# Allows getting and setting rules. Deprecated.
|
38
|
+
# @!attribute [rw] rules
|
39
|
+
# @return [Array] a set of rules
|
40
|
+
add_class_set :rules
|
41
|
+
deprecate :rules, :rules=, deprecator: Spree.deprecator
|
42
|
+
|
43
|
+
# Allows getting and setting actions. Deprecated.
|
44
|
+
# @!attribute [rw] actions
|
45
|
+
# @return [Array] a set of actions
|
46
|
+
add_class_set :actions
|
47
|
+
deprecate :actions, :actions=, deprecator: Spree.deprecator
|
48
|
+
|
49
|
+
# Allows getting and setting shipping actions. Deprecated.
|
50
|
+
# @!attribute [rw] shipping_actions
|
51
|
+
# @return [Array] a set of shipping_actions
|
52
|
+
add_class_set :shipping_actions
|
53
|
+
deprecate :shipping_actions, :shipping_actions=, deprecator: Spree.deprecator
|
54
|
+
|
55
|
+
# Allows getting an setting calculators for actions. Deprecated.
|
56
|
+
# @!attribute [rw] calculators
|
57
|
+
# @return [Spree::Core::NestedClassSet] a set of calculators
|
58
|
+
add_nested_class_set :calculators
|
59
|
+
deprecate :calculators, :calculators=, deprecator: Spree.deprecator
|
60
|
+
|
61
|
+
# Allows providing a different promotion shipping promotion handler.
|
62
|
+
# @!attribute [rw] shipping_promotion_handler_class
|
63
|
+
# @see Spree::NullPromotionHandler
|
64
|
+
# @return [Class] an object that conforms to the API of
|
65
|
+
# the standard promotion finder class
|
66
|
+
# Spree::NullPromotionHandler.
|
67
|
+
class_name_attribute :shipping_promotion_handler_class, default: 'Spree::NullPromotionHandler'
|
68
|
+
deprecate :shipping_promotion_handler_class, deprecator: Spree.deprecator
|
69
|
+
deprecate :shipping_promotion_handler_class=, deprecator: Spree.deprecator
|
70
|
+
|
71
|
+
# Allows providing a different promotion advertiser.
|
72
|
+
# @!attribute [rw] advertiser_class
|
73
|
+
# @see Spree::NullPromotionAdvertiser
|
74
|
+
# @return [Class] an object that conforms to the API of
|
75
|
+
# the standard promotion advertiser class
|
76
|
+
# Spree::NullPromotionAdvertiser.
|
77
|
+
class_name_attribute :advertiser_class, default: 'Spree::NullPromotionAdvertiser'
|
78
|
+
|
79
|
+
# !@attribute [rw] promotion_api_attributes
|
80
|
+
# @return [Array<Symbol>] Attributes to be returned by the API for a promotion
|
81
|
+
preference :promotion_api_attributes, :array, default: []
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -45,7 +45,7 @@ module Spree
|
|
45
45
|
new_master.sku = "COPY OF #{master.sku}"
|
46
46
|
new_master.deleted_at = nil
|
47
47
|
new_master.images = master.images.map { |image| duplicate_image image } if @include_images
|
48
|
-
new_master.
|
48
|
+
new_master.prices = master.prices.map(&:dup)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -61,7 +61,7 @@ module Spree
|
|
61
61
|
scope = scope.or(new_scope)
|
62
62
|
end
|
63
63
|
|
64
|
-
Spree::Product.joins(master: :
|
64
|
+
Spree::Product.joins(master: :prices).where(scope)
|
65
65
|
end
|
66
66
|
|
67
67
|
def self.format_price(amount)
|
@@ -112,7 +112,7 @@ module Spree
|
|
112
112
|
{
|
113
113
|
name: 'Brands',
|
114
114
|
scope: :brand_any,
|
115
|
-
conds
|
115
|
+
conds:,
|
116
116
|
labels: brands.sort.map { |key| [key, key] }
|
117
117
|
}
|
118
118
|
end
|
@@ -4,6 +4,12 @@ module Spree
|
|
4
4
|
module Core
|
5
5
|
module Search
|
6
6
|
class Base
|
7
|
+
class InvalidOptions < ArgumentError
|
8
|
+
def initialize(option)
|
9
|
+
super("Invalid option passed to the searcher: '#{option}'")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
attr_accessor :properties
|
8
14
|
attr_accessor :current_user
|
9
15
|
attr_accessor :pricing_options
|
@@ -51,22 +57,25 @@ module Spree
|
|
51
57
|
# separate queries most of the time but opt for a join as soon as any
|
52
58
|
# `where` constraints affecting joined tables are added to the search;
|
53
59
|
# which is the case as soon as a taxon is added to the base scope.
|
54
|
-
scope = scope.preload(master: :
|
60
|
+
scope = scope.preload(master: :prices)
|
55
61
|
scope = scope.preload(master: :images) if @properties[:include_images]
|
56
62
|
scope
|
57
63
|
end
|
58
64
|
|
59
65
|
def add_search_scopes(base_scope)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
return base_scope unless @properties[:search].present?
|
67
|
+
raise InvalidOptions.new(:search) unless @properties[:search].respond_to?(:each_pair)
|
68
|
+
|
69
|
+
@properties[:search].each_pair do |name, scope_attribute|
|
70
|
+
scope_name = name.to_sym
|
71
|
+
|
72
|
+
if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
|
73
|
+
base_scope = base_scope.send(scope_name, *scope_attribute)
|
74
|
+
else
|
75
|
+
base_scope = base_scope.merge(Spree::Product.ransack({ scope_name => scope_attribute }).result)
|
68
76
|
end
|
69
77
|
end
|
78
|
+
|
70
79
|
base_scope
|
71
80
|
end
|
72
81
|
|
@@ -22,7 +22,7 @@ module Spree
|
|
22
22
|
|
23
23
|
def initialize(query_string, scope: Spree::Variant.all)
|
24
24
|
@query_string = query_string
|
25
|
-
@scope = scope
|
25
|
+
@scope = scope.non_template_variants
|
26
26
|
end
|
27
27
|
|
28
28
|
# Searches the variants table using the ransack 'search_terms' defined on the class.
|
@@ -39,7 +39,7 @@ module Spree
|
|
39
39
|
@scope.ransack(search_term_params(word)).result.pluck(:id)
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
@scope.where(id: matches.inject(:&))
|
43
43
|
end
|
44
44
|
|
45
45
|
private
|
@@ -1,42 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
9
|
-
# #<event_name>
|
10
|
-
# #<event_name>!
|
11
|
-
# #can_<event_name>?
|
12
|
-
#
|
13
|
-
# for each state the following instance methods are implemented:
|
14
|
-
# #<state_name>?
|
15
|
-
#
|
16
|
-
module InventoryUnit
|
17
|
-
extend ActiveSupport::Concern
|
18
|
-
|
19
|
-
included do
|
20
|
-
state_machine initial: :on_hand do
|
21
|
-
event :fill_backorder do
|
22
|
-
transition to: :on_hand, from: :backordered
|
23
|
-
end
|
24
|
-
after_transition on: :fill_backorder, do: :fulfill_order
|
25
|
-
|
26
|
-
event :ship do
|
27
|
-
transition to: :shipped, if: :allow_ship?
|
28
|
-
end
|
29
|
-
|
30
|
-
event :return do
|
31
|
-
transition to: :returned, from: :shipped
|
32
|
-
end
|
33
|
-
|
34
|
-
event :cancel do
|
35
|
-
transition to: :canceled, from: ::Spree::InventoryUnit::CANCELABLE_STATES.map(&:to_sym)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,249 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
klass.extend ClassMethods
|
9
|
-
end
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
attr_accessor :previous_states
|
13
|
-
attr_writer :next_event_transitions
|
14
|
-
attr_writer :checkout_steps
|
15
|
-
attr_writer :removed_transitions
|
16
|
-
|
17
|
-
def checkout_flow(&block)
|
18
|
-
if block_given?
|
19
|
-
@checkout_flow = block
|
20
|
-
define_state_machine!
|
21
|
-
else
|
22
|
-
@checkout_flow
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def define_state_machine!
|
27
|
-
self.checkout_steps = {}
|
28
|
-
self.next_event_transitions = []
|
29
|
-
self.previous_states = [:cart]
|
30
|
-
self.removed_transitions = []
|
31
|
-
|
32
|
-
# Build the checkout flow using the checkout_flow defined either
|
33
|
-
# within the Order class, or a decorator for that class.
|
34
|
-
#
|
35
|
-
# This method may be called multiple times depending on if the
|
36
|
-
# checkout_flow is re-defined in a decorator or not.
|
37
|
-
instance_eval(&checkout_flow)
|
38
|
-
|
39
|
-
klass = self
|
40
|
-
|
41
|
-
# To avoid multiple occurrences of the same transition being defined
|
42
|
-
# On first definition, state_machines will not be defined
|
43
|
-
state_machines.clear if respond_to?(:state_machines)
|
44
|
-
state_machine :state, initial: :cart, use_transactions: false do
|
45
|
-
klass.next_event_transitions.each { |state| transition(state.merge(on: :next)) }
|
46
|
-
|
47
|
-
# Persist the state on the order
|
48
|
-
after_transition do |order, transition|
|
49
|
-
order.state = order.state
|
50
|
-
order.state_changes.create(
|
51
|
-
previous_state: transition.from,
|
52
|
-
next_state: transition.to,
|
53
|
-
name: 'order',
|
54
|
-
user_id: order.user_id
|
55
|
-
)
|
56
|
-
order.save
|
57
|
-
end
|
58
|
-
|
59
|
-
event :cancel do
|
60
|
-
transition to: :canceled, if: :allow_cancel?, from: :complete
|
61
|
-
end
|
62
|
-
|
63
|
-
event :return do
|
64
|
-
transition to: :returned, from: [:complete, :awaiting_return], if: :all_inventory_units_returned?
|
65
|
-
end
|
66
|
-
|
67
|
-
event :resume do
|
68
|
-
transition to: :resumed, from: :canceled, if: :canceled?
|
69
|
-
end
|
70
|
-
|
71
|
-
event :authorize_return do
|
72
|
-
transition to: :awaiting_return, from: :complete
|
73
|
-
end
|
74
|
-
|
75
|
-
event :complete do
|
76
|
-
transition to: :complete, from: :confirm
|
77
|
-
end
|
78
|
-
|
79
|
-
if states[:payment]
|
80
|
-
event :payment_failed do
|
81
|
-
transition to: :payment, from: :confirm
|
82
|
-
end
|
83
|
-
|
84
|
-
after_transition to: :complete, do: :add_payment_sources_to_wallet
|
85
|
-
before_transition to: :payment, do: :add_default_payment_from_wallet
|
86
|
-
before_transition to: :payment, do: :ensure_billing_address
|
87
|
-
|
88
|
-
before_transition to: :confirm, do: :add_store_credit_payments
|
89
|
-
|
90
|
-
# see also process_payments_before_complete below which needs to
|
91
|
-
# be added in the correct sequence.
|
92
|
-
end
|
93
|
-
|
94
|
-
before_transition from: :cart, do: :ensure_line_items_present
|
95
|
-
|
96
|
-
if states[:address]
|
97
|
-
before_transition to: :address, do: :assign_default_user_addresses
|
98
|
-
before_transition from: :address, do: :persist_user_address!
|
99
|
-
end
|
100
|
-
|
101
|
-
if states[:delivery]
|
102
|
-
before_transition to: :delivery, do: :ensure_shipping_address
|
103
|
-
before_transition to: :delivery, do: :create_proposed_shipments
|
104
|
-
before_transition to: :delivery, do: :ensure_available_shipping_rates
|
105
|
-
before_transition from: :delivery, do: :apply_shipping_promotions
|
106
|
-
end
|
107
|
-
|
108
|
-
before_transition to: :resumed, do: :ensure_line_item_variants_are_not_deleted
|
109
|
-
before_transition to: :resumed, do: :validate_line_item_availability
|
110
|
-
|
111
|
-
# Sequence of before_transition to: :complete
|
112
|
-
# calls matter so that we do not process payments
|
113
|
-
# until validations have passed
|
114
|
-
before_transition to: :complete, do: :validate_line_item_availability
|
115
|
-
before_transition to: :complete, do: :ensure_promotions_eligible
|
116
|
-
before_transition to: :complete, do: :ensure_line_item_variants_are_not_deleted
|
117
|
-
before_transition to: :complete, do: :ensure_inventory_units
|
118
|
-
if states[:payment]
|
119
|
-
before_transition to: :complete, do: :process_payments_before_complete
|
120
|
-
end
|
121
|
-
|
122
|
-
after_transition to: :complete, do: :finalize!
|
123
|
-
after_transition to: :resumed, do: :after_resume
|
124
|
-
after_transition to: :canceled, do: :after_cancel
|
125
|
-
|
126
|
-
after_transition from: any - :cart, to: any - [:confirm, :complete] do |order|
|
127
|
-
order.recalculate
|
128
|
-
end
|
129
|
-
|
130
|
-
after_transition do |order, transition|
|
131
|
-
order.logger.debug "Order #{order.number} transitioned from #{transition.from} to #{transition.to} via #{transition.event}"
|
132
|
-
end
|
133
|
-
|
134
|
-
after_failure do |order, transition|
|
135
|
-
order.logger.debug "Order #{order.number} halted transition on event #{transition.event} state #{transition.from}: #{order.errors.full_messages.join}"
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def go_to_state(name, options = {})
|
141
|
-
checkout_steps[name] = options
|
142
|
-
previous_states.each do |state|
|
143
|
-
add_transition({ from: state, to: name }.merge(options))
|
144
|
-
end
|
145
|
-
if options[:if]
|
146
|
-
previous_states << name
|
147
|
-
else
|
148
|
-
self.previous_states = [name]
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def insert_checkout_step(name, options = {})
|
153
|
-
before = options.delete(:before)
|
154
|
-
after = options.delete(:after) unless before
|
155
|
-
after = checkout_steps.keys.last unless before || after
|
156
|
-
|
157
|
-
cloned_steps = checkout_steps.clone
|
158
|
-
cloned_removed_transitions = removed_transitions.clone
|
159
|
-
checkout_flow do
|
160
|
-
cloned_steps.each_pair do |key, value|
|
161
|
-
go_to_state(name, options) if key == before
|
162
|
-
go_to_state(key, value)
|
163
|
-
go_to_state(name, options) if key == after
|
164
|
-
end
|
165
|
-
cloned_removed_transitions.each do |transition|
|
166
|
-
remove_transition(transition)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
def remove_checkout_step(name)
|
172
|
-
cloned_steps = checkout_steps.clone
|
173
|
-
cloned_removed_transitions = removed_transitions.clone
|
174
|
-
checkout_flow do
|
175
|
-
cloned_steps.each_pair do |key, value|
|
176
|
-
go_to_state(key, value) unless key == name
|
177
|
-
end
|
178
|
-
cloned_removed_transitions.each do |transition|
|
179
|
-
remove_transition(transition)
|
180
|
-
end
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
def remove_transition(options = {})
|
185
|
-
removed_transitions << options
|
186
|
-
next_event_transitions.delete(find_transition(options))
|
187
|
-
end
|
188
|
-
|
189
|
-
def find_transition(options = {})
|
190
|
-
return nil if options.nil? || !options.include?(:from) || !options.include?(:to)
|
191
|
-
|
192
|
-
next_event_transitions.detect do |transition|
|
193
|
-
transition[options[:from].to_sym] == options[:to].to_sym
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
def next_event_transitions
|
198
|
-
@next_event_transitions ||= []
|
199
|
-
end
|
200
|
-
|
201
|
-
def checkout_steps
|
202
|
-
@checkout_steps ||= {}
|
203
|
-
end
|
204
|
-
|
205
|
-
def checkout_step_names
|
206
|
-
checkout_steps.keys
|
207
|
-
end
|
208
|
-
|
209
|
-
def add_transition(options)
|
210
|
-
next_event_transitions << { options.delete(:from) => options.delete(:to) }.merge(options)
|
211
|
-
end
|
212
|
-
|
213
|
-
def removed_transitions
|
214
|
-
@removed_transitions ||= []
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
def checkout_steps
|
219
|
-
steps = self.class.checkout_steps.each_with_object([]) { |(step, options), checkout_steps|
|
220
|
-
next if options.include?(:if) && !options[:if].call(self)
|
221
|
-
|
222
|
-
checkout_steps << step
|
223
|
-
}.map(&:to_s)
|
224
|
-
# Ensure there is always a complete step
|
225
|
-
steps << "complete" unless steps.include?("complete")
|
226
|
-
steps
|
227
|
-
end
|
228
|
-
|
229
|
-
def has_checkout_step?(step)
|
230
|
-
step.present? && checkout_steps.include?(step)
|
231
|
-
end
|
232
|
-
|
233
|
-
def passed_checkout_step?(step)
|
234
|
-
has_checkout_step?(step) && checkout_step_index(step) < checkout_step_index(state)
|
235
|
-
end
|
236
|
-
|
237
|
-
def checkout_step_index(step)
|
238
|
-
checkout_steps.index(step).to_i
|
239
|
-
end
|
240
|
-
|
241
|
-
def can_go_to_state?(state)
|
242
|
-
return false unless has_checkout_step?(self.state) && has_checkout_step?(state)
|
243
|
-
|
244
|
-
checkout_step_index(state) > checkout_step_index(self.state)
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,61 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
9
|
-
# #<event_name>
|
10
|
-
# #<event_name>!
|
11
|
-
# #can_<event_name>?
|
12
|
-
#
|
13
|
-
# for each state the following instance methods are implemented:
|
14
|
-
# #<state_name>?
|
15
|
-
#
|
16
|
-
module Payment
|
17
|
-
extend ActiveSupport::Concern
|
18
|
-
|
19
|
-
included do
|
20
|
-
state_machine initial: :checkout do
|
21
|
-
# With card payments, happens before purchase or authorization happens
|
22
|
-
#
|
23
|
-
# Setting it after creating a profile and authorizing a full amount will
|
24
|
-
# prevent the payment from being authorized again once Order transitions
|
25
|
-
# to complete
|
26
|
-
event :started_processing do
|
27
|
-
transition from: [:checkout, :pending, :completed, :processing], to: :processing
|
28
|
-
end
|
29
|
-
# When processing during checkout fails
|
30
|
-
event :failure do
|
31
|
-
transition from: [:pending, :processing], to: :failed
|
32
|
-
end
|
33
|
-
# With card payments this represents authorizing the payment
|
34
|
-
event :pend do
|
35
|
-
transition from: [:checkout, :processing], to: :pending
|
36
|
-
end
|
37
|
-
# With card payments this represents completing a purchase or capture transaction
|
38
|
-
event :complete do
|
39
|
-
transition from: [:processing, :pending, :checkout], to: :completed
|
40
|
-
end
|
41
|
-
event :void do
|
42
|
-
transition from: [:pending, :processing, :completed, :checkout], to: :void
|
43
|
-
end
|
44
|
-
# when the card brand isnt supported
|
45
|
-
event :invalidate do
|
46
|
-
transition from: [:checkout], to: :invalid
|
47
|
-
end
|
48
|
-
|
49
|
-
after_transition do |payment, transition|
|
50
|
-
payment.state_changes.create!(
|
51
|
-
previous_state: transition.from,
|
52
|
-
next_state: transition.to,
|
53
|
-
name: 'payment'
|
54
|
-
)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,33 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
9
|
-
# #<event_name>
|
10
|
-
# #<event_name>!
|
11
|
-
# #can_<event_name>?
|
12
|
-
#
|
13
|
-
# for each state the following instance methods are implemented:
|
14
|
-
# #<state_name>?
|
15
|
-
#
|
16
|
-
module Reimbursement
|
17
|
-
extend ActiveSupport::Concern
|
18
|
-
|
19
|
-
included do
|
20
|
-
state_machine :reimbursement_status, initial: :pending do
|
21
|
-
event :errored do
|
22
|
-
transition to: :errored, from: [:pending, :errored]
|
23
|
-
end
|
24
|
-
|
25
|
-
event :reimbursed do
|
26
|
-
transition to: :reimbursed, from: [:pending, :errored]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,32 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
9
|
-
# #<event_name>
|
10
|
-
# #<event_name>!
|
11
|
-
# #can_<event_name>?
|
12
|
-
#
|
13
|
-
# for each state the following instance methods are implemented:
|
14
|
-
# #<state_name>?
|
15
|
-
#
|
16
|
-
module ReturnAuthorization
|
17
|
-
extend ActiveSupport::Concern
|
18
|
-
|
19
|
-
included do
|
20
|
-
state_machine initial: :authorized do
|
21
|
-
before_transition to: :canceled, do: :cancel_return_items
|
22
|
-
|
23
|
-
event :cancel do
|
24
|
-
transition to: :canceled, from: :authorized,
|
25
|
-
if: lambda { |return_authorization| return_authorization.can_cancel_return_items? }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|