solidus_core 4.6.2 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +13 -13
- data/app/controllers/spree/base_controller.rb +2 -2
- data/app/helpers/spree/base_helper.rb +24 -24
- data/app/helpers/spree/checkout_helper.rb +7 -7
- data/app/helpers/spree/core/controller_helpers/auth.rb +1 -1
- data/app/helpers/spree/core/controller_helpers/common.rb +3 -2
- data/app/helpers/spree/core/controller_helpers/order.rb +3 -5
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +1 -2
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +10 -10
- data/app/helpers/spree/products_helper.rb +5 -5
- data/app/helpers/spree/store_helper.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +3 -3
- data/app/mailers/spree/order_mailer.rb +4 -4
- data/app/mailers/spree/reimbursement_mailer.rb +2 -2
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter.rb +2 -2
- data/app/models/concerns/spree/adjustment_source.rb +4 -4
- data/app/models/concerns/spree/display_money.rb +2 -2
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/preferences/persistable.rb +1 -1
- data/app/models/concerns/spree/ransackable_attributes.rb +1 -0
- data/app/models/concerns/spree/soft_deletable.rb +2 -1
- data/app/models/concerns/spree/state_change_tracking.rb +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 +262 -0
- data/app/models/spree/inventory_unit.rb +11 -11
- data/app/models/spree/item_total.rb +1 -1
- data/app/models/spree/legacy_user.rb +2 -2
- data/app/models/spree/line_item.rb +21 -11
- data/app/models/spree/log_entry.rb +3 -3
- data/app/models/spree/mergeable_orders_finder.rb +44 -0
- data/app/models/spree/money.rb +2 -1
- data/app/models/spree/null_promotion_adjuster.rb +1 -1
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order/number_generator.rb +1 -1
- data/app/models/spree/order.rb +66 -64
- data/app/models/spree/order_cancellations.rb +1 -3
- data/app/models/spree/order_inventory.rb +5 -8
- data/app/models/spree/order_mutex.rb +1 -1
- data/app/models/spree/order_shipping.rb +1 -1
- data/app/models/spree/order_updater.rb +59 -37
- data/app/models/spree/payment/cancellation.rb +2 -2
- data/app/models/spree/payment/processing.rb +22 -22
- data/app/models/spree/payment.rb +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 +1 -1
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +7 -6
- data/app/models/spree/product/scopes.rb +23 -23
- data/app/models/spree/product.rb +37 -41
- data/app/models/spree/product_option_type.rb +2 -2
- data/app/models/spree/product_property.rb +3 -3
- data/app/models/spree/refund.rb +10 -10
- data/app/models/spree/refund_reason.rb +2 -2
- data/app/models/spree/reimbursement/credit.rb +1 -1
- data/app/models/spree/reimbursement.rb +8 -8
- data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +2 -2
- data/app/models/spree/return_authorization.rb +7 -6
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
- data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +6 -6
- data/app/models/spree/return_item.rb +31 -30
- data/app/models/spree/return_reason.rb +1 -1
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/role_user.rb +1 -1
- data/app/models/spree/shipment.rb +37 -29
- data/app/models/spree/shipping_method.rb +9 -9
- data/app/models/spree/shipping_method_category.rb +2 -2
- data/app/models/spree/shipping_rate.rb +12 -10
- data/app/models/spree/shipping_rate_tax.rb +5 -4
- data/app/models/spree/simple_order_contents.rb +2 -2
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/stock/availability.rb +9 -9
- data/app/models/spree/stock/availability_validator.rb +3 -3
- data/app/models/spree/stock/differentiator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +4 -4
- data/app/models/spree/stock/inventory_validator.rb +1 -1
- data/app/models/spree/stock/package.rb +3 -3
- data/app/models/spree/stock_item.rb +5 -5
- data/app/models/spree/stock_location.rb +6 -6
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/stock_quantities.rb +2 -2
- data/app/models/spree/store.rb +3 -3
- data/app/models/spree/store_credit.rb +30 -29
- data/app/models/spree/store_credit_category.rb +2 -2
- data/app/models/spree/store_credit_event.rb +6 -6
- data/app/models/spree/store_credit_reason.rb +1 -1
- data/app/models/spree/store_credit_type.rb +3 -3
- data/app/models/spree/store_selector/by_server_name.rb +1 -1
- data/app/models/spree/store_selector/legacy.rb +1 -1
- data/app/models/spree/tax/item_tax.rb +1 -0
- data/app/models/spree/tax/order_tax.rb +1 -0
- data/app/models/spree/tax_category.rb +3 -3
- data/app/models/spree/tax_rate.rb +5 -5
- data/app/models/spree/tax_rate_tax_category.rb +2 -2
- data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
- data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
- data/app/models/spree/taxon.rb +16 -17
- data/app/models/spree/taxon_brand_selector.rb +3 -3
- data/app/models/spree/unauthorized_redirect_handler.rb +1 -1
- data/app/models/spree/unit_cancel.rb +4 -4
- data/app/models/spree/user_address.rb +3 -3
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +6 -8
- data/app/models/spree/user_last_url_storer.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +1 -1
- data/app/models/spree/variant/scopes.rb +9 -9
- data/app/models/spree/variant.rb +25 -25
- data/app/models/spree/variant_property_rule.rb +2 -2
- data/app/models/spree/variant_property_rule_condition.rb +1 -1
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
- data/app/models/spree/wallet/default_payment_builder.rb +1 -1
- data/app/models/spree/wallet_payment_source.rb +2 -2
- data/app/models/spree/zone.rb +18 -18
- data/app/models/spree/zone_member.rb +1 -1
- data/app/subscribers/spree/carton_shipped_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_cancel_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_confirmation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/reimbursement_mailer_subscriber.rb +2 -2
- data/config/initializers/assets.rb +1 -1
- data/config/initializers/db_query_matchers.rb +9 -0
- data/config/initializers/friendly_id.rb +2 -2
- data/config/initializers/inflections.rb +1 -1
- data/config/initializers/money.rb +1 -1
- data/config/locales/en.yml +1 -0
- data/db/default/spree/countries.rb +7 -7
- data/db/default/spree/return_reasons.rb +11 -11
- data/db/default/spree/stock_locations.rb +1 -1
- data/db/default/spree/store_credit.rb +3 -4
- data/db/default/spree/stores.rb +1 -1
- data/db/default/spree/zones.rb +5 -5
- data/db/migrate/20160101010000_solidus_one_four.rb +16 -16
- data/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb +3 -3
- data/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb +7 -6
- data/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +10 -10
- data/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +6 -6
- data/db/migrate/20161129035810_add_index_to_spree_payments_number.rb +1 -1
- data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +4 -4
- data/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb +9 -16
- data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +1 -0
- data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +3 -3
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +1 -1
- data/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb +1 -1
- data/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb +1 -1
- data/db/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 +10 -10
- data/lib/spree/preferences/configuration.rb +5 -5
- data/lib/spree/preferences/preferable.rb +8 -10
- data/lib/spree/preferences/preferable_class_methods.rb +16 -16
- data/lib/spree/preferences/preference_differentiator.rb +1 -1
- data/lib/spree/preferences/scoped_store.rb +2 -2
- data/lib/spree/preferences/static_model_preferences.rb +2 -2
- data/lib/spree/preferences/store.rb +6 -6
- data/lib/spree/testing_support/ability_helpers.rb +30 -30
- data/lib/spree/testing_support/authorization_helpers.rb +6 -5
- data/lib/spree/testing_support/blacklist_urls.rb +1 -1
- data/lib/spree/testing_support/bus_helpers.rb +1 -1
- data/lib/spree/testing_support/capybara_driver.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +12 -12
- data/lib/spree/testing_support/common_rake.rb +17 -16
- data/lib/spree/testing_support/dummy_ability.rb +1 -1
- data/lib/spree/testing_support/dummy_app/migrations.rb +1 -1
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +5 -5
- data/lib/spree/testing_support/dummy_app/routes.rb +1 -1
- data/lib/spree/testing_support/dummy_app.rb +34 -34
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +12 -12
- data/lib/spree/testing_support/factories/adjustment_factory.rb +7 -7
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_factory.rb +6 -6
- data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +3 -3
- data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -3
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/image_factory.rb +2 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_value_factory.rb +2 -2
- data/lib/spree/testing_support/factories/order_factory.rb +16 -16
- data/lib/spree/testing_support/factories/payment_factory.rb +9 -9
- data/lib/spree/testing_support/factories/payment_method_factory.rb +10 -10
- data/lib/spree/testing_support/factories/price_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/property_factory.rb +3 -3
- data/lib/spree/testing_support/factories/refund_factory.rb +2 -2
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +3 -3
- data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/role_factory.rb +2 -2
- data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +7 -7
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/state_factory.rb +4 -4
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
- data/lib/spree/testing_support/factories/stock_package_factory.rb +3 -3
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -8
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +6 -6
- data/lib/spree/testing_support/factories/store_factory.rb +2 -2
- data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +3 -3
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
- data/lib/spree/testing_support/factory_bot.rb +1 -1
- data/lib/spree/testing_support/flaky.rb +3 -2
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +7 -7
- data/lib/spree/testing_support/preferences.rb +1 -1
- data/lib/spree/testing_support/rake.rb +1 -1
- data/lib/spree/testing_support/shared_examples/calculator.rb +1 -1
- data/lib/spree/testing_support/shared_examples/gallery.rb +7 -7
- data/lib/spree/testing_support/shared_examples/order_factory.rb +9 -9
- data/lib/spree/testing_support/shared_examples/working_factory.rb +1 -1
- data/lib/spree/testing_support/translations.rb +1 -1
- data/lib/spree_core.rb +1 -1
- data/lib/tasks/payment_method.rake +2 -2
- data/solidus_core.gemspec +49 -49
- metadata +60 -54
|
@@ -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
|
|
|
@@ -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)
|
|
@@ -195,7 +196,7 @@ module Spree
|
|
|
195
196
|
end
|
|
196
197
|
|
|
197
198
|
transaction do
|
|
198
|
-
selected_shipping_rate
|
|
199
|
+
selected_shipping_rate&.update!(selected: false)
|
|
199
200
|
new_rate.update!(selected: true)
|
|
200
201
|
end
|
|
201
202
|
end
|
|
@@ -203,13 +204,13 @@ module Spree
|
|
|
203
204
|
def determine_state(order)
|
|
204
205
|
Spree.deprecator.warn "Use Spree::Shipment#recalculate_state instead"
|
|
205
206
|
|
|
206
|
-
return
|
|
207
|
-
return
|
|
208
|
-
return
|
|
207
|
+
return "shipped" if shipped?
|
|
208
|
+
return "canceled" if order.canceled? || inventory_units.all?(&:canceled?)
|
|
209
|
+
return "pending" unless order.can_ship?
|
|
209
210
|
if can_transition_from_pending_to_ready?
|
|
210
|
-
|
|
211
|
+
"ready"
|
|
211
212
|
else
|
|
212
|
-
|
|
213
|
+
"pending"
|
|
213
214
|
end
|
|
214
215
|
end
|
|
215
216
|
|
|
@@ -243,7 +244,7 @@ module Spree
|
|
|
243
244
|
end
|
|
244
245
|
|
|
245
246
|
def shipped=(value)
|
|
246
|
-
return unless value ==
|
|
247
|
+
return unless value == "1" && shipped_at.nil?
|
|
247
248
|
self.shipped_at = Time.current
|
|
248
249
|
end
|
|
249
250
|
|
|
@@ -278,14 +279,21 @@ module Spree
|
|
|
278
279
|
end
|
|
279
280
|
|
|
280
281
|
def update_amounts
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
282
|
+
assign_amounts
|
|
283
|
+
persist_amounts
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def assign_amounts
|
|
287
|
+
return unless selected_shipping_rate
|
|
288
|
+
self.cost = selected_shipping_rate.cost
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def persist_amounts
|
|
292
|
+
if cost_changed?
|
|
293
|
+
update_columns(
|
|
294
|
+
cost:,
|
|
295
|
+
updated_at: Time.current
|
|
296
|
+
)
|
|
289
297
|
end
|
|
290
298
|
end
|
|
291
299
|
|
|
@@ -312,7 +320,7 @@ module Spree
|
|
|
312
320
|
new_state = recalculate_state
|
|
313
321
|
if new_state != old_state
|
|
314
322
|
update_columns state: new_state, updated_at: Time.current
|
|
315
|
-
after_ship if new_state ==
|
|
323
|
+
after_ship if new_state == "shipped"
|
|
316
324
|
end
|
|
317
325
|
end
|
|
318
326
|
|
|
@@ -332,12 +340,12 @@ module Spree
|
|
|
332
340
|
end
|
|
333
341
|
|
|
334
342
|
def can_get_rates?
|
|
335
|
-
order.ship_address
|
|
343
|
+
order.ship_address&.valid?
|
|
336
344
|
end
|
|
337
345
|
|
|
338
346
|
def manifest_restock(item)
|
|
339
347
|
if item.states["on_hand"].to_i > 0
|
|
340
|
-
|
|
348
|
+
stock_location.restock item.variant, item.states["on_hand"], self
|
|
341
349
|
end
|
|
342
350
|
|
|
343
351
|
if item.states["backordered"].to_i > 0
|
|
@@ -16,7 +16,7 @@ module Spree
|
|
|
16
16
|
has_many :shipping_method_zones, dependent: :destroy
|
|
17
17
|
has_many :zones, through: :shipping_method_zones
|
|
18
18
|
|
|
19
|
-
belongs_to :tax_category, -> { with_discarded }, class_name:
|
|
19
|
+
belongs_to :tax_category, -> { with_discarded }, class_name: "Spree::TaxCategory", optional: true
|
|
20
20
|
has_many :shipping_method_stock_locations, dependent: :destroy, class_name: "Spree::ShippingMethodStockLocation"
|
|
21
21
|
has_many :stock_locations, through: :shipping_method_stock_locations
|
|
22
22
|
|
|
@@ -41,10 +41,10 @@ module Spree
|
|
|
41
41
|
# cause this to return incorrect results.
|
|
42
42
|
join_table = Spree::ShippingMethodCategory.arel_table
|
|
43
43
|
having = join_table[:id].count(true).eq(shipping_category_ids.count)
|
|
44
|
-
subquery = joins(:shipping_method_categories)
|
|
45
|
-
where(spree_shipping_method_categories: {
|
|
46
|
-
group(
|
|
47
|
-
having(having)
|
|
44
|
+
subquery = joins(:shipping_method_categories)
|
|
45
|
+
.where(spree_shipping_method_categories: {shipping_category_id: shipping_category_ids})
|
|
46
|
+
.group("spree_shipping_methods.id")
|
|
47
|
+
.having(having)
|
|
48
48
|
|
|
49
49
|
where(id: subquery.select(:id))
|
|
50
50
|
end
|
|
@@ -62,9 +62,9 @@ module Spree
|
|
|
62
62
|
# rails 5 this will be easy using .left_join and .or, but for now we must
|
|
63
63
|
# use arel to achieve this.
|
|
64
64
|
arel_join =
|
|
65
|
-
arel_table.join(smsl_table, Arel::Nodes::OuterJoin)
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
arel_table.join(smsl_table, Arel::Nodes::OuterJoin)
|
|
66
|
+
.on(arel_table[:id].eq(smsl_table[:shipping_method_id]))
|
|
67
|
+
.join_sources
|
|
68
68
|
arel_condition =
|
|
69
69
|
arel_table[:available_to_all].eq(true).or(smsl_table[:stock_location_id].eq(stock_location.id))
|
|
70
70
|
|
|
@@ -87,7 +87,7 @@ module Spree
|
|
|
87
87
|
|
|
88
88
|
def build_tracking_url(tracking)
|
|
89
89
|
return if tracking.blank? || tracking_url.blank?
|
|
90
|
-
tracking_url.gsub(
|
|
90
|
+
tracking_url.gsub(":tracking", ERB::Util.url_encode(tracking)) # :url_encode exists in 1.8.7 through 2.1.0
|
|
91
91
|
end
|
|
92
92
|
|
|
93
93
|
private
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Spree
|
|
4
4
|
class ShippingMethodCategory < Spree::Base
|
|
5
|
-
belongs_to :shipping_method, class_name:
|
|
6
|
-
belongs_to :shipping_category, class_name:
|
|
5
|
+
belongs_to :shipping_method, class_name: "Spree::ShippingMethod"
|
|
6
|
+
belongs_to :shipping_category, class_name: "Spree::ShippingCategory", inverse_of: :shipping_method_categories
|
|
7
7
|
end
|
|
8
8
|
end
|