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
data/app/models/spree/image.rb
CHANGED
|
@@ -10,14 +10,14 @@ module Spree
|
|
|
10
10
|
path: ':rails_root/public/spree/products/:id/:style/:basename.:extension',
|
|
11
11
|
convert_options: { all: '-strip -auto-orient -colorspace sRGB' }
|
|
12
12
|
validates_attachment :attachment,
|
|
13
|
-
:
|
|
14
|
-
:
|
|
13
|
+
presence: true,
|
|
14
|
+
content_type: { content_type: %w(image/jpeg image/jpg image/png image/gif) }
|
|
15
15
|
|
|
16
16
|
# save the w,h of the original image (from which others can be calculated)
|
|
17
17
|
# we need to look at the write-queue for images which have not been saved yet
|
|
18
18
|
after_post_process :find_dimensions
|
|
19
19
|
|
|
20
|
-
#used by admin products autocomplete
|
|
20
|
+
# used by admin products autocomplete
|
|
21
21
|
def mini_url
|
|
22
22
|
attachment.url(:mini, false)
|
|
23
23
|
end
|
|
@@ -75,7 +75,7 @@ module Spree
|
|
|
75
75
|
inventory_units.map do |iu|
|
|
76
76
|
iu.update_columns(
|
|
77
77
|
pending: false,
|
|
78
|
-
updated_at: Time.current
|
|
78
|
+
updated_at: Time.current
|
|
79
79
|
)
|
|
80
80
|
end
|
|
81
81
|
end
|
|
@@ -113,35 +113,35 @@ module Spree
|
|
|
113
113
|
return_items.not_expired.any?(&:exchange_requested?)
|
|
114
114
|
end
|
|
115
115
|
|
|
116
|
+
def allow_ship?
|
|
117
|
+
on_hand?
|
|
118
|
+
end
|
|
119
|
+
|
|
116
120
|
private
|
|
117
121
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
122
|
+
def fulfill_order
|
|
123
|
+
reload
|
|
124
|
+
order.fulfill!
|
|
125
|
+
end
|
|
121
126
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
end
|
|
127
|
+
def percentage_of_line_item
|
|
128
|
+
1 / BigDecimal.new(line_item.quantity)
|
|
129
|
+
end
|
|
126
130
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
def current_return_item
|
|
132
|
+
return_items.not_cancelled.first
|
|
133
|
+
end
|
|
130
134
|
|
|
131
|
-
|
|
132
|
-
|
|
135
|
+
def ensure_can_destroy
|
|
136
|
+
if !backordered? && !on_hand?
|
|
137
|
+
errors.add(:state, :cannot_destroy, state: state)
|
|
138
|
+
return false
|
|
133
139
|
end
|
|
134
140
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return false
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
unless shipment.pending?
|
|
142
|
-
errors.add(:base, :cannot_destroy_shipment_state, state: shipment.state)
|
|
143
|
-
return false
|
|
144
|
-
end
|
|
141
|
+
unless shipment.pending?
|
|
142
|
+
errors.add(:base, :cannot_destroy_shipment_state, state: shipment.state)
|
|
143
|
+
return false
|
|
145
144
|
end
|
|
145
|
+
end
|
|
146
146
|
end
|
|
147
147
|
end
|
|
@@ -49,7 +49,7 @@ module Spree
|
|
|
49
49
|
#
|
|
50
50
|
# We want to select the best promotion for the order, but the remainder
|
|
51
51
|
# of the calculations here are done in the OrderUpdater instead.
|
|
52
|
-
return if Spree::Order
|
|
52
|
+
return if item.is_a?(Spree::Order)
|
|
53
53
|
|
|
54
54
|
@item.promo_total = promo_total
|
|
55
55
|
|
|
@@ -67,13 +67,14 @@ module Spree
|
|
|
67
67
|
included_tax_total: @item.included_tax_total,
|
|
68
68
|
additional_tax_total: @item.additional_tax_total,
|
|
69
69
|
adjustment_total: @item.adjustment_total,
|
|
70
|
-
updated_at: Time.current
|
|
70
|
+
updated_at: Time.current
|
|
71
71
|
) if @item.changed?
|
|
72
72
|
|
|
73
73
|
@item
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
private
|
|
77
|
+
|
|
77
78
|
def adjustments
|
|
78
79
|
# This is done intentionally to avoid loading the association. If the
|
|
79
80
|
# association is loaded, the records may become stale due to code
|
|
@@ -8,11 +8,6 @@ module Spree
|
|
|
8
8
|
|
|
9
9
|
self.table_name = 'spree_users'
|
|
10
10
|
|
|
11
|
-
# for url generation
|
|
12
|
-
def self.model_name
|
|
13
|
-
ActiveModel::Name.new(self, nil, "User")
|
|
14
|
-
end
|
|
15
|
-
|
|
16
11
|
before_destroy :check_completed_orders
|
|
17
12
|
|
|
18
13
|
def self.model_name
|
|
@@ -23,6 +18,7 @@ module Spree
|
|
|
23
18
|
attr_accessor :password_confirmation
|
|
24
19
|
|
|
25
20
|
private
|
|
21
|
+
|
|
26
22
|
def check_completed_orders
|
|
27
23
|
raise Spree::Core::DestroyWithOrdersError if orders.complete.present?
|
|
28
24
|
end
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class LineItem < Spree::Base
|
|
3
|
-
before_validation :invalid_quantity_check
|
|
4
3
|
belongs_to :order, class_name: "Spree::Order", inverse_of: :line_items, touch: true
|
|
5
4
|
belongs_to :variant, -> { with_deleted }, class_name: "Spree::Variant", inverse_of: :line_items
|
|
6
5
|
belongs_to :tax_category, class_name: "Spree::TaxCategory"
|
|
@@ -13,25 +12,24 @@ module Spree
|
|
|
13
12
|
has_many :line_item_actions, dependent: :destroy
|
|
14
13
|
has_many :actions, through: :line_item_actions
|
|
15
14
|
|
|
16
|
-
before_validation :
|
|
17
|
-
before_validation :
|
|
15
|
+
before_validation :normalize_quantity
|
|
16
|
+
before_validation :set_required_attributes
|
|
18
17
|
|
|
19
18
|
validates :variant, presence: true
|
|
20
19
|
validates :quantity, numericality: {
|
|
21
20
|
only_integer: true,
|
|
22
|
-
greater_than: -1
|
|
23
|
-
message: Spree.t('validation.must_be_int')
|
|
21
|
+
greater_than: -1
|
|
24
22
|
}
|
|
25
23
|
validates :price, numericality: true
|
|
26
|
-
|
|
27
24
|
validate :ensure_proper_currency
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
|
|
26
|
+
after_create :update_tax_charge
|
|
30
27
|
|
|
31
28
|
after_save :update_inventory
|
|
32
29
|
after_save :update_adjustments
|
|
33
30
|
|
|
34
|
-
|
|
31
|
+
before_destroy :update_inventory
|
|
32
|
+
before_destroy :destroy_inventory_units
|
|
35
33
|
|
|
36
34
|
delegate :name, :description, :sku, :should_track_inventory?, to: :variant
|
|
37
35
|
# @note This will return the product even if it has been deleted.
|
|
@@ -39,30 +37,11 @@ module Spree
|
|
|
39
37
|
# item, if there is one
|
|
40
38
|
delegate :product, to: :variant
|
|
41
39
|
|
|
42
|
-
|
|
43
40
|
attr_accessor :target_shipment
|
|
44
41
|
|
|
45
42
|
self.whitelisted_ransackable_associations = ['variant']
|
|
46
43
|
self.whitelisted_ransackable_attributes = ['variant_id']
|
|
47
44
|
|
|
48
|
-
# Sets this line item's price, cost price, and currency from this line
|
|
49
|
-
# item's variant if they are nil and a variant is present.
|
|
50
|
-
def copy_price
|
|
51
|
-
if variant
|
|
52
|
-
self.price = variant.price if price.nil?
|
|
53
|
-
self.cost_price = variant.cost_price if cost_price.nil?
|
|
54
|
-
self.currency = variant.currency if currency.nil?
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Sets this line item's tax category from this line item's variant if a
|
|
59
|
-
# variant is present.
|
|
60
|
-
def copy_tax_category
|
|
61
|
-
if variant
|
|
62
|
-
self.tax_category = variant.tax_category
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
45
|
# @return [BigDecimal] the amount of this line item, which is the line
|
|
67
46
|
# item's price multiplied by its quantity.
|
|
68
47
|
def amount
|
|
@@ -76,12 +55,6 @@ module Spree
|
|
|
76
55
|
amount + promo_total
|
|
77
56
|
end
|
|
78
57
|
|
|
79
|
-
# @return [Spree::Money] the amount of this line item, taking into
|
|
80
|
-
# consideration line item promotions.
|
|
81
|
-
def discounted_money
|
|
82
|
-
Spree::Money.new(discounted_amount, { currency: currency })
|
|
83
|
-
end
|
|
84
|
-
|
|
85
58
|
# @return [BigDecimal] the amount of this line item, taking into
|
|
86
59
|
# consideration all its adjustments.
|
|
87
60
|
def final_amount
|
|
@@ -89,22 +62,32 @@ module Spree
|
|
|
89
62
|
end
|
|
90
63
|
alias total final_amount
|
|
91
64
|
|
|
92
|
-
# @return [
|
|
93
|
-
|
|
94
|
-
|
|
65
|
+
# @return [BigDecimal] the amount of this line item before included tax
|
|
66
|
+
# @note just like `amount`, this does not include any additional tax
|
|
67
|
+
def pre_tax_amount
|
|
68
|
+
discounted_amount - included_tax_total
|
|
95
69
|
end
|
|
96
|
-
alias single_display_amount single_money
|
|
97
70
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
alias display_total money
|
|
103
|
-
alias display_amount money
|
|
71
|
+
extend Spree::DisplayMoney
|
|
72
|
+
money_methods :amount, :discounted_amount, :final_amount, :pre_tax_amount, :price,
|
|
73
|
+
:included_tax_total, :additional_tax_total
|
|
74
|
+
alias discounted_money display_discounted_amount
|
|
104
75
|
|
|
105
|
-
#
|
|
106
|
-
|
|
107
|
-
|
|
76
|
+
# @return [Spree::Money] the price of this line item
|
|
77
|
+
alias money_price display_price
|
|
78
|
+
alias single_display_amount display_price
|
|
79
|
+
alias single_money display_price
|
|
80
|
+
|
|
81
|
+
# @return [Spree::Money] the amount of this line item
|
|
82
|
+
alias money display_amount
|
|
83
|
+
alias display_total display_amount
|
|
84
|
+
|
|
85
|
+
# Sets price and currency from a `Spree::Money` object
|
|
86
|
+
#
|
|
87
|
+
# @param [Spree::Money] money - the money object to obtain price and currency from
|
|
88
|
+
def money_price=(money)
|
|
89
|
+
self.price = money.to_d
|
|
90
|
+
self.currency = money.currency.iso_code
|
|
108
91
|
end
|
|
109
92
|
|
|
110
93
|
# @return [Boolean] true when it is possible to supply the required
|
|
@@ -119,59 +102,87 @@ module Spree
|
|
|
119
102
|
!sufficient_stock?
|
|
120
103
|
end
|
|
121
104
|
|
|
122
|
-
# Sets
|
|
123
|
-
#
|
|
105
|
+
# Sets options on the line item.
|
|
106
|
+
#
|
|
107
|
+
# The options can be arbitrary attributes on the LineItem.
|
|
124
108
|
#
|
|
125
109
|
# @param options [Hash] options for this line item
|
|
126
|
-
def options=(options={})
|
|
110
|
+
def options=(options = {})
|
|
127
111
|
return unless options.present?
|
|
112
|
+
assign_attributes options
|
|
113
|
+
end
|
|
128
114
|
|
|
129
|
-
|
|
115
|
+
def pricing_options
|
|
116
|
+
Spree::Config.pricing_options_class.from_line_item(self)
|
|
117
|
+
end
|
|
130
118
|
|
|
131
|
-
|
|
119
|
+
private
|
|
132
120
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
else
|
|
138
|
-
self.price = variant.price +
|
|
139
|
-
variant.price_modifier_amount(opts)
|
|
140
|
-
end
|
|
121
|
+
# Sets the quantity to zero if it is nil or less than zero.
|
|
122
|
+
def normalize_quantity
|
|
123
|
+
self.quantity = 0 if quantity.nil? || quantity < 0
|
|
124
|
+
end
|
|
141
125
|
|
|
142
|
-
|
|
126
|
+
# Sets tax category, price-related attributes from
|
|
127
|
+
# its variant if they are nil and a variant is present.
|
|
128
|
+
def set_required_attributes
|
|
129
|
+
return unless variant
|
|
130
|
+
self.tax_category ||= variant.tax_category
|
|
131
|
+
set_pricing_attributes
|
|
143
132
|
end
|
|
144
133
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
end
|
|
134
|
+
# Set price, cost_price and currency. This method used to be called #copy_price, but actually
|
|
135
|
+
# did more than just setting the price, hence renamed to #set_pricing_attributes
|
|
136
|
+
def set_pricing_attributes
|
|
137
|
+
# If the legacy method #copy_price has been overridden, handle that gracefully
|
|
138
|
+
return handle_copy_price_override if respond_to?(:copy_price)
|
|
151
139
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
140
|
+
self.currency ||= order.currency
|
|
141
|
+
self.cost_price ||= variant.cost_price
|
|
142
|
+
self.money_price = variant.price_for(pricing_options) if price.nil?
|
|
143
|
+
true
|
|
144
|
+
end
|
|
155
145
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
146
|
+
def handle_copy_price_override
|
|
147
|
+
copy_price
|
|
148
|
+
ActiveSupport::Deprecation.warn 'You have overridden Spree::LineItem#copy_price. ' \
|
|
149
|
+
'This method is now called Spree::LineItem#set_pricing_attributes. ' \
|
|
150
|
+
'Please adjust your override.',
|
|
151
|
+
caller
|
|
152
|
+
end
|
|
162
153
|
|
|
163
|
-
|
|
164
|
-
|
|
154
|
+
def update_inventory
|
|
155
|
+
if (changed? || target_shipment.present?) && order.has_checkout_step?("delivery")
|
|
156
|
+
Spree::OrderInventory.new(order, self).verify(target_shipment)
|
|
165
157
|
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def destroy_inventory_units
|
|
161
|
+
inventory_units.destroy_all
|
|
162
|
+
end
|
|
166
163
|
|
|
167
|
-
|
|
168
|
-
|
|
164
|
+
def update_adjustments
|
|
165
|
+
if quantity_changed?
|
|
166
|
+
update_tax_charge # Called to ensure pre_tax_amount is updated.
|
|
167
|
+
recalculate_adjustments
|
|
169
168
|
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def recalculate_adjustments
|
|
172
|
+
Spree::ItemAdjustments.new(self).update
|
|
173
|
+
end
|
|
170
174
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
+
def update_tax_charge
|
|
176
|
+
Spree::Tax::ItemAdjuster.new(self).adjust!
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def ensure_proper_currency
|
|
180
|
+
if currency != order.currency
|
|
181
|
+
Spree::Deprecation.warn "The line items currency is different from it's order currency. " \
|
|
182
|
+
"This behavior is not supported anymore and will be deleted soon.",
|
|
183
|
+
caller
|
|
184
|
+
errors.add(:currency, :must_match_order_currency)
|
|
175
185
|
end
|
|
186
|
+
end
|
|
176
187
|
end
|
|
177
188
|
end
|
|
@@ -21,7 +21,7 @@ module Spree
|
|
|
21
21
|
|
|
22
22
|
default_scope -> { order(:position) }
|
|
23
23
|
|
|
24
|
-
accepts_nested_attributes_for :option_values, reject_if: lambda { |ov| ov[:name].blank?
|
|
24
|
+
accepts_nested_attributes_for :option_values, reject_if: lambda { |ov| ov[:name].blank? && ov[:presentation].blank? }, allow_destroy: true
|
|
25
25
|
|
|
26
26
|
after_touch :touch_all_products
|
|
27
27
|
after_save :touch_all_products
|
|
@@ -12,6 +12,8 @@ module Spree
|
|
|
12
12
|
after_save :touch, if: :changed?
|
|
13
13
|
after_touch :touch_all_variants
|
|
14
14
|
|
|
15
|
+
delegate :name, :presentation, to: :option_type, prefix: :option_type
|
|
16
|
+
|
|
15
17
|
self.whitelisted_ransackable_attributes = ['presentation']
|
|
16
18
|
|
|
17
19
|
# Updates the updated_at column on all the variants associated with this
|
|
@@ -23,7 +25,7 @@ module Spree
|
|
|
23
25
|
# @return [String] a string representation of all option value and its
|
|
24
26
|
# option type
|
|
25
27
|
def presentation_with_option_type
|
|
26
|
-
"#{
|
|
28
|
+
"#{option_type.presentation} - #{presentation}"
|
|
27
29
|
end
|
|
28
30
|
end
|
|
29
31
|
end
|
|
@@ -110,7 +110,9 @@ module Spree
|
|
|
110
110
|
# calls matter so that we do not process payments
|
|
111
111
|
# until validations have passed
|
|
112
112
|
before_transition to: :complete, do: :validate_line_item_availability, unless: :unreturned_exchange?
|
|
113
|
-
|
|
113
|
+
if states[:delivery]
|
|
114
|
+
before_transition to: :complete, do: :ensure_available_shipping_rates
|
|
115
|
+
end
|
|
114
116
|
before_transition to: :complete, do: :ensure_promotions_eligible
|
|
115
117
|
before_transition to: :complete, do: :ensure_line_item_variants_are_not_deleted
|
|
116
118
|
before_transition to: :complete, do: :ensure_inventory_units, unless: :unreturned_exchange?
|
|
@@ -131,7 +133,6 @@ module Spree
|
|
|
131
133
|
order.logger.debug "Order #{order.number} transitioned from #{transition.from} to #{transition.to} via #{transition.event}"
|
|
132
134
|
end
|
|
133
135
|
|
|
134
|
-
|
|
135
136
|
after_failure do |order, transition|
|
|
136
137
|
order.logger.debug "Order #{order.number} halted transition on event #{transition.event} state #{transition.from}: #{order.errors.full_messages.join}"
|
|
137
138
|
end
|
|
@@ -140,13 +141,13 @@ module Spree
|
|
|
140
141
|
alias_method :save_state, :save
|
|
141
142
|
end
|
|
142
143
|
|
|
143
|
-
def self.go_to_state(name, options={})
|
|
144
|
-
|
|
144
|
+
def self.go_to_state(name, options = {})
|
|
145
|
+
checkout_steps[name] = options
|
|
145
146
|
previous_states.each do |state|
|
|
146
|
-
add_transition({from: state, to: name}.merge(options))
|
|
147
|
+
add_transition({ from: state, to: name }.merge(options))
|
|
147
148
|
end
|
|
148
149
|
if options[:if]
|
|
149
|
-
|
|
150
|
+
previous_states << name
|
|
150
151
|
else
|
|
151
152
|
self.previous_states = [name]
|
|
152
153
|
end
|
|
@@ -155,43 +156,43 @@ module Spree
|
|
|
155
156
|
def self.insert_checkout_step(name, options = {})
|
|
156
157
|
before = options.delete(:before)
|
|
157
158
|
after = options.delete(:after) unless before
|
|
158
|
-
after =
|
|
159
|
+
after = checkout_steps.keys.last unless before || after
|
|
159
160
|
|
|
160
|
-
cloned_steps =
|
|
161
|
-
cloned_removed_transitions =
|
|
162
|
-
|
|
161
|
+
cloned_steps = checkout_steps.clone
|
|
162
|
+
cloned_removed_transitions = removed_transitions.clone
|
|
163
|
+
checkout_flow do
|
|
163
164
|
cloned_steps.each_pair do |key, value|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
165
|
+
go_to_state(name, options) if key == before
|
|
166
|
+
go_to_state(key, value)
|
|
167
|
+
go_to_state(name, options) if key == after
|
|
167
168
|
end
|
|
168
169
|
cloned_removed_transitions.each do |transition|
|
|
169
|
-
|
|
170
|
+
remove_transition(transition)
|
|
170
171
|
end
|
|
171
172
|
end
|
|
172
173
|
end
|
|
173
174
|
|
|
174
175
|
def self.remove_checkout_step(name)
|
|
175
|
-
cloned_steps =
|
|
176
|
-
cloned_removed_transitions =
|
|
177
|
-
|
|
176
|
+
cloned_steps = checkout_steps.clone
|
|
177
|
+
cloned_removed_transitions = removed_transitions.clone
|
|
178
|
+
checkout_flow do
|
|
178
179
|
cloned_steps.each_pair do |key, value|
|
|
179
|
-
|
|
180
|
+
go_to_state(key, value) unless key == name
|
|
180
181
|
end
|
|
181
182
|
cloned_removed_transitions.each do |transition|
|
|
182
|
-
|
|
183
|
+
remove_transition(transition)
|
|
183
184
|
end
|
|
184
185
|
end
|
|
185
186
|
end
|
|
186
187
|
|
|
187
|
-
def self.remove_transition(options={})
|
|
188
|
-
|
|
189
|
-
|
|
188
|
+
def self.remove_transition(options = {})
|
|
189
|
+
removed_transitions << options
|
|
190
|
+
next_event_transitions.delete(find_transition(options))
|
|
190
191
|
end
|
|
191
192
|
|
|
192
|
-
def self.find_transition(options={})
|
|
193
|
+
def self.find_transition(options = {})
|
|
193
194
|
return nil if options.nil? || !options.include?(:from) || !options.include?(:to)
|
|
194
|
-
|
|
195
|
+
next_event_transitions.detect do |transition|
|
|
195
196
|
transition[options[:from].to_sym] == options[:to].to_sym
|
|
196
197
|
end
|
|
197
198
|
end
|
|
@@ -205,11 +206,11 @@ module Spree
|
|
|
205
206
|
end
|
|
206
207
|
|
|
207
208
|
def self.checkout_step_names
|
|
208
|
-
|
|
209
|
+
checkout_steps.keys
|
|
209
210
|
end
|
|
210
211
|
|
|
211
212
|
def self.add_transition(options)
|
|
212
|
-
|
|
213
|
+
next_event_transitions << { options.delete(:from) => options.delete(:to) }.merge(options)
|
|
213
214
|
end
|
|
214
215
|
|
|
215
216
|
def checkout_steps
|
|
@@ -223,15 +224,15 @@ module Spree
|
|
|
223
224
|
end
|
|
224
225
|
|
|
225
226
|
def has_checkout_step?(step)
|
|
226
|
-
step.present? &&
|
|
227
|
+
step.present? && checkout_steps.include?(step)
|
|
227
228
|
end
|
|
228
229
|
|
|
229
230
|
def passed_checkout_step?(step)
|
|
230
|
-
has_checkout_step?(step) && checkout_step_index(step) < checkout_step_index(
|
|
231
|
+
has_checkout_step?(step) && checkout_step_index(step) < checkout_step_index(state)
|
|
231
232
|
end
|
|
232
233
|
|
|
233
234
|
def checkout_step_index(step)
|
|
234
|
-
|
|
235
|
+
checkout_steps.index(step).to_i
|
|
235
236
|
end
|
|
236
237
|
|
|
237
238
|
def self.removed_transitions
|
|
@@ -243,7 +244,7 @@ module Spree
|
|
|
243
244
|
checkout_step_index(state) > checkout_step_index(self.state)
|
|
244
245
|
end
|
|
245
246
|
|
|
246
|
-
define_callbacks :updating_from_params, terminator: ->(
|
|
247
|
+
define_callbacks :updating_from_params, terminator: ->(_target, result) { result == false }
|
|
247
248
|
|
|
248
249
|
set_callback :updating_from_params, :before, :update_params_payment_source
|
|
249
250
|
|
|
@@ -253,7 +254,7 @@ module Spree
|
|
|
253
254
|
success = false
|
|
254
255
|
@updating_params = params
|
|
255
256
|
run_callbacks :updating_from_params do
|
|
256
|
-
attributes = @updating_params[:order] ? @updating_params[:order].permit(permitted_params).delete_if { |
|
|
257
|
+
attributes = @updating_params[:order] ? @updating_params[:order].permit(permitted_params).delete_if { |_k, v| v.nil? } : {}
|
|
257
258
|
|
|
258
259
|
# Set existing card after setting permitted parameters because
|
|
259
260
|
# rails would slice parameters containg ruby objects, apparently
|
|
@@ -261,7 +262,7 @@ module Spree
|
|
|
261
262
|
|
|
262
263
|
if existing_card_id.present?
|
|
263
264
|
credit_card = CreditCard.find existing_card_id
|
|
264
|
-
if credit_card.user_id !=
|
|
265
|
+
if credit_card.user_id != user_id || credit_card.user_id.blank?
|
|
265
266
|
raise Core::GatewayError.new Spree.t(:invalid_credit_card)
|
|
266
267
|
end
|
|
267
268
|
|
|
@@ -293,35 +294,35 @@ module Spree
|
|
|
293
294
|
end
|
|
294
295
|
|
|
295
296
|
def assign_default_addresses!
|
|
296
|
-
if
|
|
297
|
+
if user
|
|
297
298
|
# this is one of 2 places still using User#bill_address
|
|
298
299
|
self.bill_address ||= user.bill_address if user.bill_address.try!(:valid?)
|
|
299
300
|
# Skip setting ship address if order doesn't have a delivery checkout step
|
|
300
301
|
# to avoid triggering validations on shipping address
|
|
301
|
-
self.ship_address ||= user.ship_address if user.ship_address.try!(:valid?) &&
|
|
302
|
+
self.ship_address ||= user.ship_address if user.ship_address.try!(:valid?) && checkout_steps.include?("delivery")
|
|
302
303
|
end
|
|
303
304
|
end
|
|
304
305
|
|
|
305
306
|
def persist_user_address!
|
|
306
|
-
if !
|
|
307
|
-
|
|
307
|
+
if !temporary_address && user && user.respond_to?(:persist_order_address) && bill_address_id
|
|
308
|
+
user.persist_order_address(self)
|
|
308
309
|
end
|
|
309
310
|
end
|
|
310
311
|
|
|
311
312
|
def persist_user_credit_card
|
|
312
|
-
if !
|
|
313
|
-
default_cc =
|
|
314
|
-
# TODO target for refactoring -- why is order checkout responsible for the user -> credit_card relationship?
|
|
315
|
-
default_cc.user_id =
|
|
313
|
+
if !temporary_credit_card && user_id && valid_credit_cards.present?
|
|
314
|
+
default_cc = valid_credit_cards.first
|
|
315
|
+
# TODO: target for refactoring -- why is order checkout responsible for the user -> credit_card relationship?
|
|
316
|
+
default_cc.user_id = user_id
|
|
316
317
|
default_cc.default = true
|
|
317
318
|
default_cc.save
|
|
318
319
|
end
|
|
319
320
|
end
|
|
320
321
|
|
|
321
322
|
def assign_default_credit_card
|
|
322
|
-
if
|
|
323
|
-
cc =
|
|
324
|
-
|
|
323
|
+
if payments.from_credit_card.count == 0 && user && user.default_credit_card.try(:valid?)
|
|
324
|
+
cc = user.default_credit_card
|
|
325
|
+
payments.create!(payment_method_id: cc.payment_method_id, source: cc)
|
|
325
326
|
# this is one of 2 places still using User#bill_address
|
|
326
327
|
self.bill_address ||= user.default_credit_card.address || user.bill_address
|
|
327
328
|
end
|
|
@@ -359,7 +360,7 @@ module Spree
|
|
|
359
360
|
def update_params_payment_source
|
|
360
361
|
if @updating_params[:order] && (@updating_params[:order][:payments_attributes] || @updating_params[:order][:existing_card])
|
|
361
362
|
@updating_params[:order][:payments_attributes] ||= [{}]
|
|
362
|
-
@updating_params[:order][:payments_attributes].first[:amount] =
|
|
363
|
+
@updating_params[:order][:payments_attributes].first[:amount] = total
|
|
363
364
|
end
|
|
364
365
|
end
|
|
365
366
|
end
|