solidus_core 1.1.4 → 1.2.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 +4 -4
- data/app/assets/images/logo/solidus_logo.png +0 -0
- data/app/helpers/spree/base_helper.rb +2 -3
- data/app/models/concerns/spree/adjustment_source.rb +1 -1
- data/app/models/concerns/spree/default_price.rb +3 -1
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/user_methods.rb +10 -0
- data/app/models/spree/adjustment.rb +1 -1
- data/app/models/spree/adjustment_reason.rb +2 -4
- data/app/models/spree/app_configuration.rb +36 -0
- data/app/models/spree/base.rb +10 -1
- data/app/models/spree/calculator/tiered_percent.rb +2 -1
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/country.rb +3 -3
- data/app/models/spree/credit_card.rb +2 -2
- data/app/models/spree/customer_return.rb +3 -4
- data/app/models/spree/inventory_unit.rb +13 -24
- data/app/models/spree/item_adjustments.rb +5 -5
- data/app/models/spree/line_item.rb +6 -15
- data/app/models/spree/log_entry.rb +1 -1
- data/app/models/spree/option_type.rb +4 -2
- data/app/models/spree/option_type_prototype.rb +6 -0
- data/app/models/spree/option_value.rb +1 -1
- data/app/models/spree/order.rb +18 -63
- data/app/models/spree/order/checkout.rb +4 -2
- data/app/models/spree/order_cancellations.rb +52 -1
- data/app/models/spree/order_contents.rb +1 -1
- data/app/models/spree/order_merger.rb +143 -0
- data/app/models/spree/order_shipping.rb +3 -3
- data/app/models/spree/order_update_attributes.rb +42 -0
- data/app/models/spree/order_updater.rb +1 -1
- data/app/models/spree/payment.rb +16 -10
- data/app/models/spree/payment_create.rb +68 -0
- data/app/models/spree/payment_method.rb +0 -1
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +1 -8
- data/app/models/spree/product.rb +9 -44
- data/app/models/spree/product/scopes.rb +9 -7
- data/app/models/spree/promotion/rules/nth_order.rb +1 -1
- data/app/models/spree/promotion/rules/taxon.rb +2 -1
- data/app/models/spree/promotion_chooser.rb +1 -0
- data/app/models/spree/promotion_code.rb +1 -1
- data/app/models/spree/promotion_rule_taxon.rb +6 -0
- data/app/models/spree/property.rb +2 -1
- data/app/models/spree/property_prototype.rb +6 -0
- data/app/models/spree/prototype.rb +6 -2
- data/app/models/spree/reimbursement.rb +10 -0
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/return_reason.rb +1 -7
- data/app/models/spree/role_user.rb +3 -5
- data/app/models/spree/shipment.rb +6 -11
- data/app/models/spree/shipping_method.rb +1 -7
- data/app/models/spree/shipping_rate.rb +3 -14
- data/app/models/spree/stock/coordinator.rb +48 -4
- data/app/models/spree/stock/estimator.rb +3 -6
- data/app/models/spree/stock/packer.rb +18 -2
- data/app/models/spree/stock/shipping_rate_selector.rb +16 -0
- data/app/models/spree/stock/shipping_rate_sorter.rb +16 -0
- data/app/models/spree/stock_item.rb +19 -15
- data/app/models/spree/stock_location.rb +2 -12
- data/app/models/spree/stock_transfer.rb +3 -3
- data/app/models/spree/store_credit.rb +2 -2
- data/app/models/spree/tax_category.rb +3 -2
- data/app/models/spree/tax_rate.rb +7 -14
- data/app/models/spree/taxon.rb +4 -1
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/transfer_item.rb +2 -2
- data/app/models/spree/unit_cancel.rb +2 -0
- data/app/models/spree/variant.rb +9 -14
- data/app/models/spree/zone.rb +6 -0
- data/app/models/spree/zone_member.rb +1 -4
- data/app/views/spree/order_mailer/cancel_email.text.erb +0 -0
- data/config/locales/en.yml +7 -5
- data/db/default/spree/countries.rb +1 -1
- data/db/default/spree/zones.rb +5 -11
- data/db/migrate/20130213191427_create_default_stock.rb +1 -1
- data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +1 -1
- data/db/migrate/20140309033438_create_store_from_preferences.rb +5 -2
- data/db/migrate/20141009204607_add_store_id_to_orders.rb +6 -2
- data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
- data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
- data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +2 -2
- data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +10 -0
- data/db/migrate/20151117063249_convert_habtm_to_hmt_for_properties_prototypes.rb +17 -0
- data/db/migrate/20151124062500_convert_habtm_to_hmt_for_option_type_prototypes.rb +17 -0
- data/db/migrate/20151126063028_convert_habtm_to_hmt_for_taxons_promotion_rules.rb +15 -0
- data/db/migrate/20151219020209_add_stock_item_unique_index.rb +9 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/database.yml +1 -1
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -1
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +3 -0
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +3 -0
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +3 -0
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +3 -0
- data/lib/spree/core/controller_helpers/common.rb +1 -1
- data/lib/spree/core/controller_helpers/order.rb +1 -1
- data/lib/spree/core/controller_helpers/payment_parameters.rb +104 -5
- data/lib/spree/core/engine.rb +3 -2
- data/lib/spree/core/stock_configuration.rb +11 -0
- data/lib/spree/core/unreturned_item_charger.rb +4 -4
- data/lib/spree/core/version.rb +9 -1
- data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +15 -24
- data/lib/spree/permitted_attributes.rb +3 -1
- data/lib/spree/testing_support/capybara_ext.rb +14 -40
- data/lib/spree/testing_support/factories.rb +0 -15
- data/lib/spree/testing_support/factories/address_factory.rb +3 -0
- data/lib/spree/testing_support/factories/adjustment_factory.rb +9 -1
- data/lib/spree/testing_support/factories/carton_factory.rb +4 -1
- data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -0
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -0
- data/lib/spree/testing_support/factories/line_item_factory.rb +3 -0
- data/lib/spree/testing_support/factories/option_type_factory.rb +6 -0
- data/lib/spree/testing_support/factories/{options_factory.rb → option_value_factory.rb} +0 -5
- data/lib/spree/testing_support/factories/order_factory.rb +13 -3
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +3 -0
- data/lib/spree/testing_support/factories/payment_factory.rb +13 -5
- data/lib/spree/testing_support/factories/price_factory.rb +2 -0
- data/lib/spree/testing_support/factories/product_factory.rb +7 -1
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +3 -0
- data/lib/spree/testing_support/factories/product_property_factory.rb +3 -0
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +3 -0
- data/lib/spree/testing_support/factories/promotion_factory.rb +3 -0
- data/lib/spree/testing_support/factories/prototype_factory.rb +2 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +10 -5
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +5 -0
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +2 -0
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -4
- data/lib/spree/testing_support/factories/return_item_factory.rb +4 -0
- data/lib/spree/testing_support/factories/return_reason_factory.rb +5 -0
- data/lib/spree/testing_support/factories/shipment_factory.rb +6 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +22 -10
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +9 -0
- data/lib/spree/testing_support/factories/state_factory.rb +2 -0
- data/lib/spree/testing_support/factories/stock_item_factory.rb +4 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +8 -0
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -0
- data/lib/spree/testing_support/factories/{stock_factory.rb → stock_package_factory.rb} +5 -10
- data/lib/spree/testing_support/factories/stock_packer_factory.rb +13 -0
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +4 -1
- data/lib/spree/testing_support/factories/store_credit_factory.rb +10 -6
- data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -0
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +4 -0
- data/lib/spree/testing_support/factories/taxon_factory.rb +2 -0
- data/lib/spree/testing_support/factories/user_factory.rb +6 -2
- data/lib/spree/testing_support/factories/variant_factory.rb +5 -0
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +3 -0
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +4 -0
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +3 -0
- data/lib/spree/testing_support/factories/zone_factory.rb +6 -0
- data/lib/spree/testing_support/sequences.rb +9 -0
- data/lib/tasks/exchanges.rake +4 -3
- data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +2 -2
- data/solidus_core.gemspec +4 -5
- data/spec/helpers/base_helper_spec.rb +6 -6
- data/spec/helpers/order_helper_spec.rb +1 -1
- data/spec/helpers/products_helper_spec.rb +2 -2
- data/spec/helpers/taxons_helper_spec.rb +1 -1
- data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +107 -7
- data/spec/lib/spree/core/importer/order_spec.rb +1 -1
- data/spec/lib/spree/core/stock_configuration_spec.rb +16 -0
- data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +24 -0
- data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +18 -0
- data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +42 -0
- data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +28 -0
- data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +49 -0
- data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +24 -0
- data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +30 -0
- data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +30 -0
- data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +30 -0
- data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/prototype_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +18 -0
- data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +18 -0
- data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +28 -0
- data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +24 -0
- data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +26 -0
- data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +16 -0
- data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +42 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +18 -0
- data/spec/lib/spree/core/testing_support/factories/store_credit_update_reason_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/tracker_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +22 -0
- data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +36 -0
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +12 -0
- data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +18 -0
- data/spec/lib/spree/core/unreturned_item_charger_spec.rb +1 -1
- data/spec/lib/spree/core/version_spec.rb +17 -0
- data/spec/lib/spree/money_spec.rb +1 -1
- data/spec/mailers/carton_mailer_spec.rb +1 -1
- data/spec/mailers/order_mailer_spec.rb +1 -1
- data/spec/mailers/reimbursement_mailer_spec.rb +1 -3
- data/spec/mailers/test_mailer_spec.rb +1 -3
- data/spec/models/spree/address_spec.rb +4 -4
- data/spec/models/spree/adjustment_reason_spec.rb +1 -3
- data/spec/models/spree/app_configuration_spec.rb +4 -0
- data/spec/models/spree/calculator/price_sack_spec.rb +3 -3
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +3 -3
- data/spec/models/spree/calculator/tiered_percent_spec.rb +86 -10
- data/spec/models/spree/carton_spec.rb +3 -1
- data/spec/models/spree/classification_spec.rb +3 -3
- data/spec/models/spree/credit_card_spec.rb +16 -16
- data/spec/models/spree/customer_return_spec.rb +1 -1
- data/spec/models/spree/gateway/bogus_simple.rb +1 -1
- data/spec/models/spree/inventory_unit_spec.rb +3 -3
- data/spec/models/spree/item_adjustments_spec.rb +1 -1
- data/spec/models/spree/line_item_spec.rb +2 -2
- data/spec/models/spree/option_type_spec.rb +2 -2
- data/spec/models/spree/option_value_spec.rb +2 -2
- data/spec/models/spree/order/callbacks_spec.rb +1 -1
- data/spec/models/spree/order/checkout_spec.rb +16 -11
- data/spec/models/spree/order/payment_spec.rb +24 -22
- data/spec/models/spree/order/state_machine_spec.rb +1 -1
- data/spec/models/spree/order/validations_spec.rb +1 -1
- data/spec/models/spree/order_cancellations_spec.rb +63 -0
- data/spec/models/spree/order_contents_spec.rb +1 -1
- data/spec/models/spree/order_merger_spec.rb +133 -0
- data/spec/models/spree/order_spec.rb +39 -159
- data/spec/models/spree/order_update_attributes_spec.rb +82 -0
- data/spec/models/spree/order_updater_spec.rb +6 -4
- data/spec/models/spree/payment_create_spec.rb +131 -0
- data/spec/models/spree/payment_spec.rb +130 -48
- data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +91 -33
- data/spec/models/spree/product_filter_spec.rb +3 -3
- data/spec/models/spree/product_spec.rb +80 -26
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +1 -1
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +2 -2
- data/spec/models/spree/promotion/rules/nth_order_spec.rb +1 -1
- data/spec/models/spree/promotion/rules/user_spec.rb +2 -2
- data/spec/models/spree/promotion_handler/coupon_spec.rb +2 -2
- data/spec/models/spree/promotion_spec.rb +18 -18
- data/spec/models/spree/reimbursement_spec.rb +22 -0
- data/spec/models/spree/return_item_spec.rb +2 -2
- data/spec/models/spree/shipment_spec.rb +28 -12
- data/spec/models/spree/shipping_method_spec.rb +2 -2
- data/spec/models/spree/shipping_rate_spec.rb +3 -3
- data/spec/models/spree/stock/coordinator_spec.rb +5 -0
- data/spec/models/spree/stock/estimator_spec.rb +35 -1
- data/spec/models/spree/stock/package_spec.rb +1 -1
- data/spec/models/spree/stock/packer_spec.rb +2 -3
- data/spec/models/spree/stock/shipping_rate_selector_spec.rb +16 -0
- data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +16 -0
- data/spec/models/spree/stock_item_spec.rb +5 -7
- data/spec/models/spree/stock_location_spec.rb +5 -9
- data/spec/models/spree/stock_transfer_spec.rb +33 -13
- data/spec/models/spree/store_credit_event_spec.rb +1 -1
- data/spec/models/spree/store_credit_spec.rb +1 -1
- data/spec/models/spree/tax_rate_spec.rb +381 -120
- data/spec/models/spree/taxon_spec.rb +3 -3
- data/spec/models/spree/transfer_item_spec.rb +4 -4
- data/spec/models/spree/unit_cancel_spec.rb +1 -1
- data/spec/models/spree/variant_spec.rb +3 -3
- data/spec/models/spree/zone_spec.rb +35 -1
- data/spec/support/concerns/working_factories.rb +9 -0
- data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
- data/vendor/assets/javascripts/jquery.payment.js +231 -80
- metadata +103 -27
- data/app/models/spree/order/currency_updater.rb +0 -40
- data/spec/models/spree/order/currency_updater_spec.rb +0 -32
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Prototype < Spree::Base
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
|
|
4
|
+
has_many :property_prototypes
|
|
5
|
+
has_many :properties, through: :property_prototypes
|
|
6
|
+
|
|
7
|
+
has_many :option_type_prototypes
|
|
8
|
+
has_many :option_types, through: :option_type_prototypes
|
|
5
9
|
|
|
6
10
|
has_many :prototype_taxons, dependent: :destroy
|
|
7
11
|
has_many :taxons, through: :prototype_taxons
|
|
@@ -136,6 +136,16 @@ module Spree
|
|
|
136
136
|
return_items.all?(&:exchange_processed?)
|
|
137
137
|
end
|
|
138
138
|
|
|
139
|
+
# Accepts all return items, saves the reimbursement, and performs the reimbursement
|
|
140
|
+
#
|
|
141
|
+
# @api public
|
|
142
|
+
# @return [void]
|
|
143
|
+
def return_all
|
|
144
|
+
return_items.each(&:accept!)
|
|
145
|
+
save!
|
|
146
|
+
perform!
|
|
147
|
+
end
|
|
148
|
+
|
|
139
149
|
private
|
|
140
150
|
|
|
141
151
|
def generate_number
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class ReturnItem::EligibilityValidator::TimeSincePurchase < Spree::ReturnItem::EligibilityValidator::BaseValidator
|
|
3
3
|
def eligible_for_return?
|
|
4
|
-
if (@return_item.inventory_unit.order.completed_at + Spree::Config[:return_eligibility_number_of_days].days) > Time.
|
|
4
|
+
if (@return_item.inventory_unit.order.completed_at + Spree::Config[:return_eligibility_number_of_days].days) > Time.current
|
|
5
5
|
return true
|
|
6
6
|
else
|
|
7
7
|
add_error(:number_of_days, Spree.t('return_item_time_period_ineligible'))
|
|
@@ -5,14 +5,8 @@ module Spree
|
|
|
5
5
|
has_many :return_authorizations
|
|
6
6
|
|
|
7
7
|
def self.reasons_for_return_items(return_items)
|
|
8
|
-
reasons = Spree::ReturnReason.active
|
|
9
8
|
# Only allow an inactive reason if it's already associated to a return item
|
|
10
|
-
return_items.
|
|
11
|
-
if return_item.return_reason && !return_item.return_reason.active?
|
|
12
|
-
reasons << return_item.return_reason
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
reasons
|
|
9
|
+
active | return_items.map(&:return_reason).compact
|
|
16
10
|
end
|
|
17
11
|
end
|
|
18
12
|
end
|
|
@@ -4,14 +4,12 @@ module Spree
|
|
|
4
4
|
belongs_to :role, class_name: "Spree::Role"
|
|
5
5
|
belongs_to :user, class_name: Spree::UserClassHandle.new
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
after_create :auto_generate_spree_api_key
|
|
8
8
|
|
|
9
9
|
private
|
|
10
10
|
|
|
11
|
-
def
|
|
12
|
-
|
|
13
|
-
user.generate_spree_api_key!
|
|
14
|
-
end
|
|
11
|
+
def auto_generate_spree_api_key
|
|
12
|
+
user.try!(:auto_generate_spree_api_key)
|
|
15
13
|
end
|
|
16
14
|
end
|
|
17
15
|
end
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'ostruct'
|
|
2
|
-
|
|
3
1
|
module Spree
|
|
4
2
|
class Shipment < Spree::Base
|
|
5
3
|
belongs_to :order, class_name: 'Spree::Order', touch: true, inverse_of: :shipments
|
|
@@ -35,6 +33,7 @@ module Spree
|
|
|
35
33
|
scope :with_state, ->(*s) { where(state: s) }
|
|
36
34
|
# sort by most recent shipped_at, falling back to created_at. add "id desc" to make specs that involve this scope more deterministic.
|
|
37
35
|
scope :reverse_chronological, -> { order('coalesce(spree_shipments.shipped_at, spree_shipments.created_at) desc', id: :desc) }
|
|
36
|
+
scope :by_store, ->(store) { joins(:order).merge(Spree::Order.by_store(store)) }
|
|
38
37
|
|
|
39
38
|
# shipment state machine (see http://github.com/pluginaweek/state_machine/tree/master for details)
|
|
40
39
|
state_machine initial: :pending, use_transactions: false do
|
|
@@ -163,10 +162,6 @@ module Spree
|
|
|
163
162
|
inventory_units.includes(:line_item).map(&:line_item).uniq
|
|
164
163
|
end
|
|
165
164
|
|
|
166
|
-
def line_items
|
|
167
|
-
inventory_units.includes(:line_item).map(&:line_item).uniq
|
|
168
|
-
end
|
|
169
|
-
|
|
170
165
|
def ready_or_pending?
|
|
171
166
|
self.ready? || self.pending?
|
|
172
167
|
end
|
|
@@ -178,7 +173,7 @@ module Spree
|
|
|
178
173
|
# StockEstimator.new assigment below will replace the current shipping_method
|
|
179
174
|
original_shipping_method_id = shipping_method.try!(:id)
|
|
180
175
|
|
|
181
|
-
new_rates =
|
|
176
|
+
new_rates = Spree::Config.stock.estimator_class.new(order).shipping_rates(to_package)
|
|
182
177
|
|
|
183
178
|
# If one of the new rates matches the previously selected shipping
|
|
184
179
|
# method, select that instead of the default provided by the estimator.
|
|
@@ -243,7 +238,7 @@ module Spree
|
|
|
243
238
|
|
|
244
239
|
def shipped=(value)
|
|
245
240
|
return unless value == '1' && shipped_at.nil?
|
|
246
|
-
self.shipped_at = Time.
|
|
241
|
+
self.shipped_at = Time.current
|
|
247
242
|
end
|
|
248
243
|
|
|
249
244
|
def shipping_method
|
|
@@ -282,7 +277,7 @@ module Spree
|
|
|
282
277
|
self.update_columns(
|
|
283
278
|
cost: selected_shipping_rate.cost,
|
|
284
279
|
adjustment_total: adjustments.additional.map(&:update!).compact.sum,
|
|
285
|
-
updated_at: Time.
|
|
280
|
+
updated_at: Time.current,
|
|
286
281
|
)
|
|
287
282
|
end
|
|
288
283
|
end
|
|
@@ -304,7 +299,7 @@ module Spree
|
|
|
304
299
|
# (via Order#paid?) affects the shipment state (YAY)
|
|
305
300
|
self.update_columns(
|
|
306
301
|
state: determine_state(order),
|
|
307
|
-
updated_at: Time.
|
|
302
|
+
updated_at: Time.current
|
|
308
303
|
)
|
|
309
304
|
|
|
310
305
|
# And then it's time to update shipment states and finally persist
|
|
@@ -325,7 +320,7 @@ module Spree
|
|
|
325
320
|
new_state = determine_state(order)
|
|
326
321
|
update_columns(
|
|
327
322
|
state: new_state,
|
|
328
|
-
updated_at: Time.
|
|
323
|
+
updated_at: Time.current,
|
|
329
324
|
)
|
|
330
325
|
after_ship if new_state == 'shipped' and old_state != 'shipped'
|
|
331
326
|
end
|
|
@@ -4,8 +4,6 @@ module Spree
|
|
|
4
4
|
include Spree::CalculatedAdjustments
|
|
5
5
|
DISPLAY = [:both, :front_end, :back_end]
|
|
6
6
|
|
|
7
|
-
default_scope -> { where(deleted_at: nil) }
|
|
8
|
-
|
|
9
7
|
has_many :shipping_method_categories, :dependent => :destroy
|
|
10
8
|
has_many :shipping_categories, through: :shipping_method_categories
|
|
11
9
|
has_many :shipping_rates, inverse_of: :shipping_method
|
|
@@ -15,7 +13,7 @@ module Spree
|
|
|
15
13
|
has_many :shipping_method_zones
|
|
16
14
|
has_many :zones, through: :shipping_method_zones
|
|
17
15
|
|
|
18
|
-
belongs_to :tax_category, :class_name => 'Spree::TaxCategory'
|
|
16
|
+
belongs_to :tax_category, -> { with_deleted }, :class_name => 'Spree::TaxCategory'
|
|
19
17
|
|
|
20
18
|
validates :name, presence: true
|
|
21
19
|
|
|
@@ -42,10 +40,6 @@ module Spree
|
|
|
42
40
|
self.display_on != "back_end"
|
|
43
41
|
end
|
|
44
42
|
|
|
45
|
-
def tax_category
|
|
46
|
-
Spree::TaxCategory.unscoped { super }
|
|
47
|
-
end
|
|
48
|
-
|
|
49
43
|
private
|
|
50
44
|
def compute_amount(calculable)
|
|
51
45
|
self.calculator.compute(calculable)
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class ShippingRate < Spree::Base
|
|
3
3
|
belongs_to :shipment, class_name: 'Spree::Shipment'
|
|
4
|
-
belongs_to :shipping_method, class_name: 'Spree::ShippingMethod', inverse_of: :shipping_rates
|
|
5
|
-
belongs_to :tax_rate, class_name: 'Spree::TaxRate'
|
|
4
|
+
belongs_to :shipping_method, -> { with_deleted }, class_name: 'Spree::ShippingMethod', inverse_of: :shipping_rates
|
|
5
|
+
belongs_to :tax_rate, -> { with_deleted }, class_name: 'Spree::TaxRate'
|
|
6
6
|
|
|
7
7
|
delegate :order, :currency, to: :shipment
|
|
8
8
|
delegate :name, to: :shipping_method
|
|
9
|
+
delegate :code, to: :shipping_method, prefix: true
|
|
9
10
|
|
|
10
11
|
def display_base_price
|
|
11
12
|
Spree::Money.new(cost, currency: currency)
|
|
@@ -41,17 +42,5 @@ module Spree
|
|
|
41
42
|
def display_tax_amount(tax_amount)
|
|
42
43
|
Spree::Money.new(tax_amount, currency: currency)
|
|
43
44
|
end
|
|
44
|
-
|
|
45
|
-
def shipping_method
|
|
46
|
-
Spree::ShippingMethod.unscoped { super }
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def shipping_method_code
|
|
50
|
-
shipping_method.code
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def tax_rate
|
|
54
|
-
Spree::TaxRate.unscoped { super }
|
|
55
|
-
end
|
|
56
45
|
end
|
|
57
46
|
end
|
|
@@ -55,9 +55,8 @@ module Spree
|
|
|
55
55
|
#
|
|
56
56
|
# Returns an array of Package instances
|
|
57
57
|
def build_packages(packages = Array.new)
|
|
58
|
-
|
|
59
|
-
units_for_location = unallocated_inventory_units.select { |unit|
|
|
60
|
-
next unless units_for_location.any?
|
|
58
|
+
stock_location_variant_ids.each do |stock_location, variant_ids|
|
|
59
|
+
units_for_location = unallocated_inventory_units.select { |unit| variant_ids.include?(unit.variant_id) }
|
|
61
60
|
packer = build_packer(stock_location, units_for_location)
|
|
62
61
|
packages += packer.packages
|
|
63
62
|
end
|
|
@@ -66,17 +65,62 @@ module Spree
|
|
|
66
65
|
|
|
67
66
|
private
|
|
68
67
|
|
|
68
|
+
# This finds the variants we're looking for in each active stock location.
|
|
69
|
+
# It returns a hash like:
|
|
70
|
+
# {
|
|
71
|
+
# <stock location> => <set of variant ids>,
|
|
72
|
+
# <stock location> => <set of variant ids>,
|
|
73
|
+
# ...,
|
|
74
|
+
# }
|
|
75
|
+
# This is done in an awkward way for performance reasons. It uses two
|
|
76
|
+
# queries that are kept as performant as possible, and only loads the
|
|
77
|
+
# minimum required ActiveRecord objects.
|
|
78
|
+
def stock_location_variant_ids
|
|
79
|
+
# associate the variant ids we're interested in with stock location ids
|
|
80
|
+
location_variant_ids = StockItem.
|
|
81
|
+
where(variant_id: unallocated_variant_ids).
|
|
82
|
+
joins(:stock_location).
|
|
83
|
+
merge(StockLocation.active).
|
|
84
|
+
pluck(:stock_location_id, :variant_id)
|
|
85
|
+
|
|
86
|
+
# load activerecord objects for the stock location ids and turn them
|
|
87
|
+
# into a lookup hash like:
|
|
88
|
+
# {
|
|
89
|
+
# <stock location id> => <stock location>,
|
|
90
|
+
# ...,
|
|
91
|
+
# }
|
|
92
|
+
location_lookup = StockLocation.
|
|
93
|
+
where(id: location_variant_ids.map(&:first).uniq).
|
|
94
|
+
map { |l| [l.id, l] }.
|
|
95
|
+
to_h
|
|
96
|
+
|
|
97
|
+
# build the final lookup hash of
|
|
98
|
+
# {<stock location> => <set of variant ids>, ...}
|
|
99
|
+
# using the previous results
|
|
100
|
+
hash = location_variant_ids.each_with_object({}) do |(location_id, variant_id), hash|
|
|
101
|
+
location = location_lookup[location_id]
|
|
102
|
+
hash[location] ||= Set.new
|
|
103
|
+
hash[location] << variant_id
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
hash
|
|
107
|
+
end
|
|
108
|
+
|
|
69
109
|
def unallocated_inventory_units
|
|
70
110
|
inventory_units - @preallocated_inventory_units
|
|
71
111
|
end
|
|
72
112
|
|
|
113
|
+
def unallocated_variant_ids
|
|
114
|
+
unallocated_inventory_units.map(&:variant_id).uniq
|
|
115
|
+
end
|
|
116
|
+
|
|
73
117
|
def prioritize_packages(packages)
|
|
74
118
|
prioritizer = Prioritizer.new(inventory_units, packages)
|
|
75
119
|
prioritizer.prioritized_packages
|
|
76
120
|
end
|
|
77
121
|
|
|
78
122
|
def estimate_packages(packages)
|
|
79
|
-
estimator =
|
|
123
|
+
estimator = Spree::Config.stock.estimator_class.new(order)
|
|
80
124
|
packages.each do |package|
|
|
81
125
|
package.shipping_rates = estimator.shipping_rates(package)
|
|
82
126
|
end
|
|
@@ -20,20 +20,17 @@ module Spree
|
|
|
20
20
|
rates = calculate_shipping_rates(package)
|
|
21
21
|
rates.select! { |rate| rate.shipping_method.frontend? } if frontend_only
|
|
22
22
|
choose_default_shipping_rate(rates)
|
|
23
|
-
|
|
23
|
+
Spree::Config.shipping_rate_sorter_class.new(rates).sort
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
private
|
|
27
27
|
def choose_default_shipping_rate(shipping_rates)
|
|
28
28
|
unless shipping_rates.empty?
|
|
29
|
-
|
|
29
|
+
default_shipping_rate = Spree::Config.shipping_rate_selector_class.new(shipping_rates).find_default
|
|
30
|
+
default_shipping_rate.selected = true
|
|
30
31
|
end
|
|
31
32
|
end
|
|
32
33
|
|
|
33
|
-
def sort_shipping_rates(shipping_rates)
|
|
34
|
-
shipping_rates.sort_by!(&:cost)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
34
|
def calculate_shipping_rates(package)
|
|
38
35
|
shipping_methods(package).map do |shipping_method|
|
|
39
36
|
cost = shipping_method.calculator.compute(package)
|
|
@@ -22,9 +22,10 @@ module Spree
|
|
|
22
22
|
inventory_units.group_by(&:variant).each do |variant, variant_inventory_units|
|
|
23
23
|
units = variant_inventory_units.clone
|
|
24
24
|
if variant.should_track_inventory?
|
|
25
|
-
|
|
25
|
+
stock_item = stock_item_for(variant.id)
|
|
26
|
+
next unless stock_item
|
|
26
27
|
|
|
27
|
-
on_hand, backordered =
|
|
28
|
+
on_hand, backordered = stock_item.fill_status(units.count)
|
|
28
29
|
raise Spree::Order::InsufficientStock unless on_hand > 0 || backordered > 0
|
|
29
30
|
package.add_multiple units.slice!(0, on_hand), :on_hand if on_hand > 0
|
|
30
31
|
package.add_multiple units.slice!(0, backordered), :backordered if backordered > 0
|
|
@@ -37,6 +38,21 @@ module Spree
|
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
private
|
|
41
|
+
|
|
42
|
+
def stock_item_for(variant_id)
|
|
43
|
+
stock_item_lookup[variant_id]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Returns a lookup table in the form of:
|
|
47
|
+
# {<variant_id> => <stock_item>, ...}
|
|
48
|
+
def stock_item_lookup
|
|
49
|
+
@stock_item_lookup ||= Spree::StockItem.
|
|
50
|
+
where(variant_id: inventory_units.map(&:variant_id).uniq).
|
|
51
|
+
where(stock_location_id: stock_location.id).
|
|
52
|
+
map { |stock_item| [stock_item.variant_id, stock_item] }.
|
|
53
|
+
to_h # there is only one stock item per variant in a stock location
|
|
54
|
+
end
|
|
55
|
+
|
|
40
56
|
def build_splitter
|
|
41
57
|
splitter = nil
|
|
42
58
|
splitters.reverse.each do |klass|
|
|
@@ -3,15 +3,18 @@ module Spree
|
|
|
3
3
|
acts_as_paranoid
|
|
4
4
|
|
|
5
5
|
belongs_to :stock_location, class_name: 'Spree::StockLocation', inverse_of: :stock_items
|
|
6
|
-
belongs_to :variant, class_name: 'Spree::Variant', inverse_of: :stock_items
|
|
6
|
+
belongs_to :variant, -> { with_deleted }, class_name: 'Spree::Variant', inverse_of: :stock_items
|
|
7
7
|
has_many :stock_movements, inverse_of: :stock_item
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
validates :stock_location, :variant, presence: true
|
|
10
|
+
validates :variant_id, uniqueness: { scope: [:stock_location_id, :deleted_at] }, allow_blank: true, unless: :deleted_at
|
|
11
11
|
validates :count_on_hand, numericality: { greater_than_or_equal_to: 0 }, if: :verify_count_on_hand?
|
|
12
12
|
|
|
13
13
|
delegate :weight, :should_track_inventory?, to: :variant
|
|
14
14
|
|
|
15
|
+
# @return [String] the name of this stock item's variant
|
|
16
|
+
delegate :name, to: :variant, prefix: true
|
|
17
|
+
|
|
15
18
|
after_save :conditional_variant_touch, if: :changed?
|
|
16
19
|
after_touch { variant.touch }
|
|
17
20
|
|
|
@@ -23,11 +26,6 @@ module Spree
|
|
|
23
26
|
Spree::InventoryUnit.backordered_for_stock_item(self)
|
|
24
27
|
end
|
|
25
28
|
|
|
26
|
-
# @return [String] the name of this stock item's variant
|
|
27
|
-
def variant_name
|
|
28
|
-
variant.name
|
|
29
|
-
end
|
|
30
|
-
|
|
31
29
|
# Adjusts the count on hand by a given value.
|
|
32
30
|
#
|
|
33
31
|
# @note This will cause backorders to be processed.
|
|
@@ -63,13 +61,6 @@ module Spree
|
|
|
63
61
|
self.in_stock? || self.backorderable?
|
|
64
62
|
end
|
|
65
63
|
|
|
66
|
-
# @note This returns the variant regardless of whether it was soft
|
|
67
|
-
# deleted.
|
|
68
|
-
# @return [Spree::Variant] this stock item's variant.
|
|
69
|
-
def variant
|
|
70
|
-
Spree::Variant.unscoped { super }
|
|
71
|
-
end
|
|
72
|
-
|
|
73
64
|
# Sets the count on hand to zero if it not already zero.
|
|
74
65
|
#
|
|
75
66
|
# @note This processes backorders if the count on hand is not zero.
|
|
@@ -77,6 +68,19 @@ module Spree
|
|
|
77
68
|
self.set_count_on_hand(0) if count_on_hand > 0
|
|
78
69
|
end
|
|
79
70
|
|
|
71
|
+
def fill_status(quantity)
|
|
72
|
+
if count_on_hand >= quantity
|
|
73
|
+
on_hand = quantity
|
|
74
|
+
backordered = 0
|
|
75
|
+
else
|
|
76
|
+
on_hand = count_on_hand
|
|
77
|
+
on_hand = 0 if on_hand < 0
|
|
78
|
+
backordered = backorderable? ? (quantity - on_hand) : 0
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
[on_hand, backordered]
|
|
82
|
+
end
|
|
83
|
+
|
|
80
84
|
private
|
|
81
85
|
def verify_count_on_hand?
|
|
82
86
|
count_on_hand_changed? && !backorderable? && (count_on_hand < count_on_hand_was) && (count_on_hand < 0)
|