solidus_core 1.0.0.pre
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 +7 -0
- data/LICENSE +26 -0
- data/app/assets/images/logo/solidus.png +0 -0
- data/app/assets/images/logo/solidus_logo.png +0 -0
- data/app/assets/images/noimage/large.png +0 -0
- data/app/assets/images/noimage/mini.png +0 -0
- data/app/assets/images/noimage/product.png +0 -0
- data/app/assets/images/noimage/small.png +0 -0
- data/app/assets/javascripts/spree.js.coffee.erb +61 -0
- data/app/controllers/spree/base_controller.rb +15 -0
- data/app/helpers/spree/base_helper.rb +210 -0
- data/app/helpers/spree/checkout_helper.rb +31 -0
- data/app/helpers/spree/orders_helper.rb +17 -0
- data/app/helpers/spree/products_helper.rb +82 -0
- data/app/helpers/spree/store_helper.rb +16 -0
- data/app/helpers/spree/taxons_helper.rb +19 -0
- data/app/mailers/spree/base_mailer.rb +23 -0
- data/app/mailers/spree/carton_mailer.rb +12 -0
- data/app/mailers/spree/order_mailer.rb +35 -0
- data/app/mailers/spree/reimbursement_mailer.rb +10 -0
- data/app/mailers/spree/test_mailer.rb +8 -0
- data/app/models/concerns/spree/adjustment_source.rb +24 -0
- data/app/models/concerns/spree/calculated_adjustments.rb +33 -0
- data/app/models/concerns/spree/default_price.rb +34 -0
- data/app/models/concerns/spree/display_money.rb +32 -0
- data/app/models/concerns/spree/named_type.rb +12 -0
- data/app/models/concerns/spree/user_address.rb +30 -0
- data/app/models/concerns/spree/user_api_authentication.rb +13 -0
- data/app/models/concerns/spree/user_payment_source.rb +19 -0
- data/app/models/concerns/spree/user_reporting.rb +22 -0
- data/app/models/spree/ability.rb +74 -0
- data/app/models/spree/address.rb +157 -0
- data/app/models/spree/adjustment.rb +143 -0
- data/app/models/spree/app_configuration.rb +253 -0
- data/app/models/spree/asset.rb +6 -0
- data/app/models/spree/base.rb +15 -0
- data/app/models/spree/billing_integration.rb +21 -0
- data/app/models/spree/calculator.rb +47 -0
- data/app/models/spree/calculator/default_tax.rb +67 -0
- data/app/models/spree/calculator/flat_percent_item_total.rb +22 -0
- data/app/models/spree/calculator/flat_rate.rb +20 -0
- data/app/models/spree/calculator/flexi_rate.rb +33 -0
- data/app/models/spree/calculator/free_shipping.rb +21 -0
- data/app/models/spree/calculator/percent_on_line_item.rb +15 -0
- data/app/models/spree/calculator/percent_per_item.rb +50 -0
- data/app/models/spree/calculator/price_sack.rb +29 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +36 -0
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +22 -0
- data/app/models/spree/calculator/shipping/flat_rate.rb +18 -0
- data/app/models/spree/calculator/shipping/flexi_rate.rb +35 -0
- data/app/models/spree/calculator/shipping/per_item.rb +22 -0
- data/app/models/spree/calculator/shipping/price_sack.rb +28 -0
- data/app/models/spree/calculator/tiered_flat_rate.rb +37 -0
- data/app/models/spree/calculator/tiered_percent.rb +44 -0
- data/app/models/spree/carton.rb +57 -0
- data/app/models/spree/classification.rb +11 -0
- data/app/models/spree/country.rb +23 -0
- data/app/models/spree/credit_card.rb +197 -0
- data/app/models/spree/customer_return.rb +73 -0
- data/app/models/spree/exchange.rb +46 -0
- data/app/models/spree/gateway.rb +79 -0
- data/app/models/spree/gateway/bogus.rb +91 -0
- data/app/models/spree/gateway/bogus_simple.rb +26 -0
- data/app/models/spree/image.rb +44 -0
- data/app/models/spree/inventory_unit.rb +154 -0
- data/app/models/spree/item_adjustments.rb +85 -0
- data/app/models/spree/item_adjustments.rb.orig +93 -0
- data/app/models/spree/legacy_user.rb +38 -0
- data/app/models/spree/line_item.rb +183 -0
- data/app/models/spree/line_item_action.rb +6 -0
- data/app/models/spree/log_entry.rb +20 -0
- data/app/models/spree/option_type.rb +30 -0
- data/app/models/spree/option_value.rb +26 -0
- data/app/models/spree/option_values_variant.rb +6 -0
- data/app/models/spree/order.rb +811 -0
- data/app/models/spree/order/checkout.rb +351 -0
- data/app/models/spree/order/currency_updater.rb +40 -0
- data/app/models/spree/order/payments.rb +66 -0
- data/app/models/spree/order_cancellations.rb +72 -0
- data/app/models/spree/order_capturing.rb +49 -0
- data/app/models/spree/order_contents.rb +125 -0
- data/app/models/spree/order_inventory.rb +108 -0
- data/app/models/spree/order_mutex.rb +35 -0
- data/app/models/spree/order_promotion.rb +23 -0
- data/app/models/spree/order_shipping.rb +99 -0
- data/app/models/spree/order_stock_location.rb +15 -0
- data/app/models/spree/order_updater.rb +178 -0
- data/app/models/spree/payment.rb +292 -0
- data/app/models/spree/payment/processing.rb +210 -0
- data/app/models/spree/payment_capture_event.rb +9 -0
- data/app/models/spree/payment_method.rb +79 -0
- data/app/models/spree/payment_method/check.rb +31 -0
- data/app/models/spree/payment_method/store_credit.rb +127 -0
- data/app/models/spree/preference.rb +5 -0
- data/app/models/spree/preferences/configuration.rb +78 -0
- data/app/models/spree/preferences/preferable.rb +128 -0
- data/app/models/spree/preferences/preferable_class_methods.rb +64 -0
- data/app/models/spree/preferences/scoped_store.rb +33 -0
- data/app/models/spree/preferences/store.rb +93 -0
- data/app/models/spree/price.rb +62 -0
- data/app/models/spree/product.rb +347 -0
- data/app/models/spree/product/scopes.rb +262 -0
- data/app/models/spree/product_option_type.rb +7 -0
- data/app/models/spree/product_property.rb +25 -0
- data/app/models/spree/product_scope/scopes.rb +47 -0
- data/app/models/spree/promotion.rb +229 -0
- data/app/models/spree/promotion/actions/create_adjustment.rb +63 -0
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +80 -0
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +129 -0
- data/app/models/spree/promotion/actions/free_shipping.rb +41 -0
- data/app/models/spree/promotion/rules/first_order.rb +37 -0
- data/app/models/spree/promotion/rules/item_total.rb +61 -0
- data/app/models/spree/promotion/rules/one_use_per_user.rb +24 -0
- data/app/models/spree/promotion/rules/option_value.rb +50 -0
- data/app/models/spree/promotion/rules/product.rb +64 -0
- data/app/models/spree/promotion/rules/taxon.rb +69 -0
- data/app/models/spree/promotion/rules/user.rb +30 -0
- data/app/models/spree/promotion/rules/user_logged_in.rb +18 -0
- data/app/models/spree/promotion_action.rb +23 -0
- data/app/models/spree/promotion_builder.rb +55 -0
- data/app/models/spree/promotion_category.rb +6 -0
- data/app/models/spree/promotion_chooser.rb +30 -0
- data/app/models/spree/promotion_code.rb +39 -0
- data/app/models/spree/promotion_code/code_builder.rb +62 -0
- data/app/models/spree/promotion_handler/cart.rb +65 -0
- data/app/models/spree/promotion_handler/coupon.rb +119 -0
- data/app/models/spree/promotion_handler/free_shipping.rb +43 -0
- data/app/models/spree/promotion_handler/page.rb +24 -0
- data/app/models/spree/promotion_rule.rb +44 -0
- data/app/models/spree/property.rb +20 -0
- data/app/models/spree/prototype.rb +9 -0
- data/app/models/spree/refund.rb +96 -0
- data/app/models/spree/refund_reason.rb +13 -0
- data/app/models/spree/reimbursement.rb +188 -0
- data/app/models/spree/reimbursement/credit.rb +25 -0
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +56 -0
- data/app/models/spree/reimbursement/reimbursement_type_validator.rb +15 -0
- data/app/models/spree/reimbursement_performer.rb +43 -0
- data/app/models/spree/reimbursement_tax_calculator.rb +38 -0
- data/app/models/spree/reimbursement_type.rb +16 -0
- data/app/models/spree/reimbursement_type/credit.rb +13 -0
- data/app/models/spree/reimbursement_type/exchange.rb +9 -0
- data/app/models/spree/reimbursement_type/original_payment.rb +13 -0
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +70 -0
- data/app/models/spree/reimbursement_type/store_credit.rb +27 -0
- data/app/models/spree/return_authorization.rb +108 -0
- data/app/models/spree/return_authorization_reason.rb +7 -0
- data/app/models/spree/return_item.rb +311 -0
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +24 -0
- data/app/models/spree/return_item/eligibility_validator/default.rb +30 -0
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +16 -0
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +17 -0
- data/app/models/spree/return_item/eligibility_validator/order_completed.rb +16 -0
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +17 -0
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +16 -0
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +34 -0
- data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +9 -0
- data/app/models/spree/returns_calculator.rb +8 -0
- data/app/models/spree/role.rb +10 -0
- data/app/models/spree/role_user.rb +17 -0
- data/app/models/spree/shipment.rb +427 -0
- data/app/models/spree/shipping_calculator.rb +22 -0
- data/app/models/spree/shipping_category.rb +8 -0
- data/app/models/spree/shipping_manifest.rb +23 -0
- data/app/models/spree/shipping_method.rb +69 -0
- data/app/models/spree/shipping_method_category.rb +6 -0
- data/app/models/spree/shipping_rate.rb +57 -0
- data/app/models/spree/state.rb +30 -0
- data/app/models/spree/state_change.rb +15 -0
- data/app/models/spree/static_model_preferences.rb +32 -0
- data/app/models/spree/stock/adjuster.rb +28 -0
- data/app/models/spree/stock/availability_validator.rb +35 -0
- data/app/models/spree/stock/content_item.rb +48 -0
- data/app/models/spree/stock/coordinator.rb +96 -0
- data/app/models/spree/stock/differentiator.rb +44 -0
- data/app/models/spree/stock/estimator.rb +70 -0
- data/app/models/spree/stock/inventory_unit_builder.rb +22 -0
- data/app/models/spree/stock/inventory_validator.rb +14 -0
- data/app/models/spree/stock/package.rb +131 -0
- data/app/models/spree/stock/packer.rb +49 -0
- data/app/models/spree/stock/prioritizer.rb +47 -0
- data/app/models/spree/stock/quantifier.rb +47 -0
- data/app/models/spree/stock/splitter/backordered.rb +23 -0
- data/app/models/spree/stock/splitter/base.rb +28 -0
- data/app/models/spree/stock/splitter/shipping_category.rb +32 -0
- data/app/models/spree/stock/splitter/weight.rb +32 -0
- data/app/models/spree/stock_item.rb +107 -0
- data/app/models/spree/stock_location.rb +128 -0
- data/app/models/spree/stock_movement.rb +26 -0
- data/app/models/spree/stock_transfer.rb +108 -0
- data/app/models/spree/store.rb +38 -0
- data/app/models/spree/store_credit.rb +267 -0
- data/app/models/spree/store_credit_category.rb +17 -0
- data/app/models/spree/store_credit_event.rb +52 -0
- data/app/models/spree/store_credit_type.rb +6 -0
- data/app/models/spree/tax_category.rb +19 -0
- data/app/models/spree/tax_rate.rb +199 -0
- data/app/models/spree/taxon.rb +103 -0
- data/app/models/spree/taxonomy.rb +27 -0
- data/app/models/spree/tracker.rb +8 -0
- data/app/models/spree/transfer_item.rb +58 -0
- data/app/models/spree/unit_cancel.rb +32 -0
- data/app/models/spree/user_stock_location.rb +6 -0
- data/app/models/spree/validations/db_maximum_length_validator.rb +22 -0
- data/app/models/spree/variant.rb +356 -0
- data/app/models/spree/variant/scopes.rb +40 -0
- data/app/models/spree/zone.rb +138 -0
- data/app/models/spree/zone_member.rb +11 -0
- data/app/views/layouts/spree/base_mailer.html.erb +784 -0
- data/app/views/spree/admin/orders/customer_details/_autocomplete.js.erb +19 -0
- data/app/views/spree/carton_mailer/shipped_email.text.erb +16 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +45 -0
- data/app/views/spree/order_mailer/cancel_email.text.erb +16 -0
- data/app/views/spree/order_mailer/confirm_email.html.erb +84 -0
- data/app/views/spree/order_mailer/confirm_email.text.erb +38 -0
- data/app/views/spree/order_mailer/inventory_cancellation_email.text.erb +10 -0
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +22 -0
- data/app/views/spree/shared/_base_mailer_footer.html.erb +20 -0
- data/app/views/spree/shared/_base_mailer_header.html.erb +31 -0
- data/app/views/spree/shared/_error_messages.html.erb +11 -0
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +34 -0
- data/app/views/spree/test_mailer/test_email.html.erb +40 -0
- data/app/views/spree/test_mailer/test_email.text.erb +4 -0
- data/config/initializers/friendly_id.rb +88 -0
- data/config/initializers/premailer_assets.rb +1 -0
- data/config/initializers/user_class_extensions.rb +42 -0
- data/config/locales/en.yml +1534 -0
- data/config/routes.rb +1 -0
- data/db/default/spree/countries.rb +19 -0
- data/db/default/spree/roles.rb +2 -0
- data/db/default/spree/states.rb +16 -0
- data/db/default/spree/store_credit.rb +16 -0
- data/db/default/spree/stores.rb +9 -0
- data/db/default/spree/zones.rb +17 -0
- data/db/migrate/20120831092320_spree_one_two.rb +481 -0
- data/db/migrate/20120831092359_spree_promo_one_two.rb +45 -0
- data/db/migrate/20120905145253_add_tax_rate_label.rb +5 -0
- data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +5 -0
- data/db/migrate/20120929093553_remove_unused_preference_columns.rb +8 -0
- data/db/migrate/20121009142519_add_lock_version_to_variant.rb +5 -0
- data/db/migrate/20121010142909_add_states_required_to_countries.rb +5 -0
- data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +6 -0
- data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +11 -0
- data/db/migrate/20121031162139_split_prices_from_variants.rb +31 -0
- data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +9 -0
- data/db/migrate/20121107184631_add_currency_to_line_items.rb +5 -0
- data/db/migrate/20121107194006_add_currency_to_orders.rb +5 -0
- data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +5 -0
- data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +5 -0
- data/db/migrate/20121124203911_add_position_to_taxonomies.rb +5 -0
- data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +5 -0
- data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +6 -0
- data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +9 -0
- data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +6 -0
- data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +5 -0
- data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +9 -0
- data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +5 -0
- data/db/migrate/20130211190146_create_spree_stock_items.rb +14 -0
- data/db/migrate/20130211191120_create_spree_stock_locations.rb +11 -0
- data/db/migrate/20130213191427_create_default_stock.rb +34 -0
- data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +5 -0
- data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +5 -0
- data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +5 -0
- data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +6 -0
- data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +6 -0
- data/db/migrate/20130228210442_create_shipping_method_zone.rb +21 -0
- data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +5 -0
- data/db/migrate/20130301162924_create_shipping_method_categories.rb +13 -0
- data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +5 -0
- data/db/migrate/20130304162240_create_spree_shipping_rates.rb +24 -0
- data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +7 -0
- data/db/migrate/20130305143310_create_stock_movements.rb +12 -0
- data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +22 -0
- data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +5 -0
- data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +5 -0
- data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +5 -0
- data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +8 -0
- data/db/migrate/20130319062004_change_orders_total_precision.rb +8 -0
- data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +7 -0
- data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +7 -0
- data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +7 -0
- data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +7 -0
- data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +15 -0
- data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +9 -0
- data/db/migrate/20130326175857_add_stock_location_to_rma.rb +5 -0
- data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +15 -0
- data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +9 -0
- data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +14 -0
- data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +5 -0
- data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +13 -0
- data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +5 -0
- data/db/migrate/20130417120035_update_adjustment_states.rb +16 -0
- data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +15 -0
- data/db/migrate/20130418125341_create_spree_stock_transfers.rb +14 -0
- data/db/migrate/20130423110707_drop_products_count_on_hand.rb +5 -0
- data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +5 -0
- data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +23 -0
- data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +5 -0
- data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +5 -0
- data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +5 -0
- data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +5 -0
- data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +5 -0
- data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +9 -0
- data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +9 -0
- data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +6 -0
- data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +5 -0
- data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +7 -0
- data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +5 -0
- data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +6 -0
- data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +5 -0
- data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +6 -0
- data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +5 -0
- data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +5 -0
- data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +5 -0
- data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +10 -0
- data/db/migrate/20130806022521_drop_spree_mail_methods.rb +12 -0
- data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +8 -0
- data/db/migrate/20130807024301_upgrade_adjustments.rb +40 -0
- data/db/migrate/20130807024302_rename_adjustment_fields.rb +14 -0
- data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +5 -0
- data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +5 -0
- data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +5 -0
- data/db/migrate/20130813140619_expand_order_number_size.rb +9 -0
- data/db/migrate/20130813232134_rename_activators_to_promotions.rb +5 -0
- data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +5 -0
- data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +5 -0
- data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +16 -0
- data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +8 -0
- data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +15 -0
- data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +19 -0
- data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +5 -0
- data/db/migrate/20130909115621_change_states_required_for_countries.rb +9 -0
- data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +5 -0
- data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +5 -0
- data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +7 -0
- data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +16 -0
- data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +5 -0
- data/db/migrate/20131107132123_add_tax_category_to_variants.rb +6 -0
- data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +5 -0
- data/db/migrate/20131118043959_add_included_to_adjustments.rb +5 -0
- data/db/migrate/20131118050234_rename_tax_total_fields.rb +11 -0
- data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +21 -0
- data/db/migrate/20131120234456_add_updated_at_to_variants.rb +5 -0
- data/db/migrate/20131127001002_add_position_to_classifications.rb +5 -0
- data/db/migrate/20131211112807_create_spree_orders_promotions.rb +8 -0
- data/db/migrate/20131211192741_unique_shipping_method_categories.rb +24 -0
- data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +5 -0
- data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +8 -0
- data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +5 -0
- data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +5 -0
- data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +6 -0
- data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +5 -0
- data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +6 -0
- data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +5 -0
- data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +5 -0
- data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +12 -0
- data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +5 -0
- data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +11 -0
- data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +5 -0
- data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +5 -0
- data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +6 -0
- data/db/migrate/20140213184916_add_more_indexes.rb +13 -0
- data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +5 -0
- data/db/migrate/20140227112348_add_preference_store_to_everything.rb +8 -0
- data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +13 -0
- data/db/migrate/20140309023735_migrate_old_preferences.rb +23 -0
- data/db/migrate/20140309024355_create_spree_stores.rb +25 -0
- data/db/migrate/20140309033438_create_store_from_preferences.rb +30 -0
- data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +6 -0
- data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +8 -0
- data/db/migrate/20140331100557_add_additional_store_fields.rb +8 -0
- data/db/migrate/20140410141842_add_many_missing_indexes.rb +17 -0
- data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +66 -0
- data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +5 -0
- data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +8 -0
- data/db/migrate/20140518174634_add_token_to_spree_orders.rb +5 -0
- data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +29 -0
- data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +10 -0
- data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +6 -0
- data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +6 -0
- data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +5 -0
- data/db/migrate/20140625214618_create_spree_refunds.rb +12 -0
- data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +12 -0
- data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +5 -0
- data/db/migrate/20140708132019_create_order_mutex.rb +11 -0
- data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +10 -0
- data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +55 -0
- data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +7 -0
- data/db/migrate/20140710190048_drop_return_authorization_amount.rb +5 -0
- data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +28 -0
- data/db/migrate/20140713140527_create_spree_refund_reasons.rb +14 -0
- data/db/migrate/20140713142214_rename_return_authorization_reason.rb +5 -0
- data/db/migrate/20140715182625_create_spree_promotion_categories.rb +11 -0
- data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +9 -0
- data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +6 -0
- data/db/migrate/20140717155155_create_default_refund_reason.rb +9 -0
- data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +7 -0
- data/db/migrate/20140718133010_create_spree_customer_returns.rb +9 -0
- data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +6 -0
- data/db/migrate/20140718195325_create_friendly_id_slugs.rb +15 -0
- data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +5 -0
- data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +13 -0
- data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +15 -0
- data/db/migrate/20140725131539_create_spree_reimbursements.rb +21 -0
- data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +5 -0
- data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +7 -0
- data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +5 -0
- data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +20 -0
- data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +10 -0
- data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +5 -0
- data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +10 -0
- data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +9 -0
- data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +10 -0
- data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +7 -0
- data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +5 -0
- data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +6 -0
- data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +5 -0
- data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +6 -0
- data/db/migrate/20141009204607_add_store_id_to_orders.rb +8 -0
- data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +8 -0
- data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +5 -0
- data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +8 -0
- data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +13 -0
- data/db/migrate/20141105213646_update_classifications_positions.rb +9 -0
- data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +5 -0
- data/db/migrate/20141231151320_add_default_column_to_price.rb +5 -0
- data/db/migrate/20150112194216_add_position_to_stock_location.rb +5 -0
- data/db/migrate/20150113002122_create_spree_promotion_codes.rb +13 -0
- data/db/migrate/20150113002123_create_adjustment_promotion_code_association.rb +6 -0
- data/db/migrate/20150121202544_add_restock_inventory_to_stock_location.rb +5 -0
- data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +5 -0
- data/db/migrate/20150127161843_create_order_stock_locations.rb +12 -0
- data/db/migrate/20150203151219_add_fulfillable_to_stock_location.rb +5 -0
- data/db/migrate/20150205210527_add_code_to_refund_reason.rb +5 -0
- data/db/migrate/20150213160148_add_promotion_code_id_to_orders_promotions.rb +7 -0
- data/db/migrate/20150213163612_add_approver_name_to_spree_orders.rb +5 -0
- data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +65 -0
- data/db/migrate/20150226195213_downcase_promotion_codes_values.rb +11 -0
- data/db/migrate/20150227161934_add_order_ids_to_adjustments_where_missing.rb +9 -0
- data/db/migrate/20150303212749_add_per_code_usage_limit_to_promotions.rb +5 -0
- data/db/migrate/20150303212826_remove_usage_limit_from_promotion_codes.rb +5 -0
- data/db/migrate/20150304211616_add_timestamps_to_order_promotions.rb +6 -0
- data/db/migrate/20150305043021_create_spree_cartons.rb +24 -0
- data/db/migrate/20150305210403_add_timestamps_to_spree_roles_users.rb +7 -0
- data/db/migrate/20150313140507_remove_considered_risky_from_spree_orders.rb +5 -0
- data/db/migrate/20150313192827_add_index_to_inventory_units_carton_id.rb +5 -0
- data/db/migrate/20150313201235_add_imported_from_shipment_id_to_cartons.rb +8 -0
- data/db/migrate/20150313201503_copy_shipped_shipments_to_cartons.rb +13 -0
- data/db/migrate/20150330144639_create_spree_user_stock_locations.rb +10 -0
- data/db/migrate/20150331134544_add_stock_location_code.rb +5 -0
- data/db/migrate/20150402210430_create_unit_cancels.rb +10 -0
- data/db/migrate/20150407173305_add_fields_to_stock_transfer.rb +12 -0
- data/db/migrate/20150407173531_create_transfer_items.rb +14 -0
- data/db/migrate/20150424143547_drop_stock_transfer_type.rb +10 -0
- data/db/migrate/20150424161102_add_stock_transfer_finalized_at.rb +8 -0
- data/db/migrate/20150429125822_rename_stock_transfer_reference.rb +5 -0
- data/db/migrate/20150430233803_create_line_item_actions.rb +10 -0
- data/db/migrate/20150506181159_create_spree_store_credit_categories.rb +10 -0
- data/db/migrate/20150506181244_create_spree_store_credits.rb +19 -0
- data/db/migrate/20150506181539_create_spree_store_credit_events.rb +17 -0
- data/db/migrate/20150506181611_create_spree_store_credit_payment_method.rb +13 -0
- data/db/migrate/20150506181715_create_store_credit_types.rb +17 -0
- data/db/migrate/20150506182045_create_store_credit_reimbursement_type.rb +5 -0
- data/db/migrate/20150508044622_add_resellable_to_return_items.rb +5 -0
- data/db/migrate/20150514185559_add_invalidated_at_to_spree_store_credits.rb +5 -0
- data/db/migrate/20150514201836_migrate_deleted_store_credits_to_invalidated.rb +13 -0
- data/db/migrate/20150515170322_add_check_stock_on_transfer.rb +5 -0
- data/db/migrate/20150528125647_delete_inventory_units_without_shipment.rb +25 -0
- data/db/migrate/20150601191251_add_deleted_at_to_stock_transfers.rb +5 -0
- data/db/migrate/20150601204148_add_deleted_at_to_transfer_items.rb +5 -0
- data/db/migrate/20150609193231_add_preferences_to_promotion_actions.rb +5 -0
- data/db/migrate/20150610182638_add_id_to_spree_option_values_variants.rb +5 -0
- data/db/migrate/20150611200247_add_frontend_viewable_to_spree_orders.rb +5 -0
- data/db/migrate/20150612205731_remove_spree_configurations.rb +15 -0
- data/db/migrate/20150618191713_remove_credit_card_address_id.rb +7 -0
- data/db/migrate/20150626214817_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +10 -0
- data/db/seeds.rb +5 -0
- data/lib/generators/spree/custom_user/custom_user_generator.rb +56 -0
- data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +36 -0
- data/lib/generators/spree/custom_user/templates/initializer.rb.tt +1 -0
- data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +140 -0
- data/lib/generators/spree/dummy/templates/initializers/custom_user.rb +1 -0
- data/lib/generators/spree/dummy/templates/initializers/devise.rb +3 -0
- data/lib/generators/spree/dummy/templates/rails/application.rb +10 -0
- data/lib/generators/spree/dummy/templates/rails/boot.rb +6 -0
- data/lib/generators/spree/dummy/templates/rails/database.yml +65 -0
- data/lib/generators/spree/dummy/templates/rails/routes.rb +2 -0
- data/lib/generators/spree/dummy/templates/rails/script/rails +6 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +34 -0
- data/lib/generators/spree/install/install_generator.rb +191 -0
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +41 -0
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +13 -0
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +13 -0
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +12 -0
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +12 -0
- data/lib/solidus_core.rb +1 -0
- data/lib/spree/core.rb +95 -0
- data/lib/spree/core/controller_helpers/auth.rb +83 -0
- data/lib/spree/core/controller_helpers/common.rb +74 -0
- data/lib/spree/core/controller_helpers/order.rb +106 -0
- data/lib/spree/core/controller_helpers/respond_with.rb +65 -0
- data/lib/spree/core/controller_helpers/search.rb +14 -0
- data/lib/spree/core/controller_helpers/store.rb +19 -0
- data/lib/spree/core/controller_helpers/strong_parameters.rb +42 -0
- data/lib/spree/core/delegate_belongs_to.rb +95 -0
- data/lib/spree/core/engine.rb +114 -0
- data/lib/spree/core/environment.rb +15 -0
- data/lib/spree/core/environment/calculators.rb +12 -0
- data/lib/spree/core/environment_extension.rb +25 -0
- data/lib/spree/core/importer.rb +9 -0
- data/lib/spree/core/importer/order.rb +202 -0
- data/lib/spree/core/importer/product.rb +62 -0
- data/lib/spree/core/permalinks.rb +71 -0
- data/lib/spree/core/product_duplicator.rb +74 -0
- data/lib/spree/core/product_filters.rb +194 -0
- data/lib/spree/core/routes.rb +46 -0
- data/lib/spree/core/search/base.rb +97 -0
- data/lib/spree/core/search/variant.rb +46 -0
- data/lib/spree/core/unreturned_item_charger.rb +102 -0
- data/lib/spree/core/validators/email.rb +7 -0
- data/lib/spree/core/version.rb +5 -0
- data/lib/spree/i18n.rb +37 -0
- data/lib/spree/i18n/base.rb +17 -0
- data/lib/spree/i18n/initializer.rb +1 -0
- data/lib/spree/localized_number.rb +24 -0
- data/lib/spree/migrations.rb +76 -0
- data/lib/spree/money.rb +72 -0
- data/lib/spree/permitted_attributes.rb +114 -0
- data/lib/spree/promo/environment.rb +9 -0
- data/lib/spree/responder.rb +45 -0
- data/lib/spree/testing_support/ability_helpers.rb +105 -0
- data/lib/spree/testing_support/authorization_helpers.rb +63 -0
- data/lib/spree/testing_support/bar_ability.rb +14 -0
- data/lib/spree/testing_support/caching.rb +47 -0
- data/lib/spree/testing_support/capybara_ext.rb +163 -0
- data/lib/spree/testing_support/common_rake.rb +40 -0
- data/lib/spree/testing_support/controller_requests.rb +83 -0
- data/lib/spree/testing_support/extension_rake.rb +10 -0
- data/lib/spree/testing_support/factories.rb +20 -0
- data/lib/spree/testing_support/factories/address_factory.rb +22 -0
- data/lib/spree/testing_support/factories/adjustment_factory.rb +26 -0
- data/lib/spree/testing_support/factories/calculator_factory.rb +24 -0
- data/lib/spree/testing_support/factories/carton_factory.rb +21 -0
- data/lib/spree/testing_support/factories/country_factory.rb +9 -0
- data/lib/spree/testing_support/factories/credit_card_factory.rb +10 -0
- data/lib/spree/testing_support/factories/customer_return_factory.rb +31 -0
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +10 -0
- data/lib/spree/testing_support/factories/line_item_factory.rb +14 -0
- data/lib/spree/testing_support/factories/options_factory.rb +13 -0
- data/lib/spree/testing_support/factories/order_factory.rb +100 -0
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +6 -0
- data/lib/spree/testing_support/factories/payment_factory.rb +28 -0
- data/lib/spree/testing_support/factories/payment_method_factory.rb +27 -0
- data/lib/spree/testing_support/factories/price_factory.rb +7 -0
- data/lib/spree/testing_support/factories/product_factory.rb +36 -0
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +6 -0
- data/lib/spree/testing_support/factories/product_property_factory.rb +6 -0
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +6 -0
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +6 -0
- data/lib/spree/testing_support/factories/promotion_factory.rb +62 -0
- data/lib/spree/testing_support/factories/property_factory.rb +6 -0
- data/lib/spree/testing_support/factories/prototype_factory.rb +6 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +14 -0
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +16 -0
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +7 -0
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +18 -0
- data/lib/spree/testing_support/factories/return_item_factory.rb +16 -0
- data/lib/spree/testing_support/factories/role_factory.rb +9 -0
- data/lib/spree/testing_support/factories/shipment_factory.rb +28 -0
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +5 -0
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +25 -0
- data/lib/spree/testing_support/factories/state_factory.rb +13 -0
- data/lib/spree/testing_support/factories/stock_factory.rb +31 -0
- data/lib/spree/testing_support/factories/stock_item_factory.rb +9 -0
- data/lib/spree/testing_support/factories/stock_location_factory.rb +28 -0
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +11 -0
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +28 -0
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +6 -0
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +15 -0
- data/lib/spree/testing_support/factories/store_credit_factory.rb +10 -0
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +13 -0
- data/lib/spree/testing_support/factories/store_factory.rb +8 -0
- data/lib/spree/testing_support/factories/tax_category_factory.rb +7 -0
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +8 -0
- data/lib/spree/testing_support/factories/taxon_factory.rb +7 -0
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +5 -0
- data/lib/spree/testing_support/factories/tracker_factory.rb +7 -0
- data/lib/spree/testing_support/factories/user_factory.rb +22 -0
- data/lib/spree/testing_support/factories/variant_factory.rb +39 -0
- data/lib/spree/testing_support/factories/zone_factory.rb +17 -0
- data/lib/spree/testing_support/flash.rb +27 -0
- data/lib/spree/testing_support/i18n.rb +98 -0
- data/lib/spree/testing_support/mail.rb +20 -0
- data/lib/spree/testing_support/order_walkthrough.rb +78 -0
- data/lib/spree/testing_support/preferences.rb +29 -0
- data/lib/spree/testing_support/rspec-activemodel-mocks_patch.rb +8 -0
- data/lib/spree/testing_support/url_helpers.rb +9 -0
- data/lib/spree_core.rb +1 -0
- data/lib/tasks/core.rake +101 -0
- data/lib/tasks/email.rake +7 -0
- data/lib/tasks/exchanges.rake +48 -0
- data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +180 -0
- data/lib/tasks/order_capturing.rake +23 -0
- data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
- data/vendor/assets/javascripts/jquery.payment.js +497 -0
- data/vendor/assets/javascripts/jsuri.js +2 -0
- data/vendor/assets/stylesheets/normalize.css +375 -0
- data/vendor/assets/stylesheets/skeleton.css +242 -0
- metadata +993 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
# Manage (recalculate) item (LineItem or Shipment) adjustments
|
|
3
|
+
class ItemAdjustments
|
|
4
|
+
attr_reader :item
|
|
5
|
+
|
|
6
|
+
# @param item [Order, LineItem, Shipment] the item whose adjustments should be updated
|
|
7
|
+
def initialize(item)
|
|
8
|
+
@item = item
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Update the item's adjustments and totals
|
|
12
|
+
#
|
|
13
|
+
# If the item is an {Order}, this will update and select the best
|
|
14
|
+
# promotion adjustment.
|
|
15
|
+
#
|
|
16
|
+
# If it is a {LineItem} or {Shipment}, it will update and select the best
|
|
17
|
+
# promotion adjustment, update tax adjustments, update cancellation
|
|
18
|
+
# adjustments, and then update the total fields (promo_total,
|
|
19
|
+
# included_tax_total, additional_tax_total, and adjustment_total) on the
|
|
20
|
+
# item.
|
|
21
|
+
#
|
|
22
|
+
# This is a noop if the item is not persisted.
|
|
23
|
+
def update
|
|
24
|
+
return @item unless item.persisted?
|
|
25
|
+
|
|
26
|
+
# Promotion adjustments must be applied first, then tax adjustments.
|
|
27
|
+
# This fits the criteria for VAT tax as outlined here:
|
|
28
|
+
# http://www.hmrc.gov.uk/vat/managing/charging/discounts-etc.htm#1
|
|
29
|
+
#
|
|
30
|
+
# It also fits the criteria for sales tax as outlined here:
|
|
31
|
+
# http://www.boe.ca.gov/formspubs/pub113/
|
|
32
|
+
#
|
|
33
|
+
# Tax adjustments come in not one but *two* exciting flavours:
|
|
34
|
+
# Included & additional
|
|
35
|
+
|
|
36
|
+
# Included tax adjustments are those which are included in the price.
|
|
37
|
+
# These ones should not affect the eventual total price.
|
|
38
|
+
#
|
|
39
|
+
# Additional tax adjustments are the opposite, affecting the final total.
|
|
40
|
+
|
|
41
|
+
promotion_adjustments = adjustments.select(&:promotion?)
|
|
42
|
+
promotion_adjustments.each(&:update!)
|
|
43
|
+
|
|
44
|
+
promo_total = PromotionChooser.new(promotion_adjustments).update
|
|
45
|
+
|
|
46
|
+
# Calculating the totals for the order here would be incorrect. Order's
|
|
47
|
+
# totals are the sum of the adjustments on all child models, as well as
|
|
48
|
+
# its own.
|
|
49
|
+
#
|
|
50
|
+
# We want to select the best promotion for the order, but the remainder
|
|
51
|
+
# of the calculations here are done in the OrderUpdater instead.
|
|
52
|
+
return if Spree::Order === item
|
|
53
|
+
|
|
54
|
+
@item.promo_total = promo_total
|
|
55
|
+
|
|
56
|
+
tax = adjustments.select(&:tax?)
|
|
57
|
+
|
|
58
|
+
@item.included_tax_total = tax.select(&:included?).map(&:update!).compact.sum
|
|
59
|
+
@item.additional_tax_total = tax.reject(&:included?).map(&:update!).compact.sum
|
|
60
|
+
|
|
61
|
+
item_cancellation_total = adjustments.select(&:cancellation?).map(&:update!).compact.sum
|
|
62
|
+
|
|
63
|
+
@item.adjustment_total = @item.promo_total + @item.additional_tax_total + item_cancellation_total
|
|
64
|
+
|
|
65
|
+
@item.update_columns(
|
|
66
|
+
:promo_total => @item.promo_total,
|
|
67
|
+
:included_tax_total => @item.included_tax_total,
|
|
68
|
+
:additional_tax_total => @item.additional_tax_total,
|
|
69
|
+
:adjustment_total => @item.adjustment_total,
|
|
70
|
+
:updated_at => Time.now,
|
|
71
|
+
) if @item.changed?
|
|
72
|
+
|
|
73
|
+
@item
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
private
|
|
77
|
+
def adjustments
|
|
78
|
+
# This is done intentionally to avoid loading the association. If the
|
|
79
|
+
# association is loaded, the records may become stale due to code
|
|
80
|
+
# elsewhere in spree. When that is remedied, this should be changed to
|
|
81
|
+
# just item.adjustments
|
|
82
|
+
@adjustments ||= item.adjustments.all.to_a
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
# Manage (recalculate) item (LineItem or Shipment) adjustments
|
|
3
|
+
class ItemAdjustments
|
|
4
|
+
attr_reader :item
|
|
5
|
+
|
|
6
|
+
# @param item [Order, LineItem, Shipment] the item whose adjustments should be updated
|
|
7
|
+
def initialize(item)
|
|
8
|
+
@item = item
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Update the item's adjustments and totals
|
|
12
|
+
#
|
|
13
|
+
# If the item is an {Order}, this will update and select the best
|
|
14
|
+
# promotion adjustment.
|
|
15
|
+
#
|
|
16
|
+
# If it is a {LineItem} or {Shipment}, it will update and select the best
|
|
17
|
+
# promotion adjustment, update tax adjustments, update cancellation
|
|
18
|
+
# adjustments, and then update the total fields (promo_total,
|
|
19
|
+
# included_tax_total, additional_tax_total, and adjustment_total) on the
|
|
20
|
+
# item.
|
|
21
|
+
#
|
|
22
|
+
# This is a noop if the item is not persisted.
|
|
23
|
+
def update
|
|
24
|
+
return @item unless item.persisted?
|
|
25
|
+
|
|
26
|
+
# Promotion adjustments must be applied first, then tax adjustments.
|
|
27
|
+
# This fits the criteria for VAT tax as outlined here:
|
|
28
|
+
# http://www.hmrc.gov.uk/vat/managing/charging/discounts-etc.htm#1
|
|
29
|
+
#
|
|
30
|
+
# It also fits the criteria for sales tax as outlined here:
|
|
31
|
+
# http://www.boe.ca.gov/formspubs/pub113/
|
|
32
|
+
#
|
|
33
|
+
# Tax adjustments come in not one but *two* exciting flavours:
|
|
34
|
+
# Included & additional
|
|
35
|
+
|
|
36
|
+
# Included tax adjustments are those which are included in the price.
|
|
37
|
+
# These ones should not affect the eventual total price.
|
|
38
|
+
#
|
|
39
|
+
# Additional tax adjustments are the opposite, affecting the final total.
|
|
40
|
+
|
|
41
|
+
promotion_adjustments = adjustments.select(&:promotion?)
|
|
42
|
+
promotion_adjustments.each(&:update!)
|
|
43
|
+
|
|
44
|
+
promo_total = PromotionChooser.new(promotion_adjustments).update
|
|
45
|
+
|
|
46
|
+
# Calculating the totals for the order here would be incorrect. Order's
|
|
47
|
+
# totals are the sum of the adjustments on all child models, as well as
|
|
48
|
+
# its own.
|
|
49
|
+
#
|
|
50
|
+
# We want to select the best promotion for the order, but the remainder
|
|
51
|
+
# of the calculations here are done in the OrderUpdater instead.
|
|
52
|
+
return if Spree::Order === item
|
|
53
|
+
|
|
54
|
+
@item.promo_total = promo_total
|
|
55
|
+
|
|
56
|
+
tax = adjustments.select(&:tax?)
|
|
57
|
+
|
|
58
|
+
@item.included_tax_total = tax.select(&:included?).map(&:update!).compact.sum
|
|
59
|
+
@item.additional_tax_total = tax.reject(&:included?).map(&:update!).compact.sum
|
|
60
|
+
|
|
61
|
+
item_cancellation_total = adjustments.select(&:cancellation?).map(&:update!).compact.sum
|
|
62
|
+
|
|
63
|
+
@item.adjustment_total = @item.promo_total + @item.additional_tax_total + item_cancellation_total
|
|
64
|
+
|
|
65
|
+
@item.update_columns(
|
|
66
|
+
:promo_total => @item.promo_total,
|
|
67
|
+
:included_tax_total => @item.included_tax_total,
|
|
68
|
+
:additional_tax_total => @item.additional_tax_total,
|
|
69
|
+
:adjustment_total => @item.adjustment_total,
|
|
70
|
+
:updated_at => Time.now,
|
|
71
|
+
) if @item.changed?
|
|
72
|
+
|
|
73
|
+
@item
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
<<<<<<< HEAD
|
|
77
|
+
private
|
|
78
|
+
def adjustments
|
|
79
|
+
# This is done intentionally to avoid loading the association. If the
|
|
80
|
+
# association is loaded, the records may become stale due to code
|
|
81
|
+
# elsewhere in spree. When that is remedied, this should be changed to
|
|
82
|
+
# just item.adjustments
|
|
83
|
+
@adjustments ||= item.adjustments.all.to_a
|
|
84
|
+
||||||| parent of 12bada8... Replace order strings with symbols/arel_table.
|
|
85
|
+
def best_promotion_adjustment
|
|
86
|
+
@best_promotion_adjustment ||= adjustments.promotion.eligible.reorder("amount ASC, created_at DESC, id DESC").first
|
|
87
|
+
=======
|
|
88
|
+
def best_promotion_adjustment
|
|
89
|
+
@best_promotion_adjustment ||= adjustments.promotion.eligible.reorder(:amount, created_at: :desc, id: :desc).first
|
|
90
|
+
>>>>>>> 12bada8... Replace order strings with symbols/arel_table.
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
# Default implementation of User.
|
|
3
|
+
#
|
|
4
|
+
# @note This class is intended to be modified by extensions (ex.
|
|
5
|
+
# spree_auth_devise)
|
|
6
|
+
class LegacyUser < Spree::Base
|
|
7
|
+
include UserAddress
|
|
8
|
+
include UserPaymentSource
|
|
9
|
+
|
|
10
|
+
self.table_name = 'spree_users'
|
|
11
|
+
|
|
12
|
+
# for url generation
|
|
13
|
+
def self.model_name
|
|
14
|
+
ActiveModel::Name.new(self, nil, "User")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
has_many :orders, foreign_key: :user_id
|
|
18
|
+
|
|
19
|
+
before_destroy :check_completed_orders
|
|
20
|
+
|
|
21
|
+
def has_spree_role?(role)
|
|
22
|
+
true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.model_name
|
|
26
|
+
ActiveModel::Name.new Spree::LegacyUser, Spree, 'user'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
attr_accessor :password
|
|
30
|
+
attr_accessor :password_confirmation
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def check_completed_orders
|
|
35
|
+
raise Spree::Core::DestroyWithOrdersError if orders.complete.present?
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class LineItem < Spree::Base
|
|
3
|
+
before_validation :invalid_quantity_check
|
|
4
|
+
belongs_to :order, class_name: "Spree::Order", inverse_of: :line_items, touch: true
|
|
5
|
+
belongs_to :variant, class_name: "Spree::Variant", inverse_of: :line_items
|
|
6
|
+
belongs_to :tax_category, class_name: "Spree::TaxCategory"
|
|
7
|
+
|
|
8
|
+
has_one :product, through: :variant
|
|
9
|
+
|
|
10
|
+
has_many :adjustments, as: :adjustable, inverse_of: :adjustable, dependent: :destroy
|
|
11
|
+
has_many :inventory_units, inverse_of: :line_item
|
|
12
|
+
|
|
13
|
+
has_many :line_item_actions, dependent: :destroy
|
|
14
|
+
has_many :actions, through: :line_item_actions
|
|
15
|
+
|
|
16
|
+
before_validation :copy_price
|
|
17
|
+
before_validation :copy_tax_category
|
|
18
|
+
|
|
19
|
+
validates :variant, presence: true
|
|
20
|
+
validates :quantity, numericality: {
|
|
21
|
+
only_integer: true,
|
|
22
|
+
greater_than: -1,
|
|
23
|
+
message: Spree.t('validation.must_be_int')
|
|
24
|
+
}
|
|
25
|
+
validates :price, numericality: true
|
|
26
|
+
|
|
27
|
+
validate :ensure_proper_currency
|
|
28
|
+
before_destroy :update_inventory
|
|
29
|
+
before_destroy :destroy_inventory_units
|
|
30
|
+
|
|
31
|
+
after_save :update_inventory
|
|
32
|
+
after_save :update_adjustments
|
|
33
|
+
|
|
34
|
+
after_create :update_tax_charge
|
|
35
|
+
|
|
36
|
+
delegate :name, :description, :sku, :should_track_inventory?, to: :variant
|
|
37
|
+
|
|
38
|
+
attr_accessor :target_shipment
|
|
39
|
+
|
|
40
|
+
# Sets this line item's price, cost price, and currency from this line
|
|
41
|
+
# item's variant if they are nil and a variant is present.
|
|
42
|
+
def copy_price
|
|
43
|
+
if variant
|
|
44
|
+
self.price = variant.price if price.nil?
|
|
45
|
+
self.cost_price = variant.cost_price if cost_price.nil?
|
|
46
|
+
self.currency = variant.currency if currency.nil?
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Sets this line item's tax category from this line item's variant if a
|
|
51
|
+
# variant is present.
|
|
52
|
+
def copy_tax_category
|
|
53
|
+
if variant
|
|
54
|
+
self.tax_category = variant.tax_category
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# @return [BigDecimal] the amount of this line item, which is the line
|
|
59
|
+
# item's price multiplied by its quantity.
|
|
60
|
+
def amount
|
|
61
|
+
price * quantity
|
|
62
|
+
end
|
|
63
|
+
alias subtotal amount
|
|
64
|
+
|
|
65
|
+
# @return [BigDecimal] the amount of this line item, taking into
|
|
66
|
+
# consideration line item promotions.
|
|
67
|
+
def discounted_amount
|
|
68
|
+
amount + promo_total
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @return [Spree::Money] the amount of this line item, taking into
|
|
72
|
+
# consideration line item promotions.
|
|
73
|
+
def discounted_money
|
|
74
|
+
Spree::Money.new(discounted_amount, { currency: currency })
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# @return [BigDecimal] the amount of this line item, taking into
|
|
78
|
+
# consideration all its adjustments.
|
|
79
|
+
def final_amount
|
|
80
|
+
amount + adjustment_total
|
|
81
|
+
end
|
|
82
|
+
alias total final_amount
|
|
83
|
+
|
|
84
|
+
# @return [Spree::Money] the price of this line item
|
|
85
|
+
def single_money
|
|
86
|
+
Spree::Money.new(price, { currency: currency })
|
|
87
|
+
end
|
|
88
|
+
alias single_display_amount single_money
|
|
89
|
+
|
|
90
|
+
# @return [Spree::Moeny] the amount of this line item
|
|
91
|
+
def money
|
|
92
|
+
Spree::Money.new(amount, { currency: currency })
|
|
93
|
+
end
|
|
94
|
+
alias display_total money
|
|
95
|
+
alias display_amount money
|
|
96
|
+
|
|
97
|
+
# Sets the quantity to zero if it is nil or less than zero.
|
|
98
|
+
def invalid_quantity_check
|
|
99
|
+
self.quantity = 0 if quantity.nil? || quantity < 0
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# @return [Boolean] true when it is possible to supply the required
|
|
103
|
+
# quantity of stock of this line item's variant
|
|
104
|
+
def sufficient_stock?
|
|
105
|
+
Stock::Quantifier.new(variant).can_supply? quantity
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# @return [Boolean] true when it is not possible to supply the required
|
|
109
|
+
# quantity of stock of this line item's variant
|
|
110
|
+
def insufficient_stock?
|
|
111
|
+
!sufficient_stock?
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# @note This will return the product even if it has been deleted.
|
|
115
|
+
# @return [Spree::Product, nil] the product associated with this line
|
|
116
|
+
# item, if there is one
|
|
117
|
+
def product
|
|
118
|
+
variant.product
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# @note This will return the variant even if it has been deleted.
|
|
122
|
+
# @return [Spree::Variant, nil] the variant associated with this line
|
|
123
|
+
# item, if there is one
|
|
124
|
+
def variant
|
|
125
|
+
Spree::Variant.unscoped { super }
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Sets the options on the line item according to the order's currency or
|
|
129
|
+
# one passed in.
|
|
130
|
+
#
|
|
131
|
+
# @param options [Hash] options for this line item
|
|
132
|
+
def options=(options={})
|
|
133
|
+
return unless options.present?
|
|
134
|
+
|
|
135
|
+
opts = options.dup # we will be deleting from the hash, so leave the caller's copy intact
|
|
136
|
+
|
|
137
|
+
currency = opts.delete(:currency) || order.try(:currency)
|
|
138
|
+
|
|
139
|
+
if currency
|
|
140
|
+
self.currency = currency
|
|
141
|
+
self.price = variant.price_in(currency).amount +
|
|
142
|
+
variant.price_modifier_amount_in(currency, opts)
|
|
143
|
+
else
|
|
144
|
+
self.price = variant.price +
|
|
145
|
+
variant.price_modifier_amount(opts)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
self.assign_attributes opts
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
private
|
|
152
|
+
def update_inventory
|
|
153
|
+
if (changed? || target_shipment.present?) && self.order.has_checkout_step?("delivery")
|
|
154
|
+
Spree::OrderInventory.new(self.order, self).verify(target_shipment)
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def destroy_inventory_units
|
|
159
|
+
inventory_units.destroy_all
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def update_adjustments
|
|
163
|
+
if quantity_changed?
|
|
164
|
+
update_tax_charge # Called to ensure pre_tax_amount is updated.
|
|
165
|
+
recalculate_adjustments
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def recalculate_adjustments
|
|
170
|
+
Spree::ItemAdjustments.new(self).update
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def update_tax_charge
|
|
174
|
+
Spree::TaxRate.adjust(order.tax_zone, [self])
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def ensure_proper_currency
|
|
178
|
+
unless currency == order.currency
|
|
179
|
+
errors.add(:currency, :must_match_order_currency)
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class LogEntry < Spree::Base
|
|
3
|
+
belongs_to :source, polymorphic: true
|
|
4
|
+
|
|
5
|
+
# Fix for #1767
|
|
6
|
+
# If a payment fails, we want to make sure we keep the record of it failing
|
|
7
|
+
after_rollback :save_anyway
|
|
8
|
+
|
|
9
|
+
def save_anyway
|
|
10
|
+
log = Spree::LogEntry.new
|
|
11
|
+
log.source = source
|
|
12
|
+
log.details = details
|
|
13
|
+
log.save!
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def parsed_details
|
|
17
|
+
@details ||= YAML.load(details)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
# Option types denote the different options for a variant. A typical option
|
|
3
|
+
# type would be a size, with that option type’s values being something such
|
|
4
|
+
# as "Small", "Medium" and "Large". Another typical option type could be a
|
|
5
|
+
# color, such as "Red", "Green", or "Blue".
|
|
6
|
+
#
|
|
7
|
+
# A product can be assigned many option types, but must be assigned at least
|
|
8
|
+
# one if you wish to create variants for that product.
|
|
9
|
+
class OptionType < Spree::Base
|
|
10
|
+
acts_as_list
|
|
11
|
+
|
|
12
|
+
has_many :option_values, -> { order(:position) }, dependent: :destroy, inverse_of: :option_type
|
|
13
|
+
has_many :product_option_types, dependent: :destroy, inverse_of: :option_type
|
|
14
|
+
has_many :products, through: :product_option_types
|
|
15
|
+
has_and_belongs_to_many :prototypes, join_table: 'spree_option_types_prototypes'
|
|
16
|
+
|
|
17
|
+
validates :name, presence: true, uniqueness: true
|
|
18
|
+
validates :presentation, presence: true
|
|
19
|
+
|
|
20
|
+
default_scope -> { order("#{self.table_name}.position") }
|
|
21
|
+
|
|
22
|
+
accepts_nested_attributes_for :option_values, reject_if: lambda { |ov| ov[:name].blank? || ov[:presentation].blank? }, allow_destroy: true
|
|
23
|
+
|
|
24
|
+
after_touch :touch_all_products
|
|
25
|
+
|
|
26
|
+
def touch_all_products
|
|
27
|
+
products.update_all(updated_at: Time.current)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|