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/order.rb
CHANGED
|
@@ -23,10 +23,18 @@ module Spree
|
|
|
23
23
|
ORDER_NUMBER_LETTERS = false
|
|
24
24
|
ORDER_NUMBER_PREFIX = 'R'
|
|
25
25
|
|
|
26
|
-
include Spree::
|
|
26
|
+
include ::Spree::Config.state_machines.order
|
|
27
|
+
|
|
27
28
|
include Spree::Order::Payments
|
|
28
29
|
|
|
29
|
-
class InsufficientStock < StandardError
|
|
30
|
+
class InsufficientStock < StandardError
|
|
31
|
+
attr_reader :items
|
|
32
|
+
|
|
33
|
+
def initialize(message = nil, items: {})
|
|
34
|
+
@items = items
|
|
35
|
+
super message
|
|
36
|
+
end
|
|
37
|
+
end
|
|
30
38
|
class CannotRebuildShipments < StandardError; end
|
|
31
39
|
|
|
32
40
|
extend Spree::DisplayMoney
|
|
@@ -42,8 +50,9 @@ module Spree
|
|
|
42
50
|
go_to_state :confirm
|
|
43
51
|
end
|
|
44
52
|
|
|
53
|
+
ransack_alias :bill_address_firstname_or_lastname, :bill_address_firstname_or_bill_address_lastname
|
|
45
54
|
self.whitelisted_ransackable_associations = %w[shipments user order_promotions promotions bill_address ship_address line_items]
|
|
46
|
-
self.whitelisted_ransackable_attributes = %w[completed_at created_at email number state payment_state shipment_state total store_id]
|
|
55
|
+
self.whitelisted_ransackable_attributes = %w[bill_address_firstname_or_lastname completed_at created_at email number state payment_state shipment_state total store_id]
|
|
47
56
|
|
|
48
57
|
attr_reader :coupon_code
|
|
49
58
|
attr_accessor :temporary_address
|
|
@@ -97,6 +106,8 @@ module Spree
|
|
|
97
106
|
|
|
98
107
|
# Returns
|
|
99
108
|
has_many :return_authorizations, dependent: :destroy, inverse_of: :order
|
|
109
|
+
has_many :return_items, through: :inventory_units
|
|
110
|
+
has_many :customer_returns, through: :return_items
|
|
100
111
|
has_many :reimbursements, inverse_of: :order
|
|
101
112
|
has_many :refunds, through: :payments
|
|
102
113
|
|
|
@@ -125,7 +136,7 @@ module Spree
|
|
|
125
136
|
validates :email, presence: true, if: :require_email
|
|
126
137
|
validates :email, 'spree/email' => true, allow_blank: true
|
|
127
138
|
validates :guest_token, presence: { allow_nil: true }
|
|
128
|
-
validates :number, presence: true, uniqueness: { allow_blank: true }
|
|
139
|
+
validates :number, presence: true, uniqueness: { allow_blank: true, case_sensitive: true }
|
|
129
140
|
validates :store_id, presence: true
|
|
130
141
|
|
|
131
142
|
def self.find_by_param(value)
|
|
@@ -136,9 +147,10 @@ module Spree
|
|
|
136
147
|
find_by! number: value
|
|
137
148
|
end
|
|
138
149
|
|
|
139
|
-
delegate :firstname, :lastname, to: :bill_address, prefix: true, allow_nil: true
|
|
150
|
+
delegate :name, :firstname, :lastname, to: :bill_address, prefix: true, allow_nil: true
|
|
140
151
|
alias_method :billing_firstname, :bill_address_firstname
|
|
141
152
|
alias_method :billing_lastname, :bill_address_lastname
|
|
153
|
+
alias_method :billing_name, :bill_address_name
|
|
142
154
|
|
|
143
155
|
class_attribute :update_hooks
|
|
144
156
|
self.update_hooks = Set.new
|
|
@@ -181,6 +193,9 @@ module Spree
|
|
|
181
193
|
# Use this method in other gems that wish to register their own custom logic
|
|
182
194
|
# that should be called after Order#update
|
|
183
195
|
def self.register_update_hook(hook)
|
|
196
|
+
Spree::Deprecation.warn \
|
|
197
|
+
"Spree::Order::update_hooks are deprecated. Please remove them " \
|
|
198
|
+
"and subscribe to `order_recalculated` and/or `order_finalized` event instead", caller(1)
|
|
184
199
|
update_hooks.add(hook)
|
|
185
200
|
end
|
|
186
201
|
|
|
@@ -192,7 +207,7 @@ module Spree
|
|
|
192
207
|
|
|
193
208
|
# For compatiblity with Calculator::PriceSack
|
|
194
209
|
def amount
|
|
195
|
-
line_items.
|
|
210
|
+
line_items.sum(&:amount)
|
|
196
211
|
end
|
|
197
212
|
|
|
198
213
|
# Sum of all line item amounts after promotions, before added tax
|
|
@@ -217,7 +232,7 @@ module Spree
|
|
|
217
232
|
end
|
|
218
233
|
|
|
219
234
|
def shipping_discount
|
|
220
|
-
shipment_adjustments.eligible.sum(:amount) * - 1
|
|
235
|
+
shipment_adjustments.credit.eligible.sum(:amount) * - 1
|
|
221
236
|
end
|
|
222
237
|
|
|
223
238
|
def to_param
|
|
@@ -287,7 +302,11 @@ module Spree
|
|
|
287
302
|
end
|
|
288
303
|
|
|
289
304
|
def all_inventory_units_returned?
|
|
290
|
-
|
|
305
|
+
# Inventory units are transitioned to the "return" state through CustomerReturn and
|
|
306
|
+
# ReturnItem instead of using Order#inventory_units, thus making the latter method
|
|
307
|
+
# potentially return stale data. This situation requires to *reload* `inventory_units`
|
|
308
|
+
# in order to pick-up the latest changes and make the check on `returned?` reliable.
|
|
309
|
+
inventory_units.reload.all?(&:returned?)
|
|
291
310
|
end
|
|
292
311
|
|
|
293
312
|
def contents
|
|
@@ -398,7 +417,7 @@ module Spree
|
|
|
398
417
|
|
|
399
418
|
def name
|
|
400
419
|
if (address = bill_address || ship_address)
|
|
401
|
-
|
|
420
|
+
address.name
|
|
402
421
|
end
|
|
403
422
|
end
|
|
404
423
|
|
|
@@ -431,11 +450,18 @@ module Spree
|
|
|
431
450
|
|
|
432
451
|
updater.update_shipment_state
|
|
433
452
|
save!
|
|
434
|
-
updater.run_hooks
|
|
453
|
+
updater.run_hooks if update_hooks.any?
|
|
435
454
|
|
|
436
455
|
touch :completed_at
|
|
437
456
|
|
|
438
457
|
Spree::Event.fire 'order_finalized', order: self
|
|
458
|
+
|
|
459
|
+
if method(:deliver_order_confirmation_email).owner != self.class
|
|
460
|
+
Spree::Deprecation.warn \
|
|
461
|
+
"deliver_order_confirmation_email has been deprecated and moved to " \
|
|
462
|
+
"Spree::MailerSubscriber#order_finalized, please move there any customizations.",
|
|
463
|
+
caller(1)
|
|
464
|
+
end
|
|
439
465
|
end
|
|
440
466
|
|
|
441
467
|
def fulfill!
|
|
@@ -444,6 +470,16 @@ module Spree
|
|
|
444
470
|
save!
|
|
445
471
|
end
|
|
446
472
|
|
|
473
|
+
def deliver_order_confirmation_email
|
|
474
|
+
Spree::Deprecation.warn \
|
|
475
|
+
"deliver_order_confirmation_email has been deprecated and moved to " \
|
|
476
|
+
"Spree::MailerSubscriber#order_finalized.",
|
|
477
|
+
caller(1)
|
|
478
|
+
|
|
479
|
+
Spree::Config.order_mailer_class.confirm_email(order).deliver_later
|
|
480
|
+
order.update_column(:confirmation_delivered, true)
|
|
481
|
+
end
|
|
482
|
+
|
|
447
483
|
# Helper methods for checkout steps
|
|
448
484
|
def paid?
|
|
449
485
|
%w(paid credit_owed).include?(payment_state)
|
|
@@ -529,6 +565,18 @@ module Spree
|
|
|
529
565
|
end
|
|
530
566
|
end
|
|
531
567
|
|
|
568
|
+
def ensure_billing_address
|
|
569
|
+
return unless billing_address_required?
|
|
570
|
+
return if bill_address&.valid?
|
|
571
|
+
|
|
572
|
+
errors.add(:base, I18n.t('spree.bill_address_required'))
|
|
573
|
+
false
|
|
574
|
+
end
|
|
575
|
+
|
|
576
|
+
def billing_address_required?
|
|
577
|
+
Spree::Config.billing_address_required
|
|
578
|
+
end
|
|
579
|
+
|
|
532
580
|
def create_proposed_shipments
|
|
533
581
|
if completed?
|
|
534
582
|
raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_order_completed'))
|
|
@@ -540,6 +588,13 @@ module Spree
|
|
|
540
588
|
end
|
|
541
589
|
end
|
|
542
590
|
|
|
591
|
+
def create_shipments_for_line_item(line_item)
|
|
592
|
+
units = Spree::Stock::InventoryUnitBuilder.new(self).missing_units_for_line_item(line_item)
|
|
593
|
+
Spree::Config.stock.coordinator_class.new(self, units).shipments.each do |shipment|
|
|
594
|
+
shipments << shipment
|
|
595
|
+
end
|
|
596
|
+
end
|
|
597
|
+
|
|
543
598
|
def apply_shipping_promotions
|
|
544
599
|
Spree::PromotionHandler::Shipping.new(self).activate
|
|
545
600
|
recalculate
|
|
@@ -591,10 +646,9 @@ module Spree
|
|
|
591
646
|
def canceled_by(user)
|
|
592
647
|
transaction do
|
|
593
648
|
cancel!
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
)
|
|
649
|
+
# rubocop:disable Rails/SkipsModelValidations
|
|
650
|
+
update_column(:canceler_id, user.id)
|
|
651
|
+
# rubocop:enable Rails/SkipsModelValidations
|
|
598
652
|
end
|
|
599
653
|
end
|
|
600
654
|
|
|
@@ -714,8 +768,8 @@ module Spree
|
|
|
714
768
|
# @note This doesn't persist the change bill_address or ship_address
|
|
715
769
|
def assign_default_user_addresses
|
|
716
770
|
if user
|
|
717
|
-
bill_address =
|
|
718
|
-
ship_address =
|
|
771
|
+
bill_address = user.bill_address
|
|
772
|
+
ship_address = user.ship_address
|
|
719
773
|
# this is one of 2 places still using User#bill_address
|
|
720
774
|
self.bill_address ||= bill_address if bill_address.try!(:valid?)
|
|
721
775
|
# Skip setting ship address if order doesn't have a delivery checkout step
|
|
@@ -760,7 +814,9 @@ module Spree
|
|
|
760
814
|
deprecate assign_default_credit_card: :add_default_payment_from_wallet, deprecator: Spree::Deprecation
|
|
761
815
|
|
|
762
816
|
def record_ip_address(ip_address)
|
|
763
|
-
if
|
|
817
|
+
if new_record?
|
|
818
|
+
self.last_ip_address = ip_address
|
|
819
|
+
elsif last_ip_address != ip_address
|
|
764
820
|
update_column(:last_ip_address, ip_address)
|
|
765
821
|
end
|
|
766
822
|
end
|
|
@@ -873,14 +929,29 @@ module Spree
|
|
|
873
929
|
end
|
|
874
930
|
|
|
875
931
|
def after_cancel
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
payments.store_credits.pending.each(&:void_transaction!)
|
|
932
|
+
cancel_shipments!
|
|
933
|
+
cancel_payments!
|
|
879
934
|
|
|
880
935
|
send_cancel_email
|
|
936
|
+
# rubocop:disable Rails/SkipsModelValidations
|
|
937
|
+
update_column(:canceled_at, Time.current)
|
|
938
|
+
# rubocop:enable Rails/SkipsModelValidations
|
|
881
939
|
recalculate
|
|
882
940
|
end
|
|
883
941
|
|
|
942
|
+
def cancel_shipments!
|
|
943
|
+
shipments.each(&:cancel!)
|
|
944
|
+
end
|
|
945
|
+
|
|
946
|
+
def cancel_payments!
|
|
947
|
+
payments.each do |payment|
|
|
948
|
+
next if payment.fully_refunded?
|
|
949
|
+
next unless payment.pending? || payment.completed?
|
|
950
|
+
|
|
951
|
+
payment.cancel!
|
|
952
|
+
end
|
|
953
|
+
end
|
|
954
|
+
|
|
884
955
|
def send_cancel_email
|
|
885
956
|
Spree::Config.order_mailer_class.cancel_email(self).deliver_later
|
|
886
957
|
end
|
|
@@ -23,8 +23,14 @@ module Spree
|
|
|
23
23
|
existing_quantity = inventory_units.count
|
|
24
24
|
desired_quantity = line_item.quantity - existing_quantity
|
|
25
25
|
if desired_quantity > 0
|
|
26
|
-
shipment ||= determine_target_shipment
|
|
27
|
-
|
|
26
|
+
shipment ||= determine_target_shipment(desired_quantity)
|
|
27
|
+
if shipment
|
|
28
|
+
add_to_shipment(shipment, desired_quantity)
|
|
29
|
+
else
|
|
30
|
+
order.create_shipments_for_line_item(line_item).each do |new_shipment|
|
|
31
|
+
new_shipment.finalize!
|
|
32
|
+
end
|
|
33
|
+
end
|
|
28
34
|
elsif desired_quantity < 0
|
|
29
35
|
remove(-desired_quantity, shipment)
|
|
30
36
|
end
|
|
@@ -48,12 +54,18 @@ module Spree
|
|
|
48
54
|
# Returns either one of the shipment:
|
|
49
55
|
#
|
|
50
56
|
# first unshipped that already includes this variant
|
|
51
|
-
# first unshipped that's leaving from a stock_location that stocks this variant
|
|
52
|
-
|
|
57
|
+
# first unshipped that's leaving from a stock_location that stocks this variant, with availability check
|
|
58
|
+
# first unshipped that's leaving from a stock_location that stocks this variant, without availability check
|
|
59
|
+
def determine_target_shipment(quantity)
|
|
53
60
|
potential_shipments = order.shipments.select(&:ready_or_pending?)
|
|
54
61
|
|
|
55
62
|
potential_shipments.detect do |shipment|
|
|
56
63
|
shipment.include?(variant)
|
|
64
|
+
end || potential_shipments.detect do |shipment|
|
|
65
|
+
stock_item = shipment.stock_location.stock_item(variant.id)
|
|
66
|
+
if stock_item
|
|
67
|
+
stock_item.backorderable? || stock_item.count_on_hand >= quantity
|
|
68
|
+
end
|
|
57
69
|
end || potential_shipments.detect do |shipment|
|
|
58
70
|
variant.stock_location_ids.include?(shipment.stock_location_id)
|
|
59
71
|
end
|
|
@@ -56,11 +56,13 @@ module Spree
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
set_user(user)
|
|
59
|
-
|
|
59
|
+
if order.valid?
|
|
60
|
+
persist_merge
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
# So that the destroy doesn't take out line items which may have been re-assigned
|
|
63
|
+
other_order.line_items.reload
|
|
64
|
+
other_order.destroy
|
|
65
|
+
end
|
|
64
66
|
end
|
|
65
67
|
|
|
66
68
|
private
|
|
@@ -17,7 +17,7 @@ module Spree
|
|
|
17
17
|
# object with callbacks (otherwise you will end up in an infinite recursion as the
|
|
18
18
|
# associations try to save and then in turn try to call +update!+ again.)
|
|
19
19
|
def update
|
|
20
|
-
|
|
20
|
+
order.transaction do
|
|
21
21
|
update_item_count
|
|
22
22
|
update_shipment_amounts
|
|
23
23
|
update_totals
|
|
@@ -26,12 +26,17 @@ module Spree
|
|
|
26
26
|
update_shipments
|
|
27
27
|
update_shipment_state
|
|
28
28
|
end
|
|
29
|
-
run_hooks
|
|
29
|
+
run_hooks if update_hooks.any?
|
|
30
|
+
Spree::Event.fire 'order_recalculated', order: order
|
|
30
31
|
persist_totals
|
|
31
32
|
end
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
def run_hooks
|
|
36
|
+
Spree::Deprecation.warn \
|
|
37
|
+
"This method is deprecated. Please run your hooks by subscribing " \
|
|
38
|
+
"to `order_recalculated` and/or `order_finalized` events instead, depending " \
|
|
39
|
+
" on when OrderUpdater#run_hooks was called.", caller(1)
|
|
35
40
|
update_hooks.each { |hook| order.send hook }
|
|
36
41
|
end
|
|
37
42
|
|
|
@@ -136,20 +141,16 @@ module Spree
|
|
|
136
141
|
end
|
|
137
142
|
|
|
138
143
|
def update_shipment_amounts
|
|
139
|
-
shipments.each
|
|
140
|
-
shipment.update_amounts
|
|
141
|
-
end
|
|
144
|
+
shipments.each(&:update_amounts)
|
|
142
145
|
end
|
|
143
146
|
|
|
144
147
|
# give each of the shipments a chance to update themselves
|
|
145
148
|
def update_shipments
|
|
146
|
-
shipments.each
|
|
147
|
-
shipment.update_state
|
|
148
|
-
end
|
|
149
|
+
shipments.each(&:update_state)
|
|
149
150
|
end
|
|
150
151
|
|
|
151
152
|
def update_payment_total
|
|
152
|
-
order.payment_total = payments.completed.includes(:refunds).
|
|
153
|
+
order.payment_total = payments.completed.includes(:refunds).sum { |payment| payment.amount - payment.refunds.sum(:amount) }
|
|
153
154
|
end
|
|
154
155
|
|
|
155
156
|
def update_shipment_total
|
|
@@ -185,7 +186,7 @@ module Spree
|
|
|
185
186
|
end
|
|
186
187
|
|
|
187
188
|
def persist_totals
|
|
188
|
-
order.save!(validate:
|
|
189
|
+
order.save!(validate: Spree::Config.run_order_validations_on_order_updater)
|
|
189
190
|
end
|
|
190
191
|
|
|
191
192
|
def log_state_change(name)
|
|
@@ -29,9 +29,9 @@ module Spree
|
|
|
29
29
|
# For payment methods already implemeting `try_void`
|
|
30
30
|
if try_void_available?(payment.payment_method)
|
|
31
31
|
if response = payment.payment_method.try_void(payment)
|
|
32
|
-
payment.
|
|
32
|
+
payment.handle_void_response(response)
|
|
33
33
|
else
|
|
34
|
-
payment.refunds.create!(amount: payment.credit_allowed, reason: refund_reason)
|
|
34
|
+
payment.refunds.create!(amount: payment.credit_allowed, reason: refund_reason, perform_after_create: false).perform!
|
|
35
35
|
end
|
|
36
36
|
else
|
|
37
37
|
# For payment methods not yet implemeting `try_void`
|
|
@@ -55,7 +55,7 @@ module Spree
|
|
|
55
55
|
'Please implement a `try_void` method instead that returns a response object if void succeeds ' \
|
|
56
56
|
'or `false|nil` if not. Solidus will refund the payment then.'
|
|
57
57
|
response = payment.payment_method.cancel(payment.response_code)
|
|
58
|
-
payment.
|
|
58
|
+
payment.handle_void_response(response)
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
end
|
|
@@ -46,18 +46,20 @@ module Spree
|
|
|
46
46
|
# Takes the amount in cents to capture.
|
|
47
47
|
# Can be used to capture partial amounts of a payment, and will create
|
|
48
48
|
# a new pending payment record for the remaining amount to capture later.
|
|
49
|
-
def capture!(
|
|
49
|
+
def capture!(capture_amount = nil)
|
|
50
50
|
return true if completed?
|
|
51
|
-
|
|
51
|
+
return false unless amount.positive?
|
|
52
|
+
|
|
53
|
+
capture_amount ||= money.money.cents
|
|
52
54
|
started_processing!
|
|
53
55
|
protect_from_connection_error do
|
|
54
56
|
# Standard ActiveMerchant capture usage
|
|
55
57
|
response = payment_method.capture(
|
|
56
|
-
|
|
58
|
+
capture_amount,
|
|
57
59
|
response_code,
|
|
58
60
|
gateway_options
|
|
59
61
|
)
|
|
60
|
-
money = ::Money.new(
|
|
62
|
+
money = ::Money.new(capture_amount, currency)
|
|
61
63
|
capture_events.create!(amount: money.to_d)
|
|
62
64
|
update!(amount: captured_amount)
|
|
63
65
|
handle_response(response, :complete, :failure)
|
|
@@ -66,6 +68,8 @@ module Spree
|
|
|
66
68
|
|
|
67
69
|
def void_transaction!
|
|
68
70
|
return true if void?
|
|
71
|
+
return false unless amount.positive?
|
|
72
|
+
|
|
69
73
|
protect_from_connection_error do
|
|
70
74
|
if payment_method.payment_profiles_supported?
|
|
71
75
|
# Gateways supporting payment profiles will need access to credit card object because this stores the payment profile information
|
|
@@ -117,6 +121,22 @@ module Spree
|
|
|
117
121
|
options
|
|
118
122
|
end
|
|
119
123
|
|
|
124
|
+
# The unique identifier to be passed in to the payment gateway
|
|
125
|
+
def gateway_order_id
|
|
126
|
+
"#{order.number}-#{number}"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def handle_void_response(response)
|
|
130
|
+
record_response(response)
|
|
131
|
+
|
|
132
|
+
if response.success?
|
|
133
|
+
self.response_code = response.authorization
|
|
134
|
+
void
|
|
135
|
+
else
|
|
136
|
+
gateway_error(response)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
120
140
|
private
|
|
121
141
|
|
|
122
142
|
def process_authorization
|
|
@@ -182,17 +202,6 @@ module Spree
|
|
|
182
202
|
end
|
|
183
203
|
end
|
|
184
204
|
|
|
185
|
-
def handle_void_response(response)
|
|
186
|
-
record_response(response)
|
|
187
|
-
|
|
188
|
-
if response.success?
|
|
189
|
-
self.response_code = response.authorization
|
|
190
|
-
void
|
|
191
|
-
else
|
|
192
|
-
gateway_error(response)
|
|
193
|
-
end
|
|
194
|
-
end
|
|
195
|
-
|
|
196
205
|
def record_response(response)
|
|
197
206
|
log_entries.create!(details: response.to_yaml)
|
|
198
207
|
end
|
|
@@ -204,21 +213,36 @@ module Spree
|
|
|
204
213
|
end
|
|
205
214
|
|
|
206
215
|
def gateway_error(error)
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
216
|
+
message, log = case error
|
|
217
|
+
when ActiveMerchant::Billing::Response
|
|
218
|
+
[
|
|
219
|
+
error.params['message'] || error.params['response_reason_text'] || error.message,
|
|
220
|
+
basic_response_info(error)
|
|
221
|
+
]
|
|
222
|
+
when ActiveMerchant::ConnectionError
|
|
223
|
+
[I18n.t('spree.unable_to_connect_to_gateway')] * 2
|
|
224
|
+
else
|
|
225
|
+
[error.to_s, error]
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
logger.error("#{I18n.t('spree.gateway_error')}: #{log}")
|
|
229
|
+
raise Core::GatewayError.new(message)
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# The gateway response information without the params since the params
|
|
233
|
+
# can contain PII.
|
|
234
|
+
def basic_response_info(response)
|
|
235
|
+
{
|
|
236
|
+
message: response.message,
|
|
237
|
+
test: response.test,
|
|
238
|
+
authorization: response.authorization,
|
|
239
|
+
avs_result: response.avs_result,
|
|
240
|
+
cvv_result: response.cvv_result,
|
|
241
|
+
error_code: response.error_code,
|
|
242
|
+
emv_authorization: response.emv_authorization,
|
|
243
|
+
gateway_order_id: gateway_order_id,
|
|
244
|
+
order_number: order.number
|
|
245
|
+
}
|
|
222
246
|
end
|
|
223
247
|
end
|
|
224
248
|
end
|
data/app/models/spree/payment.rb
CHANGED
|
@@ -17,7 +17,7 @@ module Spree
|
|
|
17
17
|
|
|
18
18
|
belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :payments, optional: true
|
|
19
19
|
belongs_to :source, polymorphic: true, optional: true
|
|
20
|
-
belongs_to :payment_method, -> {
|
|
20
|
+
belongs_to :payment_method, -> { with_discarded }, class_name: 'Spree::PaymentMethod', inverse_of: :payments, optional: true
|
|
21
21
|
|
|
22
22
|
has_many :offsets, -> { offset_payment }, class_name: "Spree::Payment", foreign_key: :source_id
|
|
23
23
|
has_many :log_entries, as: :source
|
|
@@ -179,11 +179,11 @@ module Spree
|
|
|
179
179
|
end
|
|
180
180
|
|
|
181
181
|
def source_required?
|
|
182
|
-
payment_method
|
|
182
|
+
!!payment_method&.source_required?
|
|
183
183
|
end
|
|
184
184
|
|
|
185
185
|
def profiles_supported?
|
|
186
|
-
payment_method.
|
|
186
|
+
!!payment_method.try(:payment_profiles_supported?)
|
|
187
187
|
end
|
|
188
188
|
|
|
189
189
|
def create_payment_profile
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'discard'
|
|
4
3
|
require 'spree/preferences/statically_configurable'
|
|
5
4
|
|
|
6
5
|
module Spree
|
|
@@ -15,17 +14,17 @@ module Spree
|
|
|
15
14
|
preference :server, :string, default: 'test'
|
|
16
15
|
preference :test_mode, :boolean, default: true
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
include Spree::ParanoiaDeprecations
|
|
20
|
-
|
|
21
|
-
include Discard::Model
|
|
22
|
-
self.discard_column = :deleted_at
|
|
17
|
+
include Spree::SoftDeletable
|
|
23
18
|
|
|
24
19
|
acts_as_list
|
|
25
20
|
|
|
26
21
|
# @private
|
|
27
22
|
def self.const_missing(name)
|
|
28
23
|
if name == :DISPLAY
|
|
24
|
+
Spree::Deprecation.warn(
|
|
25
|
+
"#{self}::DISPLAY has been deprecated and will be removed in Solidus v3.",
|
|
26
|
+
caller
|
|
27
|
+
)
|
|
29
28
|
const_set(:DISPLAY, [:both, :front_end, :back_end])
|
|
30
29
|
else
|
|
31
30
|
super
|
|
@@ -63,7 +62,7 @@ module Spree
|
|
|
63
62
|
@human
|
|
64
63
|
].compact
|
|
65
64
|
options = { scope: [:activerecord, :models], count: 1, default: defaults }.merge!(options.except(:default))
|
|
66
|
-
I18n.translate(defaults.shift, options)
|
|
65
|
+
I18n.translate(defaults.shift, **options)
|
|
67
66
|
end
|
|
68
67
|
end
|
|
69
68
|
|
|
@@ -108,9 +107,9 @@ module Spree
|
|
|
108
107
|
where(type: to_s, active: true).count > 0
|
|
109
108
|
end
|
|
110
109
|
|
|
111
|
-
# @deprecated Use .
|
|
110
|
+
# @deprecated Use .with_discarded.find instead
|
|
112
111
|
def find_with_destroyed(*args)
|
|
113
|
-
Spree::Deprecation.warn "#{self}.find_with_destroyed is deprecated. Use #{self}.
|
|
112
|
+
Spree::Deprecation.warn "#{self}.find_with_destroyed is deprecated. Use #{self}.with_discarded.find instead"
|
|
114
113
|
unscoped { find(*args) }
|
|
115
114
|
end
|
|
116
115
|
end
|
data/app/models/spree/price.rb
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'discard'
|
|
4
|
-
|
|
5
3
|
module Spree
|
|
6
4
|
class Price < Spree::Base
|
|
7
|
-
|
|
8
|
-
include Spree::ParanoiaDeprecations
|
|
9
|
-
|
|
10
|
-
include Discard::Model
|
|
11
|
-
self.discard_column = :deleted_at
|
|
5
|
+
include Spree::SoftDeletable
|
|
12
6
|
|
|
13
7
|
MAXIMUM_AMOUNT = BigDecimal('99_999_999.99')
|
|
14
8
|
|
|
15
|
-
belongs_to :variant, -> {
|
|
9
|
+
belongs_to :variant, -> { with_discarded }, class_name: 'Spree::Variant', touch: true, optional: true
|
|
16
10
|
belongs_to :country, class_name: "Spree::Country", foreign_key: "country_iso", primary_key: "iso", optional: true
|
|
17
11
|
|
|
18
12
|
delegate :product, to: :variant
|
|
@@ -29,11 +29,13 @@ module Spree
|
|
|
29
29
|
scope :descend_by_name, -> { order(name: :desc) }
|
|
30
30
|
|
|
31
31
|
add_search_scope :ascend_by_master_price do
|
|
32
|
-
joins(master: :default_price).
|
|
32
|
+
joins(master: :default_price).select('spree_products.* , spree_prices.amount')
|
|
33
|
+
.order(Spree::Price.arel_table[:amount].asc)
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
add_search_scope :descend_by_master_price do
|
|
36
|
-
joins(master: :default_price).
|
|
37
|
+
joins(master: :default_price).select('spree_products.* , spree_prices.amount')
|
|
38
|
+
.order(Spree::Price.arel_table[:amount].desc)
|
|
37
39
|
end
|
|
38
40
|
|
|
39
41
|
add_search_scope :price_between do |low, high|
|
|
@@ -182,7 +184,10 @@ module Spree
|
|
|
182
184
|
end
|
|
183
185
|
# Can't use add_search_scope for this as it needs a default argument
|
|
184
186
|
def self.available(available_on = nil)
|
|
185
|
-
with_master_price
|
|
187
|
+
with_master_price
|
|
188
|
+
.where("#{Spree::Product.quoted_table_name}.available_on <= ?", available_on || Time.current)
|
|
189
|
+
.where("#{Spree::Product.quoted_table_name}.discontinue_on IS NULL OR" \
|
|
190
|
+
"#{Spree::Product.quoted_table_name}.discontinue_on >= ?", Time.current)
|
|
186
191
|
end
|
|
187
192
|
search_scopes << :available
|
|
188
193
|
|
|
@@ -233,7 +238,7 @@ module Spree
|
|
|
233
238
|
|
|
234
239
|
# specifically avoid having an order for taxon search (conflicts with main order)
|
|
235
240
|
def prepare_taxon_conditions(taxons)
|
|
236
|
-
ids = taxons.
|
|
241
|
+
ids = taxons.flat_map { |taxon| taxon.self_and_descendants.pluck(:id) }.uniq
|
|
237
242
|
joins(:taxons).where("#{Spree::Taxon.table_name}.id" => ids)
|
|
238
243
|
end
|
|
239
244
|
|
|
@@ -251,7 +256,7 @@ module Spree
|
|
|
251
256
|
ids_or_records_or_names.flatten.map { |taxon|
|
|
252
257
|
case taxon
|
|
253
258
|
when Integer then Spree::Taxon.find_by(id: taxon)
|
|
254
|
-
when ActiveRecord::Base then
|
|
259
|
+
when ActiveRecord::Base then taxon
|
|
255
260
|
when String
|
|
256
261
|
Spree::Taxon.find_by(name: taxon) ||
|
|
257
262
|
Spree::Taxon.where("#{taxons}.permalink LIKE ? OR #{taxons}.permalink = ?", "%/#{taxon}/", "#{taxon}/").first
|