solidus_core 1.2.3 → 1.3.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 +4 -4
- data/Gemfile +1 -1
- data/Rakefile +1 -1
- data/app/assets/javascripts/spree.js.coffee.erb +1 -1
- data/app/helpers/spree/base_helper.rb +21 -43
- data/app/helpers/spree/orders_helper.rb +0 -1
- data/app/helpers/spree/products_helper.rb +10 -12
- data/app/helpers/spree/taxons_helper.rb +4 -4
- data/app/mailers/spree/base_mailer.rb +1 -3
- data/app/mailers/spree/carton_mailer.rb +2 -2
- data/app/mailers/spree/order_mailer.rb +2 -2
- data/app/models/concerns/spree/adjustment_source.rb +12 -16
- data/app/models/concerns/spree/calculated_adjustments.rb +17 -14
- data/app/models/concerns/spree/default_price.rb +10 -26
- data/app/models/concerns/spree/display_money.rb +1 -1
- data/app/models/concerns/spree/ordered_property_value_list.rb +10 -12
- data/app/models/concerns/spree/ransackable_attributes.rb +6 -5
- data/app/models/concerns/spree/user_address_book.rb +87 -81
- data/app/models/concerns/spree/user_methods.rb +2 -2
- data/app/models/concerns/spree/user_payment_source.rb +12 -8
- data/app/models/spree/ability.rb +2 -2
- data/app/models/spree/address.rb +37 -38
- data/app/models/spree/adjustment.rb +2 -6
- data/app/models/spree/app_configuration.rb +60 -5
- data/app/models/spree/base.rb +1 -1
- data/app/models/spree/calculator/default_tax.rb +28 -24
- data/app/models/spree/calculator/flat_percent_item_total.rb +1 -1
- data/app/models/spree/calculator/flat_rate.rb +2 -2
- data/app/models/spree/calculator/flexi_rate.rb +4 -4
- data/app/models/spree/calculator/percent_per_item.rb +8 -9
- data/app/models/spree/calculator/price_sack.rb +3 -3
- data/app/models/spree/calculator/returns/default_refund_amount.rb +11 -12
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -1
- data/app/models/spree/calculator/shipping/flat_rate.rb +2 -2
- data/app/models/spree/calculator/shipping/flexi_rate.rb +3 -3
- data/app/models/spree/calculator/shipping/per_item.rb +1 -1
- data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
- data/app/models/spree/calculator/tiered_flat_rate.rb +2 -1
- data/app/models/spree/calculator/tiered_percent.rb +2 -1
- data/app/models/spree/calculator.rb +3 -3
- data/app/models/spree/carton.rb +2 -2
- data/app/models/spree/country.rb +7 -4
- data/app/models/spree/credit_card.rb +26 -22
- data/app/models/spree/customer_return.rb +8 -7
- data/app/models/spree/exchange.rb +1 -9
- data/app/models/spree/gateway/bogus.rb +31 -31
- data/app/models/spree/gateway/bogus_simple.rb +6 -8
- data/app/models/spree/gateway.rb +9 -15
- data/app/models/spree/image.rb +3 -3
- data/app/models/spree/inventory_unit.rb +23 -23
- data/app/models/spree/item_adjustments.rb +3 -2
- data/app/models/spree/legacy_user.rb +1 -5
- data/app/models/spree/line_item.rb +95 -84
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +3 -1
- data/app/models/spree/order/checkout.rb +45 -44
- data/app/models/spree/order/payments.rb +42 -45
- data/app/models/spree/order.rb +70 -75
- data/app/models/spree/order_cancellations.rb +4 -4
- data/app/models/spree/order_capturing.rb +3 -2
- data/app/models/spree/order_contents.rb +61 -59
- data/app/models/spree/order_inventory.rb +59 -54
- data/app/models/spree/order_mutex.rb +0 -1
- data/app/models/spree/order_shipping.rb +8 -9
- data/app/models/spree/order_stock_location.rb +3 -3
- data/app/models/spree/order_update_attributes.rb +0 -2
- data/app/models/spree/order_updater.rb +11 -24
- data/app/models/spree/payment/processing.rb +26 -37
- data/app/models/spree/payment.rb +68 -71
- data/app/models/spree/payment_method/check.rb +2 -2
- data/app/models/spree/payment_method/store_credit.rb +6 -7
- data/app/models/spree/payment_method.rb +11 -8
- data/app/models/spree/preferences/configuration.rb +2 -2
- data/app/models/spree/preferences/preferable.rb +1 -1
- data/app/models/spree/preferences/preferable_class_methods.rb +1 -1
- data/app/models/spree/preferences/scoped_store.rb +6 -5
- data/app/models/spree/preferences/static_model_preferences.rb +1 -1
- data/app/models/spree/preferences/statically_configurable.rb +2 -2
- data/app/models/spree/preferences/store.rb +2 -6
- data/app/models/spree/price.rb +17 -19
- data/app/models/spree/product/scopes.rb +18 -17
- data/app/models/spree/product.rb +28 -11
- data/app/models/spree/product_property.rb +2 -0
- data/app/models/spree/product_scope/scopes.rb +22 -22
- data/app/models/spree/promotion/actions/create_adjustment.rb +3 -4
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +8 -8
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +3 -3
- data/app/models/spree/promotion/actions/free_shipping.rb +4 -4
- data/app/models/spree/promotion/rules/first_order.rb +7 -6
- data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +2 -3
- data/app/models/spree/promotion/rules/item_total.rb +5 -2
- data/app/models/spree/promotion/rules/nth_order.rb +3 -4
- data/app/models/spree/promotion/rules/one_use_per_user.rb +1 -2
- data/app/models/spree/promotion/rules/option_value.rb +1 -2
- data/app/models/spree/promotion/rules/product.rb +4 -4
- data/app/models/spree/promotion/rules/taxon.rb +5 -5
- data/app/models/spree/promotion/rules/user.rb +1 -1
- data/app/models/spree/promotion/rules/user_logged_in.rb +1 -1
- data/app/models/spree/promotion.rb +8 -8
- data/app/models/spree/promotion_action.rb +1 -1
- data/app/models/spree/promotion_builder.rb +2 -2
- data/app/models/spree/promotion_chooser.rb +1 -0
- data/app/models/spree/promotion_code/code_builder.rb +3 -3
- data/app/models/spree/promotion_handler/cart.rb +17 -16
- data/app/models/spree/promotion_handler/coupon.rb +10 -14
- data/app/models/spree/promotion_handler/page.rb +4 -4
- data/app/models/spree/promotion_rule.rb +4 -3
- data/app/models/spree/prototype.rb +0 -1
- data/app/models/spree/refund.rb +3 -3
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -3
- data/app/models/spree/reimbursement.rb +3 -5
- data/app/models/spree/reimbursement_performer.rb +0 -5
- data/app/models/spree/reimbursement_tax_calculator.rb +2 -7
- data/app/models/spree/reimbursement_type/credit.rb +1 -1
- data/app/models/spree/reimbursement_type/original_payment.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +3 -3
- data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +1 -1
- data/app/models/spree/return_authorization.rb +38 -37
- data/app/models/spree/return_item/eligibility_validator/default.rb +4 -4
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +0 -1
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +0 -1
- data/app/models/spree/return_item.rb +24 -23
- data/app/models/spree/returns_calculator.rb +1 -2
- data/app/models/spree/shipment.rb +80 -74
- data/app/models/spree/shipping_calculator.rb +4 -5
- data/app/models/spree/shipping_manifest.rb +3 -4
- data/app/models/spree/shipping_method.rb +54 -23
- data/app/models/spree/shipping_method_stock_location.rb +4 -0
- data/app/models/spree/shipping_rate.rb +24 -29
- data/app/models/spree/shipping_rate_tax.rb +41 -0
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/state_change.rb +1 -1
- data/app/models/spree/stock/availability_validator.rb +2 -2
- data/app/models/spree/stock/coordinator.rb +12 -13
- data/app/models/spree/stock/differentiator.rb +1 -0
- data/app/models/spree/stock/estimator.rb +18 -25
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
- data/app/models/spree/stock/package.rb +19 -9
- data/app/models/spree/stock/packer.rb +2 -3
- data/app/models/spree/stock/prioritizer.rb +3 -2
- data/app/models/spree/stock/quantifier.rb +2 -3
- data/app/models/spree/stock/shipping_rate_selector.rb +0 -1
- data/app/models/spree/stock/shipping_rate_sorter.rb +0 -1
- data/app/models/spree/stock/splitter/backordered.rb +0 -2
- data/app/models/spree/stock/splitter/base.rb +3 -2
- data/app/models/spree/stock/splitter/shipping_category.rb +2 -1
- data/app/models/spree/stock/splitter/weight.rb +2 -2
- data/app/models/spree/stock_item.rb +36 -37
- data/app/models/spree/stock_location.rb +17 -13
- data/app/models/spree/stock_movement.rb +1 -3
- data/app/models/spree/stock_transfer.rb +8 -8
- data/app/models/spree/store.rb +6 -0
- data/app/models/spree/store_credit.rb +24 -24
- data/app/models/spree/store_credit_category.rb +1 -2
- data/app/models/spree/tax/item_adjuster.rb +37 -0
- data/app/models/spree/tax/order_adjuster.rb +38 -0
- data/app/models/spree/tax/shipping_rate_taxer.rb +31 -0
- data/app/models/spree/tax/tax_helpers.rb +49 -0
- data/app/models/spree/tax/tax_location.rb +33 -0
- data/app/models/spree/tax_category.rb +1 -1
- data/app/models/spree/tax_rate.rb +46 -111
- data/app/models/spree/taxon.rb +36 -12
- data/app/models/spree/taxonomy.rb +10 -10
- data/app/models/spree/validations/db_maximum_length_validator.rb +0 -1
- data/app/models/spree/variant/pricer.rb +19 -0
- data/app/models/spree/variant/pricing_options.rb +31 -0
- data/app/models/spree/variant/scopes.rb +9 -9
- data/app/models/spree/variant.rb +95 -89
- data/app/models/spree/variant_property_rule.rb +1 -1
- data/app/models/spree/variant_property_rule_value.rb +2 -0
- data/app/models/spree/zone.rb +60 -24
- data/config/initializers/friendly_id.rb +1 -1
- data/config/locales/en.yml +337 -51
- data/config/routes.rb +1 -1
- data/db/default/spree/countries.rb +9 -15
- data/db/default/spree/roles.rb +1 -2
- data/db/default/spree/states.rb +7 -11
- data/db/default/spree/store_credit.rb +2 -2
- data/db/default/spree/stores.rb +2 -1
- data/db/migrate/20120831092320_spree_one_two.rb +100 -101
- data/db/migrate/20120831092359_spree_promo_one_two.rb +12 -12
- data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +1 -1
- data/db/migrate/20121009142519_add_lock_version_to_variant.rb +1 -1
- data/db/migrate/20121010142909_add_states_required_to_countries.rb +1 -1
- data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +2 -2
- data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +4 -4
- data/db/migrate/20121031162139_split_prices_from_variants.rb +8 -8
- data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +2 -2
- data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +1 -1
- data/db/migrate/20121124203911_add_position_to_taxonomies.rb +1 -1
- data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +1 -2
- data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
- data/db/migrate/20130213191427_create_default_stock.rb +12 -21
- data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +1 -1
- data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +2 -2
- data/db/migrate/20130228210442_create_shipping_method_zone.rb +1 -1
- data/db/migrate/20130301162924_create_shipping_method_categories.rb +2 -2
- data/db/migrate/20130304162240_create_spree_shipping_rates.rb +4 -4
- data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +2 -3
- data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +1 -1
- data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +1 -1
- data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +1 -1
- data/db/migrate/20130319062004_change_orders_total_precision.rb +4 -4
- data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +1 -3
- data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +2 -4
- data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +1 -3
- data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +2 -2
- data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +2 -2
- data/db/migrate/20130417120035_update_adjustment_states.rb +2 -2
- data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +3 -3
- data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +1 -1
- data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +3 -3
- data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +1 -1
- data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +2 -2
- data/db/migrate/20130807024301_upgrade_adjustments.rb +3 -3
- data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +1 -1
- data/db/migrate/20130813140619_expand_order_number_size.rb +2 -2
- data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +1 -1
- data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +1 -1
- data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +1 -1
- data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +1 -1
- data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
- data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +1 -0
- data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +1 -1
- data/db/migrate/20131118043959_add_included_to_adjustments.rb +1 -1
- data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -1
- data/db/migrate/20131211112807_create_spree_orders_promotions.rb +1 -1
- data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +1 -1
- data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +1 -0
- data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +1 -1
- data/db/migrate/20140309023735_migrate_old_preferences.rb +4 -3
- data/db/migrate/20140309033438_create_store_from_preferences.rb +2 -2
- data/db/migrate/20140410141842_add_many_missing_indexes.rb +13 -15
- data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +38 -40
- data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +4 -4
- data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +1 -1
- data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -1
- data/db/migrate/20140718195325_create_friendly_id_slugs.rb +4 -4
- data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +4 -6
- data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +1 -0
- data/db/migrate/20141217215630_update_product_slug_index.rb +2 -4
- data/db/migrate/20150112194216_add_position_to_stock_location.rb +2 -2
- data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +0 -1
- data/db/migrate/20150313201503_copy_shipped_shipments_to_cartons.rb +0 -1
- data/db/migrate/20150506181611_create_spree_store_credit_payment_method.rb +3 -3
- data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -1
- data/db/migrate/20150612205731_remove_spree_configurations.rb +2 -2
- data/db/migrate/20150619160613_create_adjustment_reason.rb +1 -1
- data/db/migrate/20150723224133_remove_unnecessary_indexes.rb +10 -2
- data/db/migrate/20150731201146_add_spree_user_addresses.rb +0 -1
- data/db/migrate/20150811211025_add_finalized_to_spree_adjustments.rb +1 -1
- data/db/migrate/20151001121454_create_spree_shipping_method_stock_locations.rb +13 -0
- data/db/migrate/20151002023248_add_foreign_key_to_shipping_method_stock_location.rb +6 -0
- data/db/migrate/20151026093607_change_return_item_pre_tax_amount_to_amount.rb +29 -0
- data/db/migrate/20160111091912_add_column_available_to_all_on_spree_shipping_method.rb +5 -0
- data/db/migrate/20160116133604_add_position_to_spree_payment_methods.rb +5 -0
- data/db/migrate/20160122182105_add_carrier_and_service_level_to_spree_shipping_methods.rb +6 -0
- data/db/migrate/20160224201413_create_spree_shipping_rate_taxes.rb +11 -0
- data/db/migrate/20160229133259_add_cart_tax_country_iso_to_spree_store.rb +5 -0
- data/db/migrate/20160301103333_remove_pre_tax_amount_on_line_item_and_shipment.rb +6 -0
- data/db/migrate/20160308000300_disallow_adjustment_finalized_nulls.rb +19 -0
- data/db/migrate/20160318145302_add_timestamps_to_prices.rb +5 -0
- data/db/migrate/20160330204846_add_missing_timestamp_columns.rb +20 -0
- data/lib/generators/spree/custom_user/custom_user_generator.rb +3 -8
- data/lib/generators/spree/dummy/dummy_generator.rb +17 -19
- data/lib/generators/spree/install/install_generator.rb +15 -15
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +1 -0
- data/lib/spree/core/controller_helpers/auth.rb +2 -4
- data/lib/spree/core/controller_helpers/common.rb +42 -43
- data/lib/spree/core/controller_helpers/order.rb +5 -9
- data/lib/spree/core/controller_helpers/payment_parameters.rb +4 -5
- data/lib/spree/core/controller_helpers/pricing.rb +27 -0
- data/lib/spree/core/controller_helpers/respond_with.rb +4 -4
- data/lib/spree/core/controller_helpers/search.rb +2 -2
- data/lib/spree/core/controller_helpers/store.rb +3 -3
- data/lib/spree/core/controller_helpers/strong_parameters.rb +4 -4
- data/lib/spree/core/current_store.rb +1 -1
- data/lib/spree/core/delegate_belongs_to.rb +19 -21
- data/lib/spree/core/engine.rb +12 -8
- data/lib/spree/core/environment/calculators.rb +0 -1
- data/lib/spree/core/environment_extension.rb +4 -4
- data/lib/spree/core/importer/order.rb +17 -22
- data/lib/spree/core/importer/product.rb +10 -9
- data/lib/spree/core/permalinks.rb +16 -16
- data/lib/spree/core/product_duplicator.rb +2 -3
- data/lib/spree/core/product_filters.rb +15 -16
- data/lib/spree/core/role_configuration.rb +2 -2
- data/lib/spree/core/search/base.rb +71 -57
- data/lib/spree/core/search/variant.rb +2 -4
- data/lib/spree/core/unreturned_item_charger.rb +1 -2
- data/lib/spree/core/validators/email.rb +2 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +2 -4
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/localized_number.rb +3 -1
- data/lib/spree/migrations.rb +27 -26
- data/lib/spree/money.rb +19 -4
- data/lib/spree/permission_sets/base.rb +1 -1
- data/lib/spree/permitted_attributes.rb +7 -7
- data/lib/spree/responder.rb +4 -5
- data/lib/spree/testing_support/authorization_helpers.rb +1 -1
- data/lib/spree/testing_support/caching.rb +8 -8
- data/lib/spree/testing_support/capybara_ext.rb +11 -13
- data/lib/spree/testing_support/common_rake.rb +4 -4
- data/lib/spree/testing_support/controller_requests.rb +1 -1
- data/lib/spree/testing_support/extension_rake.rb +1 -2
- data/lib/spree/testing_support/factories/address_factory.rb +14 -3
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
- data/lib/spree/testing_support/factories/credit_card_factory.rb +4 -0
- data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -6
- data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +10 -11
- data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +0 -1
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +5 -2
- data/lib/spree/testing_support/factories/state_factory.rb +17 -7
- data/lib/spree/testing_support/factories/stock_location_factory.rb +4 -4
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -2
- data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -2
- data/lib/spree/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_factory.rb +1 -2
- data/lib/spree/testing_support/factories/zone_factory.rb +2 -1
- data/lib/spree/testing_support/i18n.rb +4 -5
- data/lib/spree/testing_support/order_walkthrough.rb +8 -9
- data/lib/spree/testing_support/preferences.rb +1 -1
- data/lib/spree/testing_support/sequences.rb +5 -4
- data/lib/tasks/core.rake +15 -19
- data/lib/tasks/email.rake +3 -3
- data/lib/tasks/exchanges.rake +12 -14
- data/lib/tasks/migrations/assure_store_on_orders.rake +38 -0
- data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +2 -2
- data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +1 -11
- data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +17 -0
- data/lib/tasks/migrations/migrate_user_addresses.rake +1 -1
- data/lib/tasks/order_capturing.rake +1 -1
- data/lib/tasks/upgrade.rake +11 -0
- data/script/rails +0 -1
- data/solidus_core.gemspec +6 -8
- data/spec/helpers/base_helper_spec.rb +15 -18
- data/spec/helpers/order_helper_spec.rb +2 -2
- data/spec/helpers/products_helper_spec.rb +43 -51
- data/spec/helpers/taxons_helper_spec.rb +1 -1
- data/spec/lib/i18n_spec.rb +11 -11
- data/spec/lib/search/base_spec.rb +12 -14
- data/spec/lib/search/variant_spec.rb +1 -0
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +1 -7
- data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +26 -28
- data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +63 -0
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +4 -2
- data/spec/lib/spree/core/delegate_belongs_to_spec.rb +1 -1
- data/spec/lib/spree/core/importer/order_spec.rb +95 -90
- data/spec/lib/spree/core/role_configuration_spec.rb +16 -16
- data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +35 -0
- data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +10 -1
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -1
- data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +6 -1
- data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +37 -1
- data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +2 -2
- data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +1 -1
- data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +1 -2
- data/spec/lib/spree/core/testing_support/preferences_spec.rb +26 -0
- data/spec/lib/spree/core/unreturned_item_charger_spec.rb +7 -9
- data/spec/lib/spree/core/validators/email_spec.rb +8 -6
- data/spec/lib/spree/localized_number_spec.rb +1 -3
- data/spec/lib/spree/migrations_spec.rb +2 -2
- data/spec/lib/spree/money_spec.rb +75 -6
- data/spec/lib/tasks/exchanges_spec.rb +2 -12
- data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +0 -1
- data/spec/lib/tasks/order_capturing_spec.rb +1 -1
- data/spec/mailers/carton_mailer_spec.rb +3 -3
- data/spec/mailers/order_mailer_spec.rb +9 -11
- data/spec/mailers/reimbursement_mailer_spec.rb +2 -2
- data/spec/mailers/test_mailer_spec.rb +1 -1
- data/spec/models/spree/ability_spec.rb +4 -7
- data/spec/models/spree/address_spec.rb +32 -35
- data/spec/models/spree/adjustment_reason_spec.rb +0 -2
- data/spec/models/spree/adjustment_spec.rb +2 -2
- data/spec/models/spree/app_configuration_spec.rb +33 -3
- data/spec/models/spree/asset_spec.rb +1 -2
- data/spec/models/spree/calculator/default_tax_spec.rb +141 -52
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +1 -1
- data/spec/models/spree/calculator/flexi_rate_spec.rb +6 -6
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +1 -1
- data/spec/models/spree/calculator/price_sack_spec.rb +2 -2
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +9 -11
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +4 -4
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +2 -2
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +6 -7
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +2 -2
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +2 -2
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +1 -2
- data/spec/models/spree/calculator/tiered_percent_spec.rb +1 -1
- data/spec/models/spree/calculator_spec.rb +3 -8
- data/spec/models/spree/carton_spec.rb +1 -1
- data/spec/models/spree/classification_spec.rb +1 -1
- data/spec/models/spree/concerns/display_money_spec.rb +0 -1
- data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +26 -1
- data/spec/models/spree/concerns/user_address_book_spec.rb +19 -12
- data/spec/models/spree/concerns/user_methods_spec.rb +1 -1
- data/spec/models/spree/country_spec.rb +52 -0
- data/spec/models/spree/credit_card_spec.rb +17 -12
- data/spec/models/spree/customer_return_spec.rb +27 -23
- data/spec/models/spree/exchange_spec.rb +2 -7
- data/spec/models/spree/gateway/bogus_simple.rb +2 -4
- data/spec/models/spree/gateway/bogus_spec.rb +4 -2
- data/spec/models/spree/gateway_spec.rb +8 -3
- data/spec/models/spree/inventory_unit_spec.rb +13 -14
- data/spec/models/spree/item_adjustments_spec.rb +36 -40
- data/spec/models/spree/line_item_spec.rb +92 -48
- data/spec/models/spree/option_type_spec.rb +1 -1
- data/spec/models/spree/option_value_spec.rb +1 -1
- data/spec/models/spree/order/address_spec.rb +1 -1
- data/spec/models/spree/order/callbacks_spec.rb +3 -3
- data/spec/models/spree/order/checkout_spec.rb +55 -48
- data/spec/models/spree/order/finalizing_spec.rb +8 -9
- data/spec/models/spree/order/payment_spec.rb +20 -20
- data/spec/models/spree/order/risk_assessment_spec.rb +1 -1
- data/spec/models/spree/order/state_machine_spec.rb +40 -131
- data/spec/models/spree/order/tax_spec.rb +11 -12
- data/spec/models/spree/order/totals_spec.rb +3 -3
- data/spec/models/spree/order/updating_spec.rb +2 -2
- data/spec/models/spree/order/validations_spec.rb +2 -2
- data/spec/models/spree/order_cancellations_spec.rb +1 -1
- data/spec/models/spree/order_capturing_spec.rb +1 -1
- data/spec/models/spree/order_contents_spec.rb +10 -11
- data/spec/models/spree/order_inventory_spec.rb +11 -11
- data/spec/models/spree/order_merger_spec.rb +1 -0
- data/spec/models/spree/order_shipping_spec.rb +8 -10
- data/spec/models/spree/order_spec.rb +137 -124
- data/spec/models/spree/order_stock_location_spec.rb +2 -2
- data/spec/models/spree/order_update_attributes_spec.rb +6 -10
- data/spec/models/spree/order_updater_spec.rb +4 -8
- data/spec/models/spree/payment_create_spec.rb +11 -12
- data/spec/models/spree/payment_method/store_credit_spec.rb +10 -6
- data/spec/models/spree/payment_method_spec.rb +4 -5
- data/spec/models/spree/payment_spec.rb +61 -69
- data/spec/models/spree/permission_sets/base_spec.rb +1 -1
- data/spec/models/spree/permission_sets/configuration_display.rb +0 -1
- data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -1
- data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/order_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/order_management_spec.rb +0 -1
- data/spec/models/spree/permission_sets/product_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/product_management_spec.rb +0 -1
- data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -1
- data/spec/models/spree/permission_sets/report_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -1
- data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +6 -6
- data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -1
- data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -2
- data/spec/models/spree/permission_sets/user_display_spec.rb +0 -1
- data/spec/models/spree/permission_sets/user_management_spec.rb +0 -1
- data/spec/models/spree/preference_spec.rb +1 -4
- data/spec/models/spree/preferences/configuration_spec.rb +2 -7
- data/spec/models/spree/preferences/preferable_spec.rb +13 -24
- data/spec/models/spree/preferences/scoped_store_spec.rb +1 -1
- data/spec/models/spree/preferences/static_model_preferences_spec.rb +5 -6
- data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -6
- data/spec/models/spree/preferences/store_spec.rb +2 -3
- data/spec/models/spree/price_spec.rb +6 -6
- data/spec/models/spree/product/scopes_spec.rb +20 -20
- data/spec/models/spree/product_duplicator_spec.rb +16 -29
- data/spec/models/spree/product_filter_spec.rb +2 -2
- data/spec/models/spree/product_spec.rb +53 -20
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +10 -12
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +4 -4
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +9 -9
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +1 -1
- data/spec/models/spree/promotion/rules/first_order_spec.rb +10 -10
- data/spec/models/spree/promotion/rules/item_total_spec.rb +63 -19
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +1 -1
- data/spec/models/spree/promotion/rules/product_spec.rb +8 -8
- data/spec/models/spree/promotion/rules/taxon_spec.rb +4 -4
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +3 -4
- data/spec/models/spree/promotion/rules/user_spec.rb +7 -7
- data/spec/models/spree/promotion_builder_spec.rb +10 -8
- data/spec/models/spree/promotion_category_spec.rb +1 -1
- data/spec/models/spree/promotion_code/code_builder_spec.rb +1 -3
- data/spec/models/spree/promotion_code_spec.rb +8 -7
- data/spec/models/spree/promotion_handler/cart_spec.rb +1 -1
- data/spec/models/spree/promotion_handler/coupon_spec.rb +28 -28
- data/spec/models/spree/promotion_handler/page_spec.rb +6 -7
- data/spec/models/spree/promotion_rule_spec.rb +1 -2
- data/spec/models/spree/promotion_spec.rb +25 -21
- data/spec/models/spree/refund_spec.rb +8 -11
- data/spec/models/spree/reimbursement/credit_spec.rb +2 -2
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +6 -4
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +1 -1
- data/spec/models/spree/reimbursement_performer_spec.rb +2 -2
- data/spec/models/spree/reimbursement_spec.rb +9 -11
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +4 -5
- data/spec/models/spree/reimbursement_type/credit_spec.rb +2 -2
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +2 -3
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +4 -4
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +1 -1
- data/spec/models/spree/return_authorization_spec.rb +18 -21
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +7 -7
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -1
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -1
- 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 +1 -1
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +1 -2
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +3 -5
- data/spec/models/spree/return_item_spec.rb +29 -31
- data/spec/models/spree/returns_calculator_spec.rb +1 -1
- data/spec/models/spree/shipment_spec.rb +59 -43
- data/spec/models/spree/shipping_calculator_spec.rb +3 -3
- data/spec/models/spree/shipping_manifest_spec.rb +8 -7
- data/spec/models/spree/shipping_method_spec.rb +149 -24
- data/spec/models/spree/shipping_rate_spec.rb +116 -76
- data/spec/models/spree/shipping_rate_tax_spec.rb +83 -0
- data/spec/models/spree/state_spec.rb +2 -2
- data/spec/models/spree/stock/availability_validator_spec.rb +4 -4
- data/spec/models/spree/stock/coordinator_spec.rb +33 -49
- data/spec/models/spree/stock/differentiator_spec.rb +1 -1
- data/spec/models/spree/stock/estimator_spec.rb +83 -54
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +1 -3
- data/spec/models/spree/stock/package_spec.rb +27 -10
- data/spec/models/spree/stock/packer_spec.rb +4 -4
- data/spec/models/spree/stock/prioritizer_spec.rb +1 -1
- data/spec/models/spree/stock/quantifier_spec.rb +2 -6
- data/spec/models/spree/stock/splitter/backordered_spec.rb +1 -1
- data/spec/models/spree/stock/splitter/base_spec.rb +1 -2
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +1 -3
- data/spec/models/spree/stock/splitter/weight_spec.rb +3 -3
- data/spec/models/spree/stock_item_spec.rb +16 -16
- data/spec/models/spree/stock_location_spec.rb +6 -8
- data/spec/models/spree/stock_movement_spec.rb +1 -1
- data/spec/models/spree/stock_transfer_spec.rb +1 -3
- data/spec/models/spree/store_credit_category_spec.rb +1 -1
- data/spec/models/spree/store_credit_event_spec.rb +3 -5
- data/spec/models/spree/store_credit_spec.rb +24 -23
- data/spec/models/spree/store_spec.rb +21 -2
- data/spec/models/spree/tax/item_adjuster_spec.rb +74 -0
- data/spec/models/spree/tax/order_adjuster_spec.rb +49 -0
- data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +50 -0
- data/spec/models/spree/tax/tax_location_spec.rb +68 -0
- data/spec/models/spree/tax/taxation_integration_spec.rb +787 -0
- data/spec/models/spree/tax_category_spec.rb +2 -2
- data/spec/models/spree/tax_rate_spec.rb +185 -536
- data/spec/models/spree/taxon_spec.rb +69 -5
- data/spec/models/spree/taxonomy_spec.rb +2 -3
- data/spec/models/spree/tracker_spec.rb +1 -1
- data/spec/models/spree/transfer_item_spec.rb +1 -1
- data/spec/models/spree/unit_cancel_spec.rb +9 -14
- data/spec/models/spree/user_spec.rb +19 -24
- data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +1 -1
- data/spec/models/spree/variant/pricer_spec.rb +48 -0
- data/spec/models/spree/variant/pricing_options_spec.rb +106 -0
- data/spec/models/spree/variant/scopes_spec.rb +31 -8
- data/spec/models/spree/variant_property_rule_spec.rb +1 -1
- data/spec/models/spree/variant_spec.rb +166 -52
- data/spec/models/spree/zone_spec.rb +135 -10
- data/spec/support/big_decimal.rb +1 -1
- data/spec/support/concerns/working_factories.rb +2 -2
- data/spec/support/dummy_ability.rb +0 -1
- metadata +55 -44
- data/lib/generators/spree/dummy/templates/initializers/devise.rb +0 -3
- data/lib/spree/migration_helpers.rb +0 -19
- data/vendor/assets/stylesheets/skeleton.css +0 -242
@@ -1,6 +1,6 @@
|
|
1
1
|
module Spree
|
2
2
|
class OrderContents
|
3
|
-
attr_accessor :order
|
3
|
+
attr_accessor :order
|
4
4
|
|
5
5
|
def initialize(order)
|
6
6
|
@order = order
|
@@ -24,7 +24,7 @@ module Spree
|
|
24
24
|
def update_cart(params)
|
25
25
|
if order.update_attributes(params)
|
26
26
|
unless order.completed?
|
27
|
-
order.line_items = order.line_items.select {|li| li.quantity > 0 }
|
27
|
+
order.line_items = order.line_items.select { |li| li.quantity > 0 }
|
28
28
|
# Update totals, then check if the order is eligible for any cart promotions.
|
29
29
|
# If we do not update first, then the item total will be wrong and ItemTotal
|
30
30
|
# promotion rules would not be triggered.
|
@@ -51,80 +51,82 @@ module Spree
|
|
51
51
|
order.update_attributes!(
|
52
52
|
approver: user,
|
53
53
|
approver_name: name,
|
54
|
-
approved_at: Time.current
|
54
|
+
approved_at: Time.current
|
55
55
|
)
|
56
56
|
end
|
57
57
|
|
58
|
-
|
59
58
|
private
|
60
|
-
def after_add_or_remove(line_item, options = {})
|
61
|
-
reload_totals
|
62
|
-
shipment = options[:shipment]
|
63
|
-
shipment.present? ? shipment.update_amounts : order.ensure_updated_shipments
|
64
|
-
PromotionHandler::Cart.new(order, line_item).activate
|
65
|
-
ItemAdjustments.new(line_item).update
|
66
|
-
reload_totals
|
67
|
-
line_item
|
68
|
-
end
|
69
59
|
|
70
|
-
|
71
|
-
|
72
|
-
|
60
|
+
def after_add_or_remove(line_item, options = {})
|
61
|
+
reload_totals
|
62
|
+
shipment = options[:shipment]
|
63
|
+
shipment.present? ? shipment.update_amounts : order.ensure_updated_shipments
|
64
|
+
PromotionHandler::Cart.new(order, line_item).activate
|
65
|
+
ItemAdjustments.new(line_item).update
|
66
|
+
reload_totals
|
67
|
+
line_item
|
68
|
+
end
|
73
69
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end
|
70
|
+
def order_updater
|
71
|
+
@updater ||= OrderUpdater.new(order)
|
72
|
+
end
|
78
73
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
74
|
+
def reload_totals
|
75
|
+
order_updater.update
|
76
|
+
order.reload
|
77
|
+
end
|
78
|
+
|
79
|
+
def add_to_line_item(variant, quantity, options = {})
|
80
|
+
line_item = grab_line_item_by_variant(variant, false, options)
|
81
|
+
|
82
|
+
line_item ||= order.line_items.new(
|
83
|
+
quantity: 0,
|
84
|
+
variant: variant,
|
85
|
+
currency: order.currency
|
86
|
+
)
|
87
|
+
|
88
|
+
line_item.quantity += quantity.to_i
|
89
|
+
line_item.options = ActionController::Parameters.new(options).permit(PermittedAttributes.line_item_attributes)
|
90
|
+
|
91
|
+
if line_item.new_record?
|
92
|
+
create_order_stock_locations(line_item, options[:stock_location_quantities])
|
96
93
|
end
|
97
94
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
95
|
+
line_item.target_shipment = options[:shipment]
|
96
|
+
line_item.save!
|
97
|
+
line_item
|
98
|
+
end
|
102
99
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
end
|
100
|
+
def remove_from_line_item(variant, quantity, options = {})
|
101
|
+
line_item = grab_line_item_by_variant(variant, true, options)
|
102
|
+
line_item.quantity -= quantity
|
103
|
+
line_item.target_shipment = options[:shipment]
|
108
104
|
|
109
|
-
|
105
|
+
if line_item.quantity == 0
|
106
|
+
line_item.destroy
|
107
|
+
else
|
108
|
+
line_item.save!
|
110
109
|
end
|
111
110
|
|
112
|
-
|
113
|
-
|
111
|
+
line_item
|
112
|
+
end
|
114
113
|
|
115
|
-
|
116
|
-
|
117
|
-
end
|
114
|
+
def grab_line_item_by_variant(variant, raise_error = false, options = {})
|
115
|
+
line_item = order.find_line_item_by_variant(variant, options)
|
118
116
|
|
119
|
-
|
117
|
+
if !line_item.present? && raise_error
|
118
|
+
raise ActiveRecord::RecordNotFound, "Line item not found for variant #{variant.sku}"
|
120
119
|
end
|
121
120
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
121
|
+
line_item
|
122
|
+
end
|
123
|
+
|
124
|
+
def create_order_stock_locations(line_item, stock_location_quantities)
|
125
|
+
return unless stock_location_quantities.present?
|
126
|
+
order = line_item.order
|
127
|
+
stock_location_quantities.each do |stock_location_id, quantity|
|
128
|
+
order.order_stock_locations.create!(stock_location_id: stock_location_id, quantity: quantity, variant_id: line_item.variant_id) unless quantity.to_i.zero?
|
128
129
|
end
|
130
|
+
end
|
129
131
|
end
|
130
132
|
end
|
@@ -34,75 +34,80 @@ module Spree
|
|
34
34
|
end
|
35
35
|
|
36
36
|
private
|
37
|
-
def remove(item_units, shipment = nil)
|
38
|
-
quantity = item_units.size - line_item.quantity
|
39
|
-
|
40
|
-
if shipment.present?
|
41
|
-
remove_from_shipment(shipment, quantity)
|
42
|
-
else
|
43
|
-
order.shipments.each do |shipment|
|
44
|
-
break if quantity == 0
|
45
|
-
quantity -= remove_from_shipment(shipment, quantity)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
37
|
|
50
|
-
|
51
|
-
|
52
|
-
# first unshipped that already includes this variant
|
53
|
-
# first unshipped that's leaving from a stock_location that stocks this variant
|
54
|
-
def determine_target_shipment
|
55
|
-
shipment = order.shipments.detect do |shipment|
|
56
|
-
shipment.ready_or_pending? && shipment.include?(variant)
|
57
|
-
end
|
38
|
+
def remove(item_units, shipment = nil)
|
39
|
+
quantity = item_units.size - line_item.quantity
|
58
40
|
|
59
|
-
|
60
|
-
|
61
|
-
|
41
|
+
if shipment.present?
|
42
|
+
remove_from_shipment(shipment, quantity)
|
43
|
+
else
|
44
|
+
remove_from_any_shipment(quantity)
|
62
45
|
end
|
46
|
+
end
|
63
47
|
|
64
|
-
|
65
|
-
|
66
|
-
|
48
|
+
# Returns either one of the shipment:
|
49
|
+
#
|
50
|
+
# first unshipped that already includes this variant
|
51
|
+
# first unshipped that's leaving from a stock_location that stocks this variant
|
52
|
+
def determine_target_shipment
|
53
|
+
potential_shipments = order.shipments.select(&:ready_or_pending?)
|
54
|
+
|
55
|
+
potential_shipments.detect do |shipment|
|
56
|
+
shipment.include?(variant)
|
57
|
+
end || potential_shipments.detect do |shipment|
|
58
|
+
variant.stock_location_ids.include?(shipment.stock_location_id)
|
59
|
+
end
|
60
|
+
end
|
67
61
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
quantity.times { shipment.set_up_inventory('on_hand', variant, order, line_item) }
|
72
|
-
end
|
62
|
+
def add_to_shipment(shipment, quantity)
|
63
|
+
if variant.should_track_inventory?
|
64
|
+
on_hand, back_order = shipment.stock_location.fill_status(variant, quantity)
|
73
65
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
66
|
+
on_hand.times { shipment.set_up_inventory('on_hand', variant, order, line_item) }
|
67
|
+
back_order.times { shipment.set_up_inventory('backordered', variant, order, line_item) }
|
68
|
+
else
|
69
|
+
quantity.times { shipment.set_up_inventory('on_hand', variant, order, line_item) }
|
70
|
+
end
|
78
71
|
|
79
|
-
|
72
|
+
# adding to this shipment, and removing from stock_location
|
73
|
+
if order.completed?
|
74
|
+
shipment.stock_location.unstock(variant, quantity, shipment)
|
80
75
|
end
|
81
76
|
|
82
|
-
|
83
|
-
|
77
|
+
quantity
|
78
|
+
end
|
84
79
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
80
|
+
def remove_from_any_shipment(quantity)
|
81
|
+
order.shipments.each do |shipment|
|
82
|
+
break if quantity == 0
|
83
|
+
quantity -= remove_from_shipment(shipment, quantity)
|
84
|
+
end
|
85
|
+
end
|
89
86
|
|
90
|
-
|
87
|
+
def remove_from_shipment(shipment, quantity)
|
88
|
+
return 0 if quantity == 0 || shipment.shipped?
|
91
89
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
end
|
90
|
+
shipment_units = shipment.inventory_units_for_item(line_item, variant).reject do |variant_unit|
|
91
|
+
# TODO: exclude all 'shipped' states
|
92
|
+
variant_unit.state == 'shipped'
|
93
|
+
end.sort_by(&:state)
|
97
94
|
|
98
|
-
|
95
|
+
removed_quantity = 0
|
99
96
|
|
100
|
-
|
101
|
-
if
|
102
|
-
|
103
|
-
|
97
|
+
shipment_units.each do |inventory_unit|
|
98
|
+
break if removed_quantity == quantity
|
99
|
+
inventory_unit.destroy
|
100
|
+
removed_quantity += 1
|
101
|
+
end
|
102
|
+
|
103
|
+
shipment.destroy if shipment.inventory_units.count == 0
|
104
104
|
|
105
|
-
|
105
|
+
# removing this from shipment, and adding to stock_location
|
106
|
+
if order.completed?
|
107
|
+
shipment.stock_location.restock variant, removed_quantity, shipment
|
106
108
|
end
|
109
|
+
|
110
|
+
removed_quantity
|
111
|
+
end
|
107
112
|
end
|
108
113
|
end
|
@@ -24,7 +24,7 @@ class Spree::OrderShipping
|
|
24
24
|
# TODO: Remove the `|| shipment.tracking` once Shipment#ship! is called by
|
25
25
|
# OrderShipping#ship rather than vice versa
|
26
26
|
tracking_number: tracking_number || shipment.tracking,
|
27
|
-
suppress_mailer: suppress_mailer
|
27
|
+
suppress_mailer: suppress_mailer
|
28
28
|
)
|
29
29
|
end
|
30
30
|
|
@@ -46,7 +46,7 @@ class Spree::OrderShipping
|
|
46
46
|
carton = nil
|
47
47
|
|
48
48
|
Spree::InventoryUnit.transaction do
|
49
|
-
inventory_units.each
|
49
|
+
inventory_units.each(&:ship!)
|
50
50
|
|
51
51
|
carton = Spree::Carton.create!(
|
52
52
|
stock_location: stock_location,
|
@@ -55,7 +55,7 @@ class Spree::OrderShipping
|
|
55
55
|
inventory_units: inventory_units,
|
56
56
|
shipped_at: shipped_at,
|
57
57
|
external_number: external_number,
|
58
|
-
tracking: tracking_number
|
58
|
+
tracking: tracking_number
|
59
59
|
)
|
60
60
|
end
|
61
61
|
|
@@ -64,12 +64,11 @@ class Spree::OrderShipping
|
|
64
64
|
# TODO: Remove tracking numbers from shipments.
|
65
65
|
shipment.update_attributes!(tracking: tracking_number)
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
67
|
+
next unless shipment.inventory_units.reload.all? { |iu| iu.shipped? || iu.canceled? }
|
68
|
+
# TODO: make OrderShipping#ship_shipment call Shipment#ship! rather than
|
69
|
+
# having Shipment#ship! call OrderShipping#ship_shipment. We only really
|
70
|
+
# need this `update_columns` for the specs, until we make that change.
|
71
|
+
shipment.update_columns(state: 'shipped', shipped_at: Time.current)
|
73
72
|
end
|
74
73
|
|
75
74
|
send_shipment_emails(carton) if stock_location.fulfillable? && !suppress_mailer # e.g. digital gift cards that aren't actually shipped
|
@@ -5,11 +5,11 @@ module Spree
|
|
5
5
|
belongs_to :order, class_name: "Spree::Order"
|
6
6
|
|
7
7
|
def self.fulfill_for_order_with_stock_location(order, stock_location)
|
8
|
-
|
8
|
+
where(order_id: order.id, stock_location_id: stock_location.id).each(&:fulfill_shipment!)
|
9
9
|
end
|
10
10
|
|
11
11
|
def fulfill_shipment!
|
12
|
-
|
12
|
+
update_attributes!(shipment_fulfilled: true)
|
13
13
|
end
|
14
14
|
end
|
15
|
-
end
|
15
|
+
end
|
@@ -14,8 +14,6 @@ module Spree
|
|
14
14
|
# Assign the attributes to the order and save the order
|
15
15
|
# @return true if saved, otherwise false and errors will be set on the order
|
16
16
|
def apply
|
17
|
-
order.validate_payments_attributes(@payments_attributes)
|
18
|
-
|
19
17
|
assign_order_attributes
|
20
18
|
assign_payments_attributes
|
21
19
|
|
@@ -48,7 +48,6 @@ module Spree
|
|
48
48
|
update_adjustment_total
|
49
49
|
end
|
50
50
|
|
51
|
-
|
52
51
|
# give each of the shipments a chance to update themselves
|
53
52
|
def update_shipments
|
54
53
|
shipments.each do |shipment|
|
@@ -60,7 +59,7 @@ module Spree
|
|
60
59
|
end
|
61
60
|
|
62
61
|
def update_payment_total
|
63
|
-
order.payment_total = payments.completed.includes(:refunds).
|
62
|
+
order.payment_total = payments.completed.includes(:refunds).map { |payment| payment.amount - payment.refunds.sum(:amount) }.sum
|
64
63
|
end
|
65
64
|
|
66
65
|
def update_shipment_total
|
@@ -75,14 +74,14 @@ module Spree
|
|
75
74
|
def update_adjustment_total
|
76
75
|
recalculate_adjustments
|
77
76
|
order.adjustment_total = line_items.sum(:adjustment_total) +
|
78
|
-
|
79
|
-
|
77
|
+
shipments.sum(:adjustment_total) +
|
78
|
+
adjustments.eligible.sum(:amount)
|
80
79
|
order.included_tax_total = line_items.sum(:included_tax_total) + shipments.sum(:included_tax_total)
|
81
80
|
order.additional_tax_total = line_items.sum(:additional_tax_total) + shipments.sum(:additional_tax_total)
|
82
81
|
|
83
82
|
order.promo_total = line_items.sum(:promo_total) +
|
84
|
-
|
85
|
-
|
83
|
+
shipments.sum(:promo_total) +
|
84
|
+
adjustments.promotion.eligible.sum(:amount)
|
86
85
|
|
87
86
|
update_order_total
|
88
87
|
end
|
@@ -97,20 +96,7 @@ module Spree
|
|
97
96
|
end
|
98
97
|
|
99
98
|
def persist_totals
|
100
|
-
order.
|
101
|
-
payment_state: order.payment_state,
|
102
|
-
shipment_state: order.shipment_state,
|
103
|
-
item_total: order.item_total,
|
104
|
-
item_count: order.item_count,
|
105
|
-
adjustment_total: order.adjustment_total,
|
106
|
-
included_tax_total: order.included_tax_total,
|
107
|
-
additional_tax_total: order.additional_tax_total,
|
108
|
-
payment_total: order.payment_total,
|
109
|
-
shipment_total: order.shipment_total,
|
110
|
-
promo_total: order.promo_total,
|
111
|
-
total: order.total,
|
112
|
-
updated_at: Time.current,
|
113
|
-
)
|
99
|
+
order.save!(validate: false)
|
114
100
|
end
|
115
101
|
|
116
102
|
# Updates the +shipment_state+ attribute according to the following logic:
|
@@ -135,7 +121,7 @@ module Spree
|
|
135
121
|
else
|
136
122
|
# will return nil if no shipments are found
|
137
123
|
order.shipment_state = shipment_states.first
|
138
|
-
# TODO inventory unit states?
|
124
|
+
# TODO: inventory unit states?
|
139
125
|
# if order.shipment_state && order.inventory_units.where(:shipment_id => nil).exists?
|
140
126
|
# shipments exist but there are unassigned inventory units
|
141
127
|
# order.shipment_state = 'partial'
|
@@ -171,8 +157,9 @@ module Spree
|
|
171
157
|
end
|
172
158
|
|
173
159
|
private
|
174
|
-
|
175
|
-
|
176
|
-
|
160
|
+
|
161
|
+
def round_money(n)
|
162
|
+
(n * 100).round / 100.0
|
163
|
+
end
|
177
164
|
end
|
178
165
|
end
|
@@ -25,12 +25,10 @@ module Spree
|
|
25
25
|
|
26
26
|
if payment_method.auto_capture?
|
27
27
|
purchase!
|
28
|
+
elsif pending?
|
29
|
+
# do nothing. already authorized.
|
28
30
|
else
|
29
|
-
|
30
|
-
# do nothing. already authorized.
|
31
|
-
else
|
32
|
-
authorize!
|
33
|
-
end
|
31
|
+
authorize!
|
34
32
|
end
|
35
33
|
end
|
36
34
|
|
@@ -67,14 +65,13 @@ module Spree
|
|
67
65
|
def void_transaction!
|
68
66
|
return true if void?
|
69
67
|
protect_from_connection_error do
|
70
|
-
|
71
68
|
if payment_method.payment_profiles_supported?
|
72
69
|
# Gateways supporting payment profiles will need access to credit card object because this stores the payment profile information
|
73
70
|
# so supply the authorization itself as well as the credit card, rather than just the authorization code
|
74
|
-
response = payment_method.void(
|
71
|
+
response = payment_method.void(response_code, source, gateway_options)
|
75
72
|
else
|
76
73
|
# Standard ActiveMerchant void usage
|
77
|
-
response = payment_method.void(
|
74
|
+
response = payment_method.void(response_code, gateway_options)
|
78
75
|
end
|
79
76
|
|
80
77
|
handle_void_response(response)
|
@@ -88,29 +85,27 @@ module Spree
|
|
88
85
|
|
89
86
|
def gateway_options
|
90
87
|
order.reload
|
91
|
-
options = { :
|
92
|
-
:
|
93
|
-
:
|
94
|
-
:
|
88
|
+
options = { email: order.email,
|
89
|
+
customer: order.email,
|
90
|
+
customer_id: order.user_id,
|
91
|
+
ip: order.last_ip_address,
|
95
92
|
# Need to pass in a unique identifier here to make some
|
96
93
|
# payment gateways happy.
|
97
94
|
#
|
98
95
|
# For more information, please see Spree::Payment#set_unique_identifier
|
99
|
-
:
|
96
|
+
order_id: gateway_order_id }
|
100
97
|
|
101
|
-
options
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
98
|
+
options[:shipping] = order.ship_total * 100
|
99
|
+
options[:tax] = order.additional_tax_total * 100
|
100
|
+
options[:subtotal] = order.item_total * 100
|
101
|
+
options[:discount] = order.promo_total * 100
|
102
|
+
options[:currency] = currency
|
106
103
|
|
107
104
|
bill_address = source.try(:address)
|
108
105
|
bill_address ||= order.bill_address
|
109
106
|
|
110
|
-
options.
|
111
|
-
|
112
|
-
shipping_address: order.ship_address.try!(:active_merchant_hash),
|
113
|
-
)
|
107
|
+
options[:billing_address] = bill_address.try!(:active_merchant_hash)
|
108
|
+
options[:shipping_address] = order.ship_address.try!(:active_merchant_hash)
|
114
109
|
|
115
110
|
options
|
116
111
|
end
|
@@ -124,12 +119,12 @@ module Spree
|
|
124
119
|
|
125
120
|
def process_purchase
|
126
121
|
started_processing!
|
127
|
-
|
122
|
+
gateway_action(source, :purchase, :complete)
|
128
123
|
# This won't be called if gateway_action raises a GatewayError
|
129
124
|
capture_events.create!(amount: amount)
|
130
125
|
end
|
131
126
|
|
132
|
-
def handle_payment_preconditions(&
|
127
|
+
def handle_payment_preconditions(&_block)
|
133
128
|
unless block_given?
|
134
129
|
raise ArgumentError.new("handle_payment_preconditions must be called with a block")
|
135
130
|
end
|
@@ -139,7 +134,7 @@ module Spree
|
|
139
134
|
|
140
135
|
if source
|
141
136
|
if !processing?
|
142
|
-
if payment_method.supports?(source)
|
137
|
+
if payment_method.supports?(source)
|
143
138
|
yield
|
144
139
|
else
|
145
140
|
invalidate!
|
@@ -173,9 +168,9 @@ module Spree
|
|
173
168
|
self.cvv_response_message = response.cvv_result['message']
|
174
169
|
end
|
175
170
|
end
|
176
|
-
|
171
|
+
send("#{success_state}!")
|
177
172
|
else
|
178
|
-
|
173
|
+
send(failure_state)
|
179
174
|
gateway_error(response)
|
180
175
|
end
|
181
176
|
end
|
@@ -185,22 +180,20 @@ module Spree
|
|
185
180
|
|
186
181
|
if response.success?
|
187
182
|
self.response_code = response.authorization
|
188
|
-
|
183
|
+
void
|
189
184
|
else
|
190
185
|
gateway_error(response)
|
191
186
|
end
|
192
187
|
end
|
193
188
|
|
194
189
|
def record_response(response)
|
195
|
-
log_entries.create!(:
|
190
|
+
log_entries.create!(details: response.to_yaml)
|
196
191
|
end
|
197
192
|
|
198
193
|
def protect_from_connection_error
|
199
|
-
begin
|
200
194
|
yield
|
201
|
-
|
195
|
+
rescue ActiveMerchant::ConnectionError => e
|
202
196
|
gateway_error(e)
|
203
|
-
end
|
204
197
|
end
|
205
198
|
|
206
199
|
def gateway_error(error)
|
@@ -218,11 +211,7 @@ module Spree
|
|
218
211
|
|
219
212
|
# The unique identifier to be passed in to the payment gateway
|
220
213
|
def gateway_order_id
|
221
|
-
"#{order.number}-#{
|
222
|
-
end
|
223
|
-
|
224
|
-
def token_based?
|
225
|
-
source.gateway_customer_profile_id.present? || source.gateway_payment_profile_id.present?
|
214
|
+
"#{order.number}-#{number}"
|
226
215
|
end
|
227
216
|
end
|
228
217
|
end
|