solidus_core 4.6.2 → 4.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +13 -13
- data/app/controllers/spree/base_controller.rb +2 -2
- data/app/helpers/spree/base_helper.rb +24 -24
- data/app/helpers/spree/checkout_helper.rb +7 -7
- data/app/helpers/spree/core/controller_helpers/auth.rb +1 -1
- data/app/helpers/spree/core/controller_helpers/common.rb +3 -2
- data/app/helpers/spree/core/controller_helpers/order.rb +3 -5
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +1 -2
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +10 -10
- data/app/helpers/spree/products_helper.rb +5 -5
- data/app/helpers/spree/store_helper.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +3 -3
- data/app/mailers/spree/order_mailer.rb +4 -4
- data/app/mailers/spree/reimbursement_mailer.rb +2 -2
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter.rb +2 -2
- data/app/models/concerns/spree/adjustment_source.rb +4 -4
- data/app/models/concerns/spree/display_money.rb +2 -2
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/preferences/persistable.rb +1 -1
- data/app/models/concerns/spree/ransackable_attributes.rb +1 -0
- data/app/models/concerns/spree/soft_deletable.rb +2 -1
- data/app/models/concerns/spree/state_change_tracking.rb +1 -1
- data/app/models/concerns/spree/user_address_book.rb +12 -12
- data/app/models/concerns/spree/user_methods.rb +9 -9
- data/app/models/concerns/spree/user_reporting.rb +1 -0
- data/app/models/spree/ability.rb +1 -1
- data/app/models/spree/address/name.rb +1 -1
- data/app/models/spree/address.rb +7 -7
- data/app/models/spree/adjustment.rb +11 -10
- data/app/models/spree/adjustment_reason.rb +2 -2
- data/app/models/spree/billing_integration.rb +2 -2
- data/app/models/spree/calculator/default_tax.rb +2 -2
- data/app/models/spree/calculator/flat_fee.rb +1 -1
- data/app/models/spree/calculator/flat_rate.rb +2 -2
- data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -3
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +2 -2
- data/app/models/spree/calculator/shipping/flat_rate.rb +3 -3
- data/app/models/spree/calculator/shipping/flexi_rate.rb +8 -8
- data/app/models/spree/calculator/shipping/per_item.rb +3 -3
- data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
- data/app/models/spree/calculator.rb +31 -6
- data/app/models/spree/carton.rb +4 -4
- data/app/models/spree/classification.rb +2 -2
- data/app/models/spree/core/state_machines/order/class_methods.rb +3 -3
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +1 -1
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/credit_card.rb +27 -27
- data/app/models/spree/customer_return.rb +5 -4
- data/app/models/spree/distributed_amounts_handler.rb +1 -1
- data/app/models/spree/fulfilment_changer.rb +22 -22
- data/app/models/spree/image/active_storage_attachment.rb +2 -2
- data/app/models/spree/image/paperclip_attachment.rb +8 -8
- data/app/models/spree/in_memory_order_updater.rb +260 -0
- data/app/models/spree/inventory_unit.rb +11 -11
- data/app/models/spree/item_total.rb +1 -1
- data/app/models/spree/legacy_user.rb +2 -2
- data/app/models/spree/line_item.rb +22 -12
- data/app/models/spree/log_entry.rb +3 -3
- data/app/models/spree/mergeable_orders_finder.rb +44 -0
- data/app/models/spree/money.rb +2 -1
- data/app/models/spree/null_promotion_adjuster.rb +1 -1
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order/number_generator.rb +1 -1
- data/app/models/spree/order.rb +66 -64
- data/app/models/spree/order_cancellations.rb +1 -3
- data/app/models/spree/order_inventory.rb +5 -8
- data/app/models/spree/order_mutex.rb +1 -1
- data/app/models/spree/order_shipping.rb +1 -1
- data/app/models/spree/order_updater.rb +60 -38
- data/app/models/spree/payment/cancellation.rb +2 -2
- data/app/models/spree/payment/processing.rb +22 -22
- data/app/models/spree/payment.rb +25 -25
- data/app/models/spree/payment_capture_event.rb +2 -2
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +18 -18
- data/app/models/spree/payment_method/check.rb +3 -3
- data/app/models/spree/payment_method/credit_card.rb +1 -1
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +3 -3
- data/app/models/spree/payment_method/store_credit.rb +13 -13
- data/app/models/spree/payment_method.rb +12 -11
- data/app/models/spree/payment_source.rb +2 -2
- data/app/models/spree/permission_sets/dashboard_display.rb +3 -3
- data/app/models/spree/permission_sets/default_customer.rb +4 -4
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +7 -6
- data/app/models/spree/product/scopes.rb +23 -23
- data/app/models/spree/product.rb +37 -41
- data/app/models/spree/product_option_type.rb +2 -2
- data/app/models/spree/product_property.rb +3 -3
- data/app/models/spree/refund.rb +10 -10
- data/app/models/spree/refund_reason.rb +2 -2
- data/app/models/spree/reimbursement/credit.rb +1 -1
- data/app/models/spree/reimbursement.rb +8 -8
- data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +2 -2
- data/app/models/spree/return_authorization.rb +7 -6
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
- data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +6 -6
- data/app/models/spree/return_item.rb +31 -30
- data/app/models/spree/return_reason.rb +1 -1
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/role_user.rb +1 -1
- data/app/models/spree/shipment.rb +44 -31
- data/app/models/spree/shipping_manifest.rb +44 -9
- data/app/models/spree/shipping_method.rb +9 -9
- data/app/models/spree/shipping_method_category.rb +2 -2
- data/app/models/spree/shipping_rate.rb +12 -10
- data/app/models/spree/shipping_rate_tax.rb +5 -4
- data/app/models/spree/simple_order_contents.rb +2 -2
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/stock/availability.rb +9 -9
- data/app/models/spree/stock/availability_validator.rb +3 -3
- data/app/models/spree/stock/differentiator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +5 -5
- data/app/models/spree/stock/inventory_validator.rb +1 -1
- data/app/models/spree/stock/package.rb +3 -3
- data/app/models/spree/stock_item.rb +5 -5
- data/app/models/spree/stock_location.rb +6 -6
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/stock_quantities.rb +2 -2
- data/app/models/spree/store.rb +4 -4
- data/app/models/spree/store_credit.rb +30 -29
- data/app/models/spree/store_credit_category.rb +2 -2
- data/app/models/spree/store_credit_event.rb +6 -6
- data/app/models/spree/store_credit_reason.rb +1 -1
- data/app/models/spree/store_credit_type.rb +3 -3
- data/app/models/spree/store_selector/by_server_name.rb +1 -1
- data/app/models/spree/store_selector/legacy.rb +1 -1
- data/app/models/spree/tax/item_tax.rb +1 -0
- data/app/models/spree/tax/order_tax.rb +1 -0
- data/app/models/spree/tax_category.rb +3 -3
- data/app/models/spree/tax_rate.rb +5 -5
- data/app/models/spree/tax_rate_tax_category.rb +2 -2
- data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
- data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
- data/app/models/spree/taxon.rb +16 -17
- data/app/models/spree/taxon_brand_selector.rb +3 -3
- data/app/models/spree/unauthorized_redirect_handler.rb +1 -1
- data/app/models/spree/unit_cancel.rb +4 -4
- data/app/models/spree/user_address.rb +3 -3
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +6 -8
- data/app/models/spree/user_last_url_storer.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +1 -1
- data/app/models/spree/variant/pricing_options.rb +1 -1
- data/app/models/spree/variant/scopes.rb +9 -9
- data/app/models/spree/variant.rb +25 -25
- data/app/models/spree/variant_property_rule.rb +2 -2
- data/app/models/spree/variant_property_rule_condition.rb +1 -1
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
- data/app/models/spree/wallet/default_payment_builder.rb +1 -1
- data/app/models/spree/wallet_payment_source.rb +2 -2
- data/app/models/spree/zone.rb +18 -18
- data/app/models/spree/zone_member.rb +1 -1
- data/app/subscribers/spree/carton_shipped_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_cancel_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_confirmation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/reimbursement_mailer_subscriber.rb +2 -2
- data/app/views/layouts/spree/base_mailer.html.erb +1 -0
- data/app/views/layouts/spree/ink.license.txt +28 -0
- data/config/initializers/assets.rb +1 -1
- data/config/initializers/db_query_matchers.rb +9 -0
- data/config/initializers/friendly_id.rb +2 -2
- data/config/initializers/inflections.rb +1 -1
- data/config/initializers/money.rb +1 -1
- data/config/locales/en.yml +1 -0
- data/db/default/spree/countries.rb +7 -7
- data/db/default/spree/return_reasons.rb +11 -11
- data/db/default/spree/stock_locations.rb +1 -1
- data/db/default/spree/store_credit.rb +3 -4
- data/db/default/spree/stores.rb +1 -1
- data/db/default/spree/zones.rb +5 -5
- data/db/migrate/20160101010000_solidus_one_four.rb +16 -16
- data/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb +3 -3
- data/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb +7 -6
- data/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +10 -10
- data/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +6 -6
- data/db/migrate/20161129035810_add_index_to_spree_payments_number.rb +1 -1
- data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +4 -4
- data/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb +9 -16
- data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +1 -0
- data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +3 -3
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +1 -1
- data/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb +1 -1
- data/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb +1 -1
- data/db/seeds.rb +3 -3
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +2 -2
- data/lib/generators/solidus/install/app_templates/authentication/devise.rb +3 -3
- data/lib/generators/solidus/install/app_templates/authentication/existing.rb +1 -1
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +2 -2
- data/lib/generators/solidus/install/install_generator.rb +51 -51
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +3 -0
- data/lib/generators/solidus/update/update_generator.rb +29 -29
- data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -6
- data/lib/generators/spree/dummy/dummy_generator.rb +22 -24
- data/lib/generators/spree/dummy/templates/rails/boot.rb +3 -3
- data/lib/generators/spree/dummy/templates/rails/test.rb +4 -4
- data/lib/solidus_core.rb +1 -1
- data/lib/spree/app_configuration.rb +59 -47
- data/lib/spree/bus.rb +1 -1
- data/lib/spree/config.rb +1 -1
- data/lib/spree/core/active_merchant_dependencies.rb +8 -8
- data/lib/spree/core/class_constantizer.rb +1 -1
- data/lib/spree/core/engine.rb +15 -15
- data/lib/spree/core/environment.rb +1 -1
- data/lib/spree/core/environment_extension.rb +2 -2
- data/lib/spree/core/importer/order.rb +15 -15
- data/lib/spree/core/importer/product.rb +4 -4
- data/lib/spree/core/importer.rb +2 -2
- data/lib/spree/core/null_promotion_configuration.rb +7 -7
- data/lib/spree/core/permalinks.rb +1 -1
- data/lib/spree/core/product_filters.rb +94 -93
- data/lib/spree/core/role_configuration.rb +3 -3
- data/lib/spree/core/search/base.rb +5 -6
- data/lib/spree/core/search/variant.rb +3 -3
- data/lib/spree/core/stock_configuration.rb +10 -49
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +3 -3
- data/lib/spree/core/versioned_value.rb +4 -6
- data/lib/spree/core.rb +49 -49
- data/lib/spree/deprecated_instance_variable_proxy.rb +1 -1
- data/lib/spree/deprecation.rb +1 -1
- data/lib/spree/deprecator.rb +2 -2
- data/lib/spree/i18n.rb +2 -2
- data/lib/spree/localized_number.rb +3 -3
- data/lib/spree/manipulative_query_monitor.rb +19 -0
- data/lib/spree/migrations.rb +2 -2
- data/lib/spree/permitted_attributes.rb +12 -11
- data/lib/spree/preferences/configuration.rb +5 -5
- data/lib/spree/preferences/preferable.rb +8 -10
- data/lib/spree/preferences/preferable_class_methods.rb +16 -16
- data/lib/spree/preferences/preference_differentiator.rb +1 -1
- data/lib/spree/preferences/scoped_store.rb +2 -2
- data/lib/spree/preferences/static_model_preferences.rb +2 -2
- data/lib/spree/preferences/store.rb +6 -6
- data/lib/spree/testing_support/ability_helpers.rb +30 -30
- data/lib/spree/testing_support/authorization_helpers.rb +6 -5
- data/lib/spree/testing_support/blacklist_urls.rb +1 -1
- data/lib/spree/testing_support/bus_helpers.rb +1 -1
- data/lib/spree/testing_support/capybara_driver.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +21 -13
- data/lib/spree/testing_support/common_rake.rb +17 -16
- data/lib/spree/testing_support/dummy_ability.rb +1 -1
- data/lib/spree/testing_support/dummy_app/migrations.rb +1 -1
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +5 -5
- data/lib/spree/testing_support/dummy_app/routes.rb +1 -1
- data/lib/spree/testing_support/dummy_app.rb +49 -34
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +12 -12
- data/lib/spree/testing_support/factories/adjustment_factory.rb +7 -7
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_factory.rb +6 -6
- data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +3 -3
- data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -3
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/image_factory.rb +2 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_value_factory.rb +2 -2
- data/lib/spree/testing_support/factories/order_factory.rb +16 -16
- data/lib/spree/testing_support/factories/payment_factory.rb +9 -9
- data/lib/spree/testing_support/factories/payment_method_factory.rb +10 -10
- data/lib/spree/testing_support/factories/price_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/property_factory.rb +3 -3
- data/lib/spree/testing_support/factories/refund_factory.rb +2 -2
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +3 -3
- data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/role_factory.rb +2 -2
- data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +7 -7
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/state_factory.rb +4 -4
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
- data/lib/spree/testing_support/factories/stock_package_factory.rb +3 -3
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -8
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +6 -6
- data/lib/spree/testing_support/factories/store_factory.rb +2 -2
- data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +3 -3
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
- data/lib/spree/testing_support/factory_bot.rb +1 -1
- data/lib/spree/testing_support/flaky.rb +3 -2
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +7 -7
- data/lib/spree/testing_support/preferences.rb +1 -1
- data/lib/spree/testing_support/rake.rb +1 -1
- data/lib/spree/testing_support/shared_examples/calculator.rb +1 -1
- data/lib/spree/testing_support/shared_examples/gallery.rb +7 -7
- data/lib/spree/testing_support/shared_examples/order_factory.rb +9 -9
- data/lib/spree/testing_support/shared_examples/working_factory.rb +1 -1
- data/lib/spree/testing_support/translations.rb +1 -1
- data/lib/spree_core.rb +1 -1
- data/lib/tasks/payment_method.rake +2 -2
- data/solidus_core.gemspec +49 -49
- data/vendor/assets/javascripts/jquery.payment.license.txt +25 -0
- data/vendor/assets/javascripts/jsuri.license.txt +12 -0
- metadata +60 -53
|
@@ -8,7 +8,7 @@ module Spree
|
|
|
8
8
|
belongs_to :customer_return, inverse_of: :reimbursements, touch: true, optional: true
|
|
9
9
|
|
|
10
10
|
has_many :refunds, inverse_of: :reimbursement
|
|
11
|
-
has_many :credits, inverse_of: :reimbursement, class_name:
|
|
11
|
+
has_many :credits, inverse_of: :reimbursement, class_name: "Spree::Reimbursement::Credit"
|
|
12
12
|
|
|
13
13
|
has_many :return_items, inverse_of: :reimbursement
|
|
14
14
|
|
|
@@ -20,7 +20,7 @@ module Spree
|
|
|
20
20
|
before_create :generate_number
|
|
21
21
|
before_create :calculate_total
|
|
22
22
|
|
|
23
|
-
scope :reimbursed, -> { where(reimbursement_status:
|
|
23
|
+
scope :reimbursed, -> { where(reimbursement_status: "reimbursed") }
|
|
24
24
|
|
|
25
25
|
# The reimbursement_tax_calculator property should be set to an object that responds to "call"
|
|
26
26
|
# and accepts a reimbursement object. Invoking "call" should update the tax fields on the
|
|
@@ -64,7 +64,7 @@ module Spree
|
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
def display_total
|
|
67
|
-
Spree::Money.new(total, {
|
|
67
|
+
Spree::Money.new(total, {currency: order.currency})
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
def calculated_total
|
|
@@ -150,7 +150,7 @@ module Spree
|
|
|
150
150
|
|
|
151
151
|
def generate_number
|
|
152
152
|
self.number ||= loop do
|
|
153
|
-
random = "RI#{Array.new(9){ rand(9) }.join}"
|
|
153
|
+
random = "RI#{Array.new(9) { rand(9) }.join}"
|
|
154
154
|
break random unless self.class.exists?(number: random)
|
|
155
155
|
end
|
|
156
156
|
end
|
|
@@ -172,10 +172,10 @@ module Spree
|
|
|
172
172
|
model.total_amount_reimbursed_for(self) > 0
|
|
173
173
|
end
|
|
174
174
|
leniency = if reimbursement_count > 0
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
(reimbursement_count - 1) * BigDecimal("0.01")
|
|
176
|
+
else
|
|
177
|
+
0
|
|
178
|
+
end
|
|
179
179
|
unpaid_amount.abs.between?(0, leniency)
|
|
180
180
|
end
|
|
181
181
|
end
|
|
@@ -23,7 +23,7 @@ module Spree
|
|
|
23
23
|
percent_of_tax = (return_item.amount <= 0) ? 0 : return_item.amount / Spree::ReturnItem.refund_amount_calculator.new.compute(return_item)
|
|
24
24
|
|
|
25
25
|
additional_tax_total = percent_of_tax * return_item.inventory_unit.additional_tax_total
|
|
26
|
-
included_tax_total
|
|
26
|
+
included_tax_total = percent_of_tax * return_item.inventory_unit.included_tax_total
|
|
27
27
|
|
|
28
28
|
return_item.update!({
|
|
29
29
|
additional_tax_total:,
|
|
@@ -68,7 +68,7 @@ module Spree
|
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
def sorted_eligible_refund_payments(payments)
|
|
71
|
-
if eligible_refund_methods = self.eligible_refund_methods
|
|
71
|
+
if (eligible_refund_methods = self.eligible_refund_methods)
|
|
72
72
|
payments = payments.select { |payment| eligible_refund_methods.include? payment.payment_method.class }
|
|
73
73
|
payments = payments.sort_by { |payment| eligible_refund_methods.index(payment.payment_method.class) }
|
|
74
74
|
end
|
|
@@ -5,9 +5,9 @@ module Spree
|
|
|
5
5
|
scope :active, -> { where(active: true) }
|
|
6
6
|
default_scope -> { order(arel_table[:name].lower) }
|
|
7
7
|
|
|
8
|
-
validates :name, presence: true, uniqueness: {
|
|
8
|
+
validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true}
|
|
9
9
|
|
|
10
|
-
ORIGINAL =
|
|
10
|
+
ORIGINAL = "original"
|
|
11
11
|
|
|
12
12
|
has_many :return_items
|
|
13
13
|
|
|
@@ -6,14 +6,14 @@ module Spree
|
|
|
6
6
|
class ReturnAuthorization < Spree::Base
|
|
7
7
|
include Metadata
|
|
8
8
|
|
|
9
|
-
belongs_to :order, class_name:
|
|
9
|
+
belongs_to :order, class_name: "Spree::Order", inverse_of: :return_authorizations, optional: true
|
|
10
10
|
|
|
11
11
|
has_many :return_items, inverse_of: :return_authorization, dependent: :destroy
|
|
12
12
|
has_many :inventory_units, through: :return_items, dependent: :nullify
|
|
13
13
|
has_many :customer_returns, through: :return_items
|
|
14
14
|
|
|
15
15
|
belongs_to :stock_location, optional: true
|
|
16
|
-
belongs_to :reason, class_name:
|
|
16
|
+
belongs_to :reason, class_name: "Spree::ReturnReason", foreign_key: :return_reason_id, optional: true
|
|
17
17
|
|
|
18
18
|
before_create :generate_number
|
|
19
19
|
|
|
@@ -27,9 +27,10 @@ module Spree
|
|
|
27
27
|
include ::Spree::Config.state_machines.return_authorization
|
|
28
28
|
|
|
29
29
|
extend DisplayMoney
|
|
30
|
+
|
|
30
31
|
money_methods :amount, :total_excluding_vat
|
|
31
32
|
|
|
32
|
-
self.allowed_ransackable_attributes = [
|
|
33
|
+
self.allowed_ransackable_attributes = ["memo"]
|
|
33
34
|
|
|
34
35
|
def total_excluding_vat
|
|
35
36
|
return_items.sum(&:total_excluding_vat)
|
|
@@ -59,20 +60,20 @@ module Spree
|
|
|
59
60
|
|
|
60
61
|
def must_have_shipped_units
|
|
61
62
|
if order.nil? || order.inventory_units.shipped.none?
|
|
62
|
-
errors.add(:order, I18n.t(
|
|
63
|
+
errors.add(:order, I18n.t("spree.has_no_shipped_units"))
|
|
63
64
|
end
|
|
64
65
|
end
|
|
65
66
|
|
|
66
67
|
def generate_number
|
|
67
68
|
self.number ||= loop do
|
|
68
|
-
random = "RA#{Array.new(9){ rand(9) }.join}"
|
|
69
|
+
random = "RA#{Array.new(9) { rand(9) }.join}"
|
|
69
70
|
break random unless self.class.exists?(number: random)
|
|
70
71
|
end
|
|
71
72
|
end
|
|
72
73
|
|
|
73
74
|
def no_previously_exchanged_inventory_units
|
|
74
75
|
if return_items.map(&:inventory_unit).any?(&:exchange_requested?)
|
|
75
|
-
errors.add(:base, I18n.t(
|
|
76
|
+
errors.add(:base, I18n.t("spree.return_items_cannot_be_created_for_inventory_units_that_are_already_awaiting_exchange"))
|
|
76
77
|
end
|
|
77
78
|
end
|
|
78
79
|
|
|
@@ -12,11 +12,11 @@ module Spree
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def eligible_for_return?
|
|
15
|
-
raise NotImplementedError, I18n.t(
|
|
15
|
+
raise NotImplementedError, I18n.t("spree.implement_eligible_for_return")
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def requires_manual_intervention?
|
|
19
|
-
raise NotImplementedError, I18n.t(
|
|
19
|
+
raise NotImplementedError, I18n.t("spree.implement_requires_manual_intervention")
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
private
|
|
@@ -28,7 +28,7 @@ module Spree
|
|
|
28
28
|
private
|
|
29
29
|
|
|
30
30
|
def validators
|
|
31
|
-
@validators ||= permitted_eligibility_validators.map{ |validator| validator.new(@return_item) }
|
|
31
|
+
@validators ||= permitted_eligibility_validators.map { |validator| validator.new(@return_item) }
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -8,7 +8,7 @@ module Spree
|
|
|
8
8
|
if @return_item.inventory_unit.shipped?
|
|
9
9
|
true
|
|
10
10
|
else
|
|
11
|
-
add_error(:inventory_unit_shipped, I18n.t(
|
|
11
|
+
add_error(:inventory_unit_shipped, I18n.t("spree.return_item_inventory_unit_ineligible"))
|
|
12
12
|
false
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
|
6
6
|
class NoReimbursements < Spree::ReturnItem::EligibilityValidator::BaseValidator
|
|
7
7
|
def eligible_for_return?
|
|
8
8
|
if @return_item.inventory_unit.return_items.reimbursed.valid.any?
|
|
9
|
-
add_error(:inventory_unit_reimbursed, I18n.t(
|
|
9
|
+
add_error(:inventory_unit_reimbursed, I18n.t("spree.return_item_inventory_unit_reimbursed"))
|
|
10
10
|
false
|
|
11
11
|
else
|
|
12
12
|
true
|
|
@@ -8,7 +8,7 @@ module Spree
|
|
|
8
8
|
if @return_item.inventory_unit.order.completed?
|
|
9
9
|
true
|
|
10
10
|
else
|
|
11
|
-
add_error(:order_not_completed, I18n.t(
|
|
11
|
+
add_error(:order_not_completed, I18n.t("spree.return_item_order_not_completed"))
|
|
12
12
|
false
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -8,7 +8,7 @@ module Spree
|
|
|
8
8
|
if (@return_item.inventory_unit.order.completed_at + Spree::Config[:return_eligibility_number_of_days].days) > Time.current
|
|
9
9
|
true
|
|
10
10
|
else
|
|
11
|
-
add_error(:number_of_days, I18n.t(
|
|
11
|
+
add_error(:number_of_days, I18n.t("spree.return_item_time_period_ineligible"))
|
|
12
12
|
false
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -30,12 +30,12 @@ module Spree
|
|
|
30
30
|
# Finds all the OptionValueVariants that have any of the
|
|
31
31
|
# relevant option values, groups by variant and ensures the variant
|
|
32
32
|
# has ALL of the relevant option values.
|
|
33
|
-
variant_ids = Spree::OptionValuesVariant
|
|
34
|
-
where(variant_id: product_variants.distinct.pluck(:id))
|
|
35
|
-
where(option_value: relevant_option_values)
|
|
36
|
-
group(:variant_id)
|
|
37
|
-
having(
|
|
38
|
-
pluck(:variant_id)
|
|
33
|
+
variant_ids = Spree::OptionValuesVariant
|
|
34
|
+
.where(variant_id: product_variants.distinct.pluck(:id))
|
|
35
|
+
.where(option_value: relevant_option_values)
|
|
36
|
+
.group(:variant_id)
|
|
37
|
+
.having("COUNT(*) = ?", relevant_option_values.size)
|
|
38
|
+
.pluck(:variant_id)
|
|
39
39
|
product_variants.where(id: variant_ids)
|
|
40
40
|
else
|
|
41
41
|
product_variants
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Spree
|
|
4
4
|
class ReturnItem < Spree::Base
|
|
5
|
-
INTERMEDIATE_RECEPTION_STATUSES = %i
|
|
5
|
+
INTERMEDIATE_RECEPTION_STATUSES = %i[given_to_customer lost_in_transit shipped_wrong_item short_shipped in_transit]
|
|
6
6
|
COMPLETED_RECEPTION_STATUSES = INTERMEDIATE_RECEPTION_STATUSES + [:received]
|
|
7
7
|
|
|
8
8
|
# @!scope class
|
|
@@ -31,13 +31,13 @@ module Spree
|
|
|
31
31
|
|
|
32
32
|
belongs_to :return_authorization, inverse_of: :return_items, optional: true
|
|
33
33
|
belongs_to :inventory_unit, inverse_of: :return_items
|
|
34
|
-
belongs_to :exchange_variant, class_name:
|
|
35
|
-
belongs_to :exchange_inventory_unit, class_name:
|
|
34
|
+
belongs_to :exchange_variant, class_name: "Spree::Variant", optional: true
|
|
35
|
+
belongs_to :exchange_inventory_unit, class_name: "Spree::InventoryUnit", inverse_of: :original_return_item, optional: true
|
|
36
36
|
belongs_to :customer_return, inverse_of: :return_items, optional: true
|
|
37
37
|
belongs_to :reimbursement, inverse_of: :return_items, optional: true
|
|
38
|
-
belongs_to :preferred_reimbursement_type, class_name:
|
|
39
|
-
belongs_to :override_reimbursement_type, class_name:
|
|
40
|
-
belongs_to :return_reason, class_name:
|
|
38
|
+
belongs_to :preferred_reimbursement_type, class_name: "Spree::ReimbursementType", optional: true
|
|
39
|
+
belongs_to :override_reimbursement_type, class_name: "Spree::ReimbursementType", optional: true
|
|
40
|
+
belongs_to :return_reason, class_name: "Spree::ReturnReason", foreign_key: :return_reason_id, optional: true
|
|
41
41
|
|
|
42
42
|
validate :eligible_exchange_variant
|
|
43
43
|
validate :belongs_to_same_customer_order
|
|
@@ -46,21 +46,21 @@ module Spree
|
|
|
46
46
|
|
|
47
47
|
after_create :cancel_others, unless: :cancelled?
|
|
48
48
|
|
|
49
|
-
scope :awaiting_return, -> { where(reception_status:
|
|
49
|
+
scope :awaiting_return, -> { where(reception_status: "awaiting") }
|
|
50
50
|
scope :expecting_return, -> { where.not(reception_status: COMPLETED_RECEPTION_STATUSES) }
|
|
51
|
-
scope :not_cancelled, -> { where.not(reception_status:
|
|
52
|
-
scope :valid, -> { where.not(reception_status: %w
|
|
53
|
-
scope :not_expired, -> { where.not(reception_status:
|
|
54
|
-
scope :received, -> { where(reception_status:
|
|
51
|
+
scope :not_cancelled, -> { where.not(reception_status: "cancelled") }
|
|
52
|
+
scope :valid, -> { where.not(reception_status: %w[cancelled expired unexchanged]) }
|
|
53
|
+
scope :not_expired, -> { where.not(reception_status: "expired") }
|
|
54
|
+
scope :received, -> { where(reception_status: "received") }
|
|
55
55
|
INTERMEDIATE_RECEPTION_STATUSES.each do |reception_status|
|
|
56
56
|
scope reception_status, -> { where(reception_status:) }
|
|
57
57
|
end
|
|
58
|
-
scope :pending, -> { where(acceptance_status:
|
|
59
|
-
scope :accepted, -> { where(acceptance_status:
|
|
60
|
-
scope :rejected, -> { where(acceptance_status:
|
|
61
|
-
scope :manual_intervention_required, -> { where(acceptance_status:
|
|
62
|
-
scope :undecided, -> { where(acceptance_status: %w
|
|
63
|
-
scope :decided, -> { where.not(acceptance_status: %w
|
|
58
|
+
scope :pending, -> { where(acceptance_status: "pending") }
|
|
59
|
+
scope :accepted, -> { where(acceptance_status: "accepted") }
|
|
60
|
+
scope :rejected, -> { where(acceptance_status: "rejected") }
|
|
61
|
+
scope :manual_intervention_required, -> { where(acceptance_status: "manual_intervention_required") }
|
|
62
|
+
scope :undecided, -> { where(acceptance_status: %w[pending manual_intervention_required]) }
|
|
63
|
+
scope :decided, -> { where.not(acceptance_status: %w[pending manual_intervention_required]) }
|
|
64
64
|
scope :reimbursed, -> { where.not(reimbursement_id: nil) }
|
|
65
65
|
scope :not_reimbursed, -> { where(reimbursement_id: nil) }
|
|
66
66
|
scope :exchange_requested, -> { where.not(exchange_variant: nil) }
|
|
@@ -80,6 +80,7 @@ module Spree
|
|
|
80
80
|
include ::Spree::Config.state_machines.return_item_acceptance
|
|
81
81
|
|
|
82
82
|
extend DisplayMoney
|
|
83
|
+
|
|
83
84
|
money_methods :amount, :total, :total_excluding_vat
|
|
84
85
|
|
|
85
86
|
# @return [Boolean] true when this retur item is in a complete reception
|
|
@@ -168,13 +169,17 @@ module Spree
|
|
|
168
169
|
event_paths.delete(:expired)
|
|
169
170
|
event_paths.delete(:unexchange)
|
|
170
171
|
|
|
171
|
-
status_paths.map{ |status| I18n.t("spree.reception_states.#{status}", default: status.to_s.humanize) }.zip(event_paths)
|
|
172
|
+
status_paths.map { |status| I18n.t("spree.reception_states.#{status}", default: status.to_s.humanize) }.zip(event_paths)
|
|
172
173
|
end
|
|
173
174
|
|
|
174
175
|
def part_of_exchange?
|
|
175
176
|
# test whether this ReturnItem was either a) one for which an exchange was sent or
|
|
176
177
|
# b) the exchanged item itself being returned in lieu of the original item
|
|
177
|
-
exchange_requested? || sibling_intended_for_exchange(
|
|
178
|
+
exchange_requested? || sibling_intended_for_exchange("unexchanged")
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def currency
|
|
182
|
+
return_authorization.try(:currency) || Spree::Config[:currency]
|
|
178
183
|
end
|
|
179
184
|
|
|
180
185
|
private
|
|
@@ -183,10 +188,6 @@ module Spree
|
|
|
183
188
|
update(acceptance_status_errors: validator.errors)
|
|
184
189
|
end
|
|
185
190
|
|
|
186
|
-
def currency
|
|
187
|
-
return_authorization.try(:currency) || Spree::Config[:currency]
|
|
188
|
-
end
|
|
189
|
-
|
|
190
191
|
def process_inventory_unit!
|
|
191
192
|
inventory_unit.return!
|
|
192
193
|
|
|
@@ -203,7 +204,7 @@ module Spree
|
|
|
203
204
|
end
|
|
204
205
|
|
|
205
206
|
def check_unexchange
|
|
206
|
-
original_ri = sibling_intended_for_exchange(
|
|
207
|
+
original_ri = sibling_intended_for_exchange("awaiting")
|
|
207
208
|
if original_ri
|
|
208
209
|
original_ri.unexchange!
|
|
209
210
|
set_default_amount
|
|
@@ -221,14 +222,14 @@ module Spree
|
|
|
221
222
|
return unless customer_return && inventory_unit
|
|
222
223
|
|
|
223
224
|
if customer_return.order_id != inventory_unit.order_id
|
|
224
|
-
errors.add(:base, I18n.t(
|
|
225
|
+
errors.add(:base, I18n.t("spree.return_items_cannot_be_associated_with_multiple_orders"))
|
|
225
226
|
end
|
|
226
227
|
end
|
|
227
228
|
|
|
228
229
|
def eligible_exchange_variant
|
|
229
230
|
return unless exchange_variant && exchange_variant_id_changed?
|
|
230
231
|
unless eligible_exchange_variants.include?(exchange_variant)
|
|
231
|
-
errors.add(:base, I18n.t(
|
|
232
|
+
errors.add(:base, I18n.t("spree.invalid_exchange_variant"))
|
|
232
233
|
end
|
|
233
234
|
end
|
|
234
235
|
|
|
@@ -243,7 +244,7 @@ module Spree
|
|
|
243
244
|
end
|
|
244
245
|
|
|
245
246
|
def set_exchange_amount
|
|
246
|
-
self.amount = 0.0
|
|
247
|
+
self.amount = BigDecimal("0.0") if exchange_requested?
|
|
247
248
|
end
|
|
248
249
|
|
|
249
250
|
def validate_no_other_completed_return_items
|
|
@@ -261,9 +262,9 @@ module Spree
|
|
|
261
262
|
|
|
262
263
|
def cancel_others
|
|
263
264
|
Spree::ReturnItem.where(inventory_unit_id:)
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
265
|
+
.where.not(id:)
|
|
266
|
+
.valid
|
|
267
|
+
.each(&:cancel!)
|
|
267
268
|
end
|
|
268
269
|
|
|
269
270
|
def should_restock?
|
|
@@ -5,7 +5,7 @@ module Spree
|
|
|
5
5
|
scope :active, -> { where(active: true) }
|
|
6
6
|
default_scope -> { order(arel_table[:name].lower) }
|
|
7
7
|
|
|
8
|
-
validates :name, presence: true, uniqueness: {
|
|
8
|
+
validates :name, presence: true, uniqueness: {case_sensitive: false, allow_blank: true}
|
|
9
9
|
|
|
10
10
|
has_many :return_authorizations
|
|
11
11
|
|
data/app/models/spree/role.rb
CHANGED
|
@@ -7,7 +7,7 @@ module Spree
|
|
|
7
7
|
has_many :role_permissions, dependent: :destroy
|
|
8
8
|
has_many :permission_sets, through: :role_permissions
|
|
9
9
|
|
|
10
|
-
validates :name, presence: true, uniqueness: {
|
|
10
|
+
validates :name, presence: true, uniqueness: {case_sensitive: true, allow_blank: true}
|
|
11
11
|
|
|
12
12
|
def admin?
|
|
13
13
|
name == "admin"
|
|
@@ -6,12 +6,12 @@ module Spree
|
|
|
6
6
|
class Shipment < Spree::Base
|
|
7
7
|
include Metadata
|
|
8
8
|
|
|
9
|
-
belongs_to :order, class_name:
|
|
10
|
-
belongs_to :stock_location, class_name:
|
|
9
|
+
belongs_to :order, class_name: "Spree::Order", touch: true, inverse_of: :shipments, optional: true
|
|
10
|
+
belongs_to :stock_location, class_name: "Spree::StockLocation", optional: true
|
|
11
11
|
|
|
12
12
|
has_many :adjustments, as: :adjustable, inverse_of: :adjustable, dependent: :delete_all, autosave: true
|
|
13
13
|
has_many :inventory_units, dependent: :destroy, inverse_of: :shipment
|
|
14
|
-
has_many :shipping_rates, -> { order(:cost) }, dependent: :destroy, inverse_of: :shipment
|
|
14
|
+
has_many :shipping_rates, -> { order(:cost) }, dependent: :destroy, inverse_of: :shipment, autosave: true
|
|
15
15
|
has_many :shipping_methods, through: :shipping_rates
|
|
16
16
|
has_many :state_changes, as: :stateful
|
|
17
17
|
has_many :cartons, -> { distinct }, through: :inventory_units
|
|
@@ -27,11 +27,11 @@ module Spree
|
|
|
27
27
|
|
|
28
28
|
accepts_nested_attributes_for :inventory_units
|
|
29
29
|
|
|
30
|
-
make_permalink field: :number, length: 11, prefix:
|
|
30
|
+
make_permalink field: :number, length: 11, prefix: "H"
|
|
31
31
|
|
|
32
|
-
scope :pending, -> { with_state(
|
|
33
|
-
scope :ready,
|
|
34
|
-
scope :shipped, -> { with_state(
|
|
32
|
+
scope :pending, -> { with_state("pending") }
|
|
33
|
+
scope :ready, -> { with_state("ready") }
|
|
34
|
+
scope :shipped, -> { with_state("shipped") }
|
|
35
35
|
scope :trackable, -> { where("tracking IS NOT NULL AND tracking != ''") }
|
|
36
36
|
scope :with_state, ->(*state) { where(state:) }
|
|
37
37
|
# sort by most recent shipped_at, falling back to created_at. add "id desc" to make specs that involve this scope more deterministic.
|
|
@@ -43,8 +43,8 @@ module Spree
|
|
|
43
43
|
|
|
44
44
|
include ::Spree::Config.state_machines.shipment
|
|
45
45
|
|
|
46
|
-
self.allowed_ransackable_associations = [
|
|
47
|
-
self.allowed_ransackable_attributes = [
|
|
46
|
+
self.allowed_ransackable_associations = ["order"]
|
|
47
|
+
self.allowed_ransackable_attributes = ["number"]
|
|
48
48
|
|
|
49
49
|
delegate :tax_category, :tax_category_id, to: :selected_shipping_rate, allow_nil: true
|
|
50
50
|
|
|
@@ -63,9 +63,10 @@ module Spree
|
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
extend DisplayMoney
|
|
66
|
+
|
|
66
67
|
money_methods(
|
|
67
68
|
:cost, :amount, :item_cost,
|
|
68
|
-
:total, :total_before_tax
|
|
69
|
+
:total, :total_before_tax
|
|
69
70
|
)
|
|
70
71
|
alias_attribute :amount, :cost
|
|
71
72
|
|
|
@@ -94,7 +95,7 @@ module Spree
|
|
|
94
95
|
# @return [BigDecimal] the amount of this item, taking into consideration
|
|
95
96
|
# all non-tax adjustments.
|
|
96
97
|
def total_before_tax
|
|
97
|
-
amount + adjustments.reject
|
|
98
|
+
amount + adjustments.reject { |adjustment| adjustment.tax? || adjustment.marked_for_destruction? }.sum(&:amount)
|
|
98
99
|
end
|
|
99
100
|
|
|
100
101
|
# @return [BigDecimal] the amount of this shipment before VAT tax
|
|
@@ -151,7 +152,7 @@ module Spree
|
|
|
151
152
|
# If one of the new rates matches the previously selected shipping
|
|
152
153
|
# method, select that instead of the default provided by the estimator.
|
|
153
154
|
# Otherwise, keep the default.
|
|
154
|
-
selected_rate = new_rates.detect{ |rate| rate.shipping_method_id == original_shipping_method_id }
|
|
155
|
+
selected_rate = new_rates.detect { |rate| rate.shipping_method_id == original_shipping_method_id }
|
|
155
156
|
if selected_rate
|
|
156
157
|
new_rates.each do |rate|
|
|
157
158
|
rate.selected = (rate == selected_rate)
|
|
@@ -177,7 +178,12 @@ module Spree
|
|
|
177
178
|
end
|
|
178
179
|
|
|
179
180
|
def manifest
|
|
180
|
-
@manifest ||= Spree::ShippingManifest.new(
|
|
181
|
+
@manifest ||= Spree::ShippingManifest.new(
|
|
182
|
+
inventory_units:,
|
|
183
|
+
# Only when it is already in memory — the manifest treats the order as an
|
|
184
|
+
# optimization and must not cause a query for it.
|
|
185
|
+
order: (order if association(:order).loaded?)
|
|
186
|
+
).items
|
|
181
187
|
end
|
|
182
188
|
|
|
183
189
|
def selected_shipping_rate_id
|
|
@@ -195,7 +201,7 @@ module Spree
|
|
|
195
201
|
end
|
|
196
202
|
|
|
197
203
|
transaction do
|
|
198
|
-
selected_shipping_rate
|
|
204
|
+
selected_shipping_rate&.update!(selected: false)
|
|
199
205
|
new_rate.update!(selected: true)
|
|
200
206
|
end
|
|
201
207
|
end
|
|
@@ -203,13 +209,13 @@ module Spree
|
|
|
203
209
|
def determine_state(order)
|
|
204
210
|
Spree.deprecator.warn "Use Spree::Shipment#recalculate_state instead"
|
|
205
211
|
|
|
206
|
-
return
|
|
207
|
-
return
|
|
208
|
-
return
|
|
212
|
+
return "shipped" if shipped?
|
|
213
|
+
return "canceled" if order.canceled? || inventory_units.all?(&:canceled?)
|
|
214
|
+
return "pending" unless order.can_ship?
|
|
209
215
|
if can_transition_from_pending_to_ready?
|
|
210
|
-
|
|
216
|
+
"ready"
|
|
211
217
|
else
|
|
212
|
-
|
|
218
|
+
"pending"
|
|
213
219
|
end
|
|
214
220
|
end
|
|
215
221
|
|
|
@@ -243,7 +249,7 @@ module Spree
|
|
|
243
249
|
end
|
|
244
250
|
|
|
245
251
|
def shipped=(value)
|
|
246
|
-
return unless value ==
|
|
252
|
+
return unless value == "1" && shipped_at.nil?
|
|
247
253
|
self.shipped_at = Time.current
|
|
248
254
|
end
|
|
249
255
|
|
|
@@ -278,14 +284,21 @@ module Spree
|
|
|
278
284
|
end
|
|
279
285
|
|
|
280
286
|
def update_amounts
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
287
|
+
assign_amounts
|
|
288
|
+
persist_amounts
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def assign_amounts
|
|
292
|
+
return unless selected_shipping_rate
|
|
293
|
+
self.cost = selected_shipping_rate.cost
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def persist_amounts
|
|
297
|
+
if cost_changed?
|
|
298
|
+
update_columns(
|
|
299
|
+
cost:,
|
|
300
|
+
updated_at: Time.current
|
|
301
|
+
)
|
|
289
302
|
end
|
|
290
303
|
end
|
|
291
304
|
|
|
@@ -312,7 +325,7 @@ module Spree
|
|
|
312
325
|
new_state = recalculate_state
|
|
313
326
|
if new_state != old_state
|
|
314
327
|
update_columns state: new_state, updated_at: Time.current
|
|
315
|
-
after_ship if new_state ==
|
|
328
|
+
after_ship if new_state == "shipped"
|
|
316
329
|
end
|
|
317
330
|
end
|
|
318
331
|
|
|
@@ -332,12 +345,12 @@ module Spree
|
|
|
332
345
|
end
|
|
333
346
|
|
|
334
347
|
def can_get_rates?
|
|
335
|
-
order.ship_address
|
|
348
|
+
order.ship_address&.valid?
|
|
336
349
|
end
|
|
337
350
|
|
|
338
351
|
def manifest_restock(item)
|
|
339
352
|
if item.states["on_hand"].to_i > 0
|
|
340
|
-
|
|
353
|
+
stock_location.restock item.variant, item.states["on_hand"], self
|
|
341
354
|
end
|
|
342
355
|
|
|
343
356
|
if item.states["backordered"].to_i > 0
|