solidus_core 2.4.2 → 2.5.0.beta1
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 +5 -5
- data/README.md +1 -5
- data/Rakefile +23 -6
- data/app/helpers/spree/base_helper.rb +15 -10
- data/app/helpers/spree/checkout_helper.rb +1 -1
- data/app/helpers/spree/products_helper.rb +2 -2
- data/app/mailers/spree/carton_mailer.rb +2 -2
- data/app/mailers/spree/order_mailer.rb +4 -4
- data/app/mailers/spree/reimbursement_mailer.rb +2 -2
- data/app/mailers/spree/test_mailer.rb +1 -1
- data/app/models/concerns/spree/adjustment_source.rb +17 -11
- data/app/models/concerns/spree/calculated_adjustments.rb +2 -2
- data/app/models/spree/ability.rb +1 -1
- data/app/models/spree/address.rb +7 -0
- data/app/models/spree/adjustment.rb +6 -2
- data/app/models/spree/calculator.rb +1 -1
- data/app/models/spree/calculator/flexi_rate.rb +1 -0
- data/app/models/spree/calculator/free_shipping.rb +2 -0
- data/app/models/spree/calculator/percent_on_line_item.rb +6 -6
- data/app/models/spree/calculator/percent_per_item.rb +2 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +4 -4
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -0
- data/app/models/spree/calculator/shipping/flat_rate.rb +1 -0
- data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -0
- data/app/models/spree/calculator/shipping/per_item.rb +1 -0
- data/app/models/spree/calculator/shipping/price_sack.rb +1 -0
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/customer_return.rb +1 -1
- data/app/models/spree/inventory_unit.rb +8 -2
- data/app/models/spree/log_entry.rb +0 -11
- data/app/models/spree/order.rb +31 -16
- data/app/models/spree/order_contents.rb +0 -14
- data/app/models/spree/order_shipping.rb +0 -5
- data/app/models/spree/order_updater.rb +0 -4
- data/app/models/spree/payment.rb +6 -1
- data/app/models/spree/payment/processing.rb +4 -4
- data/app/models/spree/payment_method.rb +8 -3
- data/app/models/spree/payment_method/credit_card.rb +1 -1
- data/app/models/spree/payment_method/store_credit.rb +4 -4
- data/app/models/spree/price.rb +7 -1
- data/app/models/spree/product.rb +34 -6
- data/app/models/spree/product/scopes.rb +2 -2
- data/app/models/spree/promotion.rb +1 -2
- data/app/models/spree/promotion/actions/create_adjustment.rb +3 -2
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +7 -8
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
- data/app/models/spree/promotion/rules/taxon.rb +25 -24
- data/app/models/spree/promotion_action.rb +7 -1
- data/app/models/spree/promotion_chooser.rb +1 -1
- data/app/models/spree/promotion_code.rb +3 -3
- data/app/models/spree/promotion_handler/coupon.rb +8 -29
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/refund.rb +3 -3
- data/app/models/spree/reimbursement.rb +1 -1
- data/app/models/spree/return_authorization.rb +2 -2
- data/app/models/spree/return_item.rb +3 -3
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
- 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/shipment.rb +16 -6
- data/app/models/spree/shipping_method.rb +7 -0
- data/app/models/spree/shipping_rate.rb +6 -6
- data/app/models/spree/shipping_rate_tax.rb +2 -2
- data/app/models/spree/stock/availability_validator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +9 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -2
- data/app/models/spree/stock/inventory_validator.rb +2 -2
- data/app/models/spree/stock/package.rb +1 -1
- data/app/models/spree/stock/simple_coordinator.rb +2 -2
- data/app/models/spree/stock_item.rb +6 -0
- data/app/models/spree/stock_location.rb +2 -2
- data/app/models/spree/store_credit.rb +19 -12
- data/app/models/spree/store_credit_category.rb +1 -1
- data/app/models/spree/store_credit_event.rb +7 -1
- data/app/models/spree/tax/shipping_rate_taxer.rb +1 -1
- data/app/models/spree/tax_calculator/shipping_rate.rb +12 -3
- data/app/models/spree/tax_rate.rb +10 -3
- data/app/models/spree/taxon.rb +14 -4
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/unit_cancel.rb +1 -1
- data/app/models/spree/variant.rb +33 -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 +1 -1
- data/app/models/spree/variant/vat_price_generator.rb +1 -1
- data/app/views/spree/carton_mailer/shipped_email.html.erb +6 -6
- data/app/views/spree/carton_mailer/shipped_email.text.erb +6 -6
- data/app/views/spree/order_mailer/cancel_email.html.erb +5 -5
- data/app/views/spree/order_mailer/cancel_email.text.erb +5 -5
- data/app/views/spree/order_mailer/confirm_email.html.erb +9 -9
- data/app/views/spree/order_mailer/confirm_email.text.erb +9 -9
- data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +3 -3
- data/app/views/spree/order_mailer/inventory_cancellation_email.text.erb +3 -3
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +1 -1
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +1 -1
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +5 -5
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +5 -5
- data/app/views/spree/shared/_error_messages.html.erb +2 -2
- data/app/views/spree/test_mailer/test_email.html.erb +2 -2
- data/app/views/spree/test_mailer/test_email.text.erb +2 -2
- data/config/initializers/assets.rb +3 -1
- data/config/locales/en.yml +44 -48
- data/db/default/spree/store_credit.rb +1 -1
- data/db/default/spree/stores.rb +7 -8
- data/db/migrate/20160101010000_solidus_one_four.rb +4 -46
- data/db/migrate/20170317035819_add_lft_and_rgt_indexes_to_taxons.rb +6 -0
- data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +28 -0
- data/db/migrate/20170608074534_rename_bogus_gateways.rb +4 -2
- data/db/migrate/20170831201542_remove_default_tax_from_spree_zones.rb +1 -1
- data/lib/generators/spree/custom_user/custom_user_generator.rb +11 -22
- data/lib/generators/spree/install/install_generator.rb +10 -5
- data/lib/spree/app_configuration.rb +103 -5
- data/lib/spree/core.rb +3 -2
- data/lib/spree/core/active_merchant_dependencies.rb +11 -0
- data/lib/spree/core/controller_helpers/auth.rb +3 -1
- data/lib/spree/core/controller_helpers/common.rb +3 -7
- data/lib/spree/core/engine.rb +18 -100
- data/lib/spree/core/environment.rb +3 -3
- data/lib/spree/core/importer/order.rb +0 -1
- data/lib/spree/core/permalinks.rb +9 -15
- data/lib/spree/core/product_filters.rb +5 -3
- data/lib/spree/core/role_configuration.rb +23 -7
- data/lib/spree/core/search/base.rb +16 -13
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/paranoia_deprecations.rb +19 -0
- data/lib/spree/permission_sets.rb +0 -4
- data/lib/spree/permitted_attributes.rb +0 -3
- data/lib/spree/preferences/preferable.rb +70 -34
- data/lib/spree/preferences/preferable_class_methods.rb +22 -0
- data/lib/spree/testing_support/authorization_helpers.rb +2 -0
- data/lib/spree/testing_support/common_rake.rb +0 -1
- data/lib/spree/testing_support/dummy_app.rb +100 -0
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +10 -0
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +10 -0
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/backend/all.css +9 -0
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +9 -0
- data/lib/spree/testing_support/dummy_app/database.yml +31 -0
- data/lib/spree/testing_support/dummy_app/migrations.rb +35 -0
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +60 -0
- data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +1 -0
- data/lib/spree/testing_support/factories.rb +1 -1
- data/lib/spree/testing_support/factories/address_factory.rb +2 -2
- data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -2
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_factory.rb +1 -1
- data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +1 -1
- data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/image_factory.rb +1 -1
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +13 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/option_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/option_value_factory.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +5 -1
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +1 -1
- data/lib/spree/testing_support/factories/payment_factory.rb +1 -1
- data/lib/spree/testing_support/factories/payment_method_factory.rb +1 -1
- data/lib/spree/testing_support/factories/price_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_factory.rb +1 -1
- 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/promotion_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
- data/lib/spree/testing_support/factories/promotion_factory.rb +1 -1
- data/lib/spree/testing_support/factories/property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
- 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 +1 -1
- 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 +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -2
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -2
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/state_factory.rb +1 -7
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_update_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -2
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +4 -10
- data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
- 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 +2 -4
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +9 -9
- data/lib/spree/testing_support/preferences.rb +4 -0
- data/lib/spree/testing_support/sequences.rb +3 -12
- data/solidus_core.gemspec +12 -8
- data/spec/helpers/base_helper_spec.rb +19 -3
- data/spec/helpers/products_helper_spec.rb +1 -1
- data/spec/lib/calculated_adjustments_spec.rb +20 -0
- data/spec/lib/i18n_spec.rb +4 -69
- data/spec/lib/search/base_spec.rb +1 -0
- data/spec/lib/search/variant_spec.rb +4 -4
- data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +6 -6
- data/spec/lib/spree/core/importer/order_spec.rb +2 -2
- data/spec/lib/spree/core/role_configuration_spec.rb +6 -9
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +12 -8
- data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +1 -1
- data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +1 -1
- data/spec/mailers/carton_mailer_spec.rb +3 -7
- data/spec/mailers/order_mailer_spec.rb +7 -11
- data/spec/mailers/reimbursement_mailer_spec.rb +1 -5
- data/spec/mailers/test_mailer_spec.rb +0 -4
- data/spec/models/spree/ability_spec.rb +2 -1
- data/spec/models/spree/address_spec.rb +32 -19
- data/spec/models/spree/app_configuration_spec.rb +1 -1
- data/spec/models/spree/calculator/distributed_amount_spec.rb +1 -1
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +8 -10
- data/spec/models/spree/calculator/percent_per_item_spec.rb +4 -4
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +10 -3
- data/spec/models/spree/classification_spec.rb +19 -0
- data/spec/models/spree/credit_card_spec.rb +1 -1
- data/spec/models/spree/customer_return_spec.rb +17 -6
- data/spec/models/spree/distributed_amounts_handler_spec.rb +1 -1
- data/spec/models/spree/exchange_spec.rb +1 -1
- data/spec/models/spree/inventory_unit_spec.rb +3 -7
- data/spec/models/spree/line_item_spec.rb +6 -6
- data/spec/models/spree/option_value_spec.rb +11 -6
- data/spec/models/spree/order/callbacks_spec.rb +2 -2
- data/spec/models/spree/order/checkout_spec.rb +31 -31
- data/spec/models/spree/order/risk_assessment_spec.rb +9 -9
- data/spec/models/spree/order_contents_spec.rb +1 -9
- data/spec/models/spree/order_inventory_spec.rb +2 -2
- data/spec/models/spree/order_mutex_spec.rb +3 -1
- data/spec/models/spree/order_shipping_spec.rb +7 -4
- data/spec/models/spree/order_spec.rb +36 -13
- data/spec/models/spree/order_taxation_spec.rb +7 -7
- data/spec/models/spree/order_updater_spec.rb +6 -4
- data/spec/models/spree/payment/cancellation_spec.rb +1 -1
- data/spec/models/spree/payment_create_spec.rb +2 -2
- data/spec/models/spree/payment_method/store_credit_spec.rb +13 -13
- data/spec/models/spree/payment_spec.rb +23 -4
- data/spec/models/spree/preferences/preferable_spec.rb +44 -0
- data/spec/models/spree/preferences/statically_configurable_spec.rb +1 -0
- data/spec/models/spree/price_spec.rb +6 -4
- data/spec/models/spree/product/scopes_spec.rb +1 -1
- data/spec/models/spree/product_spec.rb +49 -9
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +13 -3
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +146 -134
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +6 -6
- data/spec/models/spree/promotion/rules/taxon_spec.rb +14 -14
- data/spec/models/spree/promotion_code_spec.rb +31 -19
- data/spec/models/spree/promotion_handler/coupon_spec.rb +42 -17
- data/spec/models/spree/promotion_handler/shipping_spec.rb +1 -6
- data/spec/models/spree/promotion_spec.rb +14 -14
- data/spec/models/spree/refund_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +3 -2
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +2 -2
- data/spec/models/spree/return_item_spec.rb +6 -6
- data/spec/models/spree/shipment_spec.rb +14 -10
- data/spec/models/spree/shipping_manifest_spec.rb +22 -9
- data/spec/models/spree/shipping_method_spec.rb +9 -5
- data/spec/models/spree/stock/availability_spec.rb +16 -2
- data/spec/models/spree/stock/estimator_spec.rb +11 -12
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -4
- data/spec/models/spree/stock/package_spec.rb +3 -2
- data/spec/models/spree/stock/simple_coordinator_spec.rb +1 -24
- data/spec/models/spree/stock_item_spec.rb +6 -6
- data/spec/models/spree/stock_location_spec.rb +16 -3
- data/spec/models/spree/store_credit_spec.rb +12 -6
- data/spec/models/spree/tax/taxation_integration_spec.rb +6 -6
- data/spec/models/spree/tax_calculator/default_spec.rb +7 -7
- data/spec/models/spree/taxon_spec.rb +42 -19
- data/spec/models/spree/variant/vat_price_generator_spec.rb +1 -1
- data/spec/models/spree/variant_spec.rb +69 -11
- data/spec/rails_helper.rb +7 -13
- data/spec/spec_helper.rb +3 -12
- data/spec/support/concerns/default_price.rb +1 -1
- data/spec/support/dummy_ability.rb +2 -0
- metadata +144 -73
- data/Gemfile +0 -3
- data/app/models/spree/order_stock_location.rb +0 -15
- data/app/models/spree/stock_transfer.rb +0 -110
- data/app/models/spree/transfer_item.rb +0 -54
- data/lib/generators/spree/custom_user/templates/initializer.rb.tt +0 -1
- data/lib/spree/permission_sets/restricted_stock_transfer_display.rb +0 -17
- data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +0 -52
- data/lib/spree/permission_sets/stock_transfer_display.rb +0 -10
- data/lib/spree/permission_sets/stock_transfer_management.rb +0 -11
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +0 -28
- data/lib/spree/testing_support/i18n.rb +0 -97
- data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +0 -12
- data/spec/models/spree/order_stock_location_spec.rb +0 -18
- data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -49
- data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +0 -218
- data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -23
- data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -23
- data/spec/models/spree/stock_transfer_spec.rb +0 -308
- data/spec/models/spree/transfer_item_spec.rb +0 -275
- data/spec/support/test_gateway.rb +0 -2
|
@@ -6,7 +6,7 @@ module Spree
|
|
|
6
6
|
if @return_item.inventory_unit.order.completed?
|
|
7
7
|
return true
|
|
8
8
|
else
|
|
9
|
-
add_error(:order_not_completed,
|
|
9
|
+
add_error(:order_not_completed, I18n.t('spree.return_item_order_not_completed'))
|
|
10
10
|
return false
|
|
11
11
|
end
|
|
12
12
|
end
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
|
6
6
|
if (@return_item.inventory_unit.order.completed_at + Spree::Config[:return_eligibility_number_of_days].days) > Time.current
|
|
7
7
|
return true
|
|
8
8
|
else
|
|
9
|
-
add_error(:number_of_days,
|
|
9
|
+
add_error(:number_of_days, I18n.t('spree.return_item_time_period_ineligible'))
|
|
10
10
|
return false
|
|
11
11
|
end
|
|
12
12
|
end
|
|
@@ -7,7 +7,7 @@ module Spree
|
|
|
7
7
|
|
|
8
8
|
has_many :adjustments, as: :adjustable, inverse_of: :adjustable, dependent: :delete_all
|
|
9
9
|
has_many :inventory_units, dependent: :destroy, inverse_of: :shipment
|
|
10
|
-
has_many :shipping_rates, -> { order(:cost) }, dependent: :destroy
|
|
10
|
+
has_many :shipping_rates, -> { order(:cost) }, dependent: :destroy, inverse_of: :shipment
|
|
11
11
|
has_many :shipping_methods, through: :shipping_rates
|
|
12
12
|
has_many :state_changes, as: :stateful
|
|
13
13
|
has_many :cartons, -> { uniq }, through: :inventory_units
|
|
@@ -219,6 +219,14 @@ module Spree
|
|
|
219
219
|
shipping_rates
|
|
220
220
|
end
|
|
221
221
|
|
|
222
|
+
def select_shipping_method(shipping_method)
|
|
223
|
+
estimator = Spree::Config.stock.estimator_class.new
|
|
224
|
+
rates = estimator.shipping_rates(to_package, false)
|
|
225
|
+
rate = rates.detect { |r| r.shipping_method_id == shipping_method.id }
|
|
226
|
+
rate.selected = true
|
|
227
|
+
self.shipping_rates = [rate]
|
|
228
|
+
end
|
|
229
|
+
|
|
222
230
|
def selected_shipping_rate
|
|
223
231
|
shipping_rates.detect(&:selected?)
|
|
224
232
|
end
|
|
@@ -232,14 +240,17 @@ module Spree
|
|
|
232
240
|
end
|
|
233
241
|
|
|
234
242
|
def selected_shipping_rate_id=(id)
|
|
235
|
-
|
|
243
|
+
return if selected_shipping_rate_id == id
|
|
236
244
|
new_rate = shipping_rates.detect { |rate| rate.id == id.to_i }
|
|
237
245
|
fail(
|
|
238
246
|
ArgumentError,
|
|
239
247
|
"Could not find shipping rate id #{id} for shipment #{number}"
|
|
240
248
|
) unless new_rate
|
|
241
|
-
|
|
242
|
-
|
|
249
|
+
|
|
250
|
+
transaction do
|
|
251
|
+
selected_shipping_rate.update!(selected: false) if selected_shipping_rate
|
|
252
|
+
new_rate.update!(selected: true)
|
|
253
|
+
end
|
|
243
254
|
end
|
|
244
255
|
|
|
245
256
|
# Determines the appropriate +state+ according to the following logic:
|
|
@@ -259,11 +270,10 @@ module Spree
|
|
|
259
270
|
end
|
|
260
271
|
end
|
|
261
272
|
|
|
262
|
-
def set_up_inventory(state, variant,
|
|
273
|
+
def set_up_inventory(state, variant, _order, line_item)
|
|
263
274
|
inventory_units.create(
|
|
264
275
|
state: state,
|
|
265
276
|
variant_id: variant.id,
|
|
266
|
-
order_id: order.id,
|
|
267
277
|
line_item_id: line_item.id
|
|
268
278
|
)
|
|
269
279
|
end
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
require 'discard'
|
|
2
|
+
|
|
1
3
|
module Spree
|
|
2
4
|
# Represents a means of having a shipment delivered, such as FedEx or UPS.
|
|
3
5
|
#
|
|
4
6
|
class ShippingMethod < Spree::Base
|
|
5
7
|
acts_as_paranoid
|
|
8
|
+
include Spree::ParanoiaDeprecations
|
|
9
|
+
|
|
10
|
+
include Discard::Model
|
|
11
|
+
self.discard_column = :deleted_at
|
|
12
|
+
|
|
6
13
|
include Spree::CalculatedAdjustments
|
|
7
14
|
DISPLAY = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(
|
|
8
15
|
[:both, :front_end, :back_end],
|
|
@@ -9,6 +9,7 @@ module Spree
|
|
|
9
9
|
has_many :taxes,
|
|
10
10
|
class_name: "Spree::ShippingRateTax",
|
|
11
11
|
foreign_key: "shipping_rate_id",
|
|
12
|
+
inverse_of: :shipping_rate,
|
|
12
13
|
dependent: :destroy
|
|
13
14
|
|
|
14
15
|
delegate :order, :currency, to: :shipment
|
|
@@ -26,21 +27,20 @@ module Spree
|
|
|
26
27
|
def display_price
|
|
27
28
|
price = display_amount.to_s
|
|
28
29
|
|
|
29
|
-
return price if taxes.empty? || amount == 0
|
|
30
|
+
return price if taxes.to_a.empty? || amount == 0
|
|
30
31
|
|
|
31
32
|
tax_explanations = taxes.map(&:label).join(tax_label_separator)
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
explanations: tax_explanations
|
|
34
|
+
I18n.t 'spree.shipping_rate.display_price.display_price_with_explanations',
|
|
35
|
+
price: price,
|
|
36
|
+
explanations: tax_explanations
|
|
37
37
|
end
|
|
38
38
|
alias_method :display_cost, :display_price
|
|
39
39
|
|
|
40
40
|
private
|
|
41
41
|
|
|
42
42
|
def tax_label_separator
|
|
43
|
-
|
|
43
|
+
I18n.t 'spree.shipping_rate.display_price.tax_label_separator'
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
end
|
|
@@ -14,8 +14,8 @@ module Spree
|
|
|
14
14
|
delegate :currency, to: :shipping_rate, allow_nil: true
|
|
15
15
|
|
|
16
16
|
def label
|
|
17
|
-
|
|
18
|
-
scope: 'shipping_rate_tax.label',
|
|
17
|
+
I18n.t translation_key,
|
|
18
|
+
scope: 'spree.shipping_rate_tax.label',
|
|
19
19
|
amount: display_absolute_amount,
|
|
20
20
|
tax_rate_name: tax_rate.name
|
|
21
21
|
end
|
|
@@ -9,8 +9,8 @@ module Spree
|
|
|
9
9
|
display_name = variant.name.to_s
|
|
10
10
|
display_name += %{ (#{variant.options_text})} unless variant.options_text.blank?
|
|
11
11
|
|
|
12
|
-
line_item.errors[:quantity] <<
|
|
13
|
-
|
|
12
|
+
line_item.errors[:quantity] << I18n.t(
|
|
13
|
+
'spree.selected_quantity_not_available',
|
|
14
14
|
item: display_name.inspect
|
|
15
15
|
)
|
|
16
16
|
false
|
|
@@ -31,6 +31,8 @@ module Spree
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def calculate_shipping_rates(package)
|
|
34
|
+
tax_calculator_class = Spree::Config.shipping_rate_tax_calculator_class
|
|
35
|
+
tax_calculator = tax_calculator_class.new(package.shipment.order)
|
|
34
36
|
shipping_methods(package).map do |shipping_method|
|
|
35
37
|
cost = shipping_method.calculator.compute(package)
|
|
36
38
|
if cost
|
|
@@ -38,7 +40,13 @@ module Spree
|
|
|
38
40
|
cost: cost,
|
|
39
41
|
shipment: package.shipment
|
|
40
42
|
)
|
|
41
|
-
|
|
43
|
+
tax_calculator.calculate(rate).each do |tax|
|
|
44
|
+
rate.taxes.new(
|
|
45
|
+
amount: tax.amount,
|
|
46
|
+
tax_rate: tax.tax_rate
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
rate
|
|
42
50
|
end
|
|
43
51
|
end.compact
|
|
44
52
|
end
|
|
@@ -3,8 +3,8 @@ module Spree
|
|
|
3
3
|
class InventoryValidator < ActiveModel::Validator
|
|
4
4
|
def validate(line_item)
|
|
5
5
|
if line_item.inventory_units.count != line_item.quantity
|
|
6
|
-
line_item.errors[:inventory] <<
|
|
7
|
-
|
|
6
|
+
line_item.errors[:inventory] << I18n.t(
|
|
7
|
+
'spree.inventory_not_available',
|
|
8
8
|
item: line_item.variant.name
|
|
9
9
|
)
|
|
10
10
|
end
|
|
@@ -44,7 +44,7 @@ module Spree
|
|
|
44
44
|
def order
|
|
45
45
|
# Fix regression that removed package.order.
|
|
46
46
|
# Find it dynamically through an inventory_unit.
|
|
47
|
-
contents.detect { |item| !!item.try(:
|
|
47
|
+
contents.detect { |item| !!item.try(:line_item).try(:order) }.try(:line_item).try(:order)
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# @return [Float] the summed weight of the contents of this package
|
|
@@ -10,7 +10,7 @@ module Spree
|
|
|
10
10
|
# * Combine allocated and on hand inventory into a single shipment per-location
|
|
11
11
|
#
|
|
12
12
|
# After allocation, splitters are run on each Package (as configured in
|
|
13
|
-
#
|
|
13
|
+
# Spree::Config.environment.stock_splitters)
|
|
14
14
|
#
|
|
15
15
|
# Finally, shipping rates are calculated using the class configured as
|
|
16
16
|
# Spree::Config.stock.estimator_class.
|
|
@@ -20,7 +20,7 @@ module Spree
|
|
|
20
20
|
def initialize(order, inventory_units = nil)
|
|
21
21
|
@order = order
|
|
22
22
|
@inventory_units = inventory_units || InventoryUnitBuilder.new(order).units
|
|
23
|
-
@splitters =
|
|
23
|
+
@splitters = Spree::Config.environment.stock_splitters
|
|
24
24
|
@stock_locations = Spree::StockLocation.active
|
|
25
25
|
|
|
26
26
|
@inventory_units_by_variant = @inventory_units.group_by(&:variant)
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
require 'discard'
|
|
2
|
+
|
|
1
3
|
module Spree
|
|
2
4
|
class StockItem < Spree::Base
|
|
3
5
|
acts_as_paranoid
|
|
6
|
+
include Spree::ParanoiaDeprecations
|
|
7
|
+
|
|
8
|
+
include Discard::Model
|
|
9
|
+
self.discard_column = :deleted_at
|
|
4
10
|
|
|
5
11
|
belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :stock_items
|
|
6
12
|
belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant', inverse_of: :stock_items
|
|
@@ -24,7 +24,7 @@ module Spree
|
|
|
24
24
|
scope :active, -> { where(active: true) }
|
|
25
25
|
scope :order_default, -> { order(default: :desc, name: :asc) }
|
|
26
26
|
|
|
27
|
-
after_create :create_stock_items, if:
|
|
27
|
+
after_create :create_stock_items, if: :propagate_all_variants?
|
|
28
28
|
after_save :ensure_one_default
|
|
29
29
|
|
|
30
30
|
def state_text
|
|
@@ -93,7 +93,7 @@ module Spree
|
|
|
93
93
|
|
|
94
94
|
def move(variant, quantity, originator = nil)
|
|
95
95
|
if quantity < 1 && !stock_item(variant)
|
|
96
|
-
raise InvalidMovementError.new(
|
|
96
|
+
raise InvalidMovementError.new(I18n.t('spree.negative_movement_absent_item'))
|
|
97
97
|
end
|
|
98
98
|
stock_item_or_create(variant).stock_movements.create!(quantity: quantity,
|
|
99
99
|
originator: originator)
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
require 'discard'
|
|
2
|
+
|
|
1
3
|
class Spree::StoreCredit < Spree::PaymentSource
|
|
2
4
|
acts_as_paranoid
|
|
5
|
+
include Spree::ParanoiaDeprecations
|
|
6
|
+
|
|
7
|
+
include Discard::Model
|
|
8
|
+
self.discard_column = :deleted_at
|
|
3
9
|
|
|
4
10
|
VOID_ACTION = 'void'
|
|
5
11
|
CREDIT_ACTION = 'credit'
|
|
@@ -33,6 +39,7 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
33
39
|
before_validation :associate_credit_type
|
|
34
40
|
before_validation :validate_category_unchanged, on: :update
|
|
35
41
|
before_destroy :validate_no_amount_used
|
|
42
|
+
validate :validate_no_amount_used, if: :discarded?
|
|
36
43
|
|
|
37
44
|
attr_accessor :action, :action_amount, :action_originator, :action_authorization_code, :update_reason
|
|
38
45
|
|
|
@@ -72,9 +79,9 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
72
79
|
|
|
73
80
|
def validate_authorization(amount, order_currency)
|
|
74
81
|
if amount_remaining.to_d < amount.to_d
|
|
75
|
-
errors.add(:base,
|
|
82
|
+
errors.add(:base, I18n.t('spree.store_credit.insufficient_funds'))
|
|
76
83
|
elsif currency != order_currency
|
|
77
|
-
errors.add(:base,
|
|
84
|
+
errors.add(:base, I18n.t('spree.store_credit.currency_mismatch'))
|
|
78
85
|
end
|
|
79
86
|
errors.blank?
|
|
80
87
|
end
|
|
@@ -85,7 +92,7 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
85
92
|
|
|
86
93
|
if amount <= auth_event.amount
|
|
87
94
|
if currency != order_currency
|
|
88
|
-
errors.add(:base,
|
|
95
|
+
errors.add(:base, I18n.t('spree.store_credit.currency_mismatch'))
|
|
89
96
|
false
|
|
90
97
|
else
|
|
91
98
|
update_attributes!({
|
|
@@ -100,7 +107,7 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
100
107
|
authorization_code
|
|
101
108
|
end
|
|
102
109
|
else
|
|
103
|
-
errors.add(:base,
|
|
110
|
+
errors.add(:base, I18n.t('spree.store_credit.insufficient_authorized_amount'))
|
|
104
111
|
false
|
|
105
112
|
end
|
|
106
113
|
end
|
|
@@ -117,7 +124,7 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
117
124
|
})
|
|
118
125
|
true
|
|
119
126
|
else
|
|
120
|
-
errors.add(:base,
|
|
127
|
+
errors.add(:base, I18n.t('spree.store_credit.unable_to_void', auth_code: authorization_code))
|
|
121
128
|
false
|
|
122
129
|
end
|
|
123
130
|
end
|
|
@@ -127,7 +134,7 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
127
134
|
capture_event = store_credit_events.find_by(action: CAPTURE_ACTION, authorization_code: authorization_code)
|
|
128
135
|
|
|
129
136
|
if currency != order_currency # sanity check to make sure the order currency hasn't changed since the auth
|
|
130
|
-
errors.add(:base,
|
|
137
|
+
errors.add(:base, I18n.t('spree.store_credit.currency_mismatch'))
|
|
131
138
|
false
|
|
132
139
|
elsif capture_event && amount <= capture_event.amount
|
|
133
140
|
action_attributes = {
|
|
@@ -139,7 +146,7 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
139
146
|
create_credit_record(amount, action_attributes)
|
|
140
147
|
true
|
|
141
148
|
else
|
|
142
|
-
errors.add(:base,
|
|
149
|
+
errors.add(:base, I18n.t('spree.store_credit.unable_to_credit', auth_code: authorization_code))
|
|
143
150
|
false
|
|
144
151
|
end
|
|
145
152
|
end
|
|
@@ -182,7 +189,7 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
182
189
|
self.invalidated_at = Time.current
|
|
183
190
|
save
|
|
184
191
|
else
|
|
185
|
-
errors.add(:invalidated_at,
|
|
192
|
+
errors.add(:invalidated_at, I18n.t('spree.store_credit.errors.cannot_invalidate_uncaptured_authorization'))
|
|
186
193
|
return false
|
|
187
194
|
end
|
|
188
195
|
end
|
|
@@ -222,7 +229,7 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
222
229
|
end
|
|
223
230
|
|
|
224
231
|
def credit_allocation_memo
|
|
225
|
-
|
|
232
|
+
I18n.t("spree.store_credit.credit_allocation_memo", id: id)
|
|
226
233
|
end
|
|
227
234
|
|
|
228
235
|
def store_event
|
|
@@ -247,19 +254,19 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
|
247
254
|
return true if amount_used.nil?
|
|
248
255
|
|
|
249
256
|
if amount_used > amount
|
|
250
|
-
errors.add(:amount_used,
|
|
257
|
+
errors.add(:amount_used, I18n.t('spree.admin.store_credits.errors.amount_used_cannot_be_greater'))
|
|
251
258
|
end
|
|
252
259
|
end
|
|
253
260
|
|
|
254
261
|
def amount_authorized_less_than_or_equal_to_amount
|
|
255
262
|
if (amount_used + amount_authorized) > amount
|
|
256
|
-
errors.add(:amount_authorized,
|
|
263
|
+
errors.add(:amount_authorized, I18n.t('spree.admin.store_credits.errors.amount_authorized_exceeds_total_credit'))
|
|
257
264
|
end
|
|
258
265
|
end
|
|
259
266
|
|
|
260
267
|
def validate_category_unchanged
|
|
261
268
|
if category_id_changed?
|
|
262
|
-
errors.add(:category,
|
|
269
|
+
errors.add(:category, I18n.t('spree.admin.store_credits.errors.cannot_be_modified'))
|
|
263
270
|
end
|
|
264
271
|
end
|
|
265
272
|
|
|
@@ -3,7 +3,7 @@ class Spree::StoreCreditCategory < Spree::Base
|
|
|
3
3
|
self.non_expiring_credit_types = [Spree::StoreCreditType::NON_EXPIRING]
|
|
4
4
|
|
|
5
5
|
class_attribute :reimbursement_category_name
|
|
6
|
-
self.reimbursement_category_name =
|
|
6
|
+
self.reimbursement_category_name = I18n.t('spree.store_credit_category.default')
|
|
7
7
|
|
|
8
8
|
def self.reimbursement_category(_reimbursement)
|
|
9
9
|
Spree::StoreCreditCategory.find_by(name: reimbursement_category_name) ||
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
require 'discard'
|
|
2
|
+
|
|
1
3
|
module Spree
|
|
2
4
|
class StoreCreditEvent < Spree::Base
|
|
3
5
|
acts_as_paranoid
|
|
6
|
+
include Spree::ParanoiaDeprecations
|
|
7
|
+
|
|
8
|
+
include Discard::Model
|
|
9
|
+
self.discard_column = :deleted_at
|
|
4
10
|
|
|
5
11
|
belongs_to :store_credit
|
|
6
12
|
belongs_to :originator, polymorphic: true
|
|
@@ -44,7 +50,7 @@ module Spree
|
|
|
44
50
|
|
|
45
51
|
def display_action
|
|
46
52
|
return if NON_EXPOSED_ACTIONS.include?(action)
|
|
47
|
-
|
|
53
|
+
I18n.t("spree.store_credit.display_action.#{action}")
|
|
48
54
|
end
|
|
49
55
|
|
|
50
56
|
def order
|
|
@@ -8,7 +8,7 @@ module Spree
|
|
|
8
8
|
# This parameter will be modified.
|
|
9
9
|
# @return [Spree::ShippingRate] The shipping rate with associated tax objects
|
|
10
10
|
def tax(shipping_rate)
|
|
11
|
-
taxes = Spree::Config.shipping_rate_tax_calculator_class.new(shipping_rate).calculate
|
|
11
|
+
taxes = Spree::Config.shipping_rate_tax_calculator_class.new(shipping_rate.order).calculate(shipping_rate)
|
|
12
12
|
taxes.each do |tax|
|
|
13
13
|
shipping_rate.taxes.build(
|
|
14
14
|
amount: tax.amount,
|
|
@@ -21,15 +21,24 @@ module Spree
|
|
|
21
21
|
# @param [Spree::ShippingRate] shipping_rate the shipping rate to
|
|
22
22
|
# calculate taxes on
|
|
23
23
|
# @return [Spree::TaxCalculator::ShippingRate]
|
|
24
|
-
def initialize(
|
|
25
|
-
|
|
24
|
+
def initialize(order)
|
|
25
|
+
if order.is_a?(::Spree::ShippingRate)
|
|
26
|
+
Spree::Deprecation.warn "passing a single shipping rate to Spree::TaxCalculator::ShippingRate is DEPRECATED. It now expects an order"
|
|
27
|
+
shipping_rate = order
|
|
28
|
+
@order = shipping_rate.order
|
|
29
|
+
@shipping_rate = shipping_rate
|
|
30
|
+
else
|
|
31
|
+
@order = order
|
|
32
|
+
@shipping_rate = nil
|
|
33
|
+
end
|
|
26
34
|
end
|
|
27
35
|
|
|
28
36
|
# Calculate taxes for a shipping rate.
|
|
29
37
|
#
|
|
30
38
|
# @return [Array<Spree::Tax::ItemTax>] the calculated taxes for the
|
|
31
39
|
# shipping rate
|
|
32
|
-
def calculate
|
|
40
|
+
def calculate(shipping_rate)
|
|
41
|
+
shipping_rate ||= @shipping_rate
|
|
33
42
|
rates_for_item(shipping_rate).map do |rate|
|
|
34
43
|
amount = rate.compute_amount(shipping_rate)
|
|
35
44
|
|