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
|
@@ -17,7 +17,7 @@ module Spree
|
|
|
17
17
|
|
|
18
18
|
before_destroy :ensure_can_destroy
|
|
19
19
|
|
|
20
|
-
# TODO remove the suppress_mailer temporary variable once we are calling 'ship'
|
|
20
|
+
# TODO: remove the suppress_mailer temporary variable once we are calling 'ship'
|
|
21
21
|
# from outside of the state machine and can actually pass variables through.
|
|
22
22
|
attr_accessor :special_instructions, :suppress_mailer
|
|
23
23
|
|
|
@@ -66,7 +66,7 @@ module Spree
|
|
|
66
66
|
shipment.state_changes.create!(
|
|
67
67
|
previous_state: transition.from,
|
|
68
68
|
next_state: transition.to,
|
|
69
|
-
name: 'shipment'
|
|
69
|
+
name: 'shipment'
|
|
70
70
|
)
|
|
71
71
|
end
|
|
72
72
|
end
|
|
@@ -74,12 +74,15 @@ module Spree
|
|
|
74
74
|
self.whitelisted_ransackable_associations = ['order']
|
|
75
75
|
self.whitelisted_ransackable_attributes = ['number']
|
|
76
76
|
|
|
77
|
+
delegate :tax_category, to: :selected_shipping_rate, allow_nil: true
|
|
78
|
+
|
|
77
79
|
def can_transition_from_pending_to_shipped?
|
|
78
80
|
!requires_shipment?
|
|
79
81
|
end
|
|
80
82
|
|
|
81
83
|
def can_transition_from_pending_to_ready?
|
|
82
|
-
order.can_ship? &&
|
|
84
|
+
order.can_ship? &&
|
|
85
|
+
inventory_units.all? { |iu| iu.allow_ship? || iu.canceled? } &&
|
|
83
86
|
(order.paid? || !Spree::Config[:require_payment_to_ship])
|
|
84
87
|
end
|
|
85
88
|
|
|
@@ -88,8 +91,8 @@ module Spree
|
|
|
88
91
|
end
|
|
89
92
|
|
|
90
93
|
extend DisplayMoney
|
|
91
|
-
money_methods :cost, :discounted_cost, :final_price, :item_cost
|
|
92
|
-
|
|
94
|
+
money_methods :cost, :amount, :discounted_cost, :final_price, :item_cost
|
|
95
|
+
alias_attribute :amount, :cost
|
|
93
96
|
|
|
94
97
|
def add_shipping_method(shipping_method, selected = false)
|
|
95
98
|
shipping_rates.create(shipping_method: shipping_method, selected: selected, cost: cost)
|
|
@@ -104,7 +107,7 @@ module Spree
|
|
|
104
107
|
end
|
|
105
108
|
|
|
106
109
|
def backordered?
|
|
107
|
-
inventory_units.any?
|
|
110
|
+
inventory_units.any?(&:backordered?)
|
|
108
111
|
end
|
|
109
112
|
|
|
110
113
|
def currency
|
|
@@ -116,8 +119,7 @@ module Spree
|
|
|
116
119
|
end
|
|
117
120
|
alias discounted_amount discounted_cost
|
|
118
121
|
|
|
119
|
-
|
|
120
|
-
def editable_by?(user)
|
|
122
|
+
def editable_by?(_user)
|
|
121
123
|
!shipped?
|
|
122
124
|
end
|
|
123
125
|
|
|
@@ -162,8 +164,12 @@ module Spree
|
|
|
162
164
|
inventory_units.includes(:line_item).map(&:line_item).uniq
|
|
163
165
|
end
|
|
164
166
|
|
|
167
|
+
def pre_tax_amount
|
|
168
|
+
discounted_amount - included_tax_total
|
|
169
|
+
end
|
|
170
|
+
|
|
165
171
|
def ready_or_pending?
|
|
166
|
-
|
|
172
|
+
ready? || pending?
|
|
167
173
|
end
|
|
168
174
|
|
|
169
175
|
def refresh_rates
|
|
@@ -173,7 +179,7 @@ module Spree
|
|
|
173
179
|
# StockEstimator.new assigment below will replace the current shipping_method
|
|
174
180
|
original_shipping_method_id = shipping_method.try!(:id)
|
|
175
181
|
|
|
176
|
-
new_rates = Spree::Config.stock.estimator_class.new
|
|
182
|
+
new_rates = Spree::Config.stock.estimator_class.new.shipping_rates(to_package)
|
|
177
183
|
|
|
178
184
|
# If one of the new rates matches the previously selected shipping
|
|
179
185
|
# method, select that instead of the default provided by the estimator.
|
|
@@ -186,7 +192,7 @@ module Spree
|
|
|
186
192
|
end
|
|
187
193
|
|
|
188
194
|
self.shipping_rates = new_rates
|
|
189
|
-
|
|
195
|
+
save!
|
|
190
196
|
|
|
191
197
|
shipping_rates
|
|
192
198
|
end
|
|
@@ -206,7 +212,7 @@ module Spree
|
|
|
206
212
|
def selected_shipping_rate_id=(id)
|
|
207
213
|
shipping_rates.update_all(selected: false)
|
|
208
214
|
shipping_rates.update(id, selected: true)
|
|
209
|
-
|
|
215
|
+
save!
|
|
210
216
|
end
|
|
211
217
|
|
|
212
218
|
# Determines the appropriate +state+ according to the following logic:
|
|
@@ -217,10 +223,9 @@ module Spree
|
|
|
217
223
|
# ready all other cases
|
|
218
224
|
def determine_state(order)
|
|
219
225
|
return 'canceled' if order.canceled?
|
|
226
|
+
return 'shipped' if shipped?
|
|
220
227
|
return 'pending' unless order.can_ship?
|
|
221
|
-
|
|
222
|
-
return 'shipped' if state == 'shipped'
|
|
223
|
-
if order.paid? || !Spree::Config[:require_payment_to_ship]
|
|
228
|
+
if can_transition_from_pending_to_ready?
|
|
224
229
|
'ready'
|
|
225
230
|
else
|
|
226
231
|
'pending'
|
|
@@ -228,7 +233,7 @@ module Spree
|
|
|
228
233
|
end
|
|
229
234
|
|
|
230
235
|
def set_up_inventory(state, variant, order, line_item)
|
|
231
|
-
|
|
236
|
+
inventory_units.create(
|
|
232
237
|
state: state,
|
|
233
238
|
variant_id: variant.id,
|
|
234
239
|
order_id: order.id,
|
|
@@ -245,10 +250,6 @@ module Spree
|
|
|
245
250
|
selected_shipping_rate.try(:shipping_method) || shipping_rates.first.try(:shipping_method)
|
|
246
251
|
end
|
|
247
252
|
|
|
248
|
-
def tax_category
|
|
249
|
-
selected_shipping_rate.try(:tax_rate).try(:tax_category)
|
|
250
|
-
end
|
|
251
|
-
|
|
252
253
|
# Only one of either included_tax_total or additional_tax_total is set
|
|
253
254
|
# This method returns the total of the two. Saves having to check if
|
|
254
255
|
# tax is included or additional.
|
|
@@ -258,6 +259,7 @@ module Spree
|
|
|
258
259
|
|
|
259
260
|
def to_package
|
|
260
261
|
package = Stock::Package.new(stock_location)
|
|
262
|
+
package.shipment = self
|
|
261
263
|
inventory_units.includes(:variant).joins(:variant).group_by(&:state).each do |state, state_inventory_units|
|
|
262
264
|
package.add_multiple state_inventory_units, state.to_sym
|
|
263
265
|
end
|
|
@@ -269,35 +271,41 @@ module Spree
|
|
|
269
271
|
end
|
|
270
272
|
|
|
271
273
|
def tracking_url
|
|
274
|
+
return nil unless tracking && shipping_method
|
|
275
|
+
|
|
272
276
|
@tracking_url ||= shipping_method.build_tracking_url(tracking)
|
|
273
277
|
end
|
|
274
278
|
|
|
275
279
|
def update_amounts
|
|
276
280
|
if selected_shipping_rate
|
|
277
|
-
self.
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
281
|
+
self.cost = selected_shipping_rate.cost
|
|
282
|
+
self.adjustment_total = adjustments.additional.map(&:update!).compact.sum
|
|
283
|
+
if changed?
|
|
284
|
+
update_columns(
|
|
285
|
+
cost: cost,
|
|
286
|
+
adjustment_total: adjustment_total,
|
|
287
|
+
updated_at: Time.current
|
|
288
|
+
)
|
|
289
|
+
end
|
|
282
290
|
end
|
|
283
291
|
end
|
|
284
292
|
|
|
285
293
|
# Update Shipment and make sure Order states follow the shipment changes
|
|
286
294
|
def update_attributes_and_order(params = {})
|
|
287
|
-
if
|
|
288
|
-
if params.
|
|
295
|
+
if update_attributes params
|
|
296
|
+
if params.key? :selected_shipping_rate_id
|
|
289
297
|
# Changing the selected Shipping Rate won't update the cost (for now)
|
|
290
298
|
# so we persist the Shipment#cost before calculating order shipment
|
|
291
299
|
# total and updating payment state (given a change in shipment cost
|
|
292
300
|
# might change the Order#payment_state)
|
|
293
|
-
|
|
301
|
+
update_amounts
|
|
294
302
|
|
|
295
303
|
order.updater.update_shipment_total
|
|
296
304
|
order.updater.update_payment_state
|
|
297
305
|
|
|
298
306
|
# Update shipment state only after order total is updated because it
|
|
299
307
|
# (via Order#paid?) affects the shipment state (YAY)
|
|
300
|
-
|
|
308
|
+
update_columns(
|
|
301
309
|
state: determine_state(order),
|
|
302
310
|
updated_at: Time.current
|
|
303
311
|
)
|
|
@@ -318,11 +326,13 @@ module Spree
|
|
|
318
326
|
def update!(order)
|
|
319
327
|
old_state = state
|
|
320
328
|
new_state = determine_state(order)
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
329
|
+
if new_state != old_state
|
|
330
|
+
update_columns(
|
|
331
|
+
state: new_state,
|
|
332
|
+
updated_at: Time.current
|
|
333
|
+
)
|
|
334
|
+
after_ship if new_state == 'shipped'
|
|
335
|
+
end
|
|
326
336
|
end
|
|
327
337
|
|
|
328
338
|
def transfer_to_location(variant, quantity, stock_location)
|
|
@@ -333,8 +343,8 @@ module Spree
|
|
|
333
343
|
transaction do
|
|
334
344
|
new_shipment = order.shipments.create!(stock_location: stock_location)
|
|
335
345
|
|
|
336
|
-
order.contents.remove(variant, quantity, {shipment: self})
|
|
337
|
-
order.contents.add(variant, quantity, {shipment: new_shipment})
|
|
346
|
+
order.contents.remove(variant, quantity, { shipment: self })
|
|
347
|
+
order.contents.add(variant, quantity, { shipment: new_shipment })
|
|
338
348
|
|
|
339
349
|
refresh_rates
|
|
340
350
|
save!
|
|
@@ -343,16 +353,13 @@ module Spree
|
|
|
343
353
|
end
|
|
344
354
|
|
|
345
355
|
def transfer_to_shipment(variant, quantity, shipment_to_transfer_to)
|
|
346
|
-
|
|
347
|
-
final_quantity = quantity + quantity_already_shipment_to_transfer_to
|
|
348
|
-
|
|
349
|
-
if (quantity <= 0 || self == shipment_to_transfer_to)
|
|
356
|
+
if quantity <= 0 || self == shipment_to_transfer_to
|
|
350
357
|
raise ArgumentError
|
|
351
358
|
end
|
|
352
359
|
|
|
353
360
|
transaction do
|
|
354
|
-
order.contents.remove(variant, quantity, {shipment: self})
|
|
355
|
-
order.contents.add(variant, quantity, {shipment: shipment_to_transfer_to})
|
|
361
|
+
order.contents.remove(variant, quantity, { shipment: self })
|
|
362
|
+
order.contents.add(variant, quantity, { shipment: shipment_to_transfer_to })
|
|
356
363
|
|
|
357
364
|
refresh_rates
|
|
358
365
|
save!
|
|
@@ -367,48 +374,47 @@ module Spree
|
|
|
367
374
|
|
|
368
375
|
private
|
|
369
376
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
def can_get_rates?
|
|
375
|
-
order.ship_address && order.ship_address.valid?
|
|
376
|
-
end
|
|
377
|
+
def after_ship
|
|
378
|
+
order.shipping.ship_shipment(self, suppress_mailer: suppress_mailer)
|
|
379
|
+
end
|
|
377
380
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
end
|
|
381
|
+
def can_get_rates?
|
|
382
|
+
order.ship_address && order.ship_address.valid?
|
|
383
|
+
end
|
|
382
384
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
385
|
+
def manifest_restock(item)
|
|
386
|
+
if item.states["on_hand"].to_i > 0
|
|
387
|
+
stock_location.restock item.variant, item.states["on_hand"], self
|
|
386
388
|
end
|
|
387
389
|
|
|
388
|
-
|
|
389
|
-
stock_location.
|
|
390
|
+
if item.states["backordered"].to_i > 0
|
|
391
|
+
stock_location.restock_backordered item.variant, item.states["backordered"]
|
|
390
392
|
end
|
|
393
|
+
end
|
|
391
394
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
+
def manifest_unstock(item)
|
|
396
|
+
stock_location.unstock item.variant, item.quantity, self
|
|
397
|
+
end
|
|
395
398
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
+
def recalculate_adjustments
|
|
400
|
+
Spree::ItemAdjustments.new(self).update
|
|
401
|
+
end
|
|
399
402
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
end
|
|
404
|
-
end
|
|
403
|
+
def set_cost_zero_when_nil
|
|
404
|
+
self.cost = 0 unless cost
|
|
405
|
+
end
|
|
405
406
|
|
|
407
|
+
def update_adjustments
|
|
408
|
+
if cost_changed? && state != 'shipped'
|
|
409
|
+
recalculate_adjustments
|
|
410
|
+
end
|
|
411
|
+
end
|
|
406
412
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
end
|
|
413
|
+
def ensure_can_destroy
|
|
414
|
+
unless pending?
|
|
415
|
+
errors.add(:state, :cannot_destroy, state: state)
|
|
416
|
+
return false
|
|
412
417
|
end
|
|
418
|
+
end
|
|
413
419
|
end
|
|
414
420
|
end
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class ShippingCalculator < Calculator
|
|
3
|
-
|
|
4
|
-
def compute_shipment(shipment)
|
|
3
|
+
def compute_shipment(_shipment)
|
|
5
4
|
raise NotImplementedError, "Please implement 'compute_shipment(shipment)' in your calculator: #{self.class.name}"
|
|
6
5
|
end
|
|
7
6
|
|
|
8
|
-
def compute_package(
|
|
7
|
+
def compute_package(_package)
|
|
9
8
|
raise NotImplementedError, "Please implement 'compute_package(package)' in your calculator: #{self.class.name}"
|
|
10
9
|
end
|
|
11
10
|
|
|
12
|
-
def available?(
|
|
11
|
+
def available?(_package)
|
|
13
12
|
true
|
|
14
13
|
end
|
|
15
14
|
|
|
16
15
|
private
|
|
16
|
+
|
|
17
17
|
def total(content_items)
|
|
18
18
|
content_items.map(&:amount).sum
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
|
-
|
|
@@ -7,16 +7,15 @@ class Spree::ShippingManifest
|
|
|
7
7
|
|
|
8
8
|
def for_order(order)
|
|
9
9
|
Spree::ShippingManifest.new(
|
|
10
|
-
inventory_units: @inventory_units.select {|iu| iu.order_id == order.id }
|
|
10
|
+
inventory_units: @inventory_units.select { |iu| iu.order_id == order.id }
|
|
11
11
|
)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def items
|
|
15
15
|
# Grouping by the ID means that we don't have to call out to the association accessor
|
|
16
16
|
# This makes the grouping by faster because it results in less SQL cache hits.
|
|
17
|
-
@inventory_units.group_by(&:variant_id).map do |
|
|
18
|
-
variant_units.group_by(&:line_item_id).map do |
|
|
19
|
-
|
|
17
|
+
@inventory_units.group_by(&:variant_id).map do |_variant_id, variant_units|
|
|
18
|
+
variant_units.group_by(&:line_item_id).map do |_line_item_id, units|
|
|
20
19
|
states = {}
|
|
21
20
|
units.group_by(&:state).each { |state, iu| states[state] = iu.count }
|
|
22
21
|
|
|
@@ -4,21 +4,67 @@ module Spree
|
|
|
4
4
|
include Spree::CalculatedAdjustments
|
|
5
5
|
DISPLAY = [:both, :front_end, :back_end]
|
|
6
6
|
|
|
7
|
-
has_many :shipping_method_categories, :
|
|
7
|
+
has_many :shipping_method_categories, dependent: :destroy
|
|
8
8
|
has_many :shipping_categories, through: :shipping_method_categories
|
|
9
9
|
has_many :shipping_rates, inverse_of: :shipping_method
|
|
10
|
-
has_many :shipments, :
|
|
10
|
+
has_many :shipments, through: :shipping_rates
|
|
11
11
|
has_many :cartons, inverse_of: :shipping_method
|
|
12
12
|
|
|
13
13
|
has_many :shipping_method_zones
|
|
14
14
|
has_many :zones, through: :shipping_method_zones
|
|
15
15
|
|
|
16
|
-
belongs_to :tax_category, -> { with_deleted }, :
|
|
16
|
+
belongs_to :tax_category, -> { with_deleted }, class_name: 'Spree::TaxCategory'
|
|
17
|
+
has_many :shipping_method_stock_locations, dependent: :destroy, class_name: "Spree::ShippingMethodStockLocation"
|
|
18
|
+
has_many :stock_locations, through: :shipping_method_stock_locations
|
|
17
19
|
|
|
18
20
|
validates :name, presence: true
|
|
19
21
|
|
|
20
22
|
validate :at_least_one_shipping_category
|
|
21
23
|
|
|
24
|
+
# @param shipping_category_ids [Array<Integer>] ids of desired shipping categories
|
|
25
|
+
# @return [ActiveRecord::Relation] shipping methods which are associated
|
|
26
|
+
# with all of the provided shipping categories
|
|
27
|
+
def self.with_all_shipping_category_ids(shipping_category_ids)
|
|
28
|
+
# Some extra care is needed with the having clause to ensure we are
|
|
29
|
+
# counting distinct records of the join table. Otherwise a join could
|
|
30
|
+
# cause this to return incorrect results.
|
|
31
|
+
join_table = ShippingMethodCategory.arel_table
|
|
32
|
+
having = join_table[:id].count(true).eq(shipping_category_ids.count)
|
|
33
|
+
joins(:shipping_method_categories).
|
|
34
|
+
where(spree_shipping_method_categories: { shipping_category_id: shipping_category_ids }).
|
|
35
|
+
group('spree_shipping_methods.id').
|
|
36
|
+
having(having)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @param stock_location [Spree::StockLocation] stock location
|
|
40
|
+
# @return [ActiveRecord::Relation] shipping methods which are available
|
|
41
|
+
# with the stock location or are marked available_to_all
|
|
42
|
+
def self.available_in_stock_location(stock_location)
|
|
43
|
+
smsl_table = ShippingMethodStockLocation.arel_table
|
|
44
|
+
|
|
45
|
+
# We are searching for either a matching entry in the stock location join
|
|
46
|
+
# table or available_to_all being true.
|
|
47
|
+
# We need to use an outer join otherwise a shipping method with no
|
|
48
|
+
# associated stock locations will be filtered out of the results. In
|
|
49
|
+
# rails 5 this will be easy using .left_join and .or, but for now we must
|
|
50
|
+
# use arel to achieve this.
|
|
51
|
+
arel_join =
|
|
52
|
+
arel_table.join(smsl_table, Arel::Nodes::OuterJoin).
|
|
53
|
+
on(arel_table[:id].eq(smsl_table[:shipping_method_id])).
|
|
54
|
+
join_sources
|
|
55
|
+
arel_condition =
|
|
56
|
+
arel_table[:available_to_all].eq(true).or(smsl_table[:stock_location_id].eq(stock_location.id))
|
|
57
|
+
|
|
58
|
+
joins(arel_join).where(arel_condition).distinct
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# @param address [Spree::Address] address to match against zones
|
|
62
|
+
# @return [ActiveRecord::Relation] shipping methods which are associated
|
|
63
|
+
# with zones matching the provided address
|
|
64
|
+
def self.available_for_address(address)
|
|
65
|
+
joins(:zones).merge(Zone.for_address(address))
|
|
66
|
+
end
|
|
67
|
+
|
|
22
68
|
def include?(address)
|
|
23
69
|
return false unless address
|
|
24
70
|
zones.any? do |zone|
|
|
@@ -31,32 +77,17 @@ module Spree
|
|
|
31
77
|
tracking_url.gsub(/:tracking/, ERB::Util.url_encode(tracking)) # :url_encode exists in 1.8.7 through 2.1.0
|
|
32
78
|
end
|
|
33
79
|
|
|
34
|
-
def self.calculators
|
|
35
|
-
spree_calculators.send(model_name_without_spree_namespace).select{ |c| c < Spree::ShippingCalculator }
|
|
36
|
-
end
|
|
37
|
-
|
|
38
80
|
# Some shipping methods are only meant to be set via backend
|
|
39
81
|
def frontend?
|
|
40
|
-
|
|
82
|
+
display_on != "back_end"
|
|
41
83
|
end
|
|
42
84
|
|
|
43
85
|
private
|
|
44
|
-
def compute_amount(calculable)
|
|
45
|
-
self.calculator.compute(calculable)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def at_least_one_shipping_category
|
|
49
|
-
if self.shipping_categories.empty?
|
|
50
|
-
self.errors[:base] << "You need to select at least one shipping category"
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def self.on_backend_query
|
|
55
|
-
"#{table_name}.display_on != 'front_end' OR #{table_name}.display_on IS NULL"
|
|
56
|
-
end
|
|
57
86
|
|
|
58
|
-
|
|
59
|
-
|
|
87
|
+
def at_least_one_shipping_category
|
|
88
|
+
if shipping_categories.empty?
|
|
89
|
+
errors[:base] << "You need to select at least one shipping category"
|
|
60
90
|
end
|
|
91
|
+
end
|
|
61
92
|
end
|
|
62
93
|
end
|
|
@@ -2,45 +2,40 @@ module Spree
|
|
|
2
2
|
class ShippingRate < Spree::Base
|
|
3
3
|
belongs_to :shipment, class_name: 'Spree::Shipment'
|
|
4
4
|
belongs_to :shipping_method, -> { with_deleted }, class_name: 'Spree::ShippingMethod', inverse_of: :shipping_rates
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
has_many :taxes,
|
|
7
|
+
class_name: "Spree::ShippingRateTax",
|
|
8
|
+
foreign_key: "shipping_rate_id",
|
|
9
|
+
dependent: :destroy
|
|
6
10
|
|
|
7
11
|
delegate :order, :currency, to: :shipment
|
|
8
|
-
delegate :name, to: :shipping_method
|
|
12
|
+
delegate :name, :tax_category, to: :shipping_method
|
|
9
13
|
delegate :code, to: :shipping_method, prefix: true
|
|
14
|
+
alias_attribute :amount, :cost
|
|
10
15
|
|
|
11
|
-
|
|
12
|
-
Spree::Money.new(cost, currency: currency)
|
|
13
|
-
end
|
|
16
|
+
alias_method :discounted_amount, :amount
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
end
|
|
18
|
+
extend DisplayMoney
|
|
19
|
+
money_methods :amount
|
|
18
20
|
|
|
19
21
|
def display_price
|
|
20
|
-
price =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
price += " (#{Spree.t(:excl)} #{amount})"
|
|
31
|
-
end
|
|
32
|
-
else
|
|
33
|
-
amount = "#{display_tax_amount(tax_amount)} #{tax_rate.name}"
|
|
34
|
-
price += " (+ #{amount})"
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
price
|
|
22
|
+
price = display_amount.to_s
|
|
23
|
+
|
|
24
|
+
return price if taxes.empty? || amount == 0
|
|
25
|
+
|
|
26
|
+
tax_explanations = taxes.map(&:label).join(tax_label_separator)
|
|
27
|
+
|
|
28
|
+
Spree.t :display_price_with_explanations,
|
|
29
|
+
scope: 'shipping_rate.display_price',
|
|
30
|
+
price: price,
|
|
31
|
+
explanations: tax_explanations
|
|
39
32
|
end
|
|
40
33
|
alias_method :display_cost, :display_price
|
|
41
34
|
|
|
42
|
-
|
|
43
|
-
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def tax_label_separator
|
|
38
|
+
Spree.t :tax_label_separator, scope: 'shipping_rate.display_price'
|
|
44
39
|
end
|
|
45
40
|
end
|
|
46
41
|
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
# Used to persist shipping rate tax estimations.
|
|
3
|
+
# @attr [Spree::ShippingRate] shipping_rate The shipping rate to be taxed
|
|
4
|
+
# @attr [Spree::TaxRate] tax_rate The tax rate used to calculate the tax amount
|
|
5
|
+
# @since 1.3.0
|
|
6
|
+
# @see Spree::Tax::ShippingRateTaxer
|
|
7
|
+
class ShippingRateTax < ActiveRecord::Base
|
|
8
|
+
belongs_to :shipping_rate, class_name: "Spree::ShippingRate"
|
|
9
|
+
belongs_to :tax_rate, class_name: "Spree::TaxRate"
|
|
10
|
+
|
|
11
|
+
extend DisplayMoney
|
|
12
|
+
money_methods :absolute_amount
|
|
13
|
+
|
|
14
|
+
delegate :currency, to: :shipping_rate, allow_nil: true
|
|
15
|
+
|
|
16
|
+
def label
|
|
17
|
+
Spree.t translation_key,
|
|
18
|
+
scope: 'shipping_rate_tax.label',
|
|
19
|
+
amount: display_absolute_amount,
|
|
20
|
+
tax_rate_name: tax_rate.name
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def absolute_amount
|
|
24
|
+
amount.abs
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def translation_key
|
|
30
|
+
if tax_rate.included_in_price?
|
|
31
|
+
if amount > 0
|
|
32
|
+
:vat
|
|
33
|
+
else
|
|
34
|
+
:vat_refund
|
|
35
|
+
end
|
|
36
|
+
else
|
|
37
|
+
:sales_tax
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
data/app/models/spree/state.rb
CHANGED
|
@@ -13,7 +13,7 @@ module Spree
|
|
|
13
13
|
# blank is added elsewhere, if needed
|
|
14
14
|
def self.states_group_by_country_id
|
|
15
15
|
state_info = Hash.new { |h, k| h[k] = [] }
|
|
16
|
-
|
|
16
|
+
order(:name).each { |state|
|
|
17
17
|
state_info[state.country_id.to_s].push [state.id, state.name]
|
|
18
18
|
}
|
|
19
19
|
state_info
|
|
@@ -21,8 +21,8 @@ module Spree
|
|
|
21
21
|
quantifier = Stock::Quantifier.new(line_item.variant, stock_location)
|
|
22
22
|
unless quantifier.can_supply?(quantity)
|
|
23
23
|
variant = line_item.variant
|
|
24
|
-
display_name =
|
|
25
|
-
display_name += %
|
|
24
|
+
display_name = variant.name.to_s
|
|
25
|
+
display_name += %{ (#{variant.options_text})} unless variant.options_text.blank?
|
|
26
26
|
|
|
27
27
|
line_item.errors[:quantity] << Spree.t(
|
|
28
28
|
:selected_quantity_not_available,
|