solidus_core 2.10.0 → 2.11.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/app/assets/javascripts/spree.js.erb +31 -2
- data/app/controllers/spree/base_controller.rb +1 -0
- data/app/mailers/spree/base_mailer.rb +4 -0
- data/app/mailers/spree/order_mailer.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
- data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
- data/app/models/concerns/spree/default_price.rb +1 -1
- data/app/models/concerns/spree/soft_deletable.rb +18 -0
- data/app/models/concerns/spree/user_address_book.rb +86 -32
- data/app/models/concerns/spree/user_methods.rb +3 -2
- data/app/models/spree/ability.rb +34 -10
- data/app/models/spree/address/name.rb +49 -0
- data/app/models/spree/address/state_validator.rb +71 -0
- data/app/models/spree/address.rb +94 -17
- data/app/models/spree/adjustment.rb +1 -1
- data/app/models/spree/base.rb +1 -0
- data/app/models/spree/calculator/default_tax.rb +1 -1
- data/app/models/spree/calculator/percent_per_item.rb +4 -4
- data/app/models/spree/calculator/price_sack.rb +1 -1
- data/app/models/spree/credit_card.rb +2 -2
- data/app/models/spree/customer_return.rb +4 -2
- data/app/models/spree/exchange.rb +1 -1
- data/app/models/spree/image/active_storage_attachment.rb +21 -0
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/line_item.rb +13 -4
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order/checkout.rb +1 -0
- data/app/models/spree/order.rb +91 -20
- data/app/models/spree/order_inventory.rb +16 -4
- data/app/models/spree/order_merger.rb +6 -4
- data/app/models/spree/order_promotion.rb +1 -1
- data/app/models/spree/order_updater.rb +11 -10
- data/app/models/spree/payment/cancellation.rb +3 -3
- data/app/models/spree/payment/processing.rb +54 -30
- data/app/models/spree/payment.rb +3 -3
- data/app/models/spree/payment_method.rb +8 -9
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +2 -8
- data/app/models/spree/product/scopes.rb +10 -5
- data/app/models/spree/product.rb +19 -14
- data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
- data/app/models/spree/promotion.rb +18 -7
- data/app/models/spree/promotion_action.rb +1 -7
- data/app/models/spree/promotion_code.rb +6 -1
- data/app/models/spree/promotion_code_batch.rb +1 -1
- data/app/models/spree/promotion_handler/coupon.rb +2 -2
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/promotion_rule_role.rb +1 -1
- data/app/models/spree/refund.rb +54 -12
- data/app/models/spree/reimbursement.rb +27 -0
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
- data/app/models/spree/return_authorization.rb +1 -1
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
- data/app/models/spree/return_item.rb +21 -10
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/shipment.rb +2 -2
- data/app/models/spree/shipping_calculator.rb +1 -1
- data/app/models/spree/shipping_manifest.rb +2 -2
- data/app/models/spree/shipping_method.rb +2 -9
- data/app/models/spree/shipping_rate.rb +1 -1
- data/app/models/spree/shipping_rate_tax.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
- data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
- data/app/models/spree/stock/package.rb +1 -1
- data/app/models/spree/stock/simple_coordinator.rb +1 -3
- data/app/models/spree/stock_item.rb +2 -8
- data/app/models/spree/stock_movement.rb +2 -0
- data/app/models/spree/store.rb +1 -1
- data/app/models/spree/store_credit.rb +1 -7
- data/app/models/spree/store_credit_category.rb +30 -3
- data/app/models/spree/store_credit_event.rb +1 -7
- data/app/models/spree/store_credit_reason.rb +0 -4
- data/app/models/spree/tax/tax_helpers.rb +1 -1
- data/app/models/spree/tax_category.rb +2 -8
- data/app/models/spree/tax_rate.rb +7 -7
- data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
- data/app/models/spree/taxon.rb +1 -1
- data/app/models/spree/user_address.rb +8 -2
- data/app/models/spree/variant.rb +7 -13
- data/app/models/spree/variant_property_rule.rb +5 -1
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
- data/app/models/spree/zone.rb +1 -1
- data/config/locales/en.yml +44 -5
- data/db/default/spree/countries.rb +1 -1
- data/db/default/spree/states.rb +12 -4
- data/db/default/spree/store_credit.rb +2 -2
- data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
- data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
- data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
- data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
- data/lib/generators/solidus/install/install_generator.rb +253 -0
- data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
- data/lib/generators/spree/install/install_generator.rb +7 -189
- data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
- data/lib/spree/app_configuration.rb +117 -51
- data/lib/spree/awesome_nested_set_override.rb +44 -0
- data/lib/spree/core/controller_helpers/auth.rb +17 -4
- data/lib/spree/core/controller_helpers/current_host.rb +17 -0
- data/lib/spree/core/controller_helpers/order.rb +8 -7
- data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
- data/lib/spree/core/engine.rb +39 -2
- data/lib/spree/core/importer/order.rb +26 -11
- data/lib/spree/core/permalinks.rb +1 -3
- data/lib/spree/core/product_filters.rb +6 -5
- data/lib/spree/core/state_machines/order.rb +249 -0
- data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
- data/lib/spree/core/state_machines.rb +20 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +5 -11
- data/lib/spree/encryptor.rb +25 -0
- data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
- data/lib/spree/event/configuration.rb +11 -6
- data/lib/spree/event/subscriber.rb +38 -18
- data/lib/spree/event/subscriber_registry.rb +92 -0
- data/lib/spree/event.rb +40 -7
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/mailer_previews/carton_preview.rb +2 -1
- data/lib/spree/paranoia_deprecations.rb +32 -12
- data/lib/spree/permission_sets/configuration_display.rb +14 -14
- data/lib/spree/permission_sets/default_customer.rb +16 -16
- data/lib/spree/permission_sets/order_display.rb +11 -11
- data/lib/spree/permission_sets/order_management.rb +1 -1
- data/lib/spree/permission_sets/product_display.rb +9 -9
- data/lib/spree/permission_sets/promotion_display.rb +5 -5
- data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
- data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
- data/lib/spree/permission_sets/stock_display.rb +2 -2
- data/lib/spree/permission_sets/stock_management.rb +1 -1
- data/lib/spree/permission_sets/user_display.rb +3 -3
- data/lib/spree/permission_sets/user_management.rb +4 -3
- data/lib/spree/permitted_attributes.rb +79 -9
- data/lib/spree/preferences/preferable.rb +4 -3
- data/lib/spree/preferences/preferable_class_methods.rb +22 -3
- data/lib/spree/testing_support/ability_helpers.rb +9 -9
- data/lib/spree/testing_support/authorization_helpers.rb +1 -0
- data/lib/spree/testing_support/blacklist_urls.rb +23 -0
- data/lib/spree/testing_support/capybara_ext.rb +3 -0
- data/lib/spree/testing_support/common_rake.rb +3 -3
- data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
- data/lib/spree/testing_support/dummy_app.rb +44 -23
- data/lib/spree/testing_support/factories/address_factory.rb +1 -2
- data/lib/spree/testing_support/factories/image_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
- data/lib/spree/testing_support/factories/user_factory.rb +4 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
- data/lib/spree/testing_support/job_helpers.rb +24 -0
- data/lib/spree/testing_support/precompiled_assets.rb +15 -0
- data/lib/spree/testing_support/preferences.rb +3 -1
- data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
- data/lib/spree/testing_support/translations.rb +25 -0
- data/solidus_core.gemspec +8 -5
- metadata +81 -359
- data/script/rails +0 -10
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/base_helper_spec.rb +0 -168
- data/spec/helpers/products_helper_spec.rb +0 -202
- data/spec/helpers/taxons_helper_spec.rb +0 -43
- data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
- data/spec/lib/calculated_adjustments_spec.rb +0 -133
- data/spec/lib/i18n_spec.rb +0 -97
- data/spec/lib/search/base_spec.rb +0 -91
- data/spec/lib/search/variant_spec.rb +0 -115
- data/spec/lib/spree/app_configuration_spec.rb +0 -140
- data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
- data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
- data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
- data/spec/lib/spree/core/current_store_spec.rb +0 -33
- data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
- data/spec/lib/spree/core/importer/order_spec.rb +0 -484
- data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
- data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
- data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
- data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
- data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
- data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
- data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
- data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
- data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
- data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
- data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
- data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
- data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
- data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
- data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
- data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
- data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
- data/spec/lib/spree/core/validators/email_spec.rb +0 -53
- data/spec/lib/spree/core/version_spec.rb +0 -19
- data/spec/lib/spree/event/subscriber_spec.rb +0 -85
- data/spec/lib/spree/event_spec.rb +0 -130
- data/spec/lib/spree/localized_number_spec.rb +0 -45
- data/spec/lib/spree/migrations_spec.rb +0 -32
- data/spec/lib/spree/money_spec.rb +0 -298
- data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
- data/spec/lib/spree/promo/environment_spec.rb +0 -53
- data/spec/lib/tasks/dummy_task.rake +0 -12
- data/spec/lib/tasks/dummy_task_spec.rb +0 -30
- data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
- data/spec/mailers/carton_mailer_spec.rb +0 -44
- data/spec/mailers/order_mailer_spec.rb +0 -117
- data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
- data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
- data/spec/mailers/test_mailer_spec.rb +0 -13
- data/spec/models/spree/ability_spec.rb +0 -279
- data/spec/models/spree/address_spec.rb +0 -399
- data/spec/models/spree/adjustment_reason_spec.rb +0 -11
- data/spec/models/spree/adjustment_spec.rb +0 -339
- data/spec/models/spree/asset_spec.rb +0 -25
- data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
- data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
- data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
- data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
- data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
- data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
- data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
- data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
- data/spec/models/spree/calculator_spec.rb +0 -43
- data/spec/models/spree/carton_spec.rb +0 -145
- data/spec/models/spree/classification_spec.rb +0 -126
- data/spec/models/spree/concerns/display_money_spec.rb +0 -44
- data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
- data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
- data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
- data/spec/models/spree/country_spec.rb +0 -154
- data/spec/models/spree/credit_card_spec.rb +0 -373
- data/spec/models/spree/customer_return_spec.rb +0 -294
- data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
- data/spec/models/spree/exchange_spec.rb +0 -76
- data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
- data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
- data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
- data/spec/models/spree/gateway/bogus_simple.rb +0 -14
- data/spec/models/spree/gateway/bogus_spec.rb +0 -14
- data/spec/models/spree/gateway_spec.rb +0 -14
- data/spec/models/spree/image_spec.rb +0 -25
- data/spec/models/spree/inventory_unit_spec.rb +0 -309
- data/spec/models/spree/line_item_spec.rb +0 -240
- data/spec/models/spree/option_type_spec.rb +0 -16
- data/spec/models/spree/option_value_spec.rb +0 -52
- data/spec/models/spree/order/address_spec.rb +0 -52
- data/spec/models/spree/order/adjustments_spec.rb +0 -29
- data/spec/models/spree/order/callbacks_spec.rb +0 -44
- data/spec/models/spree/order/checkout_spec.rb +0 -740
- data/spec/models/spree/order/finalizing_spec.rb +0 -92
- data/spec/models/spree/order/number_generator_spec.rb +0 -47
- data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
- data/spec/models/spree/order/payment_spec.rb +0 -280
- data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
- data/spec/models/spree/order/state_machine_spec.rb +0 -122
- data/spec/models/spree/order/totals_spec.rb +0 -26
- data/spec/models/spree/order/validations_spec.rb +0 -17
- data/spec/models/spree/order_cancellations_spec.rb +0 -233
- data/spec/models/spree/order_capturing_spec.rb +0 -16
- data/spec/models/spree/order_contents_spec.rb +0 -362
- data/spec/models/spree/order_inventory_spec.rb +0 -285
- data/spec/models/spree/order_merger_spec.rb +0 -162
- data/spec/models/spree/order_mutex_spec.rb +0 -89
- data/spec/models/spree/order_promotion_spec.rb +0 -33
- data/spec/models/spree/order_shipping_spec.rb +0 -247
- data/spec/models/spree/order_spec.rb +0 -1687
- data/spec/models/spree/order_taxation_spec.rb +0 -128
- data/spec/models/spree/order_update_attributes_spec.rb +0 -49
- data/spec/models/spree/order_updater_spec.rb +0 -556
- data/spec/models/spree/payment/cancellation_spec.rb +0 -84
- data/spec/models/spree/payment_create_spec.rb +0 -195
- data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
- data/spec/models/spree/payment_method/check_spec.rb +0 -80
- data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
- data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
- data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
- data/spec/models/spree/payment_method_spec.rb +0 -408
- data/spec/models/spree/payment_spec.rb +0 -1270
- data/spec/models/spree/permission_sets/base_spec.rb +0 -14
- data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
- data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
- data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
- data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
- data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
- data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
- data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
- data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
- data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
- data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
- data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
- data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
- data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
- data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
- data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
- data/spec/models/spree/preference_spec.rb +0 -79
- data/spec/models/spree/preferences/configuration_spec.rb +0 -27
- data/spec/models/spree/preferences/preferable_spec.rb +0 -334
- data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
- data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
- data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
- data/spec/models/spree/preferences/store_spec.rb +0 -40
- data/spec/models/spree/price_spec.rb +0 -150
- data/spec/models/spree/product/scopes_spec.rb +0 -164
- data/spec/models/spree/product_duplicator_spec.rb +0 -92
- data/spec/models/spree/product_filter_spec.rb +0 -28
- data/spec/models/spree/product_property_spec.rb +0 -20
- data/spec/models/spree/product_spec.rb +0 -584
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
- data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
- data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
- data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
- data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
- data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
- data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
- data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
- data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
- data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
- data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
- data/spec/models/spree/promotion_action_spec.rb +0 -44
- data/spec/models/spree/promotion_category_spec.rb +0 -19
- data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
- data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
- data/spec/models/spree/promotion_code_spec.rb +0 -206
- data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
- data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
- data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
- data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
- data/spec/models/spree/promotion_rule_spec.rb +0 -34
- data/spec/models/spree/promotion_spec.rb +0 -945
- data/spec/models/spree/refund_spec.rb +0 -200
- data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
- data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
- data/spec/models/spree/reimbursement_spec.rb +0 -278
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
- data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
- data/spec/models/spree/return_authorization_spec.rb +0 -226
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
- data/spec/models/spree/return_item_spec.rb +0 -785
- data/spec/models/spree/returns_calculator_spec.rb +0 -16
- data/spec/models/spree/shipment_spec.rb +0 -914
- data/spec/models/spree/shipping_calculator_spec.rb +0 -45
- data/spec/models/spree/shipping_manifest_spec.rb +0 -110
- data/spec/models/spree/shipping_method_spec.rb +0 -292
- data/spec/models/spree/shipping_rate_spec.rb +0 -154
- data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
- data/spec/models/spree/state_spec.rb +0 -43
- data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
- data/spec/models/spree/stock/availability_spec.rb +0 -143
- data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
- data/spec/models/spree/stock/content_item_spec.rb +0 -70
- data/spec/models/spree/stock/differentiator_spec.rb +0 -41
- data/spec/models/spree/stock/estimator_spec.rb +0 -241
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
- data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
- data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
- data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
- data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
- data/spec/models/spree/stock/package_spec.rb +0 -182
- data/spec/models/spree/stock/quantifier_spec.rb +0 -113
- data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
- data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
- data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
- data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
- data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
- data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
- data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
- data/spec/models/spree/stock_item_spec.rb +0 -348
- data/spec/models/spree/stock_location_spec.rb +0 -288
- data/spec/models/spree/stock_movement_spec.rb +0 -58
- data/spec/models/spree/stock_quantities_spec.rb +0 -249
- data/spec/models/spree/store_credit_category_spec.rb +0 -19
- data/spec/models/spree/store_credit_event_spec.rb +0 -328
- data/spec/models/spree/store_credit_spec.rb +0 -900
- data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
- data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
- data/spec/models/spree/store_spec.rb +0 -156
- data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
- data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
- data/spec/models/spree/tax/tax_location_spec.rb +0 -79
- data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
- data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
- data/spec/models/spree/tax_category_spec.rb +0 -50
- data/spec/models/spree/tax_rate_spec.rb +0 -317
- data/spec/models/spree/taxon_spec.rb +0 -197
- data/spec/models/spree/taxonomy_spec.rb +0 -15
- data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
- data/spec/models/spree/unit_cancel_spec.rb +0 -126
- data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
- data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
- data/spec/models/spree/user_spec.rb +0 -247
- data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
- data/spec/models/spree/variant/price_selector_spec.rb +0 -90
- data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
- data/spec/models/spree/variant/scopes_spec.rb +0 -94
- data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
- data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
- data/spec/models/spree/variant_property_rule_spec.rb +0 -85
- data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
- data/spec/models/spree/variant_spec.rb +0 -862
- data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
- data/spec/models/spree/wallet_spec.rb +0 -155
- data/spec/models/spree/zone_spec.rb +0 -248
- data/spec/rails_helper.rb +0 -46
- data/spec/shared_examples/calculator_shared_examples.rb +0 -10
- data/spec/spec_helper.rb +0 -36
- data/spec/support/big_decimal.rb +0 -7
- data/spec/support/concerns/default_price.rb +0 -44
- data/spec/support/concerns/payment_source.rb +0 -66
- data/spec/support/concerns/working_factories.rb +0 -15
- data/spec/support/dummy_ability.rb +0 -7
- /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
- /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
- /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
- /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
data/app/models/spree/product.rb
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'discard'
|
|
4
|
-
|
|
5
3
|
module Spree
|
|
6
4
|
# Products represent an entity for sale in a store. Products can have
|
|
7
5
|
# variations, called variants. Product properties include description,
|
|
@@ -15,11 +13,7 @@ module Spree
|
|
|
15
13
|
extend FriendlyId
|
|
16
14
|
friendly_id :slug_candidates, use: :history
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
include Spree::ParanoiaDeprecations
|
|
20
|
-
|
|
21
|
-
include Discard::Model
|
|
22
|
-
self.discard_column = :deleted_at
|
|
16
|
+
include Spree::SoftDeletable
|
|
23
17
|
|
|
24
18
|
after_discard do
|
|
25
19
|
variants_including_master.discard_all
|
|
@@ -48,7 +42,7 @@ module Spree
|
|
|
48
42
|
belongs_to :shipping_category, class_name: 'Spree::ShippingCategory', inverse_of: :products, optional: true
|
|
49
43
|
|
|
50
44
|
has_one :master,
|
|
51
|
-
-> { where(is_master: true).
|
|
45
|
+
-> { where(is_master: true).with_discarded },
|
|
52
46
|
inverse_of: :product,
|
|
53
47
|
class_name: 'Spree::Variant',
|
|
54
48
|
autosave: true
|
|
@@ -121,7 +115,7 @@ module Spree
|
|
|
121
115
|
validates :name, presence: true
|
|
122
116
|
validates :price, presence: true, if: proc { Spree::Config[:require_master_price] }
|
|
123
117
|
validates :shipping_category_id, presence: true
|
|
124
|
-
validates :slug, presence: true, uniqueness: { allow_blank: true }
|
|
118
|
+
validates :slug, presence: true, uniqueness: { allow_blank: true, case_sensitive: true }
|
|
125
119
|
|
|
126
120
|
attr_accessor :option_values_hash
|
|
127
121
|
|
|
@@ -134,7 +128,7 @@ module Spree
|
|
|
134
128
|
self.whitelisted_ransackable_attributes = %w[name slug]
|
|
135
129
|
|
|
136
130
|
def self.ransackable_scopes(_auth_object = nil)
|
|
137
|
-
%i(
|
|
131
|
+
%i(with_discarded with_variant_sku_cont)
|
|
138
132
|
end
|
|
139
133
|
|
|
140
134
|
# @return [Boolean] true if there are any variants
|
|
@@ -174,11 +168,22 @@ module Spree
|
|
|
174
168
|
end
|
|
175
169
|
|
|
176
170
|
# Determines if product is available. A product is available if it has not
|
|
177
|
-
# been deleted
|
|
171
|
+
# been deleted, the available_on date is in the past
|
|
172
|
+
# and the discontinue_on date is nil or in the future.
|
|
178
173
|
#
|
|
179
174
|
# @return [Boolean] true if this product is available
|
|
180
175
|
def available?
|
|
181
|
-
!
|
|
176
|
+
!deleted? && available_on&.past? && !discontinued?
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Determines if product is discontinued.
|
|
180
|
+
#
|
|
181
|
+
# A product is discontinued if the discontinue_on date
|
|
182
|
+
# is not nil and in the past.
|
|
183
|
+
#
|
|
184
|
+
# @return [Boolean] true if this product is discontinued
|
|
185
|
+
def discontinued?
|
|
186
|
+
!!discontinue_on&.past?
|
|
182
187
|
end
|
|
183
188
|
|
|
184
189
|
# Groups variants by the specified option type.
|
|
@@ -381,11 +386,11 @@ module Spree
|
|
|
381
386
|
|
|
382
387
|
# Iterate through this product's taxons and taxonomies and touch their timestamps in a batch
|
|
383
388
|
def touch_taxons
|
|
384
|
-
taxons_to_touch = taxons.
|
|
389
|
+
taxons_to_touch = taxons.flat_map(&:self_and_ancestors).uniq
|
|
385
390
|
unless taxons_to_touch.empty?
|
|
386
391
|
Spree::Taxon.where(id: taxons_to_touch.map(&:id)).update_all(updated_at: Time.current)
|
|
387
392
|
|
|
388
|
-
taxonomy_ids_to_touch = taxons_to_touch.
|
|
393
|
+
taxonomy_ids_to_touch = taxons_to_touch.flat_map(&:taxonomy_id).uniq
|
|
389
394
|
Spree::Taxonomy.where(id: taxonomy_ids_to_touch).update_all(updated_at: Time.current)
|
|
390
395
|
end
|
|
391
396
|
end
|
|
@@ -8,8 +8,9 @@ module Spree
|
|
|
8
8
|
order = payload[:order]
|
|
9
9
|
promotion_code = payload[:promotion_code]
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
created_adjustments = order.shipments.map do |shipment|
|
|
12
|
+
next if promotion_credit_exists?(shipment)
|
|
13
|
+
|
|
13
14
|
shipment.adjustments.create!(
|
|
14
15
|
order: shipment.order,
|
|
15
16
|
amount: compute_amount(shipment),
|
|
@@ -17,11 +18,11 @@ module Spree
|
|
|
17
18
|
promotion_code: promotion_code,
|
|
18
19
|
label: label
|
|
19
20
|
)
|
|
20
|
-
true
|
|
21
21
|
end
|
|
22
|
-
|
|
22
|
+
|
|
23
|
+
# Did we actually end up creating any adjustments?
|
|
23
24
|
# If so, then this action should be classed as 'successful'
|
|
24
|
-
|
|
25
|
+
created_adjustments.any?
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
def label
|
|
@@ -28,26 +28,38 @@ module Spree
|
|
|
28
28
|
validates_associated :rules
|
|
29
29
|
|
|
30
30
|
validates :name, presence: true
|
|
31
|
-
validates :path, uniqueness: { allow_blank: true }
|
|
31
|
+
validates :path, uniqueness: { allow_blank: true, case_sensitive: true }
|
|
32
32
|
validates :usage_limit, numericality: { greater_than: 0, allow_nil: true }
|
|
33
33
|
validates :per_code_usage_limit, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
|
|
34
34
|
validates :description, length: { maximum: 255 }
|
|
35
|
-
validate :
|
|
35
|
+
validate :apply_automatically_disallowed_with_paths
|
|
36
36
|
|
|
37
37
|
before_save :normalize_blank_values
|
|
38
38
|
|
|
39
39
|
scope :coupons, -> { joins(:codes).distinct }
|
|
40
40
|
scope :advertised, -> { where(advertise: true) }
|
|
41
41
|
scope :active, -> do
|
|
42
|
+
return started_and_unexpired if Spree::Config.consider_actionless_promotion_active == true
|
|
43
|
+
|
|
44
|
+
has_actions.started_and_unexpired
|
|
45
|
+
end
|
|
46
|
+
scope :started_and_unexpired, -> do
|
|
42
47
|
table = arel_table
|
|
43
48
|
time = Time.current
|
|
49
|
+
|
|
44
50
|
where(table[:starts_at].eq(nil).or(table[:starts_at].lt(time))).
|
|
45
51
|
where(table[:expires_at].eq(nil).or(table[:expires_at].gt(time)))
|
|
46
52
|
end
|
|
53
|
+
scope :has_actions, -> do
|
|
54
|
+
joins(:promotion_actions)
|
|
55
|
+
end
|
|
47
56
|
scope :applied, -> { joins(:order_promotions).distinct }
|
|
48
57
|
|
|
49
58
|
self.whitelisted_ransackable_associations = ['codes']
|
|
50
59
|
self.whitelisted_ransackable_attributes = %w[name path promotion_category_id]
|
|
60
|
+
def self.ransackable_scopes(*)
|
|
61
|
+
%i(active)
|
|
62
|
+
end
|
|
51
63
|
|
|
52
64
|
def self.order_activatable?(order)
|
|
53
65
|
order && !UNACTIVATABLE_ORDER_STATES.include?(order.state)
|
|
@@ -81,7 +93,7 @@ module Spree
|
|
|
81
93
|
end
|
|
82
94
|
|
|
83
95
|
def active?
|
|
84
|
-
started? && not_expired?
|
|
96
|
+
started? && not_expired? && (Spree::Config.consider_actionless_promotion_active || actions.present?)
|
|
85
97
|
end
|
|
86
98
|
|
|
87
99
|
def inactive?
|
|
@@ -164,10 +176,10 @@ module Spree
|
|
|
164
176
|
end
|
|
165
177
|
|
|
166
178
|
def products
|
|
167
|
-
rules.where(type: "Spree::Promotion::Rules::Product").
|
|
179
|
+
rules.where(type: "Spree::Promotion::Rules::Product").flat_map(&:products).uniq
|
|
168
180
|
end
|
|
169
181
|
|
|
170
|
-
# Whether the promotion has exceeded
|
|
182
|
+
# Whether the promotion has exceeded its usage restrictions.
|
|
171
183
|
#
|
|
172
184
|
# @param excluded_orders [Array<Spree::Order>] Orders to exclude from usage limit
|
|
173
185
|
# @return true or false
|
|
@@ -257,10 +269,9 @@ module Spree
|
|
|
257
269
|
match_policy == "all"
|
|
258
270
|
end
|
|
259
271
|
|
|
260
|
-
def
|
|
272
|
+
def apply_automatically_disallowed_with_paths
|
|
261
273
|
return unless apply_automatically
|
|
262
274
|
|
|
263
|
-
errors.add(:apply_automatically, :disallowed_with_code) if codes.any?
|
|
264
275
|
errors.add(:apply_automatically, :disallowed_with_path) if path.present?
|
|
265
276
|
end
|
|
266
277
|
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'discard'
|
|
4
|
-
|
|
5
3
|
module Spree
|
|
6
4
|
# Base class for all types of promotion action.
|
|
7
5
|
#
|
|
8
6
|
# PromotionActions perform the necessary tasks when a promotion is activated
|
|
9
7
|
# by an event and determined to be eligible.
|
|
10
8
|
class PromotionAction < Spree::Base
|
|
11
|
-
|
|
12
|
-
include Spree::ParanoiaDeprecations
|
|
13
|
-
|
|
14
|
-
include Discard::Model
|
|
15
|
-
self.discard_column = :deleted_at
|
|
9
|
+
include Spree::SoftDeletable
|
|
16
10
|
|
|
17
11
|
belongs_to :promotion, class_name: 'Spree::Promotion', inverse_of: :promotion_actions, optional: true
|
|
18
12
|
|
|
@@ -5,8 +5,9 @@ class Spree::PromotionCode < Spree::Base
|
|
|
5
5
|
belongs_to :promotion_code_batch, class_name: "Spree::PromotionCodeBatch", optional: true
|
|
6
6
|
has_many :adjustments
|
|
7
7
|
|
|
8
|
-
validates :value, presence: true, uniqueness: { allow_blank: true }
|
|
8
|
+
validates :value, presence: true, uniqueness: { allow_blank: true, case_sensitive: true }
|
|
9
9
|
validates :promotion, presence: true
|
|
10
|
+
validate :promotion_not_apply_automatically, on: :create
|
|
10
11
|
|
|
11
12
|
before_save :normalize_code
|
|
12
13
|
|
|
@@ -37,6 +38,10 @@ class Spree::PromotionCode < Spree::Base
|
|
|
37
38
|
promotion.per_code_usage_limit
|
|
38
39
|
end
|
|
39
40
|
|
|
41
|
+
def promotion_not_apply_automatically
|
|
42
|
+
errors.add(:base, :disallowed_with_apply_automatically) if promotion.apply_automatically
|
|
43
|
+
end
|
|
44
|
+
|
|
40
45
|
private
|
|
41
46
|
|
|
42
47
|
def normalize_code
|
|
@@ -13,9 +13,9 @@ module Spree
|
|
|
13
13
|
|
|
14
14
|
def apply
|
|
15
15
|
if coupon_code.present?
|
|
16
|
-
if promotion.present? && promotion.actions.exists?
|
|
16
|
+
if promotion.present? && promotion.active? && promotion.actions.exists?
|
|
17
17
|
handle_present_promotion(promotion)
|
|
18
|
-
elsif promotion_code
|
|
18
|
+
elsif promotion_code&.promotion&.expired?
|
|
19
19
|
set_error_code :coupon_code_expired
|
|
20
20
|
else
|
|
21
21
|
set_error_code :coupon_code_not_found
|
|
@@ -45,7 +45,7 @@ module Spree
|
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def eligibility_error_message(key, options = {})
|
|
48
|
-
I18n.t(key, { scope: [:spree, :eligibility_errors, :messages] }.merge(options))
|
|
48
|
+
I18n.t(key, **{ scope: [:spree, :eligibility_errors, :messages] }.merge(options))
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Spree
|
|
4
|
-
class PromotionRuleRole <
|
|
4
|
+
class PromotionRuleRole < Spree::Base
|
|
5
5
|
belongs_to :promotion_rule, class_name: 'Spree::PromotionRule', optional: true
|
|
6
6
|
belongs_to :role, class_name: 'Spree::Role', optional: true
|
|
7
7
|
end
|
data/app/models/spree/refund.rb
CHANGED
|
@@ -10,13 +10,16 @@ module Spree
|
|
|
10
10
|
|
|
11
11
|
validates :payment, presence: true
|
|
12
12
|
validates :reason, presence: true
|
|
13
|
-
validates :transaction_id, presence: true, on: :update # can't require this on create because the before_create needs to run first
|
|
14
13
|
validates :amount, presence: true, numericality: { greater_than: 0 }
|
|
15
14
|
|
|
16
15
|
validate :amount_is_less_than_or_equal_to_allowed_amount, on: :create
|
|
17
16
|
|
|
17
|
+
attr_reader :perform_response
|
|
18
|
+
attr_accessor :perform_after_create
|
|
19
|
+
|
|
20
|
+
after_create :set_perform_after_create_default
|
|
18
21
|
after_create :perform!
|
|
19
|
-
after_create :
|
|
22
|
+
after_create :clear_perform_after_create
|
|
20
23
|
|
|
21
24
|
scope :non_reimbursement, -> { where(reimbursement_id: nil) }
|
|
22
25
|
|
|
@@ -37,22 +40,65 @@ module Spree
|
|
|
37
40
|
payment.payment_method.name
|
|
38
41
|
end
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
#
|
|
43
|
+
# Must be called for the refund transaction to be processed.
|
|
44
|
+
#
|
|
45
|
+
# Attempts to perform the refund,
|
|
43
46
|
# raises an error if the refund fails.
|
|
44
47
|
def perform!
|
|
48
|
+
return true if perform_after_create == false
|
|
45
49
|
return true if transaction_id.present?
|
|
46
50
|
|
|
47
51
|
credit_cents = money.cents
|
|
48
52
|
|
|
49
|
-
@
|
|
53
|
+
@perform_response = process!(credit_cents)
|
|
50
54
|
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
@response = Spree::DeprecatedInstanceVariableProxy.new(
|
|
56
|
+
self,
|
|
57
|
+
:perform_response,
|
|
58
|
+
:@response,
|
|
59
|
+
Spree::Deprecation,
|
|
60
|
+
"Please, do not use Spree::Refund @response anymore, use Spree::Refund#perform_response"
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
log_entries.build(details: perform_response.to_yaml)
|
|
64
|
+
update!(transaction_id: perform_response.authorization)
|
|
53
65
|
update_order
|
|
54
66
|
end
|
|
55
67
|
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
# This callback takes care of setting the behavior that determines if it is needed
|
|
71
|
+
# to execute the perform! callback after_create.
|
|
72
|
+
# Existing code that creates refund without explicitely passing
|
|
73
|
+
#
|
|
74
|
+
# perform_after_create: false
|
|
75
|
+
#
|
|
76
|
+
# as attribute will still call perform! but a deprecation warning is emitted in order
|
|
77
|
+
# to ask users to change their code with the new supported behavior.
|
|
78
|
+
def set_perform_after_create_default
|
|
79
|
+
return true if perform_after_create == false
|
|
80
|
+
|
|
81
|
+
Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
|
|
82
|
+
From Solidus v3.0 onwards, #perform! will need to be explicitly called when creating new
|
|
83
|
+
refunds. Please, change your code from:
|
|
84
|
+
|
|
85
|
+
Spree::Refund.create(your: attributes)
|
|
86
|
+
|
|
87
|
+
to:
|
|
88
|
+
|
|
89
|
+
Spree::Refund.create(your: attributes, perform_after_create: false).perform!
|
|
90
|
+
WARN
|
|
91
|
+
|
|
92
|
+
self.perform_after_create = true
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# This is needed to avoid that when you create a refund with perform_after_create = false,
|
|
96
|
+
# it's not possibile to call perform! on that instance, since the value of this attribute
|
|
97
|
+
# will remain false until a reload of the instance.
|
|
98
|
+
def clear_perform_after_create
|
|
99
|
+
@perform_after_create = nil
|
|
100
|
+
end
|
|
101
|
+
|
|
56
102
|
# return an activemerchant response object if successful or else raise an error
|
|
57
103
|
def process!(credit_cents)
|
|
58
104
|
response = if payment.payment_method.payment_profiles_supported?
|
|
@@ -73,10 +119,6 @@ module Spree
|
|
|
73
119
|
raise Core::GatewayError.new(I18n.t('spree.unable_to_connect_to_gateway'))
|
|
74
120
|
end
|
|
75
121
|
|
|
76
|
-
def create_log_entry
|
|
77
|
-
log_entries.create!(details: @response.to_yaml)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
122
|
def amount_is_less_than_or_equal_to_allowed_amount
|
|
81
123
|
if payment && amount > payment.credit_allowed
|
|
82
124
|
errors.add(:amount, :greater_than_allowed)
|
|
@@ -104,10 +104,20 @@ module Spree
|
|
|
104
104
|
if unpaid_amount_within_tolerance?
|
|
105
105
|
reimbursed!
|
|
106
106
|
Spree::Event.fire 'reimbursement_reimbursed', reimbursement: self
|
|
107
|
+
if reimbursement_success_hooks.any?
|
|
108
|
+
Spree::Deprecation.warn \
|
|
109
|
+
"reimbursement_success_hooks are deprecated. Please remove them " \
|
|
110
|
+
"and subscribe to `reimbursement_reimbursed` event instead", caller(1)
|
|
111
|
+
end
|
|
107
112
|
reimbursement_success_hooks.each { |hook| hook.call self }
|
|
108
113
|
else
|
|
109
114
|
errored!
|
|
110
115
|
Spree::Event.fire 'reimbursement_errored', reimbursement: self
|
|
116
|
+
if reimbursement_failure_hooks.any?
|
|
117
|
+
Spree::Deprecation.warn \
|
|
118
|
+
"reimbursement_failure_hooks are deprecated. Please remove them " \
|
|
119
|
+
"and subscribe to `reimbursement_errored` event instead", caller(1)
|
|
120
|
+
end
|
|
111
121
|
reimbursement_failure_hooks.each { |hook| hook.call self }
|
|
112
122
|
end
|
|
113
123
|
|
|
@@ -153,6 +163,23 @@ module Spree
|
|
|
153
163
|
perform!(created_by: created_by)
|
|
154
164
|
end
|
|
155
165
|
|
|
166
|
+
# The returned category is used as the category
|
|
167
|
+
# for Spree::Reimbursement::Credit.default_creditable_class.
|
|
168
|
+
#
|
|
169
|
+
# @return [Spree::StoreCreditCategory]
|
|
170
|
+
def store_credit_category
|
|
171
|
+
if Spree::Config.use_legacy_store_credit_reimbursement_category_name
|
|
172
|
+
Spree::Deprecation.warn("Using the legacy reimbursement_category_name is deprecated. "\
|
|
173
|
+
"Set Spree::Config.use_legacy_store_credit_reimbursement_category_name to false to use "\
|
|
174
|
+
"the new version instead.", caller)
|
|
175
|
+
|
|
176
|
+
name = Spree::StoreCreditCategory.reimbursement_category_name
|
|
177
|
+
return Spree::StoreCreditCategory.find_by(name: name) || Spree::StoreCreditCategory.first
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
Spree::StoreCreditCategory.find_by(name: Spree::StoreCreditCategory::REIMBURSEMENT)
|
|
181
|
+
end
|
|
182
|
+
|
|
156
183
|
private
|
|
157
184
|
|
|
158
185
|
def calculate_total
|
|
@@ -34,10 +34,17 @@ module Spree
|
|
|
34
34
|
refund = reimbursement.refunds.build({
|
|
35
35
|
payment: payment,
|
|
36
36
|
amount: amount,
|
|
37
|
-
reason: Spree::RefundReason.return_processing_reason
|
|
37
|
+
reason: Spree::RefundReason.return_processing_reason,
|
|
38
|
+
perform_after_create: false
|
|
38
39
|
})
|
|
39
40
|
|
|
40
|
-
simulate
|
|
41
|
+
if simulate
|
|
42
|
+
refund.readonly!
|
|
43
|
+
else
|
|
44
|
+
refund.save!
|
|
45
|
+
refund.perform!
|
|
46
|
+
end
|
|
47
|
+
|
|
41
48
|
refund
|
|
42
49
|
end
|
|
43
50
|
|
|
@@ -54,7 +61,7 @@ module Spree
|
|
|
54
61
|
Spree::Reimbursement::Credit.default_creditable_class.new(
|
|
55
62
|
user: reimbursement.order.user,
|
|
56
63
|
amount: unpaid_amount,
|
|
57
|
-
category:
|
|
64
|
+
category: reimbursement.store_credit_category,
|
|
58
65
|
created_by: created_by,
|
|
59
66
|
memo: "Refund for uncreditable payments on order #{reimbursement.order.number}",
|
|
60
67
|
currency: reimbursement.order.currency
|
|
@@ -31,7 +31,7 @@ module Spree
|
|
|
31
31
|
self.whitelisted_ransackable_attributes = ['memo']
|
|
32
32
|
|
|
33
33
|
def total_excluding_vat
|
|
34
|
-
return_items.
|
|
34
|
+
return_items.sum(&:total_excluding_vat)
|
|
35
35
|
end
|
|
36
36
|
alias pre_tax_total total_excluding_vat
|
|
37
37
|
deprecate pre_tax_total: :total_excluding_vat, deprecator: Spree::Deprecation
|
|
@@ -23,7 +23,7 @@ module Spree
|
|
|
23
23
|
# blue pants with 34 waist and 32 inseam
|
|
24
24
|
|
|
25
25
|
def self.eligible_variants(variant, options = {})
|
|
26
|
-
product_variants = SameProduct.eligible_variants(variant, options).includes(option_values: :option_type)
|
|
26
|
+
product_variants = SameProduct.eligible_variants(variant, **options).includes(option_values: :option_type)
|
|
27
27
|
relevant_option_values = variant.option_values.select { |ov| option_type_restrictions.include? ov.option_type.name }
|
|
28
28
|
|
|
29
29
|
if relevant_option_values.present?
|
|
@@ -90,8 +90,13 @@ module Spree
|
|
|
90
90
|
COMPLETED_RECEPTION_STATUSES.map(&:to_s).include?(reception_status.to_s)
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
def skip_customer_return_processing=(value)
|
|
94
|
+
@skip_customer_return_processing = value
|
|
95
|
+
Deprecation.warn \
|
|
96
|
+
'From Solidus v2.11 onwards, #skip_customer_return_processing does ' \
|
|
97
|
+
'nothing, and #process_inventory_unit! will restore calling ' \
|
|
98
|
+
'customer_return#process_return!', caller(1)
|
|
99
|
+
end
|
|
95
100
|
|
|
96
101
|
# @param inventory_unit [Spree::InventoryUnit] the inventory for which we
|
|
97
102
|
# want a return item
|
|
@@ -196,13 +201,19 @@ module Spree
|
|
|
196
201
|
|
|
197
202
|
def process_inventory_unit!
|
|
198
203
|
inventory_unit.return!
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
Deprecation.warn 'From Solidus v2.9 onwards, #process_inventory_unit! will not call customer_return#process_return!'
|
|
203
|
-
customer_return.process_return!
|
|
204
|
-
end
|
|
204
|
+
|
|
205
|
+
if should_restock?
|
|
206
|
+
customer_return.stock_location.restock(inventory_unit.variant, 1, customer_return)
|
|
205
207
|
end
|
|
208
|
+
|
|
209
|
+
unless @skip_customer_return_processing.nil?
|
|
210
|
+
Deprecation.warn \
|
|
211
|
+
'From Solidus v2.11 onwards, #skip_customer_return_processing does ' \
|
|
212
|
+
'nothing, and #process_inventory_unit! will restore calling ' \
|
|
213
|
+
'customer_return#process_return!'
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
customer_return&.process_return!
|
|
206
217
|
end
|
|
207
218
|
|
|
208
219
|
def sibling_intended_for_exchange(status)
|
|
@@ -276,9 +287,9 @@ module Spree
|
|
|
276
287
|
end
|
|
277
288
|
|
|
278
289
|
def should_restock?
|
|
279
|
-
|
|
290
|
+
customer_return &&
|
|
291
|
+
resellable? &&
|
|
280
292
|
variant.should_track_inventory? &&
|
|
281
|
-
customer_return &&
|
|
282
293
|
customer_return.stock_location.restock_inventory?
|
|
283
294
|
end
|
|
284
295
|
end
|
data/app/models/spree/role.rb
CHANGED
|
@@ -150,7 +150,7 @@ module Spree
|
|
|
150
150
|
end
|
|
151
151
|
|
|
152
152
|
def item_cost
|
|
153
|
-
line_items.
|
|
153
|
+
line_items.sum(&:total)
|
|
154
154
|
end
|
|
155
155
|
|
|
156
156
|
def ready_or_pending?
|
|
@@ -262,7 +262,7 @@ module Spree
|
|
|
262
262
|
def to_package
|
|
263
263
|
package = Stock::Package.new(stock_location)
|
|
264
264
|
package.shipment = self
|
|
265
|
-
inventory_units.includes(:
|
|
265
|
+
inventory_units.includes(variant: :product).joins(:variant).group_by(&:state).each do |state, state_inventory_units|
|
|
266
266
|
package.add_multiple state_inventory_units, state.to_sym
|
|
267
267
|
end
|
|
268
268
|
package
|
|
@@ -16,7 +16,7 @@ class Spree::ShippingManifest
|
|
|
16
16
|
def items
|
|
17
17
|
# Grouping by the ID means that we don't have to call out to the association accessor
|
|
18
18
|
# This makes the grouping by faster because it results in less SQL cache hits.
|
|
19
|
-
@inventory_units.group_by(&:variant_id).
|
|
19
|
+
@inventory_units.group_by(&:variant_id).flat_map do |_variant_id, variant_units|
|
|
20
20
|
variant_units.group_by(&:line_item_id).map do |_line_item_id, units|
|
|
21
21
|
states = {}
|
|
22
22
|
units.group_by(&:state).each { |state, iu| states[state] = iu.count }
|
|
@@ -25,6 +25,6 @@ class Spree::ShippingManifest
|
|
|
25
25
|
|
|
26
26
|
ManifestItem.new(first_unit.line_item, first_unit.variant, units.length, states)
|
|
27
27
|
end
|
|
28
|
-
end
|
|
28
|
+
end
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'discard'
|
|
4
|
-
|
|
5
3
|
module Spree
|
|
6
4
|
# Represents a means of having a shipment delivered, such as FedEx or UPS.
|
|
7
5
|
#
|
|
8
6
|
class ShippingMethod < Spree::Base
|
|
9
|
-
|
|
10
|
-
include Spree::ParanoiaDeprecations
|
|
11
|
-
|
|
12
|
-
include Discard::Model
|
|
13
|
-
self.discard_column = :deleted_at
|
|
14
|
-
|
|
7
|
+
include Spree::SoftDeletable
|
|
15
8
|
include Spree::CalculatedAdjustments
|
|
16
9
|
DISPLAY = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(
|
|
17
10
|
[:both, :front_end, :back_end],
|
|
@@ -28,7 +21,7 @@ module Spree
|
|
|
28
21
|
has_many :shipping_method_zones, dependent: :destroy
|
|
29
22
|
has_many :zones, through: :shipping_method_zones
|
|
30
23
|
|
|
31
|
-
belongs_to :tax_category, -> {
|
|
24
|
+
belongs_to :tax_category, -> { with_discarded }, class_name: 'Spree::TaxCategory', optional: true
|
|
32
25
|
has_many :shipping_method_stock_locations, dependent: :destroy, class_name: "Spree::ShippingMethodStockLocation"
|
|
33
26
|
has_many :stock_locations, through: :shipping_method_stock_locations
|
|
34
27
|
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
|
6
6
|
#
|
|
7
7
|
class ShippingRate < Spree::Base
|
|
8
8
|
belongs_to :shipment, class_name: 'Spree::Shipment', touch: true, optional: true
|
|
9
|
-
belongs_to :shipping_method, -> {
|
|
9
|
+
belongs_to :shipping_method, -> { with_discarded }, class_name: 'Spree::ShippingMethod', inverse_of: :shipping_rates, optional: true
|
|
10
10
|
|
|
11
11
|
has_many :taxes,
|
|
12
12
|
class_name: "Spree::ShippingRateTax",
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
|
6
6
|
# @attr [Spree::TaxRate] tax_rate The tax rate used to calculate the tax amount
|
|
7
7
|
# @since 1.3.0
|
|
8
8
|
# @see Spree::Tax::ShippingRateTaxer
|
|
9
|
-
class ShippingRateTax <
|
|
9
|
+
class ShippingRateTax < Spree::Base
|
|
10
10
|
belongs_to :shipping_rate, class_name: "Spree::ShippingRate", optional: true
|
|
11
11
|
belongs_to :tax_rate, class_name: "Spree::TaxRate", optional: true
|
|
12
12
|
|
|
@@ -9,13 +9,24 @@ module Spree
|
|
|
9
9
|
|
|
10
10
|
def units
|
|
11
11
|
@order.line_items.flat_map do |line_item|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
build_units(line_item, line_item.quantity)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def missing_units_for_line_item(line_item)
|
|
17
|
+
quantity = line_item.quantity - line_item.inventory_units.count
|
|
18
|
+
build_units(line_item, quantity)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def build_units(line_item, quantity)
|
|
24
|
+
Array.new(quantity) do
|
|
25
|
+
Spree::InventoryUnit.new(
|
|
26
|
+
pending: true,
|
|
27
|
+
variant: line_item.variant,
|
|
28
|
+
line_item: line_item
|
|
29
|
+
)
|
|
19
30
|
end
|
|
20
31
|
end
|
|
21
32
|
end
|