solidus_core 1.2.3 → 1.3.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/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,61 +1,58 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Order < Spree::Base
|
|
3
3
|
module Payments
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
process_payments_with(:process!)
|
|
24
|
-
end
|
|
4
|
+
# processes any pending payments and must return a boolean as it's
|
|
5
|
+
# return value is used by the checkout state_machine to determine
|
|
6
|
+
# success or failure of the 'complete' event for the order
|
|
7
|
+
#
|
|
8
|
+
# Returns:
|
|
9
|
+
#
|
|
10
|
+
# - true if all pending payments processed successfully
|
|
11
|
+
#
|
|
12
|
+
# - true if a payment failed, ie. raised a GatewayError
|
|
13
|
+
# which gets rescued and converted to TRUE when
|
|
14
|
+
# :allow_checkout_gateway_error is set to true
|
|
15
|
+
#
|
|
16
|
+
# - false if a payment failed, ie. raised a GatewayError
|
|
17
|
+
# which gets rescued and converted to FALSE when
|
|
18
|
+
# :allow_checkout_on_gateway_error is set to false
|
|
19
|
+
#
|
|
20
|
+
def process_payments!
|
|
21
|
+
process_payments_with(:process!)
|
|
22
|
+
end
|
|
25
23
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
def authorize_payments!
|
|
25
|
+
process_payments_with(:authorize!)
|
|
26
|
+
end
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
def capture_payments!
|
|
29
|
+
process_payments_with(:purchase!)
|
|
30
|
+
end
|
|
33
31
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
def unprocessed_payments
|
|
33
|
+
payments.select(&:checkout?)
|
|
34
|
+
end
|
|
37
35
|
|
|
38
|
-
|
|
36
|
+
private
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
38
|
+
def process_payments_with(method)
|
|
39
|
+
# Don't run if there is nothing to pay.
|
|
40
|
+
return true if payment_total >= total
|
|
41
|
+
# Prevent orders from transitioning to complete without a successfully processed payment.
|
|
42
|
+
raise Core::GatewayError.new(Spree.t(:no_payment_found)) if unprocessed_payments.empty?
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
unprocessed_payments.each do |payment|
|
|
45
|
+
break if payment_total >= total
|
|
48
46
|
|
|
49
|
-
|
|
47
|
+
payment.public_send(method)
|
|
50
48
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
end
|
|
49
|
+
if payment.completed?
|
|
50
|
+
self.payment_total += payment.amount
|
|
54
51
|
end
|
|
55
|
-
rescue Core::GatewayError => e
|
|
56
|
-
result = !!Spree::Config[:allow_checkout_on_gateway_error]
|
|
57
|
-
errors.add(:base, e.message) and return result
|
|
58
52
|
end
|
|
53
|
+
rescue Core::GatewayError => e
|
|
54
|
+
result = !!Spree::Config[:allow_checkout_on_gateway_error]
|
|
55
|
+
errors.add(:base, e.message) && (return result)
|
|
59
56
|
end
|
|
60
57
|
end
|
|
61
58
|
end
|
data/app/models/spree/order.rb
CHANGED
|
@@ -3,7 +3,6 @@ require 'spree/order/checkout'
|
|
|
3
3
|
|
|
4
4
|
module Spree
|
|
5
5
|
class Order < Spree::Base
|
|
6
|
-
|
|
7
6
|
ORDER_NUMBER_LENGTH = 9
|
|
8
7
|
ORDER_NUMBER_LETTERS = false
|
|
9
8
|
ORDER_NUMBER_PREFIX = 'R'
|
|
@@ -28,7 +27,7 @@ module Spree
|
|
|
28
27
|
end
|
|
29
28
|
|
|
30
29
|
self.whitelisted_ransackable_associations = %w[shipments user promotions bill_address ship_address line_items]
|
|
31
|
-
self.whitelisted_ransackable_attributes =
|
|
30
|
+
self.whitelisted_ransackable_attributes = %w[completed_at created_at email number state payment_state shipment_state total]
|
|
32
31
|
|
|
33
32
|
attr_reader :coupon_code
|
|
34
33
|
attr_accessor :temporary_address, :temporary_credit_card
|
|
@@ -70,7 +69,7 @@ module Spree
|
|
|
70
69
|
has_many :order_promotions, class_name: 'Spree::OrderPromotion'
|
|
71
70
|
has_many :promotions, through: :order_promotions
|
|
72
71
|
|
|
73
|
-
has_many :cartons, -> {
|
|
72
|
+
has_many :cartons, -> { distinct }, through: :inventory_units
|
|
74
73
|
has_many :shipments, dependent: :destroy, inverse_of: :order do
|
|
75
74
|
def states
|
|
76
75
|
pluck(:state).uniq
|
|
@@ -84,18 +83,19 @@ module Spree
|
|
|
84
83
|
accepts_nested_attributes_for :shipments
|
|
85
84
|
|
|
86
85
|
# Needs to happen before save_permalink is called
|
|
86
|
+
before_validation :associate_store
|
|
87
87
|
before_validation :set_currency
|
|
88
88
|
before_validation :generate_order_number, on: :create
|
|
89
89
|
before_validation :assign_billing_to_shipping_address, if: :use_billing?
|
|
90
90
|
attr_accessor :use_billing
|
|
91
91
|
|
|
92
|
-
|
|
93
92
|
before_create :create_token
|
|
94
93
|
before_create :link_by_email
|
|
95
94
|
|
|
96
95
|
validates :email, presence: true, if: :require_email
|
|
97
96
|
validates :email, email: true, if: :require_email, allow_blank: true
|
|
98
97
|
validates :number, presence: true, uniqueness: { allow_blank: true }
|
|
98
|
+
validates :store_id, presence: true
|
|
99
99
|
|
|
100
100
|
make_permalink field: :number
|
|
101
101
|
|
|
@@ -104,7 +104,6 @@ module Spree
|
|
|
104
104
|
alias_method :billing_firstname, :bill_address_firstname
|
|
105
105
|
alias_method :billing_lastname, :bill_address_lastname
|
|
106
106
|
|
|
107
|
-
|
|
108
107
|
class_attribute :update_hooks
|
|
109
108
|
self.update_hooks = Set.new
|
|
110
109
|
|
|
@@ -146,18 +145,18 @@ module Spree
|
|
|
146
145
|
# Use this method in other gems that wish to register their own custom logic
|
|
147
146
|
# that should be called after Order#update
|
|
148
147
|
def self.register_update_hook(hook)
|
|
149
|
-
|
|
148
|
+
update_hooks.add(hook)
|
|
150
149
|
end
|
|
151
150
|
|
|
152
151
|
# Use this method in other gems that wish to register their own custom logic
|
|
153
152
|
# that should be called when determining if two line items are equal.
|
|
154
153
|
def self.register_line_item_comparison_hook(hook)
|
|
155
|
-
|
|
154
|
+
line_item_comparison_hooks.add(hook)
|
|
156
155
|
end
|
|
157
156
|
|
|
158
157
|
# For compatiblity with Calculator::PriceSack
|
|
159
158
|
def amount
|
|
160
|
-
line_items.
|
|
159
|
+
line_items.map(&:amount).sum
|
|
161
160
|
end
|
|
162
161
|
|
|
163
162
|
# Sum of all line item amounts pre-tax
|
|
@@ -165,6 +164,11 @@ module Spree
|
|
|
165
164
|
line_items.to_a.sum(&:pre_tax_amount)
|
|
166
165
|
end
|
|
167
166
|
|
|
167
|
+
# Sum of all line item amounts after promotions, before added tax
|
|
168
|
+
def discounted_item_amount
|
|
169
|
+
line_items.to_a.sum(&:discounted_amount)
|
|
170
|
+
end
|
|
171
|
+
|
|
168
172
|
def currency
|
|
169
173
|
self[:currency] || Spree::Config[:currency]
|
|
170
174
|
end
|
|
@@ -174,7 +178,7 @@ module Spree
|
|
|
174
178
|
end
|
|
175
179
|
|
|
176
180
|
def to_param
|
|
177
|
-
number
|
|
181
|
+
number
|
|
178
182
|
end
|
|
179
183
|
|
|
180
184
|
def completed?
|
|
@@ -211,7 +215,11 @@ module Spree
|
|
|
211
215
|
|
|
212
216
|
# Returns the address for taxation based on configuration
|
|
213
217
|
def tax_address
|
|
214
|
-
Spree::Config[:tax_using_ship_address]
|
|
218
|
+
if Spree::Config[:tax_using_ship_address]
|
|
219
|
+
ship_address
|
|
220
|
+
else
|
|
221
|
+
bill_address
|
|
222
|
+
end || store.default_cart_tax_location
|
|
215
223
|
end
|
|
216
224
|
|
|
217
225
|
def updater
|
|
@@ -228,12 +236,12 @@ module Spree
|
|
|
228
236
|
end
|
|
229
237
|
|
|
230
238
|
def allow_cancel?
|
|
231
|
-
return false unless completed?
|
|
239
|
+
return false unless completed? && state != 'canceled'
|
|
232
240
|
shipment_state.nil? || %w{ready backorder pending}.include?(shipment_state)
|
|
233
241
|
end
|
|
234
242
|
|
|
235
243
|
def all_inventory_units_returned?
|
|
236
|
-
inventory_units.all?
|
|
244
|
+
inventory_units.all?(&:returned?)
|
|
237
245
|
end
|
|
238
246
|
|
|
239
247
|
def contents
|
|
@@ -253,7 +261,7 @@ module Spree
|
|
|
253
261
|
self.user = user
|
|
254
262
|
attrs_to_set = { user_id: user.try(:id) }
|
|
255
263
|
attrs_to_set[:email] = user.try(:email) if override_email
|
|
256
|
-
attrs_to_set[:created_by_id] = user.try(:id) if
|
|
264
|
+
attrs_to_set[:created_by_id] = user.try(:id) if created_by.blank?
|
|
257
265
|
|
|
258
266
|
if persisted?
|
|
259
267
|
# immediately persist the changes we just made, but don't use save since we might have an invalid address associated
|
|
@@ -277,7 +285,7 @@ module Spree
|
|
|
277
285
|
# Use the random number if no other order exists with it.
|
|
278
286
|
if self.class.exists?(number: random)
|
|
279
287
|
# If over half of all possible options are taken add another digit.
|
|
280
|
-
options[:length] += 1 if self.class.count > (10
|
|
288
|
+
options[:length] += 1 if self.class.count > (10**options[:length] / 2)
|
|
281
289
|
else
|
|
282
290
|
break random
|
|
283
291
|
end
|
|
@@ -300,8 +308,8 @@ module Spree
|
|
|
300
308
|
def find_line_item_by_variant(variant, options = {})
|
|
301
309
|
line_items.detect { |line_item|
|
|
302
310
|
line_item.variant_id == variant.id &&
|
|
303
|
-
|
|
304
|
-
|
|
311
|
+
line_item_options_match(line_item, options)
|
|
312
|
+
}
|
|
305
313
|
end
|
|
306
314
|
|
|
307
315
|
# This method enables extensions to participate in the
|
|
@@ -316,18 +324,15 @@ module Spree
|
|
|
316
324
|
def line_item_options_match(line_item, options)
|
|
317
325
|
return true unless options
|
|
318
326
|
|
|
319
|
-
|
|
320
|
-
|
|
327
|
+
line_item_comparison_hooks.all? { |hook|
|
|
328
|
+
send(hook, line_item, options)
|
|
321
329
|
}
|
|
322
330
|
end
|
|
323
331
|
|
|
324
332
|
# Creates new tax charges if there are any applicable rates. If prices already
|
|
325
333
|
# include taxes then price adjustments are created instead.
|
|
326
334
|
def create_tax_charge!
|
|
327
|
-
|
|
328
|
-
order_tax_zone = self.tax_zone
|
|
329
|
-
Spree::TaxRate.adjust(order_tax_zone, line_items)
|
|
330
|
-
Spree::TaxRate.adjust(order_tax_zone, shipments) if shipments.any?
|
|
335
|
+
Spree::Tax::OrderAdjuster.new(self).adjust!
|
|
331
336
|
end
|
|
332
337
|
|
|
333
338
|
def outstanding_balance
|
|
@@ -343,7 +348,7 @@ module Spree
|
|
|
343
348
|
end
|
|
344
349
|
|
|
345
350
|
def outstanding_balance?
|
|
346
|
-
|
|
351
|
+
outstanding_balance != 0
|
|
347
352
|
end
|
|
348
353
|
|
|
349
354
|
def refund_total
|
|
@@ -357,7 +362,7 @@ module Spree
|
|
|
357
362
|
end
|
|
358
363
|
|
|
359
364
|
def can_ship?
|
|
360
|
-
|
|
365
|
+
complete? || resumed? || awaiting_return? || returned?
|
|
361
366
|
end
|
|
362
367
|
|
|
363
368
|
def credit_cards
|
|
@@ -412,7 +417,9 @@ module Spree
|
|
|
412
417
|
@available_payment_methods ||= (
|
|
413
418
|
PaymentMethod.available(:front_end, store: store) +
|
|
414
419
|
PaymentMethod.available(:both, store: store)
|
|
415
|
-
).
|
|
420
|
+
).
|
|
421
|
+
uniq.
|
|
422
|
+
sort_by(&:position)
|
|
416
423
|
end
|
|
417
424
|
|
|
418
425
|
def insufficient_stock_lines
|
|
@@ -453,40 +460,43 @@ module Spree
|
|
|
453
460
|
def state_changed(name)
|
|
454
461
|
state = "#{name}_state"
|
|
455
462
|
if persisted?
|
|
456
|
-
old_state =
|
|
457
|
-
new_state =
|
|
463
|
+
old_state = send("#{state}_was")
|
|
464
|
+
new_state = send(state)
|
|
458
465
|
unless old_state == new_state
|
|
459
|
-
|
|
466
|
+
state_changes.create(
|
|
460
467
|
previous_state: old_state,
|
|
461
468
|
next_state: new_state,
|
|
462
469
|
name: name,
|
|
463
|
-
user_id:
|
|
470
|
+
user_id: user_id
|
|
464
471
|
)
|
|
465
472
|
end
|
|
466
473
|
end
|
|
467
474
|
end
|
|
468
475
|
|
|
469
476
|
def coupon_code=(code)
|
|
470
|
-
@coupon_code =
|
|
477
|
+
@coupon_code = begin
|
|
478
|
+
code.strip.downcase
|
|
479
|
+
rescue
|
|
480
|
+
nil
|
|
481
|
+
end
|
|
471
482
|
end
|
|
472
483
|
|
|
473
484
|
def can_add_coupon?
|
|
474
485
|
Spree::Promotion.order_activatable?(self)
|
|
475
486
|
end
|
|
476
487
|
|
|
477
|
-
|
|
478
488
|
def shipped?
|
|
479
489
|
%w(partial shipped).include?(shipment_state)
|
|
480
490
|
end
|
|
481
491
|
|
|
482
492
|
def ensure_shipping_address
|
|
483
493
|
unless ship_address && ship_address.valid?
|
|
484
|
-
errors.add(:base, Spree.t(:ship_address_required))
|
|
494
|
+
errors.add(:base, Spree.t(:ship_address_required)) && (return false)
|
|
485
495
|
end
|
|
486
496
|
end
|
|
487
497
|
|
|
488
498
|
def create_proposed_shipments
|
|
489
|
-
return
|
|
499
|
+
return shipments if unreturned_exchange?
|
|
490
500
|
|
|
491
501
|
if completed?
|
|
492
502
|
raise CannotRebuildShipments.new(Spree.t(:cannot_rebuild_shipments_order_completed))
|
|
@@ -513,21 +523,20 @@ module Spree
|
|
|
513
523
|
# e.g. customer goes back from payment step and changes order items
|
|
514
524
|
def ensure_updated_shipments
|
|
515
525
|
if !completed? && shipments.all?(&:pending?)
|
|
516
|
-
|
|
517
|
-
|
|
526
|
+
shipments.destroy_all
|
|
527
|
+
update_column(:shipment_total, 0)
|
|
518
528
|
restart_checkout_flow
|
|
519
529
|
end
|
|
520
|
-
|
|
521
530
|
end
|
|
522
531
|
|
|
523
532
|
def restart_checkout_flow
|
|
524
|
-
return if
|
|
533
|
+
return if state == 'cart'
|
|
525
534
|
|
|
526
|
-
|
|
535
|
+
update_columns(
|
|
527
536
|
state: 'cart',
|
|
528
|
-
updated_at: Time.current
|
|
537
|
+
updated_at: Time.current
|
|
529
538
|
)
|
|
530
|
-
|
|
539
|
+
next! if line_items.size > 0
|
|
531
540
|
end
|
|
532
541
|
|
|
533
542
|
def refresh_shipment_rates
|
|
@@ -545,28 +554,28 @@ module Spree
|
|
|
545
554
|
end
|
|
546
555
|
|
|
547
556
|
def is_risky?
|
|
548
|
-
|
|
557
|
+
payments.risky.count > 0
|
|
549
558
|
end
|
|
550
559
|
|
|
551
560
|
def canceled_by(user)
|
|
552
|
-
|
|
561
|
+
transaction do
|
|
553
562
|
cancel!
|
|
554
|
-
|
|
563
|
+
update_columns(
|
|
555
564
|
canceler_id: user.id,
|
|
556
|
-
canceled_at: Time.current
|
|
565
|
+
canceled_at: Time.current
|
|
557
566
|
)
|
|
558
567
|
end
|
|
559
568
|
end
|
|
560
569
|
|
|
561
570
|
def approved?
|
|
562
|
-
!!
|
|
571
|
+
!!approved_at
|
|
563
572
|
end
|
|
564
573
|
|
|
565
574
|
def can_approve?
|
|
566
575
|
!approved?
|
|
567
576
|
end
|
|
568
577
|
|
|
569
|
-
def reload(options=nil)
|
|
578
|
+
def reload(options = nil)
|
|
570
579
|
remove_instance_variable(:@tax_zone) if defined?(@tax_zone)
|
|
571
580
|
super
|
|
572
581
|
end
|
|
@@ -600,8 +609,8 @@ module Spree
|
|
|
600
609
|
#
|
|
601
610
|
# FIXME: find a better way to determine if an order is an unreturned
|
|
602
611
|
# exchange
|
|
603
|
-
shipment =
|
|
604
|
-
shipment.present? ? (shipment.created_at <
|
|
612
|
+
shipment = shipments.first
|
|
613
|
+
shipment.present? ? (shipment.created_at < created_at - 1) : false
|
|
605
614
|
end
|
|
606
615
|
|
|
607
616
|
def tax_total
|
|
@@ -645,9 +654,8 @@ module Spree
|
|
|
645
654
|
payments.reset
|
|
646
655
|
|
|
647
656
|
if payments.where(state: %w(checkout pending)).sum(:amount) != total
|
|
648
|
-
errors.add(:base, Spree.t("store_credit.errors.unable_to_fund"))
|
|
657
|
+
errors.add(:base, Spree.t("store_credit.errors.unable_to_fund")) && (return false)
|
|
649
658
|
end
|
|
650
|
-
|
|
651
659
|
end
|
|
652
660
|
|
|
653
661
|
def covered_by_store_credit?
|
|
@@ -681,32 +689,19 @@ module Spree
|
|
|
681
689
|
Spree::Money.new(total_available_store_credit - total_applicable_store_credit, { currency: currency })
|
|
682
690
|
end
|
|
683
691
|
|
|
684
|
-
|
|
685
|
-
validate_payments_attributes(attributes)
|
|
686
|
-
super(attributes)
|
|
687
|
-
end
|
|
688
|
-
|
|
689
|
-
def validate_payments_attributes(attributes)
|
|
690
|
-
attributes = Array.wrap(attributes)
|
|
691
|
-
# Ensure the payment methods specified are allowed for this user
|
|
692
|
-
payment_methods = Spree::PaymentMethod.where(id: available_payment_methods)
|
|
693
|
-
attributes.each do |payment_attributes|
|
|
694
|
-
payment_method_id = payment_attributes[:payment_method_id]
|
|
692
|
+
private
|
|
695
693
|
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
end
|
|
694
|
+
def associate_store
|
|
695
|
+
self.store ||= Spree::Store.default
|
|
699
696
|
end
|
|
700
697
|
|
|
701
|
-
private
|
|
702
|
-
|
|
703
698
|
def link_by_email
|
|
704
|
-
self.email = user.email if
|
|
699
|
+
self.email = user.email if user
|
|
705
700
|
end
|
|
706
701
|
|
|
707
702
|
# Determine if email is required (we don't want validation errors before we hit the checkout)
|
|
708
703
|
def require_email
|
|
709
|
-
true unless new_record?
|
|
704
|
+
true unless new_record? || ['cart', 'address'].include?(state)
|
|
710
705
|
end
|
|
711
706
|
|
|
712
707
|
def ensure_inventory_units
|
|
@@ -734,7 +729,7 @@ module Spree
|
|
|
734
729
|
|
|
735
730
|
def ensure_line_items_present
|
|
736
731
|
unless line_items.present?
|
|
737
|
-
errors.add(:base, Spree.t(:there_are_no_items_for_this_order))
|
|
732
|
+
errors.add(:base, Spree.t(:there_are_no_items_for_this_order)) && (return false)
|
|
738
733
|
end
|
|
739
734
|
end
|
|
740
735
|
|
|
@@ -743,17 +738,17 @@ module Spree
|
|
|
743
738
|
# After this point, order redirects back to 'address' state and asks user to pick a proper address
|
|
744
739
|
# Therefore, shipments are not necessary at this point.
|
|
745
740
|
shipments.destroy_all
|
|
746
|
-
errors.add(:base, Spree.t(:items_cannot_be_shipped))
|
|
741
|
+
errors.add(:base, Spree.t(:items_cannot_be_shipped)) && (return false)
|
|
747
742
|
end
|
|
748
743
|
end
|
|
749
744
|
|
|
750
745
|
def after_cancel
|
|
751
|
-
shipments.each
|
|
752
|
-
payments.completed.each
|
|
753
|
-
payments.store_credits.pending.each
|
|
746
|
+
shipments.each(&:cancel!)
|
|
747
|
+
payments.completed.each(&:cancel!)
|
|
748
|
+
payments.store_credits.pending.each(&:void_transaction!)
|
|
754
749
|
|
|
755
750
|
send_cancel_email
|
|
756
|
-
|
|
751
|
+
update!
|
|
757
752
|
end
|
|
758
753
|
|
|
759
754
|
def send_cancel_email
|
|
@@ -761,7 +756,7 @@ module Spree
|
|
|
761
756
|
end
|
|
762
757
|
|
|
763
758
|
def after_resume
|
|
764
|
-
shipments.each
|
|
759
|
+
shipments.each(&:resume!)
|
|
765
760
|
end
|
|
766
761
|
|
|
767
762
|
def use_billing?
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# This class represents all of the actions one can take to modify an Order after it is complete
|
|
2
2
|
class Spree::OrderCancellations
|
|
3
|
+
extend ActiveModel::Translation
|
|
3
4
|
|
|
4
5
|
# If you need to message a third party service when an item is canceled then
|
|
5
6
|
# set short_ship_tax_notifier to an object that responds to:
|
|
@@ -31,7 +32,6 @@ class Spree::OrderCancellations
|
|
|
31
32
|
unit_cancels = []
|
|
32
33
|
|
|
33
34
|
Spree::OrderMutex.with_lock!(@order) do
|
|
34
|
-
|
|
35
35
|
Spree::InventoryUnit.transaction do
|
|
36
36
|
inventory_units.each do |iu|
|
|
37
37
|
unit_cancels << short_ship_unit(iu, whodunnit: whodunnit)
|
|
@@ -67,7 +67,7 @@ class Spree::OrderCancellations
|
|
|
67
67
|
unit_cancel = Spree::UnitCancel.create!(
|
|
68
68
|
inventory_unit: inventory_unit,
|
|
69
69
|
reason: reason,
|
|
70
|
-
created_by: whodunnit
|
|
70
|
+
created_by: whodunnit
|
|
71
71
|
)
|
|
72
72
|
|
|
73
73
|
inventory_unit.cancel!
|
|
@@ -99,7 +99,7 @@ class Spree::OrderCancellations
|
|
|
99
99
|
unit_cancel = Spree::UnitCancel.create!(
|
|
100
100
|
inventory_unit: inventory_unit,
|
|
101
101
|
reason: Spree::UnitCancel::SHORT_SHIP,
|
|
102
|
-
created_by: whodunnit
|
|
102
|
+
created_by: whodunnit
|
|
103
103
|
)
|
|
104
104
|
unit_cancel.adjust!
|
|
105
105
|
inventory_unit.cancel!
|
|
@@ -115,7 +115,7 @@ class Spree::OrderCancellations
|
|
|
115
115
|
to_a
|
|
116
116
|
|
|
117
117
|
shipments.each do |shipment|
|
|
118
|
-
if shipment.inventory_units.all? {|iu| iu.shipped? || iu.canceled? }
|
|
118
|
+
if shipment.inventory_units.all? { |iu| iu.shipped? || iu.canceled? }
|
|
119
119
|
shipment.update_attributes!(state: 'shipped', shipped_at: Time.current)
|
|
120
120
|
end
|
|
121
121
|
end
|
|
@@ -44,8 +44,9 @@ class Spree::OrderCapturing
|
|
|
44
44
|
private
|
|
45
45
|
|
|
46
46
|
def sorted_payments(order)
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
order.payments.pending.sort_by do |p|
|
|
48
|
+
[@sorted_payment_method_classes.index(p.payment_method.class), p.id]
|
|
49
|
+
end
|
|
49
50
|
end
|
|
50
51
|
end
|
|
51
52
|
|