spree_core 2.3.13 → 2.4.0.rc1
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/app/assets/javascripts/spree.js.coffee.erb +1 -5
- data/app/helpers/spree/base_helper.rb +22 -11
- data/app/helpers/spree/products_helper.rb +8 -7
- data/app/mailers/spree/base_mailer.rb +1 -0
- data/app/mailers/spree/reimbursement_mailer.rb +10 -0
- data/app/mailers/spree/test_mailer.rb +2 -3
- 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/named_type.rb +12 -0
- data/app/models/concerns/spree/user_address.rb +30 -0
- data/app/models/concerns/spree/user_payment_source.rb +19 -0
- data/app/models/spree/address.rb +13 -6
- data/app/models/spree/adjustment.rb +5 -5
- data/app/models/spree/app_configuration.rb +8 -4
- data/app/models/spree/asset.rb +1 -1
- data/app/models/spree/base.rb +0 -3
- data/app/models/spree/calculator/flat_rate.rb +1 -5
- data/app/models/spree/calculator/returns/default_refund_amount.rb +36 -0
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/credit_card.rb +18 -22
- data/app/models/spree/customer_return.rb +70 -0
- data/app/models/spree/exchange.rb +42 -0
- data/app/models/spree/gateway/bogus.rb +3 -3
- data/app/models/spree/image.rb +1 -1
- data/app/models/spree/inventory_unit.rb +32 -8
- data/app/models/spree/item_adjustments.rb +7 -11
- data/app/models/spree/legacy_user.rb +2 -2
- data/app/models/spree/line_item.rb +25 -12
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +1 -8
- data/app/models/spree/order.rb +163 -145
- data/app/models/spree/order/checkout.rb +35 -23
- data/app/models/spree/order/payments.rb +66 -0
- data/app/models/spree/order_contents.rb +34 -24
- data/app/models/spree/order_populator.rb +6 -4
- data/app/models/spree/order_updater.rb +10 -1
- data/app/models/spree/payment.rb +19 -16
- data/app/models/spree/payment/processing.rb +40 -72
- data/app/models/spree/payment_method.rb +1 -1
- data/app/models/spree/payment_method/check.rb +0 -2
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/preferences/preferable.rb +20 -0
- data/app/models/spree/price.rb +13 -3
- data/app/models/spree/product.rb +24 -29
- data/app/models/spree/product_property.rb +0 -2
- data/app/models/spree/promotion.rb +66 -24
- data/app/models/spree/promotion/actions/create_adjustment.rb +2 -2
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +15 -11
- data/app/models/spree/promotion/actions/create_line_items.rb +2 -12
- data/app/models/spree/promotion/rules/first_order.rb +6 -2
- data/app/models/spree/promotion/rules/item_total.rb +42 -4
- data/app/models/spree/promotion/rules/one_use_per_user.rb +24 -0
- data/app/models/spree/promotion/rules/product.rb +13 -11
- data/app/models/spree/promotion/rules/taxon.rb +61 -0
- data/app/models/spree/promotion/rules/user.rb +1 -1
- data/app/models/spree/promotion/rules/user_logged_in.rb +4 -1
- data/app/models/spree/promotion_category.rb +6 -0
- data/app/models/spree/promotion_handler/cart.rb +14 -18
- data/app/models/spree/promotion_handler/coupon.rb +25 -16
- data/app/models/spree/promotion_rule.rb +13 -0
- data/app/models/spree/property.rb +1 -3
- data/app/models/spree/refund.rb +91 -0
- data/app/models/spree/refund_reason.rb +13 -0
- data/app/models/spree/reimbursement.rb +148 -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 +12 -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 +50 -0
- data/app/models/spree/return_authorization.rb +52 -68
- data/app/models/spree/return_authorization_reason.rb +7 -0
- data/app/models/spree/return_item.rb +230 -0
- data/app/models/spree/return_item/default_eligibility_validator.rb +27 -0
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +24 -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 +10 -0
- data/app/models/spree/returns_calculator.rb +8 -0
- data/app/models/spree/shipment.rb +209 -154
- data/app/models/spree/shipment_handler.rb +43 -0
- data/app/models/spree/shipping_calculator.rb +1 -1
- data/app/models/spree/shipping_category.rb +2 -2
- data/app/models/spree/shipping_method.rb +1 -1
- data/app/models/spree/shipping_method_category.rb +1 -1
- data/app/models/spree/shipping_rate.rb +4 -0
- data/app/models/spree/stock/adjuster.rb +10 -11
- data/app/models/spree/stock/availability_validator.rb +6 -10
- data/app/models/spree/stock/content_item.rb +48 -0
- data/app/models/spree/stock/coordinator.rb +14 -7
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +21 -0
- data/app/models/spree/stock/package.rb +38 -51
- data/app/models/spree/stock/packer.rb +13 -11
- data/app/models/spree/stock/prioritizer.rb +7 -7
- data/app/models/spree/stock/splitter/base.rb +2 -2
- data/app/models/spree/stock_item.rb +6 -9
- data/app/models/spree/stock_location.rb +17 -25
- data/app/models/spree/stock_movement.rb +1 -8
- data/app/models/spree/stock_transfer.rb +0 -2
- data/app/models/spree/store.rb +1 -1
- data/app/models/spree/tax_category.rb +2 -2
- data/app/models/spree/tax_rate.rb +16 -22
- data/app/models/spree/taxon.rb +1 -1
- data/app/models/spree/variant.rb +45 -23
- data/app/models/spree/zone.rb +17 -17
- data/app/models/spree/zone_member.rb +1 -1
- data/app/views/layouts/spree/base_mailer.html.erb +784 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +45 -0
- data/app/views/spree/order_mailer/cancel_email.text.erb +2 -2
- data/app/views/spree/order_mailer/confirm_email.html.erb +84 -0
- data/app/views/spree/order_mailer/confirm_email.text.erb +2 -2
- 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/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 +2 -2
- data/config/initializers/friendly_id.rb +88 -0
- data/config/initializers/premailer_assets.rb +1 -0
- data/config/initializers/user_class_extensions.rb +9 -22
- data/config/locales/en.yml +180 -12
- data/db/default/spree/states.rb +73 -55
- data/db/migrate/20130213191427_create_default_stock.rb +1 -0
- data/db/migrate/20130807024301_upgrade_adjustments.rb +4 -5
- data/db/migrate/20140309033438_create_store_from_preferences.rb +0 -7
- data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +8 -0
- data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +1 -1
- data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +5 -3
- 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/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 +5 -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/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/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/lib/generators/spree/install/install_generator.rb +7 -3
- data/lib/spree/core.rb +11 -10
- data/lib/spree/core/controller_helpers/common.rb +3 -10
- data/lib/spree/core/controller_helpers/order.rb +15 -12
- data/lib/spree/core/controller_helpers/strong_parameters.rb +9 -9
- data/lib/spree/core/engine.rb +8 -1
- data/lib/spree/core/importer/order.rb +5 -17
- data/lib/spree/core/search/base.rb +1 -1
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/instrumentation.rb +41 -0
- data/lib/spree/migrations.rb +3 -7
- data/lib/spree/money.rb +2 -2
- data/lib/spree/permitted_attributes.rb +10 -9
- data/lib/spree/testing_support/ability_helpers.rb +25 -25
- data/lib/spree/testing_support/authorization_helpers.rb +3 -5
- data/lib/spree/testing_support/capybara_ext.rb +2 -2
- data/lib/spree/testing_support/factories/calculator_factory.rb +0 -8
- data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
- data/lib/spree/testing_support/factories/customer_return_factory.rb +31 -0
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -0
- data/lib/spree/testing_support/factories/line_item_factory.rb +2 -1
- data/lib/spree/testing_support/factories/order_factory.rb +11 -6
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +6 -0
- data/lib/spree/testing_support/factories/promotion_factory.rb +9 -7
- 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 +9 -3
- data/lib/spree/testing_support/factories/return_item_factory.rb +10 -0
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -0
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +3 -2
- data/lib/spree/testing_support/factories/stock_factory.rb +12 -11
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/tasks/email.rake +7 -0
- data/lib/tasks/exchanges.rake +70 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_et.js +23 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_eu.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_hr.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_ka.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_ko.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_my.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_pt_BR.js +26 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_pt_PT.js +26 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_sl.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_sv.js +23 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_uk.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_zh.js +25 -0
- data/vendor/assets/javascripts/jquery.validate/localization/messages_zh_TW.js +26 -0
- metadata +163 -47
- data/app/models/concerns/spree/ransackable_attributes.rb +0 -19
- data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +0 -5
- data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +0 -13
- data/db/migrate/20141105213646_update_classifications_positions.rb +0 -9
- data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +0 -5
- data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -70
- data/lib/spree/core/adjustment_source.rb +0 -26
- data/lib/spree/core/calculated_adjustments.rb +0 -35
- data/lib/spree/core/controller_helpers.rb +0 -20
- data/lib/spree/core/user_address.rb +0 -32
- data/lib/spree/core/user_payment_source.rb +0 -20
- data/lib/spree/localized_number.rb +0 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3b41e23ca4232364a10edcb30ee1df77239ac6a6
|
|
4
|
+
data.tar.gz: 3ac2a1a353eb0d2d6b5130b773ebbdb115847b5b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 47ae6a4ab3482c89afdee602d0b6951608e0f885690137815bddd5a20f6d91fa62e868e6f72d445289149117cbf658c41e276dbc7f1f54c78a1714fa836685ca
|
|
7
|
+
data.tar.gz: a8219fa078d69a3045bfdab968dc0c327a2c050253e5d779170a2770346e8f602005795ef14ee9d26fedf23f10838fba31df8194774e992f3c16d5e92b30d8bb
|
|
@@ -11,7 +11,7 @@ class window.Spree
|
|
|
11
11
|
"#{locationOrigin}#{@mountedAt()}#{path}"
|
|
12
12
|
|
|
13
13
|
# Helper function to take a URL and add query parameters to it
|
|
14
|
-
# Uses the JSUri library from here: https://
|
|
14
|
+
# Uses the JSUri library from here: https://github.com/derek-watson/jsUri
|
|
15
15
|
# Thanks to Jake Moffat for the suggestion: https://twitter.com/jakeonrails/statuses/321776992221544449
|
|
16
16
|
@url: (uri, query) ->
|
|
17
17
|
if uri.path == undefined
|
|
@@ -21,10 +21,6 @@ class window.Spree
|
|
|
21
21
|
uri.addQueryParam(key, value)
|
|
22
22
|
return uri
|
|
23
23
|
|
|
24
|
-
# Helper method in case people want to call uri rather than url
|
|
25
|
-
@uri: (uri, query) ->
|
|
26
|
-
url(uri, query)
|
|
27
|
-
|
|
28
24
|
# This function automatically appends the API token
|
|
29
25
|
# for the user to the end of any URL.
|
|
30
26
|
# Immediately after, this string is then passed to jQuery.ajax.
|
|
@@ -48,7 +48,7 @@ module Spree
|
|
|
48
48
|
meta.reverse_merge!({
|
|
49
49
|
keywords: current_store.meta_keywords,
|
|
50
50
|
description: current_store.meta_description,
|
|
51
|
-
})
|
|
51
|
+
})
|
|
52
52
|
meta
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -78,19 +78,30 @@ module Spree
|
|
|
78
78
|
nil
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
-
def breadcrumbs(taxon, separator=" » ")
|
|
81
|
+
def breadcrumbs(taxon, separator=" » ", breadcrumb_class="inline")
|
|
82
82
|
return "" if current_page?("/") || taxon.nil?
|
|
83
|
-
|
|
84
|
-
crumbs = [
|
|
83
|
+
|
|
84
|
+
crumbs = [[Spree.t(:home), spree.root_path]]
|
|
85
|
+
|
|
85
86
|
if taxon
|
|
86
|
-
crumbs <<
|
|
87
|
-
crumbs
|
|
88
|
-
crumbs <<
|
|
87
|
+
crumbs << [Spree.t(:products), products_path]
|
|
88
|
+
crumbs += taxon.ancestors.collect { |a| [a.name, spree.nested_taxons_path(a.permalink)] } unless taxon.ancestors.empty?
|
|
89
|
+
crumbs << [taxon.name, spree.nested_taxons_path(taxon.permalink)]
|
|
89
90
|
else
|
|
90
|
-
crumbs <<
|
|
91
|
+
crumbs << [Spree.t(:products), products_path]
|
|
91
92
|
end
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
|
|
94
|
+
separator = raw(separator)
|
|
95
|
+
|
|
96
|
+
crumbs.map! do |crumb|
|
|
97
|
+
content_tag(:li, itemscope:"itemscope", itemtype:"http://data-vocabulary.org/Breadcrumb") do
|
|
98
|
+
link_to(crumb.last, itemprop: "url") do
|
|
99
|
+
content_tag(:span, crumb.first, itemprop: "title")
|
|
100
|
+
end + (crumb == crumbs.last ? '' : separator)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
content_tag(:nav, content_tag(:ul, raw(crumbs.map(&:mb_chars).join), class: breadcrumb_class), id: 'breadcrumbs', class: 'sixteen columns')
|
|
94
105
|
end
|
|
95
106
|
|
|
96
107
|
def taxons_tree(root_taxon, current_taxon, max_level = 1)
|
|
@@ -152,7 +163,7 @@ module Spree
|
|
|
152
163
|
end
|
|
153
164
|
|
|
154
165
|
def link_to_tracking(shipment, options = {})
|
|
155
|
-
return unless shipment.tracking
|
|
166
|
+
return unless shipment.tracking && shipment.shipping_method
|
|
156
167
|
|
|
157
168
|
if shipment.tracking_url
|
|
158
169
|
link_to(shipment.tracking, shipment.tracking_url, options)
|
|
@@ -11,13 +11,14 @@ module Spree
|
|
|
11
11
|
|
|
12
12
|
# returns the formatted price for the specified variant as a difference from product price
|
|
13
13
|
def variant_price_diff(variant)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
diff
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
diff = variant.amount_in(current_currency) - variant.product.amount_in(current_currency)
|
|
15
|
+
return nil if diff == 0
|
|
16
|
+
amount = Spree::Money.new(diff.abs, { currency: current_currency }).to_html
|
|
17
|
+
if diff > 0
|
|
18
|
+
"(#{Spree.t(:add)}: #{amount})".html_safe
|
|
19
|
+
else
|
|
20
|
+
"(#{Spree.t(:subtract)}: #{amount})".html_safe
|
|
21
|
+
end
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
# returns the formatted full price for the variant, if at least one variant price differs from product price
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class ReimbursementMailer < BaseMailer
|
|
3
|
+
def reimbursement_email(reimbursement, resend = false)
|
|
4
|
+
@reimbursement = reimbursement.respond_to?(:id) ? reimbursement : Spree::Reimbursement.find(reimbursement)
|
|
5
|
+
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
|
|
6
|
+
subject += "#{Spree::Store.current.name} #{Spree.t('reimbursement_mailer.reimbursement_email.subject')} ##{@reimbursement.order.number}"
|
|
7
|
+
mail(to: @reimbursement.order.email, from: from_address, subject: subject)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class TestMailer < BaseMailer
|
|
3
|
-
def test_email(
|
|
4
|
-
recipient = user.respond_to?(:id) ? user : Spree.user_class.find(user)
|
|
3
|
+
def test_email(email)
|
|
5
4
|
subject = "#{Spree::Store.current.name} #{Spree.t('test_mailer.test_email.subject')}"
|
|
6
|
-
mail(to:
|
|
5
|
+
mail(to: email, from: from_address, subject: subject)
|
|
7
6
|
end
|
|
8
7
|
end
|
|
9
8
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module AdjustmentSource
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
def deals_with_adjustments_for_deleted_source
|
|
7
|
+
adjustment_scope = self.adjustments.includes(:order).references(:spree_orders)
|
|
8
|
+
|
|
9
|
+
# For incomplete orders, remove the adjustment completely.
|
|
10
|
+
adjustment_scope.where("spree_orders.completed_at IS NULL").destroy_all
|
|
11
|
+
|
|
12
|
+
# For complete orders, the source will be invalid.
|
|
13
|
+
# Therefore we nullify the source_id, leaving the adjustment in place.
|
|
14
|
+
# This would mean that the order's total is not altered at all.
|
|
15
|
+
adjustment_scope.where("spree_orders.completed_at IS NOT NULL").each do |adjustment|
|
|
16
|
+
adjustment.update_columns(
|
|
17
|
+
source_id: nil,
|
|
18
|
+
updated_at: Time.now,
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module CalculatedAdjustments
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
has_one :calculator, class_name: "Spree::Calculator", as: :calculable, inverse_of: :calculable, dependent: :destroy, autosave: true
|
|
7
|
+
accepts_nested_attributes_for :calculator
|
|
8
|
+
validates :calculator, presence: true
|
|
9
|
+
|
|
10
|
+
def self.calculators
|
|
11
|
+
spree_calculators.send model_name_without_spree_namespace
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def calculator_type
|
|
15
|
+
calculator.class.to_s if calculator
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def calculator_type=(calculator_type)
|
|
19
|
+
klass = calculator_type.constantize if calculator_type
|
|
20
|
+
self.calculator = klass.new if klass && !self.calculator.is_a?(klass)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
def self.model_name_without_spree_namespace
|
|
25
|
+
self.to_s.tableize.gsub('/', '_').sub('spree_', '')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.spree_calculators
|
|
29
|
+
Rails.application.config.spree.calculators
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module NamedType
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
scope :active, -> { where(active: true) }
|
|
7
|
+
default_scope -> { order("LOWER(#{self.table_name}.name)") }
|
|
8
|
+
|
|
9
|
+
validates :name, presence: true, uniqueness: { case_sensitive: false }
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module UserAddress
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address'
|
|
7
|
+
alias_attribute :billing_address, :bill_address
|
|
8
|
+
|
|
9
|
+
belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address'
|
|
10
|
+
alias_attribute :shipping_address, :ship_address
|
|
11
|
+
|
|
12
|
+
accepts_nested_attributes_for :ship_address, :bill_address
|
|
13
|
+
|
|
14
|
+
def persist_order_address(order)
|
|
15
|
+
b_address = self.bill_address || self.build_bill_address
|
|
16
|
+
b_address.attributes = order.bill_address.attributes.except('id', 'updated_at', 'created_at')
|
|
17
|
+
b_address.save
|
|
18
|
+
self.update_attributes(bill_address_id: b_address.id)
|
|
19
|
+
|
|
20
|
+
# May not be present if delivery step has been removed
|
|
21
|
+
if order.ship_address
|
|
22
|
+
s_address = self.ship_address || self.build_ship_address
|
|
23
|
+
s_address.attributes = order.ship_address.attributes.except('id', 'updated_at', 'created_at')
|
|
24
|
+
s_address.save
|
|
25
|
+
self.update_attributes(ship_address_id: s_address.id)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module UserPaymentSource
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
has_many :credit_cards, class_name: "Spree::CreditCard", foreign_key: :user_id
|
|
7
|
+
def default_credit_card; credit_cards.default.first; end
|
|
8
|
+
|
|
9
|
+
def payment_sources
|
|
10
|
+
credit_cards.with_payment_profile
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def drop_payment_source(source)
|
|
14
|
+
gateway = source.payment_method
|
|
15
|
+
gateway.disable_customer_profile(source)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/app/models/spree/address.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
class Address < Spree::Base
|
|
3
|
+
require 'twitter_cldr'
|
|
4
|
+
|
|
3
5
|
belongs_to :country, class_name: "Spree::Country"
|
|
4
6
|
belongs_to :state, class_name: "Spree::State"
|
|
5
7
|
|
|
@@ -9,22 +11,19 @@ module Spree
|
|
|
9
11
|
validates :zipcode, presence: true, if: :require_zipcode?
|
|
10
12
|
validates :phone, presence: true, if: :require_phone?
|
|
11
13
|
|
|
12
|
-
validate :state_validate
|
|
14
|
+
validate :state_validate, :postal_code_validate
|
|
13
15
|
|
|
14
16
|
alias_attribute :first_name, :firstname
|
|
15
17
|
alias_attribute :last_name, :lastname
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
self.whitelisted_ransackable_attributes = %w[firstname lastname]
|
|
19
|
-
|
|
20
19
|
def self.build_default
|
|
21
20
|
country = Spree::Country.find(Spree::Config[:default_country_id]) rescue Spree::Country.first
|
|
22
21
|
new(country: country)
|
|
23
22
|
end
|
|
24
23
|
|
|
25
24
|
def self.default(user = nil, kind = "bill")
|
|
26
|
-
if user
|
|
27
|
-
|
|
25
|
+
if user && user_address = user.send(:"#{kind}_address")
|
|
26
|
+
user_address.clone
|
|
28
27
|
else
|
|
29
28
|
build_default
|
|
30
29
|
end
|
|
@@ -130,5 +129,13 @@ module Spree
|
|
|
130
129
|
# ensure at least one state field is populated
|
|
131
130
|
errors.add :state, :blank if state.blank? && state_name.blank?
|
|
132
131
|
end
|
|
132
|
+
|
|
133
|
+
def postal_code_validate
|
|
134
|
+
return if country.blank? || country.iso.blank? || !require_zipcode?
|
|
135
|
+
return if !TwitterCldr::Shared::PostalCodes.territories.include?(country.iso.downcase.to_sym)
|
|
136
|
+
|
|
137
|
+
postal_code = TwitterCldr::Shared::PostalCodes.for_territory(country.iso)
|
|
138
|
+
errors.add(:zipcode, :invalid) if !postal_code.valid?(zipcode.to_s)
|
|
139
|
+
end
|
|
133
140
|
end
|
|
134
141
|
end
|
|
@@ -24,10 +24,8 @@ module Spree
|
|
|
24
24
|
class Adjustment < Spree::Base
|
|
25
25
|
belongs_to :adjustable, polymorphic: true, touch: true
|
|
26
26
|
belongs_to :source, polymorphic: true
|
|
27
|
-
belongs_to :order, class_name:
|
|
27
|
+
belongs_to :order, class_name: "Spree::Order"
|
|
28
28
|
|
|
29
|
-
validates :adjustable, presence: true
|
|
30
|
-
validates :order, presence: true
|
|
31
29
|
validates :label, presence: true
|
|
32
30
|
validates :amount, numericality: true
|
|
33
31
|
|
|
@@ -47,15 +45,17 @@ module Spree
|
|
|
47
45
|
scope :open, -> { where(state: 'open') }
|
|
48
46
|
scope :closed, -> { where(state: 'closed') }
|
|
49
47
|
scope :tax, -> { where(source_type: 'Spree::TaxRate') }
|
|
48
|
+
scope :non_tax, -> { where.not(source_type: 'Spree::TaxRate') }
|
|
50
49
|
scope :price, -> { where(adjustable_type: 'Spree::LineItem') }
|
|
51
50
|
scope :shipping, -> { where(adjustable_type: 'Spree::Shipment') }
|
|
52
51
|
scope :optional, -> { where(mandatory: false) }
|
|
53
52
|
scope :eligible, -> { where(eligible: true) }
|
|
54
53
|
scope :charge, -> { where("#{quoted_table_name}.amount >= 0") }
|
|
55
54
|
scope :credit, -> { where("#{quoted_table_name}.amount < 0") }
|
|
55
|
+
scope :nonzero, -> { where("#{quoted_table_name}.amount != 0") }
|
|
56
56
|
scope :promotion, -> { where(source_type: 'Spree::PromotionAction') }
|
|
57
57
|
scope :return_authorization, -> { where(source_type: "Spree::ReturnAuthorization") }
|
|
58
|
-
scope :
|
|
58
|
+
scope :included, -> { where(included: true) }
|
|
59
59
|
scope :additional, -> { where(included: false) }
|
|
60
60
|
|
|
61
61
|
def closed?
|
|
@@ -103,7 +103,7 @@ module Spree
|
|
|
103
103
|
|
|
104
104
|
def update_adjustable_adjustment_total
|
|
105
105
|
# Cause adjustable's total to be recalculated
|
|
106
|
-
ItemAdjustments.new(adjustable).update
|
|
106
|
+
Spree::ItemAdjustments.new(adjustable).update if adjustable
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
end
|
|
@@ -23,9 +23,9 @@ module Spree
|
|
|
23
23
|
preference :address_requires_state, :boolean, default: true # should state/state_name be required
|
|
24
24
|
preference :admin_interface_logo, :string, default: 'logo/spree_50.png'
|
|
25
25
|
preference :admin_products_per_page, :integer, default: 10
|
|
26
|
-
preference :allow_backorder_shipping, :boolean, default: false # should only be true if you don't need to track inventory
|
|
27
26
|
preference :allow_checkout_on_gateway_error, :boolean, default: false
|
|
28
27
|
preference :allow_guest_checkout, :boolean, default: true
|
|
28
|
+
preference :allow_return_item_amount_editing, :boolean, default: false # Determines whether an admin is allowed to change a return item's pre-calculated amount
|
|
29
29
|
preference :allow_ssl_in_development_and_test, :boolean, default: false
|
|
30
30
|
preference :allow_ssl_in_production, :boolean, default: true
|
|
31
31
|
preference :allow_ssl_in_staging, :boolean, default: true
|
|
@@ -34,6 +34,7 @@ module Spree
|
|
|
34
34
|
preference :always_include_confirm_step, :boolean, default: false # Ensures confirmation step is always in checkout_progress bar, but does not force a confirm step if your payment methods do not support it.
|
|
35
35
|
preference :always_put_site_name_in_title, :boolean, default: true
|
|
36
36
|
preference :auto_capture, :boolean, default: false # automatically capture the credit card (as opposed to just authorize and capture later)
|
|
37
|
+
preference :auto_capture_on_dispatch, :boolean, default: false # Captures payment for each shipment in Shipment#after_ship callback, and makes Shipment.ready when payment authorized.
|
|
37
38
|
preference :binary_inventory_cache, :boolean, default: false # only invalidate product cache when a stock item changes whether it is in_stock
|
|
38
39
|
preference :check_for_spree_alerts, :boolean, default: true
|
|
39
40
|
preference :checkout_zone, :string, default: nil # replace with the name of a zone if you would like to limit the countries
|
|
@@ -46,6 +47,8 @@ module Spree
|
|
|
46
47
|
preference :display_currency, :boolean, default: false
|
|
47
48
|
preference :default_country_id, :integer
|
|
48
49
|
preference :dismissed_spree_alerts, :string, default: ''
|
|
50
|
+
preference :expedited_exchanges, :boolean, default: false # NOTE this requires payment profiles to be supported on your gateway of choice as well as a delayed job handler to be configured with activejob. kicks off an exchange shipment upon return authorization save. charge customer if they do not return items within timely manner.
|
|
51
|
+
preference :expedited_exchanges_days_window, :integer, default: 14 # the amount of days the customer has to return their item after the expedited exchange is shipped in order to avoid being charged
|
|
49
52
|
preference :hide_cents, :boolean, default: false
|
|
50
53
|
preference :last_check_for_spree_alerts, :string, default: nil
|
|
51
54
|
preference :layout, :string, default: 'spree/layouts/spree_application'
|
|
@@ -55,8 +58,11 @@ module Spree
|
|
|
55
58
|
preference :properties_per_page, :integer, default: 15
|
|
56
59
|
preference :products_per_page, :integer, default: 12
|
|
57
60
|
preference :promotions_per_page, :integer, default: 15
|
|
61
|
+
preference :customer_returns_per_page, :integer, default: 15
|
|
58
62
|
preference :redirect_https_to_http, :boolean, :default => false
|
|
59
63
|
preference :require_master_price, :boolean, default: true
|
|
64
|
+
preference :restock_inventory, :boolean, default: true # Determines if a return item is restocked automatically once it has been received
|
|
65
|
+
preference :return_eligibility_number_of_days, :integer, default: 365
|
|
60
66
|
preference :shipping_instructions, :boolean, default: false # Request instructions/info for shipping
|
|
61
67
|
preference :show_only_complete_orders_by_default, :boolean, default: true
|
|
62
68
|
preference :show_variant_full_price, :boolean, default: false #Displays variant full price or difference with product price. Default false to be compatible with older behavior
|
|
@@ -91,9 +97,7 @@ module Spree
|
|
|
91
97
|
# support all the old preference methods with a warning
|
|
92
98
|
define_method "preferred_#{old_preference_name}" do
|
|
93
99
|
ActiveSupport::Deprecation.warn("#{old_preference_name} is no longer supported on Spree::Config, please access it through #{store_method} on Spree::Store")
|
|
94
|
-
|
|
95
|
-
Store.default.send(store_method)
|
|
96
|
-
end
|
|
100
|
+
Store.default.send(store_method)
|
|
97
101
|
end
|
|
98
102
|
end
|
|
99
103
|
end
|
data/app/models/spree/asset.rb
CHANGED
data/app/models/spree/base.rb
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
class Spree::Base < ActiveRecord::Base
|
|
2
2
|
include Spree::Preferences::Preferable
|
|
3
3
|
serialize :preferences, Hash
|
|
4
|
-
|
|
5
|
-
include Spree::RansackableAttributes
|
|
6
|
-
|
|
7
4
|
after_initialize do
|
|
8
5
|
self.preferences = default_preferences.merge(preferences) if has_attribute?(:preferences)
|
|
9
6
|
end
|