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
|
@@ -6,7 +6,7 @@ module Spree
|
|
|
6
6
|
has_many :option_values_variants, dependent: :destroy
|
|
7
7
|
has_many :variants, through: :option_values_variants
|
|
8
8
|
|
|
9
|
-
validates :name, presence: true, uniqueness: { scope: :option_type_id }
|
|
9
|
+
validates :name, presence: true, uniqueness: { scope: :option_type_id, allow_blank: true }
|
|
10
10
|
validates :presentation, presence: true
|
|
11
11
|
|
|
12
12
|
after_save :touch, if: :changed?
|
data/app/models/spree/order.rb
CHANGED
|
@@ -9,7 +9,6 @@ module Spree
|
|
|
9
9
|
ORDER_NUMBER_PREFIX = 'R'
|
|
10
10
|
|
|
11
11
|
include Spree::Order::Checkout
|
|
12
|
-
include Spree::Order::CurrencyUpdater
|
|
13
12
|
include Spree::Order::Payments
|
|
14
13
|
|
|
15
14
|
class InsufficientStock < StandardError; end
|
|
@@ -93,7 +92,6 @@ module Spree
|
|
|
93
92
|
|
|
94
93
|
before_create :create_token
|
|
95
94
|
before_create :link_by_email
|
|
96
|
-
before_update :homogenize_line_item_currencies, if: :currency_changed?
|
|
97
95
|
|
|
98
96
|
validates :email, presence: true, if: :require_email
|
|
99
97
|
validates :email, email: true, if: :require_email, allow_blank: true
|
|
@@ -101,7 +99,11 @@ module Spree
|
|
|
101
99
|
|
|
102
100
|
make_permalink field: :number
|
|
103
101
|
|
|
104
|
-
delegate :update_totals, :persist_totals, :
|
|
102
|
+
delegate :update_totals, :persist_totals, to: :updater
|
|
103
|
+
delegate :firstname, :lastname, to: :bill_address, prefix: true, allow_nil: true
|
|
104
|
+
alias_method :billing_firstname, :bill_address_firstname
|
|
105
|
+
alias_method :billing_lastname, :bill_address_lastname
|
|
106
|
+
|
|
105
107
|
|
|
106
108
|
class_attribute :update_hooks
|
|
107
109
|
self.update_hooks = Set.new
|
|
@@ -109,8 +111,11 @@ module Spree
|
|
|
109
111
|
class_attribute :line_item_comparison_hooks
|
|
110
112
|
self.line_item_comparison_hooks = Set.new
|
|
111
113
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
+
class << self
|
|
115
|
+
def by_number(number)
|
|
116
|
+
where(number: number)
|
|
117
|
+
end
|
|
118
|
+
deprecate :by_number, deprecator: Spree::Deprecation
|
|
114
119
|
end
|
|
115
120
|
|
|
116
121
|
scope :created_between, ->(start_date, end_date) { where(created_at: start_date..end_date) }
|
|
@@ -190,9 +195,9 @@ module Spree
|
|
|
190
195
|
end
|
|
191
196
|
|
|
192
197
|
def confirmation_required?
|
|
193
|
-
ActiveSupport::Deprecation.warn "Order#confirmation_required is deprecated.", caller
|
|
194
198
|
true
|
|
195
199
|
end
|
|
200
|
+
deprecate :confirmation_required?, deprecator: Spree::Deprecation
|
|
196
201
|
|
|
197
202
|
def backordered?
|
|
198
203
|
shipments.any?(&:backordered?)
|
|
@@ -410,14 +415,6 @@ module Spree
|
|
|
410
415
|
).uniq
|
|
411
416
|
end
|
|
412
417
|
|
|
413
|
-
def billing_firstname
|
|
414
|
-
bill_address.try(:firstname)
|
|
415
|
-
end
|
|
416
|
-
|
|
417
|
-
def billing_lastname
|
|
418
|
-
bill_address.try(:lastname)
|
|
419
|
-
end
|
|
420
|
-
|
|
421
418
|
def insufficient_stock_lines
|
|
422
419
|
line_items.select(&:insufficient_stock?)
|
|
423
420
|
end
|
|
@@ -435,35 +432,8 @@ module Spree
|
|
|
435
432
|
end
|
|
436
433
|
end
|
|
437
434
|
|
|
438
|
-
def merge!(
|
|
439
|
-
|
|
440
|
-
next unless other_order_line_item.currency == currency
|
|
441
|
-
|
|
442
|
-
# Compare the line items of the other order with mine.
|
|
443
|
-
# Make sure you allow any extensions to chime in on whether or
|
|
444
|
-
# not the extension-specific parts of the line item match
|
|
445
|
-
current_line_item = self.line_items.detect { |my_li|
|
|
446
|
-
my_li.variant == other_order_line_item.variant &&
|
|
447
|
-
self.line_item_comparison_hooks.all? { |hook|
|
|
448
|
-
self.send(hook, my_li, other_order_line_item.serializable_hash)
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
if current_line_item
|
|
452
|
-
current_line_item.quantity += other_order_line_item.quantity
|
|
453
|
-
current_line_item.save!
|
|
454
|
-
else
|
|
455
|
-
other_order_line_item.order_id = self.id
|
|
456
|
-
other_order_line_item.save!
|
|
457
|
-
end
|
|
458
|
-
end
|
|
459
|
-
|
|
460
|
-
self.associate_user!(user) if !self.user && !user.blank?
|
|
461
|
-
|
|
462
|
-
updater.update
|
|
463
|
-
|
|
464
|
-
# So that the destroy doesn't take out line items which may have been re-assigned
|
|
465
|
-
order.line_items.reload
|
|
466
|
-
order.destroy
|
|
435
|
+
def merge!(*args)
|
|
436
|
+
Spree::Config.order_merger_class.new(self).merge!(*args)
|
|
467
437
|
end
|
|
468
438
|
|
|
469
439
|
def empty!
|
|
@@ -555,7 +525,7 @@ module Spree
|
|
|
555
525
|
|
|
556
526
|
self.update_columns(
|
|
557
527
|
state: 'cart',
|
|
558
|
-
updated_at: Time.
|
|
528
|
+
updated_at: Time.current,
|
|
559
529
|
)
|
|
560
530
|
self.next! if self.line_items.size > 0
|
|
561
531
|
end
|
|
@@ -583,7 +553,7 @@ module Spree
|
|
|
583
553
|
cancel!
|
|
584
554
|
self.update_columns(
|
|
585
555
|
canceler_id: user.id,
|
|
586
|
-
canceled_at: Time.
|
|
556
|
+
canceled_at: Time.current,
|
|
587
557
|
)
|
|
588
558
|
end
|
|
589
559
|
end
|
|
@@ -615,10 +585,12 @@ module Spree
|
|
|
615
585
|
guest_token
|
|
616
586
|
end
|
|
617
587
|
|
|
588
|
+
# @deprecated Do not use this method. Behaviour is unreliable.
|
|
618
589
|
def fully_discounted?
|
|
619
590
|
adjustment_total + line_items.map(&:final_amount).sum == 0.0
|
|
620
591
|
end
|
|
621
592
|
alias_method :fully_discounted, :fully_discounted?
|
|
593
|
+
deprecate :fully_discounted, deprecator: Spree::Deprecation
|
|
622
594
|
|
|
623
595
|
def unreturned_exchange?
|
|
624
596
|
# created_at - 1 is a hack to ensure that this doesn't blow up on MySQL,
|
|
@@ -709,23 +681,6 @@ module Spree
|
|
|
709
681
|
Spree::Money.new(total_available_store_credit - total_applicable_store_credit, { currency: currency })
|
|
710
682
|
end
|
|
711
683
|
|
|
712
|
-
def payments_attributes=(attributes)
|
|
713
|
-
validate_payments_attributes(attributes)
|
|
714
|
-
super(attributes)
|
|
715
|
-
end
|
|
716
|
-
|
|
717
|
-
def validate_payments_attributes(attributes)
|
|
718
|
-
attributes = Array.wrap(attributes)
|
|
719
|
-
# Ensure the payment methods specified are allowed for this user
|
|
720
|
-
payment_methods = Spree::PaymentMethod.where(id: available_payment_methods)
|
|
721
|
-
attributes.each do |payment_attributes|
|
|
722
|
-
payment_method_id = payment_attributes[:payment_method_id]
|
|
723
|
-
|
|
724
|
-
# raise RecordNotFound unless it is an allowed payment method
|
|
725
|
-
payment_methods.find(payment_method_id) if payment_method_id
|
|
726
|
-
end
|
|
727
|
-
end
|
|
728
|
-
|
|
729
684
|
private
|
|
730
685
|
|
|
731
686
|
def link_by_email
|
|
@@ -793,7 +748,7 @@ module Spree
|
|
|
793
748
|
end
|
|
794
749
|
|
|
795
750
|
def use_billing?
|
|
796
|
-
|
|
751
|
+
use_billing.in?([true, 'true', '1'])
|
|
797
752
|
end
|
|
798
753
|
|
|
799
754
|
def set_currency
|
|
@@ -247,7 +247,9 @@ module Spree
|
|
|
247
247
|
|
|
248
248
|
set_callback :updating_from_params, :before, :update_params_payment_source
|
|
249
249
|
|
|
250
|
+
# @deprecated Use {OrderUpdateAttributes} instead
|
|
250
251
|
def update_from_params(params, permitted_params, request_env = {})
|
|
252
|
+
ActiveSupport::Deprecation.warn "update_from_params is deprecated. Use the OrderUpdateAttributes class instead", caller
|
|
251
253
|
success = false
|
|
252
254
|
@updating_params = params
|
|
253
255
|
run_callbacks :updating_from_params do
|
|
@@ -274,8 +276,8 @@ module Spree
|
|
|
274
276
|
attributes[:payments_attributes].first[:request_env] = request_env
|
|
275
277
|
end
|
|
276
278
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
+
update = OrderUpdateAttributes.new(self, attributes, request_env: request_env)
|
|
280
|
+
success = update.apply
|
|
279
281
|
end
|
|
280
282
|
|
|
281
283
|
@updating_params = nil
|
|
@@ -14,6 +14,15 @@ class Spree::OrderCancellations
|
|
|
14
14
|
@order = order
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
# Marks inventory units short shipped. Adjusts the order based on the value of the inventory.
|
|
18
|
+
# Sends an email to the customer about what inventory has been short shipped.
|
|
19
|
+
#
|
|
20
|
+
# @api public
|
|
21
|
+
#
|
|
22
|
+
# @param [Array<InventoryUnit>] inventory_units the inventory units to be short shipped
|
|
23
|
+
# @param [String] whodunnit the system or person that is short shipping the inventory units
|
|
24
|
+
#
|
|
25
|
+
# @return [Array<UnitCancel>] the units that have been canceled due to short shipping
|
|
17
26
|
def short_ship(inventory_units, whodunnit:nil)
|
|
18
27
|
if inventory_units.map(&:order_id).uniq != [@order.id]
|
|
19
28
|
raise ArgumentError, "Not all inventory units belong to this order"
|
|
@@ -42,6 +51,48 @@ class Spree::OrderCancellations
|
|
|
42
51
|
unit_cancels
|
|
43
52
|
end
|
|
44
53
|
|
|
54
|
+
# Marks inventory unit canceled. Optionally allows specifying the reason why and who is performing the action.
|
|
55
|
+
#
|
|
56
|
+
# @api public
|
|
57
|
+
#
|
|
58
|
+
# @param [InventoryUnit] inventory_unit the inventory unit to be canceled
|
|
59
|
+
# @param [String] reason the reason that you are canceling the inventory unit
|
|
60
|
+
# @param [String] whodunnit the system or person that is canceling the inventory unit
|
|
61
|
+
#
|
|
62
|
+
# @return [UnitCancel] the unit that has been canceled
|
|
63
|
+
def cancel_unit(inventory_unit, reason: Spree::UnitCancel::DEFAULT_REASON, whodunnit:nil)
|
|
64
|
+
unit_cancel = nil
|
|
65
|
+
|
|
66
|
+
Spree::OrderMutex.with_lock!(@order) do
|
|
67
|
+
unit_cancel = Spree::UnitCancel.create!(
|
|
68
|
+
inventory_unit: inventory_unit,
|
|
69
|
+
reason: reason,
|
|
70
|
+
created_by: whodunnit,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
inventory_unit.cancel!
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
unit_cancel
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Reimburses inventory units due to cancellation.
|
|
80
|
+
#
|
|
81
|
+
# @api public
|
|
82
|
+
# @param [Array<InventoryUnit>] inventory_units the inventory units to be reimbursed
|
|
83
|
+
# @return [Reimbursement] the reimbursement for inventory being canceled
|
|
84
|
+
def reimburse_units(inventory_units)
|
|
85
|
+
reimbursement = nil
|
|
86
|
+
|
|
87
|
+
Spree::OrderMutex.with_lock!(@order) do
|
|
88
|
+
return_items = inventory_units.map(&:current_or_new_return_item)
|
|
89
|
+
reimbursement = Spree::Reimbursement.new(order: @order, return_items: return_items)
|
|
90
|
+
reimbursement.return_all
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
reimbursement
|
|
94
|
+
end
|
|
95
|
+
|
|
45
96
|
private
|
|
46
97
|
|
|
47
98
|
def short_ship_unit(inventory_unit, whodunnit:nil)
|
|
@@ -65,7 +116,7 @@ class Spree::OrderCancellations
|
|
|
65
116
|
|
|
66
117
|
shipments.each do |shipment|
|
|
67
118
|
if shipment.inventory_units.all? {|iu| iu.shipped? || iu.canceled? }
|
|
68
|
-
shipment.update_attributes!(state: 'shipped', shipped_at: Time.
|
|
119
|
+
shipment.update_attributes!(state: 'shipped', shipped_at: Time.current)
|
|
69
120
|
end
|
|
70
121
|
end
|
|
71
122
|
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
# Spree::OrderMerger is responsible for taking two orders and merging them
|
|
3
|
+
# together by adding the line items from additional orders to the order
|
|
4
|
+
# that the OrderMerger is initialized with.
|
|
5
|
+
#
|
|
6
|
+
# Orders that are merged should be incomplete orders which should belong to
|
|
7
|
+
# the same user. They should also be in the same currency.
|
|
8
|
+
class OrderMerger
|
|
9
|
+
# @!attribute order
|
|
10
|
+
# @api public
|
|
11
|
+
# @return [Spree::Order] The order which items wll be merged into.
|
|
12
|
+
attr_accessor :order
|
|
13
|
+
|
|
14
|
+
delegate :updater, to: :order
|
|
15
|
+
|
|
16
|
+
# Create the OrderMerger
|
|
17
|
+
#
|
|
18
|
+
# @api public
|
|
19
|
+
# @param [Spree::Order] order The order which line items will be merged
|
|
20
|
+
# into.
|
|
21
|
+
def initialize(order)
|
|
22
|
+
@order = order
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Merge a second order in to the order the OrderMerger was initialized with
|
|
26
|
+
#
|
|
27
|
+
# The line items from `other_order` will be merged in to the `order` for
|
|
28
|
+
# this OrderMerger object. If the line items are for the same variant, it
|
|
29
|
+
# will the quantity of the incoming line item to the existing line item.
|
|
30
|
+
# Otherwise, it will assign the line item to the new order.
|
|
31
|
+
#
|
|
32
|
+
# After the orders have been merged the `other_order` will be destroyed.
|
|
33
|
+
#
|
|
34
|
+
# @example
|
|
35
|
+
# initial_order = Spree::Order.find(1)
|
|
36
|
+
# order_to_merge = Spree::Order.find(2)
|
|
37
|
+
# merger = Spree::OrderMerger.new(initial_order)
|
|
38
|
+
# merger.merge!(order_to_merge)
|
|
39
|
+
# # order_to_merge is destroyed, initial order now contains the line items
|
|
40
|
+
# # of order_to_merge
|
|
41
|
+
#
|
|
42
|
+
# @api public
|
|
43
|
+
# @param [Spree::Order] other_order An order which will be merged in to the
|
|
44
|
+
# order the OrderMerger was initialized with.
|
|
45
|
+
# @param [Spree::User] user Associate the order the user specified. If not
|
|
46
|
+
# specified, the order user association will not be changed.
|
|
47
|
+
# @return [void]
|
|
48
|
+
def merge!(other_order, user = nil)
|
|
49
|
+
other_order.line_items.each do |other_order_line_item|
|
|
50
|
+
next unless other_order_line_item.currency == order.currency
|
|
51
|
+
|
|
52
|
+
current_line_item = find_matching_line_item(other_order_line_item)
|
|
53
|
+
handle_merge(current_line_item, other_order_line_item)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
set_user(user)
|
|
57
|
+
persist_merge
|
|
58
|
+
|
|
59
|
+
# So that the destroy doesn't take out line items which may have been re-assigned
|
|
60
|
+
other_order.line_items.reload
|
|
61
|
+
other_order.destroy
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
# Retreive a matching line item from the existing order
|
|
67
|
+
#
|
|
68
|
+
# It will compare line items based on variants, and all line item
|
|
69
|
+
# comparison hooks on the order.
|
|
70
|
+
#
|
|
71
|
+
# @api private
|
|
72
|
+
# @param [Spree::LineItem] other_order_line_item The line item from
|
|
73
|
+
# `other_order` we are attempting to merge in.
|
|
74
|
+
# @return [Spree::LineItem] A matching line item from the order. nil if none
|
|
75
|
+
# exist.
|
|
76
|
+
def find_matching_line_item(other_order_line_item)
|
|
77
|
+
order.line_items.detect do |my_li|
|
|
78
|
+
my_li.variant == other_order_line_item.variant &&
|
|
79
|
+
order.line_item_comparison_hooks.all? do |hook|
|
|
80
|
+
order.send(hook, my_li, other_order_line_item.serializable_hash)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Associate the user with the order
|
|
86
|
+
#
|
|
87
|
+
# @api private
|
|
88
|
+
# @param [Spree::User] user The user to associate with the order. If nil
|
|
89
|
+
# the order user association will remain the same. If the order is already
|
|
90
|
+
# associated with a user, it will not be changed.
|
|
91
|
+
# @return [void]
|
|
92
|
+
def set_user(user)
|
|
93
|
+
order.associate_user!(user) if !order.user && user
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Merge the `other_order_line_item` into `current_line_item`
|
|
97
|
+
#
|
|
98
|
+
# If `current_line_item` is nil, the `other_order_line_item` will be
|
|
99
|
+
# re-assigned to the `order`.
|
|
100
|
+
#
|
|
101
|
+
# If the merged line item can not be saved, an error will be added to
|
|
102
|
+
# `order`.
|
|
103
|
+
#
|
|
104
|
+
# @api private
|
|
105
|
+
# @param [Spree::LineItem] current_line_item The line item to be merged
|
|
106
|
+
# into. If nil, the `other_order_line_item` will be re-assigned.
|
|
107
|
+
# @param [Spree::LineItem] other_order_line_item The line item to merge in.
|
|
108
|
+
# @return [void]
|
|
109
|
+
def handle_merge(current_line_item, other_order_line_item)
|
|
110
|
+
if current_line_item
|
|
111
|
+
current_line_item.quantity += other_order_line_item.quantity
|
|
112
|
+
handle_error(current_line_item) unless current_line_item.save
|
|
113
|
+
else
|
|
114
|
+
other_order_line_item.order_id = order.id
|
|
115
|
+
handle_error(other_order_line_item) unless other_order_line_item.save
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Handle an error from saving the `line_item`
|
|
120
|
+
#
|
|
121
|
+
# This adds errors from the line item to the `errors[:base]` of the order.
|
|
122
|
+
#
|
|
123
|
+
# @api private
|
|
124
|
+
# @param [Spree::LineItem] line_item The line item which could not be saved
|
|
125
|
+
# @return [void]
|
|
126
|
+
def handle_error(line_item)
|
|
127
|
+
order.errors[:base] << line_item.errors.full_messages
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Save the order totals after merge
|
|
131
|
+
#
|
|
132
|
+
# It triggers the order updater to ensure that item counts and totals are
|
|
133
|
+
# up to date.
|
|
134
|
+
#
|
|
135
|
+
# @api private
|
|
136
|
+
# @return [void]
|
|
137
|
+
def persist_merge
|
|
138
|
+
updater.update_item_count
|
|
139
|
+
updater.update_item_total
|
|
140
|
+
updater.persist_totals
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -19,7 +19,7 @@ class Spree::OrderShipping
|
|
|
19
19
|
stock_location: shipment.stock_location,
|
|
20
20
|
address: shipment.address,
|
|
21
21
|
shipping_method: shipment.shipping_method,
|
|
22
|
-
shipped_at: Time.
|
|
22
|
+
shipped_at: Time.current,
|
|
23
23
|
external_number: external_number,
|
|
24
24
|
# TODO: Remove the `|| shipment.tracking` once Shipment#ship! is called by
|
|
25
25
|
# OrderShipping#ship rather than vice versa
|
|
@@ -41,7 +41,7 @@ class Spree::OrderShipping
|
|
|
41
41
|
# @param tracking_number An option tracking number.
|
|
42
42
|
# @return The carton created.
|
|
43
43
|
def ship(inventory_units:, stock_location:, address:, shipping_method:,
|
|
44
|
-
shipped_at: Time.
|
|
44
|
+
shipped_at: Time.current, external_number: nil, tracking_number: nil, suppress_mailer: false)
|
|
45
45
|
|
|
46
46
|
carton = nil
|
|
47
47
|
|
|
@@ -68,7 +68,7 @@ class Spree::OrderShipping
|
|
|
68
68
|
# TODO: make OrderShipping#ship_shipment call Shipment#ship! rather than
|
|
69
69
|
# having Shipment#ship! call OrderShipping#ship_shipment. We only really
|
|
70
70
|
# need this `update_columns` for the specs, until we make that change.
|
|
71
|
-
shipment.update_columns(state: 'shipped', shipped_at: Time.
|
|
71
|
+
shipment.update_columns(state: 'shipped', shipped_at: Time.current)
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|