solidus_core 2.4.2 → 2.5.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of solidus_core might be problematic. Click here for more details.
- 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
@@ -65,7 +65,7 @@ module Spree
|
|
65
65
|
|
66
66
|
def return_items_belong_to_same_order
|
67
67
|
if return_items.select{ |return_item| return_item.inventory_unit.order_id != order_id }.any?
|
68
|
-
errors.add(:base,
|
68
|
+
errors.add(:base, I18n.t('spree.return_items_cannot_be_associated_with_multiple_orders'))
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -7,7 +7,6 @@ module Spree
|
|
7
7
|
CANCELABLE_STATES = ['on_hand', 'backordered', 'shipped']
|
8
8
|
|
9
9
|
belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :inventory_units
|
10
|
-
belongs_to :order, class_name: "Spree::Order", inverse_of: :inventory_units
|
11
10
|
belongs_to :shipment, class_name: "Spree::Shipment", touch: true, inverse_of: :inventory_units
|
12
11
|
belongs_to :return_authorization, class_name: "Spree::ReturnAuthorization", inverse_of: :inventory_units
|
13
12
|
belongs_to :carton, class_name: "Spree::Carton", inverse_of: :inventory_units
|
@@ -16,8 +15,15 @@ module Spree
|
|
16
15
|
has_many :return_items, inverse_of: :inventory_unit, dependent: :destroy
|
17
16
|
has_one :original_return_item, class_name: "Spree::ReturnItem", foreign_key: :exchange_inventory_unit_id, dependent: :destroy
|
18
17
|
has_one :unit_cancel, class_name: "Spree::UnitCancel"
|
18
|
+
has_one :order, through: :shipment
|
19
19
|
|
20
|
-
|
20
|
+
delegate :order_id, to: :shipment
|
21
|
+
|
22
|
+
def order=(_)
|
23
|
+
raise "The order association has been removed from InventoryUnit. The order is now determined from the shipment."
|
24
|
+
end
|
25
|
+
|
26
|
+
validates_presence_of :shipment, :line_item, :variant
|
21
27
|
|
22
28
|
before_destroy :ensure_can_destroy
|
23
29
|
|
@@ -2,17 +2,6 @@ module Spree
|
|
2
2
|
class LogEntry < Spree::Base
|
3
3
|
belongs_to :source, polymorphic: true
|
4
4
|
|
5
|
-
# Fix for https://github.com/spree/spree/issues/1767
|
6
|
-
# If a payment fails, we want to make sure we keep the record of it failing
|
7
|
-
after_rollback :save_anyway
|
8
|
-
|
9
|
-
def save_anyway
|
10
|
-
log = Spree::LogEntry.new
|
11
|
-
log.source = source
|
12
|
-
log.details = details
|
13
|
-
log.save!
|
14
|
-
end
|
15
|
-
|
16
5
|
def parsed_details
|
17
6
|
@details ||= YAML.load(details)
|
18
7
|
end
|
data/app/models/spree/order.rb
CHANGED
@@ -73,13 +73,14 @@ module Spree
|
|
73
73
|
has_many :products, through: :variants
|
74
74
|
|
75
75
|
# Shipping
|
76
|
-
has_many :inventory_units, inverse_of: :order
|
77
|
-
has_many :cartons, -> { distinct }, through: :inventory_units
|
78
76
|
has_many :shipments, dependent: :destroy, inverse_of: :order do
|
79
77
|
def states
|
80
78
|
pluck(:state).uniq
|
81
79
|
end
|
82
80
|
end
|
81
|
+
has_many :inventory_units, through: :shipments
|
82
|
+
has_many :cartons, -> { distinct }, through: :inventory_units
|
83
|
+
|
83
84
|
has_many :order_stock_locations, class_name: "Spree::OrderStockLocation"
|
84
85
|
has_many :stock_locations, through: :order_stock_locations
|
85
86
|
|
@@ -131,7 +132,13 @@ module Spree
|
|
131
132
|
validates :number, presence: true, uniqueness: { allow_blank: true }
|
132
133
|
validates :store_id, presence: true
|
133
134
|
|
134
|
-
|
135
|
+
def self.find_by_param(value)
|
136
|
+
find_by number: value
|
137
|
+
end
|
138
|
+
|
139
|
+
def self.find_by_param!(value)
|
140
|
+
find_by! number: value
|
141
|
+
end
|
135
142
|
|
136
143
|
delegate :update_totals, :persist_totals, to: :updater
|
137
144
|
delegate :firstname, :lastname, to: :bill_address, prefix: true, allow_nil: true
|
@@ -150,7 +157,7 @@ module Spree
|
|
150
157
|
scope :by_store, ->(store) { where(store_id: store.id) }
|
151
158
|
|
152
159
|
# shows completed orders first, by their completed_at date, then uncompleted orders by their created_at
|
153
|
-
scope :reverse_chronological, -> { order('spree_orders.completed_at IS NULL', completed_at: :desc, created_at: :desc) }
|
160
|
+
scope :reverse_chronological, -> { order(Arel.sql('spree_orders.completed_at IS NULL'), completed_at: :desc, created_at: :desc) }
|
154
161
|
|
155
162
|
def self.by_customer(customer)
|
156
163
|
joins(:user).where("#{Spree.user_class.table_name}.email" => customer)
|
@@ -168,6 +175,14 @@ module Spree
|
|
168
175
|
where(completed_at: nil)
|
169
176
|
end
|
170
177
|
|
178
|
+
def self.canceled
|
179
|
+
where(state: 'canceled')
|
180
|
+
end
|
181
|
+
|
182
|
+
def self.not_canceled
|
183
|
+
where.not(state: 'canceled')
|
184
|
+
end
|
185
|
+
|
171
186
|
# Use this method in other gems that wish to register their own custom logic
|
172
187
|
# that should be called after Order#update
|
173
188
|
def self.register_update_hook(hook)
|
@@ -460,8 +475,8 @@ module Spree
|
|
460
475
|
# Check to see if any line item variants are soft, deleted.
|
461
476
|
# If so add error and restart checkout.
|
462
477
|
def ensure_line_item_variants_are_not_deleted
|
463
|
-
if line_items.any? { |li| li.variant.
|
464
|
-
errors.add(:base,
|
478
|
+
if line_items.any? { |li| li.variant.discarded? }
|
479
|
+
errors.add(:base, I18n.t('spree.deleted_variants_present'))
|
465
480
|
restart_checkout_flow
|
466
481
|
false
|
467
482
|
else
|
@@ -520,15 +535,15 @@ module Spree
|
|
520
535
|
|
521
536
|
def ensure_shipping_address
|
522
537
|
unless ship_address && ship_address.valid?
|
523
|
-
errors.add(:base,
|
538
|
+
errors.add(:base, I18n.t('spree.ship_address_required')) && (return false)
|
524
539
|
end
|
525
540
|
end
|
526
541
|
|
527
542
|
def create_proposed_shipments
|
528
543
|
if completed?
|
529
|
-
raise CannotRebuildShipments.new(
|
544
|
+
raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_order_completed'))
|
530
545
|
elsif shipments.any? { |s| !s.pending? }
|
531
|
-
raise CannotRebuildShipments.new(
|
546
|
+
raise CannotRebuildShipments.new(I18n.t('spree.cannot_rebuild_shipments_shipments_not_pending'))
|
532
547
|
else
|
533
548
|
shipments.destroy_all
|
534
549
|
self.shipments = Spree::Config.stock.coordinator_class.new(self).shipments
|
@@ -660,7 +675,7 @@ module Spree
|
|
660
675
|
payments.reset
|
661
676
|
|
662
677
|
if payments.where(state: %w(checkout pending completed)).sum(:amount) != total
|
663
|
-
errors.add(:base,
|
678
|
+
errors.add(:base, I18n.t('spree.store_credit.errors.unable_to_fund')) && (return false)
|
664
679
|
end
|
665
680
|
end
|
666
681
|
|
@@ -782,7 +797,7 @@ module Spree
|
|
782
797
|
return if !payment_required?
|
783
798
|
|
784
799
|
if payments.valid.empty?
|
785
|
-
errors.add(:base,
|
800
|
+
errors.add(:base, I18n.t('spree.no_payment_found'))
|
786
801
|
return false
|
787
802
|
end
|
788
803
|
|
@@ -806,12 +821,12 @@ module Spree
|
|
806
821
|
# }
|
807
822
|
#
|
808
823
|
def update_params_payment_source
|
824
|
+
Spree::Deprecation.warn('update_params_payment_source is deprecated. Please use set_payment_parameters_amount instead.', caller)
|
809
825
|
if @updating_params[:order] && (@updating_params[:order][:payments_attributes] || @updating_params[:order][:existing_card])
|
810
826
|
@updating_params[:order][:payments_attributes] ||= [{}]
|
811
827
|
@updating_params[:order][:payments_attributes].first[:amount] = total
|
812
828
|
end
|
813
829
|
end
|
814
|
-
deprecate update_params_payment_source: :set_payment_parameters_amount, deprecator: Spree::Deprecation
|
815
830
|
|
816
831
|
def associate_store
|
817
832
|
self.store ||= Spree::Store.default
|
@@ -842,7 +857,7 @@ module Spree
|
|
842
857
|
if adjustment_changed
|
843
858
|
restart_checkout_flow
|
844
859
|
recalculate
|
845
|
-
errors.add(:base,
|
860
|
+
errors.add(:base, I18n.t('spree.promotion_total_changed_before_complete'))
|
846
861
|
end
|
847
862
|
errors.empty?
|
848
863
|
end
|
@@ -854,7 +869,7 @@ module Spree
|
|
854
869
|
|
855
870
|
def ensure_line_items_present
|
856
871
|
unless line_items.present?
|
857
|
-
errors.add(:base,
|
872
|
+
errors.add(:base, I18n.t('spree.there_are_no_items_for_this_order')) && (return false)
|
858
873
|
end
|
859
874
|
end
|
860
875
|
|
@@ -863,13 +878,13 @@ module Spree
|
|
863
878
|
# After this point, order redirects back to 'address' state and asks user to pick a proper address
|
864
879
|
# Therefore, shipments are not necessary at this point.
|
865
880
|
shipments.destroy_all
|
866
|
-
errors.add(:base,
|
881
|
+
errors.add(:base, I18n.t('spree.items_cannot_be_shipped')) && (return false)
|
867
882
|
end
|
868
883
|
end
|
869
884
|
|
870
885
|
def after_cancel
|
871
886
|
shipments.each(&:cancel!)
|
872
|
-
payments.completed.each
|
887
|
+
payments.completed.each { |payment| payment.cancel! unless payment.fully_refunded? }
|
873
888
|
payments.store_credits.pending.each(&:void_transaction!)
|
874
889
|
|
875
890
|
send_cancel_email
|
@@ -15,8 +15,6 @@ module Spree
|
|
15
15
|
# @param [Hash] :options Options for the adding proccess
|
16
16
|
# Valid options:
|
17
17
|
# shipment: [Spree::Shipment] LineItem target shipment
|
18
|
-
# stock_location_quantities:
|
19
|
-
# stock_location_id: The stock location to source from
|
20
18
|
#
|
21
19
|
# @return [Spree::LineItem]
|
22
20
|
def add(variant, quantity = 1, options = {})
|
@@ -98,10 +96,6 @@ module Spree
|
|
98
96
|
line_item.quantity += quantity.to_i
|
99
97
|
line_item.options = ActionController::Parameters.new(options).permit(PermittedAttributes.line_item_attributes).to_h
|
100
98
|
|
101
|
-
if line_item.new_record?
|
102
|
-
create_order_stock_locations(line_item, options[:stock_location_quantities])
|
103
|
-
end
|
104
|
-
|
105
99
|
line_item.target_shipment = options[:shipment]
|
106
100
|
line_item.save!
|
107
101
|
line_item
|
@@ -130,13 +124,5 @@ module Spree
|
|
130
124
|
|
131
125
|
line_item
|
132
126
|
end
|
133
|
-
|
134
|
-
def create_order_stock_locations(line_item, stock_location_quantities)
|
135
|
-
return unless stock_location_quantities.present?
|
136
|
-
order = line_item.order
|
137
|
-
stock_location_quantities.each do |stock_location_id, quantity|
|
138
|
-
order.order_stock_locations.create!(stock_location_id: stock_location_id, quantity: quantity, variant_id: line_item.variant_id) unless quantity.to_i.zero?
|
139
|
-
end
|
140
|
-
end
|
141
127
|
end
|
142
128
|
end
|
@@ -72,7 +72,6 @@ class Spree::OrderShipping
|
|
72
72
|
end
|
73
73
|
|
74
74
|
send_shipment_emails(carton) if stock_location.fulfillable? && !suppress_mailer # e.g. digital gift cards that aren't actually shipped
|
75
|
-
fulfill_order_stock_locations(stock_location)
|
76
75
|
@order.recalculate
|
77
76
|
|
78
77
|
carton
|
@@ -80,10 +79,6 @@ class Spree::OrderShipping
|
|
80
79
|
|
81
80
|
private
|
82
81
|
|
83
|
-
def fulfill_order_stock_locations(stock_location)
|
84
|
-
Spree::OrderStockLocation.fulfill_for_order_with_stock_location(@order, stock_location)
|
85
|
-
end
|
86
|
-
|
87
82
|
def send_shipment_emails(carton)
|
88
83
|
carton.orders.each do |order|
|
89
84
|
Spree::Config.carton_shipped_email_class.shipped_email(order: order, carton: carton).deliver_later
|
data/app/models/spree/payment.rb
CHANGED
@@ -147,6 +147,11 @@ module Spree
|
|
147
147
|
credit_allowed > 0
|
148
148
|
end
|
149
149
|
|
150
|
+
# @return [Boolean] true when this payment has been fully refunded
|
151
|
+
def fully_refunded?
|
152
|
+
refunds.map(&:amount).sum == amount
|
153
|
+
end
|
154
|
+
|
150
155
|
# @return [Array<String>] the actions available on this payment
|
151
156
|
def actions
|
152
157
|
sa = source_actions
|
@@ -200,7 +205,7 @@ module Spree
|
|
200
205
|
if source && !source.valid?
|
201
206
|
source.errors.each do |field, error|
|
202
207
|
field_name = I18n.t("activerecord.attributes.#{source.class.to_s.underscore}.#{field}")
|
203
|
-
errors.add(
|
208
|
+
errors.add(I18n.t(source.class.to_s.demodulize.underscore, scope: 'spree'), "#{field_name} #{error}")
|
204
209
|
end
|
205
210
|
end
|
206
211
|
if errors.any?
|
@@ -143,11 +143,11 @@ module Spree
|
|
143
143
|
yield
|
144
144
|
else
|
145
145
|
invalidate!
|
146
|
-
raise Core::GatewayError.new(
|
146
|
+
raise Core::GatewayError.new(I18n.t('spree.payment_method_not_supported'))
|
147
147
|
end
|
148
148
|
end
|
149
149
|
else
|
150
|
-
raise Core::GatewayError.new(
|
150
|
+
raise Core::GatewayError.new(I18n.t('spree.payment_processing_failed'))
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
@@ -205,11 +205,11 @@ module Spree
|
|
205
205
|
if error.is_a? ActiveMerchant::Billing::Response
|
206
206
|
text = error.params['message'] || error.params['response_reason_text'] || error.message
|
207
207
|
elsif error.is_a? ActiveMerchant::ConnectionError
|
208
|
-
text =
|
208
|
+
text = I18n.t('spree.unable_to_connect_to_gateway')
|
209
209
|
else
|
210
210
|
text = error.to_s
|
211
211
|
end
|
212
|
-
logger.error(
|
212
|
+
logger.error(I18n.t('spree.gateway_error'))
|
213
213
|
logger.error(" #{error.to_yaml}")
|
214
214
|
raise Core::GatewayError.new(text)
|
215
215
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'discard'
|
1
2
|
require 'spree/preferences/statically_configurable'
|
2
3
|
|
3
4
|
module Spree
|
@@ -16,6 +17,11 @@ module Spree
|
|
16
17
|
preference :test_mode, :boolean, default: true
|
17
18
|
|
18
19
|
acts_as_paranoid
|
20
|
+
include Spree::ParanoiaDeprecations
|
21
|
+
|
22
|
+
include Discard::Model
|
23
|
+
self.discard_column = :deleted_at
|
24
|
+
|
19
25
|
acts_as_list
|
20
26
|
DISPLAY = [:both, :front_end, :back_end]
|
21
27
|
|
@@ -58,7 +64,7 @@ module Spree
|
|
58
64
|
def providers
|
59
65
|
Spree::Deprecation.warn 'Spree::PaymentMethod.providers is deprecated and will be deleted in Solidus 3.0. ' \
|
60
66
|
'Please use Rails.application.config.spree.payment_methods instead'
|
61
|
-
|
67
|
+
Spree::Config.environment.payment_methods
|
62
68
|
end
|
63
69
|
|
64
70
|
def available(display_on = nil, store: nil)
|
@@ -184,7 +190,7 @@ module Spree
|
|
184
190
|
# If method_type has been overridden, call it and return the value, otherwise return nil
|
185
191
|
def deprecated_method_type_override
|
186
192
|
if method(:method_type).owner != Spree::PaymentMethod
|
187
|
-
Spree::Deprecation.warn "overriding PaymentMethod#method_type is deprecated and will be removed from Solidus 3.0 (override partial_name instead)", caller
|
193
|
+
Spree::Deprecation.warn "#{method(:method_type).owner} is overriding PaymentMethod#method_type. This is deprecated and will be removed from Solidus 3.0 (override partial_name instead).", caller[1..-1]
|
188
194
|
method_type
|
189
195
|
end
|
190
196
|
end
|
@@ -258,6 +264,5 @@ module Spree
|
|
258
264
|
raise ::NotImplementedError, "You must implement gateway_class method for #{self.class}."
|
259
265
|
end
|
260
266
|
end
|
261
|
-
deprecate provider_class: :gateway_class, deprecator: Spree::Deprecation
|
262
267
|
end
|
263
268
|
end
|
@@ -6,7 +6,7 @@ module Spree
|
|
6
6
|
|
7
7
|
def authorize(amount_in_cents, provided_store_credit, gateway_options = {})
|
8
8
|
if provided_store_credit.nil?
|
9
|
-
ActiveMerchant::Billing::Response.new(false,
|
9
|
+
ActiveMerchant::Billing::Response.new(false, I18n.t('spree.store_credit.unable_to_find'), {}, {})
|
10
10
|
else
|
11
11
|
action = ->(store_credit) {
|
12
12
|
store_credit.authorize(
|
@@ -40,7 +40,7 @@ module Spree
|
|
40
40
|
end
|
41
41
|
|
42
42
|
if event.blank?
|
43
|
-
ActiveMerchant::Billing::Response.new(false,
|
43
|
+
ActiveMerchant::Billing::Response.new(false, I18n.t('spree.store_credit.unable_to_find'), {}, {})
|
44
44
|
else
|
45
45
|
capture(amount_in_cents, event.authorization_code, gateway_options)
|
46
46
|
end
|
@@ -92,7 +92,7 @@ module Spree
|
|
92
92
|
if response = action.call(store_credit)
|
93
93
|
# note that we only need to return the auth code on an 'auth', but it's innocuous to always return
|
94
94
|
ActiveMerchant::Billing::Response.new(true,
|
95
|
-
|
95
|
+
I18n.t('spree.store_credit.successful_action', action: action_name),
|
96
96
|
{}, { authorization: auth_code || response })
|
97
97
|
else
|
98
98
|
ActiveMerchant::Billing::Response.new(false, store_credit.errors.full_messages.join, {}, {})
|
@@ -105,7 +105,7 @@ module Spree
|
|
105
105
|
store_credit = Spree::StoreCreditEvent.find_by(authorization_code: auth_code).try(:store_credit)
|
106
106
|
|
107
107
|
if store_credit.nil?
|
108
|
-
ActiveMerchant::Billing::Response.new(false,
|
108
|
+
ActiveMerchant::Billing::Response.new(false, I18n.t('spree.store_credit.unable_to_find_for_action', auth_code: auth_code, action: action_name), {}, {})
|
109
109
|
else
|
110
110
|
handle_action_call(store_credit, action, action_name, auth_code)
|
111
111
|
end
|
data/app/models/spree/price.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
+
require 'discard'
|
2
|
+
|
1
3
|
module Spree
|
2
4
|
class Price < 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
|
MAXIMUM_AMOUNT = BigDecimal('99_999_999.99')
|
6
12
|
|
@@ -18,7 +24,7 @@ module Spree
|
|
18
24
|
validates :currency, inclusion: { in: ::Money::Currency.all.map(&:iso_code), message: :invalid_code }
|
19
25
|
validates :country, presence: true, unless: -> { for_any_country? }
|
20
26
|
|
21
|
-
scope :currently_valid, -> { order("country_iso IS NULL, updated_at DESC, id DESC") }
|
27
|
+
scope :currently_valid, -> { order(Arel.sql("country_iso IS NULL, updated_at DESC, id DESC")) }
|
22
28
|
scope :for_master, -> { joins(:variant).where(spree_variants: { is_master: true }) }
|
23
29
|
scope :for_variant, -> { joins(:variant).where(spree_variants: { is_master: false }) }
|
24
30
|
scope :for_any_country, -> { where(country: nil) }
|
data/app/models/spree/product.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'discard'
|
2
|
+
|
1
3
|
module Spree
|
2
4
|
# Products represent an entity for sale in a store. Products can have
|
3
5
|
# variations, called variants. Product properties include description,
|
@@ -12,6 +14,18 @@ module Spree
|
|
12
14
|
friendly_id :slug_candidates, use: :history
|
13
15
|
|
14
16
|
acts_as_paranoid
|
17
|
+
include Spree::ParanoiaDeprecations
|
18
|
+
|
19
|
+
include Discard::Model
|
20
|
+
self.discard_column = :deleted_at
|
21
|
+
|
22
|
+
after_discard do
|
23
|
+
variants_including_master.discard_all
|
24
|
+
self.product_option_types = []
|
25
|
+
self.product_properties = []
|
26
|
+
self.classifications = []
|
27
|
+
self.product_promotion_rules = []
|
28
|
+
end
|
15
29
|
|
16
30
|
has_many :product_option_types, dependent: :destroy, inverse_of: :product
|
17
31
|
has_many :option_types, through: :product_option_types
|
@@ -60,23 +74,37 @@ module Spree
|
|
60
74
|
end
|
61
75
|
|
62
76
|
MASTER_ATTRIBUTES = [
|
63
|
-
:
|
64
|
-
:
|
77
|
+
:cost_currency,
|
78
|
+
:cost_price,
|
79
|
+
:depth,
|
80
|
+
:height,
|
81
|
+
:price,
|
82
|
+
:sku,
|
83
|
+
:weight,
|
84
|
+
:width,
|
65
85
|
]
|
66
86
|
MASTER_ATTRIBUTES.each do |attr|
|
67
87
|
delegate :"#{attr}", :"#{attr}=", to: :find_or_build_master
|
68
88
|
end
|
69
89
|
|
70
|
-
delegate :
|
90
|
+
delegate :amount_in,
|
91
|
+
:display_amount,
|
92
|
+
:display_price,
|
93
|
+
:has_default_price?,
|
94
|
+
:images,
|
95
|
+
:price_for,
|
96
|
+
:price_in,
|
97
|
+
:rebuild_vat_prices=,
|
98
|
+
to: :find_or_build_master
|
71
99
|
|
72
|
-
|
73
|
-
alias_method :images, :master_images
|
100
|
+
alias_method :master_images, :images
|
74
101
|
|
75
102
|
has_many :variant_images, -> { order(:position) }, source: :images, through: :variants_including_master
|
76
103
|
|
77
104
|
after_create :build_variants_from_option_values_hash, if: :option_values_hash
|
78
105
|
|
79
106
|
after_destroy :punch_slug
|
107
|
+
after_discard :punch_slug
|
80
108
|
|
81
109
|
after_initialize :ensure_master
|
82
110
|
|
@@ -340,7 +368,7 @@ module Spree
|
|
340
368
|
run_callbacks(:touch)
|
341
369
|
end
|
342
370
|
|
343
|
-
# Iterate through this
|
371
|
+
# Iterate through this product's taxons and taxonomies and touch their timestamps in a batch
|
344
372
|
def touch_taxons
|
345
373
|
taxons_to_touch = taxons.map(&:self_and_ancestors).flatten.uniq
|
346
374
|
unless taxons_to_touch.empty?
|