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
|
@@ -3,8 +3,7 @@ module Spree
|
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
4
|
|
|
5
5
|
included do
|
|
6
|
-
has_many :user_addresses, -> { active }, {foreign_key: "user_id", class_name: "Spree::UserAddress"} do
|
|
7
|
-
|
|
6
|
+
has_many :user_addresses, -> { active }, { foreign_key: "user_id", class_name: "Spree::UserAddress" } do
|
|
8
7
|
def find_first_by_address_values(address_attrs)
|
|
9
8
|
detect { |ua| ua.address == Address.new(address_attrs) }
|
|
10
9
|
end
|
|
@@ -13,7 +12,7 @@ module Spree
|
|
|
13
12
|
def mark_default(user_address)
|
|
14
13
|
# the checks of persisted? allow us to build a User and associate Addresses at once
|
|
15
14
|
ActiveRecord::Base.transaction do
|
|
16
|
-
(self - [user_address]).each do |ua| #update_all would be nice, but it bypasses ActiveRecord callbacks
|
|
15
|
+
(self - [user_address]).each do |ua| # update_all would be nice, but it bypasses ActiveRecord callbacks
|
|
17
16
|
ua.persisted? ? ua.update!(default: false) : ua.default = false
|
|
18
17
|
end
|
|
19
18
|
user_address.persisted? ? user_address.update!(default: true, archived: false) : user_address.default = true
|
|
@@ -26,109 +25,116 @@ module Spree
|
|
|
26
25
|
# bill_address is only minimally used now, but we can't get rid of it without a major version release
|
|
27
26
|
belongs_to :bill_address, class_name: 'Spree::Address'
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
end
|
|
28
|
+
has_one :default_user_address, ->{ default }, class_name: 'Spree::UserAddress', foreign_key: 'user_id'
|
|
29
|
+
has_one :default_address, through: :default_user_address, source: :address
|
|
30
|
+
alias_method :ship_address, :default_address
|
|
31
|
+
end
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
def bill_address=(address)
|
|
34
|
+
# stow a copy in our address book too
|
|
35
|
+
address = save_in_address_book(address.attributes) if address
|
|
36
|
+
super(address)
|
|
37
|
+
end
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
def bill_address_attributes=(attributes)
|
|
40
|
+
self.bill_address = Address.immutable_merge(bill_address, attributes)
|
|
41
|
+
end
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
def default_address=(address)
|
|
44
|
+
save_in_address_book(address.attributes, true) if address
|
|
45
|
+
end
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
def default_address_attributes=(attributes)
|
|
48
|
+
# see "Nested Attributes Examples" section of http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for
|
|
49
|
+
# this #{fieldname}_attributes= method works with fields_for in the views
|
|
50
|
+
# even without declaring accepts_nested_attributes_for
|
|
51
|
+
self.default_address = Address.immutable_merge(default_address, attributes)
|
|
52
|
+
end
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
alias_method :ship_address_attributes=, :default_address_attributes=
|
|
56
|
-
|
|
57
|
-
# saves address in address book
|
|
58
|
-
# sets address to the default if automatic_default_address is set to true
|
|
59
|
-
# if address is nil, does nothing and returns nil
|
|
60
|
-
def ship_address=(address)
|
|
61
|
-
be_default = Spree::Config.automatic_default_address
|
|
62
|
-
save_in_address_book(address.attributes, be_default) if address
|
|
63
|
-
end
|
|
54
|
+
alias_method :ship_address_attributes=, :default_address_attributes=
|
|
64
55
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
56
|
+
# saves address in address book
|
|
57
|
+
# sets address to the default if automatic_default_address is set to true
|
|
58
|
+
# if address is nil, does nothing and returns nil
|
|
59
|
+
def ship_address=(address)
|
|
60
|
+
be_default = Spree::Config.automatic_default_address
|
|
61
|
+
save_in_address_book(address.attributes, be_default) if address
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# saves order.ship_address and order.bill_address in address book
|
|
65
|
+
# sets ship_address to the default if automatic_default_address is set to true
|
|
66
|
+
# sets bill_address to the default if automatic_default_address is set to true and there is no ship_address
|
|
67
|
+
# if one address is nil, does not save that address
|
|
68
|
+
def persist_order_address(order)
|
|
69
|
+
if order.ship_address
|
|
70
|
+
address = save_in_address_book(
|
|
71
71
|
order.ship_address.attributes,
|
|
72
72
|
Spree::Config.automatic_default_address
|
|
73
|
-
)
|
|
73
|
+
)
|
|
74
|
+
self.ship_address_id = address.id if address && address.persisted?
|
|
75
|
+
end
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
if order.bill_address
|
|
78
|
+
address = save_in_address_book(
|
|
76
79
|
order.bill_address.attributes,
|
|
77
80
|
order.ship_address.nil? && Spree::Config.automatic_default_address
|
|
78
|
-
)
|
|
81
|
+
)
|
|
82
|
+
self.bill_address_id = address.id if address && address.persisted?
|
|
79
83
|
end
|
|
80
84
|
|
|
81
|
-
#
|
|
82
|
-
|
|
83
|
-
# treated as value equality to de-dup among existing Addresses
|
|
84
|
-
# @param default set whether or not this address will show up from
|
|
85
|
-
# #default_address or not
|
|
86
|
-
def save_in_address_book(address_attributes, default = false)
|
|
87
|
-
return nil unless address_attributes.present?
|
|
88
|
-
address_attributes = address_attributes.with_indifferent_access
|
|
85
|
+
save! # In case the ship_address_id or bill_address_id was set
|
|
86
|
+
end
|
|
89
87
|
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
# Add an address to the user's list of saved addresses for future autofill
|
|
89
|
+
# @param address_attributes HashWithIndifferentAccess of attributes that will be
|
|
90
|
+
# treated as value equality to de-dup among existing Addresses
|
|
91
|
+
# @param default set whether or not this address will show up from
|
|
92
|
+
# #default_address or not
|
|
93
|
+
def save_in_address_book(address_attributes, default = false)
|
|
94
|
+
return nil unless address_attributes.present?
|
|
95
|
+
address_attributes = address_attributes.with_indifferent_access
|
|
92
96
|
|
|
93
|
-
|
|
97
|
+
new_address = Address.factory(address_attributes)
|
|
98
|
+
return new_address unless new_address.valid?
|
|
94
99
|
|
|
95
|
-
|
|
96
|
-
remove_from_address_book(address_attributes[:id])
|
|
97
|
-
end
|
|
100
|
+
first_one = user_addresses.empty?
|
|
98
101
|
|
|
99
|
-
|
|
100
|
-
|
|
102
|
+
if address_attributes[:id].present? && new_address.id != address_attributes[:id]
|
|
103
|
+
remove_from_address_book(address_attributes[:id])
|
|
104
|
+
end
|
|
101
105
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
user_addresses.reset #ensures proper ordering
|
|
105
|
-
end
|
|
106
|
+
user_address = prepare_user_address(new_address)
|
|
107
|
+
user_addresses.mark_default(user_address) if default || first_one
|
|
106
108
|
|
|
107
|
-
|
|
109
|
+
if persisted?
|
|
110
|
+
user_address.save!
|
|
111
|
+
user_addresses.reset # ensures proper ordering
|
|
108
112
|
end
|
|
109
113
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
end
|
|
114
|
+
user_address.address
|
|
115
|
+
end
|
|
113
116
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
def mark_default_address(address)
|
|
118
|
+
user_addresses.mark_default(user_addresses.find_by(address: address))
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def remove_from_address_book(address_id)
|
|
122
|
+
user_address = user_addresses.find_by(address_id: address_id)
|
|
123
|
+
if user_address
|
|
124
|
+
user_address.update_attributes(archived: true, default: false)
|
|
125
|
+
else
|
|
126
|
+
false
|
|
121
127
|
end
|
|
128
|
+
end
|
|
122
129
|
|
|
123
|
-
|
|
130
|
+
private
|
|
124
131
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
end
|
|
132
|
+
def prepare_user_address(new_address)
|
|
133
|
+
user_address = user_addresses.all_historical.find_first_by_address_values(new_address.attributes)
|
|
134
|
+
user_address ||= user_addresses.build
|
|
135
|
+
user_address.address = new_address
|
|
136
|
+
user_address.archived = false
|
|
137
|
+
user_address
|
|
132
138
|
end
|
|
133
139
|
end
|
|
134
140
|
end
|
|
@@ -47,7 +47,7 @@ module Spree
|
|
|
47
47
|
# @return [Spree::Order] the most-recently-created incomplete order
|
|
48
48
|
# since the customer's last complete order.
|
|
49
49
|
def last_incomplete_spree_order(store: nil, only_frontend_viewable: true)
|
|
50
|
-
self_orders =
|
|
50
|
+
self_orders = orders
|
|
51
51
|
self_orders = self_orders.where(frontend_viewable: true) if only_frontend_viewable
|
|
52
52
|
self_orders = self_orders.where(store: store) if store
|
|
53
53
|
self_orders = self_orders.where('updated_at > ?', Spree::Config.completable_order_updated_cutoff_days.days.ago) if Spree::Config.completable_order_updated_cutoff_days
|
|
@@ -57,7 +57,7 @@ module Spree
|
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def total_available_store_credit
|
|
60
|
-
store_credits.reload.to_a.sum
|
|
60
|
+
store_credits.reload.to_a.sum(&:amount_remaining)
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
end
|
|
@@ -4,16 +4,20 @@ module Spree
|
|
|
4
4
|
|
|
5
5
|
included do
|
|
6
6
|
has_many :credit_cards, class_name: "Spree::CreditCard", foreign_key: :user_id
|
|
7
|
-
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def default_credit_card
|
|
10
|
+
credit_cards.default.first
|
|
11
|
+
end
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
def payment_sources
|
|
14
|
+
credit_cards.with_payment_profile
|
|
15
|
+
end
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
def drop_payment_source(source)
|
|
18
|
+
ActiveSupport::Deprecation.warn("User#drop_payment_source is deprecated", caller)
|
|
19
|
+
gateway = source.payment_method
|
|
20
|
+
gateway.disable_customer_profile(source)
|
|
17
21
|
end
|
|
18
22
|
end
|
|
19
23
|
end
|
data/app/models/spree/ability.rb
CHANGED
|
@@ -17,11 +17,11 @@ module Spree
|
|
|
17
17
|
# the +CanCan::Ability+ module. The registered ability should behave properly as a stand-alone class
|
|
18
18
|
# and therefore should be easy to test in isolation.
|
|
19
19
|
def self.register_ability(ability)
|
|
20
|
-
|
|
20
|
+
abilities.add(ability)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def self.remove_ability(ability)
|
|
24
|
-
|
|
24
|
+
abilities.delete(ability)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def initialize(current_user)
|
data/app/models/spree/address.rb
CHANGED
|
@@ -97,7 +97,7 @@ module Spree
|
|
|
97
97
|
# @return [Boolean] true if the two addresses have the same address fields
|
|
98
98
|
def ==(other_address)
|
|
99
99
|
return false unless other_address && other_address.respond_to?(:value_attributes)
|
|
100
|
-
|
|
100
|
+
value_attributes == other_address.value_attributes
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
def same_as?(other_address)
|
|
@@ -156,49 +156,48 @@ module Spree
|
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
private
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
end
|
|
175
|
-
end
|
|
159
|
+
|
|
160
|
+
def state_validate
|
|
161
|
+
# Skip state validation without country (also required)
|
|
162
|
+
# or when disabled by preference
|
|
163
|
+
return if country.blank? || !Spree::Config[:address_requires_state]
|
|
164
|
+
return unless country.states_required
|
|
165
|
+
|
|
166
|
+
# ensure associated state belongs to country
|
|
167
|
+
if state.present?
|
|
168
|
+
if state.country == country
|
|
169
|
+
self.state_name = nil # not required as we have a valid state and country combo
|
|
170
|
+
elsif state_name.present?
|
|
171
|
+
self.state = nil
|
|
172
|
+
else
|
|
173
|
+
errors.add(:state, :invalid)
|
|
176
174
|
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# ensure state_name belongs to country without states, or that it matches a predefined state name/abbr
|
|
178
|
+
if state_name.present?
|
|
179
|
+
if country.states.present?
|
|
180
|
+
states = country.states.find_all_by_name_or_abbr(state_name)
|
|
177
181
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if states.size == 1
|
|
184
|
-
self.state = states.first
|
|
185
|
-
self.state_name = nil
|
|
186
|
-
else
|
|
187
|
-
errors.add(:state, :invalid)
|
|
188
|
-
end
|
|
182
|
+
if states.size == 1
|
|
183
|
+
self.state = states.first
|
|
184
|
+
self.state_name = nil
|
|
185
|
+
else
|
|
186
|
+
errors.add(:state, :invalid)
|
|
189
187
|
end
|
|
190
188
|
end
|
|
191
|
-
|
|
192
|
-
# ensure at least one state field is populated
|
|
193
|
-
errors.add :state, :blank if state.blank? && state_name.blank?
|
|
194
189
|
end
|
|
195
190
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
191
|
+
# ensure at least one state field is populated
|
|
192
|
+
errors.add :state, :blank if state.blank? && state_name.blank?
|
|
193
|
+
end
|
|
199
194
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
195
|
+
def postal_code_validate
|
|
196
|
+
return if country.blank? || country.iso.blank? || !require_zipcode?
|
|
197
|
+
return if !TwitterCldr::Shared::PostalCodes.territories.include?(country.iso.downcase.to_sym)
|
|
198
|
+
|
|
199
|
+
postal_code = TwitterCldr::Shared::PostalCodes.for_territory(country.iso)
|
|
200
|
+
errors.add(:zipcode, :invalid) if !postal_code.valid?(zipcode.to_s)
|
|
201
|
+
end
|
|
203
202
|
end
|
|
204
203
|
end
|
|
@@ -17,7 +17,7 @@ module Spree
|
|
|
17
17
|
belongs_to :adjustable, polymorphic: true, touch: true
|
|
18
18
|
belongs_to :source, polymorphic: true
|
|
19
19
|
belongs_to :order, class_name: 'Spree::Order', inverse_of: :all_adjustments
|
|
20
|
-
belongs_to :promotion_code, :
|
|
20
|
+
belongs_to :promotion_code, class_name: 'Spree::PromotionCode'
|
|
21
21
|
belongs_to :adjustment_reason, class_name: 'Spree::AdjustmentReason', inverse_of: :adjustments
|
|
22
22
|
|
|
23
23
|
validates :adjustable, presence: true
|
|
@@ -43,7 +43,7 @@ module Spree
|
|
|
43
43
|
scope :tax, -> { where(source_type: 'Spree::TaxRate') }
|
|
44
44
|
scope :non_tax, -> do
|
|
45
45
|
source_type = arel_table[:source_type]
|
|
46
|
-
where(source_type.not_eq('Spree::TaxRate').or
|
|
46
|
+
where(source_type.not_eq('Spree::TaxRate').or(source_type.eq(nil)))
|
|
47
47
|
end
|
|
48
48
|
scope :price, -> { where(adjustable_type: 'Spree::LineItem') }
|
|
49
49
|
scope :shipping, -> { where(adjustable_type: 'Spree::Shipment') }
|
|
@@ -175,10 +175,6 @@ module Spree
|
|
|
175
175
|
amount
|
|
176
176
|
end
|
|
177
177
|
|
|
178
|
-
def currency
|
|
179
|
-
adjustable ? adjustable.currency : Spree::Config[:currency]
|
|
180
|
-
end
|
|
181
|
-
|
|
182
178
|
private
|
|
183
179
|
|
|
184
180
|
def update_adjustable_adjustment_total
|
|
@@ -117,10 +117,21 @@ module Spree
|
|
|
117
117
|
preference :currency, :string, default: "USD"
|
|
118
118
|
|
|
119
119
|
# @!attribute [rw] default_country_id
|
|
120
|
-
# @deprecated
|
|
120
|
+
# @deprecated Use the default country ISO preference instead
|
|
121
121
|
# @return [Integer,nil] id of {Country} to be selected by default in dropdowns (default: nil)
|
|
122
122
|
preference :default_country_id, :integer
|
|
123
123
|
|
|
124
|
+
# @!attribute [rw] default_country_iso
|
|
125
|
+
# Default customer country ISO code
|
|
126
|
+
# @return [String] Two-letter ISO code of a {Spree::Country} to assumed as the country of an unidentified customer (default: "US")
|
|
127
|
+
preference :default_country_iso, :string, default: 'US'
|
|
128
|
+
|
|
129
|
+
# @!attribute [rw] admin_vat_country_iso
|
|
130
|
+
# Set this if you want to enter prices in the backend including value added tax.
|
|
131
|
+
# @return [String, nil] Two-letter ISO code of that {Spree::Country} for which
|
|
132
|
+
# prices are entered in the backend (default: nil)
|
|
133
|
+
preference :admin_vat_country_iso, :string, default: nil
|
|
134
|
+
|
|
124
135
|
# @!attribute [rw] expedited_exchanges
|
|
125
136
|
# Kicks off an exchange shipment upon return authorization save.
|
|
126
137
|
# charge customer if they do not return items within timely manner.
|
|
@@ -222,7 +233,7 @@ module Spree
|
|
|
222
233
|
|
|
223
234
|
# @!attribute [rw] show_raw_product_description
|
|
224
235
|
# @return [Boolean] Don't escape HTML of product descriptions. (default: +false+)
|
|
225
|
-
preference :show_raw_product_description, :boolean, :
|
|
236
|
+
preference :show_raw_product_description, :boolean, default: false
|
|
226
237
|
|
|
227
238
|
# @!attribute [rw] tax_using_ship_address
|
|
228
239
|
# @return [Boolean] Use the shipping address rather than the billing address to determine tax (default: +true+)
|
|
@@ -243,7 +254,7 @@ module Spree
|
|
|
243
254
|
|
|
244
255
|
# @!attribute [rw] mails_from
|
|
245
256
|
# @return [String] Email address used as +From:+ field in transactional emails.
|
|
246
|
-
preference :mails_from, :string, :
|
|
257
|
+
preference :mails_from, :string, default: 'spree@example.com'
|
|
247
258
|
|
|
248
259
|
# Store credits configurations
|
|
249
260
|
|
|
@@ -259,12 +270,38 @@ module Spree
|
|
|
259
270
|
# @return [Boolean] Whether use of an address in checkout marks it as user's default
|
|
260
271
|
preference :automatic_default_address, :boolean, default: true
|
|
261
272
|
|
|
273
|
+
# @!attribute [rw] can_restrict_stock_management
|
|
274
|
+
# @return [Boolean] Indicates if stock management can be restricted by location
|
|
275
|
+
preference :can_restrict_stock_management, :boolean, default: false
|
|
276
|
+
|
|
262
277
|
# searcher_class allows spree extension writers to provide their own Search class
|
|
263
278
|
attr_writer :searcher_class
|
|
264
279
|
def searcher_class
|
|
265
280
|
@searcher_class ||= Spree::Core::Search::Base
|
|
266
281
|
end
|
|
267
282
|
|
|
283
|
+
# Allows implementing custom pricing for variants
|
|
284
|
+
# @!attribute [rw] variant_pricer_class
|
|
285
|
+
# @see Spree::Variant::Pricer
|
|
286
|
+
# @return [Class] an object that conforms to the API of
|
|
287
|
+
# the standard variant pricer class Spree::Variant::Pricer.
|
|
288
|
+
attr_writer :variant_pricer_class
|
|
289
|
+
def variant_pricer_class
|
|
290
|
+
@variant_pricer_class ||= Spree::Variant::Pricer
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
# Shortcut for getting the variant pricer's pricing options class
|
|
294
|
+
#
|
|
295
|
+
# @return [Class] The pricing options class to be used
|
|
296
|
+
delegate :pricing_options_class, to: :variant_pricer_class
|
|
297
|
+
|
|
298
|
+
# Shortcut for the default pricing options
|
|
299
|
+
# @return [variant_pricer_class] An instance of the pricing options class with default desired
|
|
300
|
+
# attributes
|
|
301
|
+
def default_pricing_options
|
|
302
|
+
@default_pricing_options ||= pricing_options_class.new
|
|
303
|
+
end
|
|
304
|
+
|
|
268
305
|
attr_writer :variant_search_class
|
|
269
306
|
def variant_search_class
|
|
270
307
|
@variant_search_class ||= Spree::Core::Search::Variant
|
|
@@ -286,6 +323,11 @@ module Spree
|
|
|
286
323
|
@shipping_rate_selector_class ||= Spree::Stock::ShippingRateSelector
|
|
287
324
|
end
|
|
288
325
|
|
|
326
|
+
attr_writer :shipping_rate_taxer_class
|
|
327
|
+
def shipping_rate_taxer_class
|
|
328
|
+
@shipping_rate_taxer_class ||= Spree::Tax::ShippingRateTaxer
|
|
329
|
+
end
|
|
330
|
+
|
|
289
331
|
# Allows providing your own Mailer for shipped cartons.
|
|
290
332
|
#
|
|
291
333
|
# @!attribute [rw] carton_shipped_email_class
|
|
@@ -315,6 +357,19 @@ module Spree
|
|
|
315
357
|
@stock_configuration ||= Spree::Core::StockConfiguration.new
|
|
316
358
|
end
|
|
317
359
|
|
|
360
|
+
# Default admin VAT location
|
|
361
|
+
#
|
|
362
|
+
# An object that responds to :state_id and :country_id so it can double as a Spree::Address in
|
|
363
|
+
# Spree::Zone.for_address. Takes the `admin_vat_country_iso` as input.
|
|
364
|
+
#
|
|
365
|
+
# @see admin_vat_country_iso The admin VAT country
|
|
366
|
+
# @return [Spree::Tax::TaxLocation] default tax location
|
|
367
|
+
def admin_vat_location
|
|
368
|
+
@default_tax_location ||= Spree::Tax::TaxLocation.new(
|
|
369
|
+
country: Spree::Country.find_by(iso: admin_vat_country_iso)
|
|
370
|
+
)
|
|
371
|
+
end
|
|
372
|
+
|
|
318
373
|
# all the following can be deprecated when store prefs are no longer supported
|
|
319
374
|
# @private
|
|
320
375
|
DEPRECATED_STORE_PREFERENCES = {
|
|
@@ -322,7 +377,7 @@ module Spree
|
|
|
322
377
|
site_url: :url,
|
|
323
378
|
default_meta_description: :meta_description,
|
|
324
379
|
default_meta_keywords: :meta_keywords,
|
|
325
|
-
default_seo_title: :seo_title
|
|
380
|
+
default_seo_title: :seo_title
|
|
326
381
|
}
|
|
327
382
|
|
|
328
383
|
DEPRECATED_STORE_PREFERENCES.each do |old_preference_name, store_method|
|
|
@@ -333,7 +388,7 @@ module Spree
|
|
|
333
388
|
# support all the old preference methods with a warning
|
|
334
389
|
define_method "preferred_#{old_preference_name}" do
|
|
335
390
|
ActiveSupport::Deprecation.warn("#{old_preference_name} is no longer supported on Spree::Config, please access it through #{store_method} on Spree::Store", bc.clean(caller))
|
|
336
|
-
Store.default.send(store_method)
|
|
391
|
+
Spree::Store.default.send(store_method)
|
|
337
392
|
end
|
|
338
393
|
end
|
|
339
394
|
end
|
data/app/models/spree/base.rb
CHANGED
|
@@ -2,6 +2,8 @@ require_dependency 'spree/calculator'
|
|
|
2
2
|
|
|
3
3
|
module Spree
|
|
4
4
|
class Calculator::DefaultTax < Calculator
|
|
5
|
+
include Spree::Tax::TaxHelpers
|
|
6
|
+
|
|
5
7
|
def self.description
|
|
6
8
|
Spree.t(:default_tax)
|
|
7
9
|
end
|
|
@@ -10,58 +12,60 @@ module Spree
|
|
|
10
12
|
# Orders created before Spree 2.1 had tax adjustments applied to the order, as a whole.
|
|
11
13
|
# Orders created with Spree 2.2 and after, have them applied to the line items individually.
|
|
12
14
|
def compute_order(order)
|
|
13
|
-
|
|
14
15
|
matched_line_items = order.line_items.select do |line_item|
|
|
15
16
|
line_item.tax_category == rate.tax_category
|
|
16
17
|
end
|
|
17
18
|
|
|
18
|
-
line_items_total = matched_line_items.sum(&:
|
|
19
|
+
line_items_total = matched_line_items.sum(&:discounted_amount)
|
|
19
20
|
if rate.included_in_price
|
|
20
|
-
round_to_two_places(line_items_total - ( line_items_total / (1 + rate.amount) ) )
|
|
21
|
+
order_tax_amount = round_to_two_places(line_items_total - ( line_items_total / (1 + rate.amount) ) )
|
|
22
|
+
refund_if_necessary(order_tax_amount, order.tax_zone)
|
|
21
23
|
else
|
|
22
24
|
round_to_two_places(line_items_total * rate.amount)
|
|
23
25
|
end
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
# When it comes to computing shipments or line items: same same.
|
|
27
|
-
def
|
|
29
|
+
def compute_item(item)
|
|
28
30
|
if rate.included_in_price
|
|
29
|
-
deduced_total_by_rate(item
|
|
31
|
+
deduced_total_by_rate(item, rate)
|
|
30
32
|
else
|
|
31
33
|
round_to_two_places(item.discounted_amount * rate.amount)
|
|
32
34
|
end
|
|
33
35
|
end
|
|
34
36
|
|
|
35
|
-
alias_method :compute_shipment, :
|
|
36
|
-
alias_method :compute_line_item, :
|
|
37
|
-
|
|
38
|
-
def compute_shipping_rate(shipping_rate)
|
|
39
|
-
if rate.included_in_price
|
|
40
|
-
pre_tax_amount = shipping_rate.cost / (1 + rate.amount)
|
|
41
|
-
if rate.zone == shipping_rate.shipment.order.tax_zone
|
|
42
|
-
deduced_total_by_rate(pre_tax_amount, rate)
|
|
43
|
-
else
|
|
44
|
-
deduced_total_by_rate(pre_tax_amount, rate) * - 1
|
|
45
|
-
end
|
|
46
|
-
else
|
|
47
|
-
with_tax_amount = shipping_rate.cost * rate.amount
|
|
48
|
-
round_to_two_places(with_tax_amount)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
37
|
+
alias_method :compute_shipment, :compute_item
|
|
38
|
+
alias_method :compute_line_item, :compute_item
|
|
39
|
+
alias_method :compute_shipping_rate, :compute_item
|
|
51
40
|
|
|
52
41
|
private
|
|
53
42
|
|
|
54
43
|
def rate
|
|
55
|
-
|
|
44
|
+
calculable
|
|
56
45
|
end
|
|
57
46
|
|
|
58
47
|
def round_to_two_places(amount)
|
|
59
48
|
BigDecimal.new(amount.to_s).round(2, BigDecimal::ROUND_HALF_UP)
|
|
60
49
|
end
|
|
61
50
|
|
|
62
|
-
def deduced_total_by_rate(
|
|
63
|
-
|
|
51
|
+
def deduced_total_by_rate(item, rate)
|
|
52
|
+
unrounded_net_amount = item.discounted_amount / (1 + sum_of_included_tax_rates(item))
|
|
53
|
+
refund_if_necessary(
|
|
54
|
+
round_to_two_places(unrounded_net_amount * rate.amount),
|
|
55
|
+
item.order.tax_zone
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def refund_if_necessary(amount, order_tax_zone)
|
|
60
|
+
if default_zone_or_zone_match?(order_tax_zone)
|
|
61
|
+
amount
|
|
62
|
+
else
|
|
63
|
+
amount * -1
|
|
64
|
+
end
|
|
64
65
|
end
|
|
65
66
|
|
|
67
|
+
def default_zone_or_zone_match?(order_tax_zone)
|
|
68
|
+
Zone.default_tax.try!(:contains?, order_tax_zone) || rate.zone.contains?(order_tax_zone)
|
|
69
|
+
end
|
|
66
70
|
end
|
|
67
71
|
end
|
|
@@ -9,7 +9,7 @@ module Spree
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def compute(object)
|
|
12
|
-
computed_amount
|
|
12
|
+
computed_amount = (object.amount * preferred_flat_percent / 100).round(2)
|
|
13
13
|
|
|
14
14
|
# We don't want to cause the promotion adjustments to push the order into a negative total.
|
|
15
15
|
if computed_amount > object.amount
|
|
@@ -9,8 +9,8 @@ module Spree
|
|
|
9
9
|
Spree.t(:flat_rate_per_order)
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
def compute(object=nil)
|
|
13
|
-
if object && preferred_currency.
|
|
12
|
+
def compute(object = nil)
|
|
13
|
+
if object && preferred_currency.casecmp(object.currency).zero?
|
|
14
14
|
preferred_amount
|
|
15
15
|
else
|
|
16
16
|
0
|