solidus_core 2.0.3 → 2.1.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of solidus_core might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +62 -3
- data/app/assets/javascripts/spree.js.coffee.erb +4 -1
- data/app/helpers/spree/base_helper.rb +7 -48
- data/app/models/spree/address.rb +5 -1
- data/app/models/spree/adjustment.rb +3 -3
- data/app/models/spree/app_configuration.rb +13 -0
- data/app/models/spree/calculator.rb +3 -2
- data/app/models/spree/calculator/default_tax.rb +6 -10
- data/app/models/spree/calculator/flat_percent_item_total.rb +0 -4
- data/app/models/spree/calculator/flat_rate.rb +0 -4
- data/app/models/spree/calculator/flexi_rate.rb +0 -4
- data/app/models/spree/calculator/free_shipping.rb +0 -3
- data/app/models/spree/calculator/percent_on_line_item.rb +0 -4
- data/app/models/spree/calculator/percent_per_item.rb +0 -4
- data/app/models/spree/calculator/price_sack.rb +0 -4
- data/app/models/spree/calculator/returns/default_refund_amount.rb +0 -3
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +0 -4
- data/app/models/spree/calculator/shipping/flat_rate.rb +0 -4
- data/app/models/spree/calculator/shipping/flexi_rate.rb +0 -4
- data/app/models/spree/calculator/shipping/per_item.rb +0 -4
- data/app/models/spree/calculator/shipping/price_sack.rb +0 -4
- data/app/models/spree/calculator/tiered_flat_rate.rb +0 -4
- data/app/models/spree/calculator/tiered_percent.rb +0 -4
- data/app/models/spree/credit_card.rb +27 -14
- data/app/models/spree/gateway.rb +4 -0
- data/app/models/spree/inventory_unit.rb +2 -0
- data/app/models/spree/line_item.rb +31 -26
- data/app/models/spree/option_type.rb +0 -3
- data/app/models/spree/order.rb +28 -31
- data/app/models/spree/order/checkout.rb +0 -2
- data/app/models/spree/order_contents.rb +0 -45
- data/app/models/spree/order_merger.rb +6 -6
- data/app/models/spree/order_update_attributes.rb +0 -2
- data/app/models/spree/order_updater.rb +91 -13
- data/app/models/spree/payment.rb +9 -2
- data/app/models/spree/payment/processing.rb +15 -9
- data/app/models/spree/payment_method.rb +48 -5
- data/app/models/spree/price.rb +7 -9
- data/app/models/spree/product.rb +1 -25
- data/app/models/spree/promotion.rb +22 -14
- data/app/models/spree/promotion/actions/create_adjustment.rb +12 -1
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +15 -1
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +5 -3
- data/app/models/spree/promotion/actions/free_shipping.rb +14 -0
- data/app/models/spree/promotion/rules/taxon.rb +7 -2
- data/app/models/spree/promotion/rules/user_role.rb +43 -0
- data/app/models/spree/promotion_action.rb +19 -2
- data/app/models/spree/promotion_handler/coupon.rb +1 -4
- data/app/models/spree/promotion_handler/free_shipping.rb +22 -17
- data/app/models/spree/promotion_rule_role.rb +6 -0
- data/app/models/spree/property.rb +0 -3
- data/app/models/spree/return_authorization.rb +2 -0
- data/app/models/spree/shipment.rb +5 -21
- data/app/models/spree/shipping_method.rb +23 -2
- data/app/models/spree/shipping_rate.rb +3 -0
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock_location.rb +3 -0
- data/app/models/spree/store.rb +7 -0
- data/app/models/spree/tax/item_adjuster.rb +27 -12
- data/app/models/spree/tax/order_adjuster.rb +2 -5
- data/app/models/spree/tax/tax_helpers.rb +4 -8
- data/app/models/spree/tax_rate.rb +1 -15
- data/app/models/spree/taxon.rb +0 -3
- data/app/models/spree/transfer_item.rb +1 -1
- data/app/models/spree/user_class_handle.rb +14 -9
- data/app/models/spree/variant/pricing_options.rb +1 -1
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +1 -1
- data/app/models/spree/zone.rb +20 -13
- data/config/locales/en.yml +144 -62
- data/db/migrate/20120831092320_spree_one_two.rb +0 -7
- data/db/migrate/20150723224133_remove_unnecessary_indexes.rb +0 -2
- data/db/migrate/20160924135758_remove_is_default_from_prices.rb +5 -0
- data/db/migrate/20161009141333_remove_currency_from_line_items.rb +5 -0
- data/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +28 -0
- data/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +20 -0
- data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +4 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +0 -2
- data/lib/spree/core.rb +0 -5
- data/lib/spree/core/controller_helpers/pricing.rb +2 -1
- data/lib/spree/core/engine.rb +14 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/deprecation.rb +1 -1
- data/lib/spree/localized_number.rb +3 -2
- data/lib/spree/permission_sets/configuration_display.rb +0 -1
- data/lib/spree/permission_sets/configuration_management.rb +0 -1
- data/lib/spree/permission_sets/product_display.rb +0 -1
- data/lib/spree/permission_sets/product_management.rb +0 -1
- data/lib/spree/permission_sets/user_management.rb +2 -4
- data/lib/spree/permitted_attributes.rb +3 -2
- data/lib/spree/testing_support/capybara_ext.rb +0 -12
- data/lib/spree/testing_support/factories/address_factory.rb +1 -1
- data/lib/spree/testing_support/factories/line_item_factory.rb +0 -1
- data/lib/spree/testing_support/factories/payment_factory.rb +4 -0
- data/lib/spree/testing_support/factories/payment_method_factory.rb +8 -1
- data/lib/spree/testing_support/factories/user_factory.rb +2 -2
- data/solidus_core.gemspec +4 -3
- data/spec/helpers/base_helper_spec.rb +0 -40
- data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +16 -0
- data/spec/lib/spree/core/importer/order_spec.rb +27 -18
- data/spec/lib/spree/core/price_migrator_spec.rb +3 -1
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +16 -0
- data/spec/lib/spree/core/unreturned_item_charger_spec.rb +0 -2
- data/spec/lib/tasks/exchanges_spec.rb +4 -2
- data/spec/lib/tasks/migrations/create_vat_prices_spec.rb +5 -3
- data/spec/models/spree/adjustment_spec.rb +136 -0
- data/spec/models/spree/calculator/default_tax_spec.rb +13 -7
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +3 -0
- data/spec/models/spree/calculator/flat_rate_spec.rb +3 -0
- data/spec/models/spree/calculator/flexi_rate_spec.rb +3 -0
- data/spec/models/spree/calculator/free_shipping_spec.rb +6 -0
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +9 -4
- data/spec/models/spree/calculator/percent_per_item_spec.rb +10 -0
- data/spec/models/spree/calculator/price_sack_spec.rb +3 -0
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +3 -0
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +3 -0
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +3 -0
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +3 -0
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +3 -0
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +4 -1
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +3 -0
- data/spec/models/spree/calculator/tiered_percent_spec.rb +3 -0
- data/spec/models/spree/credit_card_spec.rb +27 -1
- data/spec/models/spree/line_item_spec.rb +58 -65
- data/spec/models/spree/order/checkout_spec.rb +2 -1
- data/spec/models/spree/order/payment_spec.rb +9 -10
- data/spec/models/spree/order/tax_spec.rb +22 -7
- data/spec/models/spree/order/updating_spec.rb +1 -3
- data/spec/models/spree/order_cancellations_spec.rb +6 -4
- data/spec/models/spree/order_contents_spec.rb +34 -50
- data/spec/models/spree/order_inventory_spec.rb +3 -5
- data/spec/models/spree/order_merger_spec.rb +20 -0
- data/spec/models/spree/order_spec.rb +28 -64
- data/spec/models/spree/order_update_attributes_spec.rb +1 -5
- data/spec/models/spree/order_updater_spec.rb +251 -0
- data/spec/models/spree/payment_method_spec.rb +178 -28
- data/spec/models/spree/payment_spec.rb +35 -19
- data/spec/models/spree/permission_sets/configuration_display.rb +0 -4
- data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -2
- data/spec/models/spree/permission_sets/product_display_spec.rb +0 -4
- data/spec/models/spree/permission_sets/product_management_spec.rb +0 -2
- data/spec/models/spree/permission_sets/user_management_spec.rb +9 -2
- data/spec/models/spree/price_spec.rb +16 -1
- data/spec/models/spree/product_spec.rb +0 -75
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +20 -0
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +39 -15
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +203 -22
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +22 -3
- data/spec/models/spree/promotion/rules/taxon_spec.rb +26 -0
- data/spec/models/spree/promotion/rules/user_role_spec.rb +86 -0
- data/spec/models/spree/promotion_action_spec.rb +38 -0
- data/spec/models/spree/promotion_handler/coupon_spec.rb +36 -33
- data/spec/models/spree/promotion_handler/free_shipping_spec.rb +21 -22
- data/spec/models/spree/promotion_spec.rb +46 -6
- data/spec/models/spree/reimbursement_spec.rb +1 -1
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +2 -2
- data/spec/models/spree/shipment_spec.rb +68 -50
- data/spec/models/spree/shipping_method_spec.rb +41 -0
- data/spec/models/spree/shipping_rate_spec.rb +9 -3
- data/spec/models/spree/stock/estimator_spec.rb +4 -2
- data/spec/models/spree/store_credit_spec.rb +3 -3
- data/spec/models/spree/tax/item_adjuster_spec.rb +31 -21
- data/spec/models/spree/tax/order_adjuster_spec.rb +6 -10
- data/spec/models/spree/tax/taxation_integration_spec.rb +19 -0
- data/spec/models/spree/tax_rate_spec.rb +5 -26
- data/spec/models/spree/transfer_item_spec.rb +11 -0
- data/spec/models/spree/variant/pricing_options_spec.rb +7 -17
- data/spec/models/spree/variant_spec.rb +2 -4
- data/spec/models/spree/zone_spec.rb +60 -20
- data/spec/shared_examples/calculator_shared_examples.rb +8 -0
- metadata +19 -24
- data/app/models/spree/item_adjustments.rb +0 -89
- data/app/models/spree/option_type_prototype.rb +0 -6
- data/app/models/spree/property_prototype.rb +0 -6
- data/app/models/spree/prototype.rb +0 -14
- data/app/models/spree/prototype_taxon.rb +0 -6
- data/app/models/spree/tracker.rb +0 -8
- data/db/migrate/20150128032538_remove_environment_from_tracker.rb +0 -6
- data/lib/generators/spree/dummy/templates/initializers/custom_user.rb +0 -1
- data/lib/spree/core/delegate_belongs_to.rb +0 -94
- data/lib/spree/testing_support/factories/prototype_factory.rb +0 -8
- data/lib/spree/testing_support/factories/tracker_factory.rb +0 -6
- data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -24
- data/spec/lib/spree/core/testing_support/factories/prototype_factory_spec.rb +0 -12
- data/spec/lib/spree/core/testing_support/factories/tracker_factory_spec.rb +0 -12
- data/spec/models/spree/item_adjustments_spec.rb +0 -306
- data/spec/models/spree/tracker_spec.rb +0 -21
data/app/models/spree/store.rb
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
module Spree
|
2
|
+
# Records store specific configuration such as store name and URL.
|
3
|
+
#
|
4
|
+
# `Spree::Store` provides the foundational ActiveRecord model for recording information
|
5
|
+
# specific to your store such as its name, URL, and tax location. This model will
|
6
|
+
# provide the foundation upon which [support for multiple stores](https://github.com/solidusio/solidus/issues/112)
|
7
|
+
# hosted by a single Solidus implementation can be built.
|
8
|
+
#
|
2
9
|
class Store < Spree::Base
|
3
10
|
has_many :store_payment_methods, inverse_of: :store
|
4
11
|
has_many :payment_methods, through: :store_payment_methods
|
@@ -1,3 +1,7 @@
|
|
1
|
+
# @api private
|
2
|
+
# @note This is a helper class for Tax::OrderAdjuster. It is marked as api
|
3
|
+
# private because taxes should always be calculated on the entire order, so
|
4
|
+
# external code should call Tax::OrderAdjuster instead of Tax::ItemAdjuster.
|
1
5
|
module Spree
|
2
6
|
module Tax
|
3
7
|
# Adjust a single taxable item (line item or shipment)
|
@@ -12,24 +16,35 @@ module Spree
|
|
12
16
|
@item = item
|
13
17
|
@order = @item.order
|
14
18
|
# set instance variable so `TaxRate.match` is only called when necessary
|
15
|
-
@
|
19
|
+
@rates_for_order = options[:rates_for_order]
|
16
20
|
@rates_for_default_zone = options[:rates_for_default_zone]
|
17
|
-
@order_tax_zone = options[:order_tax_zone]
|
18
21
|
end
|
19
22
|
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
# Creating the adjustments will also run the ItemAdjustments class and
|
24
|
-
# persist all taxation and promotion totals on the item.
|
25
|
-
#
|
26
|
-
# @return [Array<Spree::Adjustment>] newly created adjustments
|
23
|
+
# This updates the amounts for adjustments which already exist and
|
24
|
+
# creates and remove adjustments as needed to match the applicable
|
25
|
+
# (geographically and category-wise) tax rates.
|
27
26
|
def adjust!
|
28
|
-
|
27
|
+
rates = rates_for_item(item)
|
29
28
|
|
30
|
-
item.adjustments.
|
29
|
+
tax_adjustments = item.adjustments.select(&:tax?)
|
30
|
+
active_adjustments = rates.map do |rate|
|
31
|
+
# Find an existing adjustment from the same source.
|
32
|
+
# All tax adjustments already have source_type == 'Spree::TaxRate' so
|
33
|
+
# we need only check source_id.
|
34
|
+
adjustment = tax_adjustments.detect{|a| a.source_id == rate.id }
|
35
|
+
if adjustment
|
36
|
+
adjustment.update!
|
37
|
+
adjustment
|
38
|
+
else
|
39
|
+
# Create a new adjustment
|
40
|
+
rate.adjust(nil, item)
|
41
|
+
end
|
42
|
+
end
|
31
43
|
|
32
|
-
|
44
|
+
unmatched_adjustments = tax_adjustments - active_adjustments
|
45
|
+
|
46
|
+
# Remove any tax adjustments tied to rates which no longer match
|
47
|
+
item.adjustments.destroy(unmatched_adjustments)
|
33
48
|
end
|
34
49
|
end
|
35
50
|
end
|
@@ -14,8 +14,6 @@ module Spree
|
|
14
14
|
# Creates tax adjustments for all taxable items (shipments and line items)
|
15
15
|
# in the given order.
|
16
16
|
def adjust!
|
17
|
-
return unless order_tax_zone(order)
|
18
|
-
|
19
17
|
(order.line_items + order.shipments).each do |item|
|
20
18
|
ItemAdjuster.new(item, order_wide_options).adjust!
|
21
19
|
end
|
@@ -25,9 +23,8 @@ module Spree
|
|
25
23
|
|
26
24
|
def order_wide_options
|
27
25
|
{
|
28
|
-
|
29
|
-
rates_for_default_zone: rates_for_default_zone
|
30
|
-
order_tax_zone: order_tax_zone(order),
|
26
|
+
rates_for_order: rates_for_order(order),
|
27
|
+
rates_for_default_zone: rates_for_default_zone
|
31
28
|
}
|
32
29
|
end
|
33
30
|
end
|
@@ -17,26 +17,22 @@ module Spree
|
|
17
17
|
#
|
18
18
|
# For further discussion, see https://github.com/spree/spree/issues/4397 and https://github.com/spree/spree/issues/4327.
|
19
19
|
def applicable_rates(order)
|
20
|
-
order_zone_tax_categories =
|
20
|
+
order_zone_tax_categories = rates_for_order(order).map(&:tax_category)
|
21
21
|
default_rates_with_unmatched_tax_category = rates_for_default_zone.to_a.delete_if do |default_rate|
|
22
22
|
order_zone_tax_categories.include?(default_rate.tax_category)
|
23
23
|
end
|
24
24
|
|
25
|
-
(
|
25
|
+
(rates_for_order(order) + default_rates_with_unmatched_tax_category).uniq
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
29
|
-
@
|
28
|
+
def rates_for_order(order)
|
29
|
+
@rates_for_order ||= Spree::TaxRate.for_address(order.tax_address)
|
30
30
|
end
|
31
31
|
|
32
32
|
def rates_for_default_zone
|
33
33
|
@rates_for_default_zone ||= Spree::TaxRate.for_zone(Spree::Zone.default_tax)
|
34
34
|
end
|
35
35
|
|
36
|
-
def order_tax_zone(order)
|
37
|
-
@order_tax_zone ||= order.tax_zone
|
38
|
-
end
|
39
|
-
|
40
36
|
def sum_of_included_tax_rates(item)
|
41
37
|
rates_for_item(item).map(&:amount).sum
|
42
38
|
end
|
@@ -65,23 +65,9 @@ module Spree
|
|
65
65
|
scope :for_zone, ->(zone) { where(zone_id: Spree::Zone.with_shared_members(zone).pluck(:id)) }
|
66
66
|
scope :included_in_price, -> { where(included_in_price: true) }
|
67
67
|
|
68
|
-
# Create tax adjustments for some items that have the same tax zone.
|
69
|
-
#
|
70
|
-
# @deprecated Please use Spree::Tax::OrderAdjuster or Spree::Tax::ItemAdjuster instead.
|
71
|
-
#
|
72
|
-
# @param [Spree::Zone] order_tax_zone is the smalles applicable zone to the order's tax address
|
73
|
-
# @param [Array<Spree::LineItem,Spree::Shipment>] items to be adjusted
|
74
|
-
def self.adjust(order_tax_zone, items)
|
75
|
-
Spree::Deprecation.warn("Please use Spree::Tax::OrderAdjuster or Spree::Tax::ItemAdjuster instead", caller)
|
76
|
-
items.map do |item|
|
77
|
-
Spree::Tax::ItemAdjuster.new(item, rates_for_order_zone: for_zone(order_tax_zone)).adjust!
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
68
|
# Creates necessary tax adjustments for the order.
|
82
|
-
def adjust(
|
69
|
+
def adjust(_order_tax_zone, item)
|
83
70
|
amount = compute_amount(item)
|
84
|
-
return if amount == 0
|
85
71
|
|
86
72
|
included = included_in_price && amount > 0
|
87
73
|
|
data/app/models/spree/taxon.rb
CHANGED
@@ -6,9 +6,6 @@ module Spree
|
|
6
6
|
has_many :classifications, -> { order(:position) }, dependent: :delete_all, inverse_of: :taxon
|
7
7
|
has_many :products, through: :classifications
|
8
8
|
|
9
|
-
has_many :prototype_taxons, dependent: :destroy
|
10
|
-
has_many :prototypes, through: :prototype_taxons
|
11
|
-
|
12
9
|
has_many :promotion_rule_taxons
|
13
10
|
has_many :promotion_rules, through: :promotion_rule_taxons
|
14
11
|
|
@@ -2,7 +2,7 @@ module Spree
|
|
2
2
|
class TransferItem < Spree::Base
|
3
3
|
acts_as_paranoid
|
4
4
|
belongs_to :stock_transfer, inverse_of: :transfer_items
|
5
|
-
belongs_to :variant
|
5
|
+
belongs_to :variant, -> { with_deleted }
|
6
6
|
|
7
7
|
validate :stock_availability, if: :check_stock?
|
8
8
|
validates :stock_transfer, :variant, presence: true
|
@@ -1,15 +1,20 @@
|
|
1
1
|
module Spree
|
2
|
-
#
|
3
|
-
# runtime.
|
2
|
+
# Configuration point for User model implementation.
|
4
3
|
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
# with class_name: "" in their association definitions. For obvious reasons,
|
8
|
-
# that doesn't work.
|
4
|
+
# `Spree::UserClassHandle` allows you to configure your own implementation of a
|
5
|
+
# User class or use an extnesion like `solidus_auth_devise`.
|
9
6
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
7
|
+
# @note Placeholder for name of Spree.user_class to ensure later evaluation at
|
8
|
+
# runtime.
|
9
|
+
#
|
10
|
+
# Unfortunately, it is possible for classes to get loaded before
|
11
|
+
# Spree.user_class has been set in the initializer. As a result, they end up
|
12
|
+
# with class_name: "" in their association definitions. For obvious reasons,
|
13
|
+
# that doesn't work.
|
14
|
+
#
|
15
|
+
# For now, Rails does not call to_s on the instance passed in until runtime.
|
16
|
+
# So this little hack provides a wrapper around Spree.user_class so that we
|
17
|
+
# can basically lazy-evaluate it. Yay! Problem solved forever.
|
13
18
|
class UserClassHandle
|
14
19
|
# @return [String] the name of the user class as a string.
|
15
20
|
# @raise [RuntimeError] if Spree.user_class is nil
|
@@ -33,7 +33,7 @@ module Spree
|
|
33
33
|
def self.from_line_item(line_item)
|
34
34
|
tax_address = line_item.order.try!(:tax_address)
|
35
35
|
new(
|
36
|
-
currency: line_item.
|
36
|
+
currency: line_item.currency || Spree::Config.currency,
|
37
37
|
country_iso: tax_address && tax_address.country.try!(:iso)
|
38
38
|
)
|
39
39
|
end
|
@@ -9,7 +9,7 @@ class Spree::Wallet::AddPaymentSourcesToWallet
|
|
9
9
|
# This is called after an order transistions to complete and should save the
|
10
10
|
# order's payment source/s in the user's "wallet" for future use.
|
11
11
|
#
|
12
|
-
# @return [
|
12
|
+
# @return [void]
|
13
13
|
def add_to_wallet
|
14
14
|
if !order.temporary_credit_card &&
|
15
15
|
order.user_id &&
|
data/app/models/spree/zone.rb
CHANGED
@@ -16,18 +16,16 @@ module Spree
|
|
16
16
|
after_save :remove_previous_default
|
17
17
|
|
18
18
|
scope :with_member_ids, ->(state_ids, country_ids) do
|
19
|
-
if !state_ids.present? && !country_ids.present?
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
joins(:zone_members).where(matching_state.or(matching_country)).distinct
|
30
|
-
end
|
19
|
+
return none if !state_ids.present? && !country_ids.present?
|
20
|
+
|
21
|
+
spree_zone_members_table = Spree::ZoneMember.arel_table
|
22
|
+
matching_state =
|
23
|
+
spree_zone_members_table[:zoneable_type].eq("Spree::State").
|
24
|
+
and(spree_zone_members_table[:zoneable_id].in(state_ids))
|
25
|
+
matching_country =
|
26
|
+
spree_zone_members_table[:zoneable_type].eq("Spree::Country").
|
27
|
+
and(spree_zone_members_table[:zoneable_id].in(country_ids))
|
28
|
+
joins(:zone_members).where(matching_state.or(matching_country)).distinct
|
31
29
|
end
|
32
30
|
|
33
31
|
scope :for_address, ->(address) do
|
@@ -43,14 +41,22 @@ module Spree
|
|
43
41
|
|
44
42
|
self.whitelisted_ransackable_attributes = ['description']
|
45
43
|
|
44
|
+
# Returns the zone marked as `default_tax`.
|
45
|
+
# @deprecated Please run the `solidus:migrations:create_vat_prices` rake task
|
46
46
|
def self.default_tax
|
47
|
-
where(default_tax: true).first
|
47
|
+
default_tax_zone = where(default_tax: true).first
|
48
|
+
if default_tax_zone
|
49
|
+
Spree::Deprecation.warn("Please run the `solidus:migrations:create_vat_prices` rake task.", caller)
|
50
|
+
default_tax_zone
|
51
|
+
end
|
48
52
|
end
|
49
53
|
|
50
54
|
# Returns the most specific matching zone for an address. Specific means:
|
51
55
|
# A State zone wins over a country zone, and a zone with few members wins
|
52
56
|
# over one with many members. If there is no match, returns nil.
|
53
57
|
def self.match(address)
|
58
|
+
Spree::Deprecation.warn("Spree::Zone.match is deprecated. Please use Spree::Zone.for_address instead.", caller)
|
59
|
+
|
54
60
|
return unless address && (matches =
|
55
61
|
with_member_ids(address.state_id, address.country_id).
|
56
62
|
order(:zone_members_count, :created_at, :id).
|
@@ -160,6 +166,7 @@ module Spree
|
|
160
166
|
(target.zoneables.collect(&:country).collect(&:id) - zoneables.collect(&:id)).empty?
|
161
167
|
end
|
162
168
|
end
|
169
|
+
deprecate :contains?, deprecator: Spree::Deprecation
|
163
170
|
|
164
171
|
private
|
165
172
|
|
data/config/locales/en.yml
CHANGED
@@ -178,8 +178,6 @@ en:
|
|
178
178
|
spree/property:
|
179
179
|
name: Name
|
180
180
|
presentation: Presentation
|
181
|
-
spree/prototype:
|
182
|
-
name: Name
|
183
181
|
spree/refund:
|
184
182
|
amount: Amount
|
185
183
|
description: Description
|
@@ -252,6 +250,7 @@ en:
|
|
252
250
|
seo_title: Seo Title
|
253
251
|
name: Site Name
|
254
252
|
mail_from_address: Mail From Address
|
253
|
+
cart_tax_country_iso: Tax Country for Empty Carts
|
255
254
|
spree/store_credit:
|
256
255
|
amount: Amount
|
257
256
|
amount_authorized: Amount Authorized
|
@@ -359,8 +358,56 @@ en:
|
|
359
358
|
one: Adjustment Reason
|
360
359
|
other: Adjustment Reasons
|
361
360
|
spree/calculator:
|
362
|
-
one: Calculator
|
363
|
-
other: Calculators
|
361
|
+
one: Base Calculator
|
362
|
+
other: Base Calculators
|
363
|
+
spree/calculator/default_tax:
|
364
|
+
one: Default Tax
|
365
|
+
other: Default Tax
|
366
|
+
spree/calculator/flat_percent_item_total:
|
367
|
+
one: Flat Percent
|
368
|
+
other: Flat Percent
|
369
|
+
spree/calculator/flat_rate:
|
370
|
+
one: Flat Rate
|
371
|
+
other: Flat Rate
|
372
|
+
spree/calculator/flexi_rate:
|
373
|
+
one: Flexible Rate
|
374
|
+
other: Flexible Rate
|
375
|
+
spree/calculator/free_shipping:
|
376
|
+
one: Free Shipping
|
377
|
+
other: Free Shipping
|
378
|
+
spree/calculator/percent_on_line_item:
|
379
|
+
one: Percent Per Item
|
380
|
+
other: Percent Per Item
|
381
|
+
spree/calculator/percent_per_item:
|
382
|
+
one: Percent Per Item
|
383
|
+
other: Percent Per Item
|
384
|
+
spree/calculator/price_sack:
|
385
|
+
one: Price Sack
|
386
|
+
other: Price Sack
|
387
|
+
spree/calculator/tiered_percent:
|
388
|
+
one: Tiered Percent
|
389
|
+
other: Tiered Percent
|
390
|
+
spree/calculator/tiered_flat_rate:
|
391
|
+
one: Tiered Flat Rate
|
392
|
+
other: Tiered Flat Rate
|
393
|
+
spree/calculator/returns/default_refund_amount:
|
394
|
+
one: Default Refund Amount
|
395
|
+
other: Default Refund Amount
|
396
|
+
spree/calculator/shipping/flat_percent_item_total:
|
397
|
+
one: Flat Percent
|
398
|
+
other: Flat Percent
|
399
|
+
spree/calculator/shipping/flat_rate:
|
400
|
+
one: Flat rate
|
401
|
+
other: Flat rate
|
402
|
+
spree/calculator/shipping/flexi_rate:
|
403
|
+
one: Flexible Rate per package item
|
404
|
+
other: Flexible Rate per package item
|
405
|
+
spree/calculator/shipping/per_item:
|
406
|
+
one: Flat rate per package item
|
407
|
+
other: Flat rate per package item
|
408
|
+
spree/calculator/shipping/price_sack:
|
409
|
+
one: Price sack
|
410
|
+
other: Price sack
|
364
411
|
spree/country:
|
365
412
|
one: Country
|
366
413
|
other: Countries
|
@@ -424,9 +471,6 @@ en:
|
|
424
471
|
spree/property:
|
425
472
|
one: Property Type
|
426
473
|
other: Property Types
|
427
|
-
spree/prototype:
|
428
|
-
one: Prototype
|
429
|
-
other: Prototypes
|
430
474
|
spree/refund:
|
431
475
|
one: Refund
|
432
476
|
other: Refunds
|
@@ -538,8 +582,8 @@ en:
|
|
538
582
|
cannot_destroy_shipment_state: "Cannot destroy an inventory unit for a %{state} shipment"
|
539
583
|
spree/line_item:
|
540
584
|
attributes:
|
541
|
-
|
542
|
-
|
585
|
+
price:
|
586
|
+
not_a_number: "is not valid"
|
543
587
|
spree/price:
|
544
588
|
attributes:
|
545
589
|
currency:
|
@@ -682,6 +726,8 @@ en:
|
|
682
726
|
adjustment: Adjustment
|
683
727
|
adjustment_amount: Amount
|
684
728
|
adjustment_labels:
|
729
|
+
line_item: '%{promotion} (%{promotion_name})'
|
730
|
+
order: '%{promotion} (%{promotion_name})'
|
685
731
|
tax_rates:
|
686
732
|
sales_tax: '%{name}'
|
687
733
|
vat: '%{name} (Included in Price)'
|
@@ -697,42 +743,33 @@ en:
|
|
697
743
|
adjustment_total: Adjustment Total
|
698
744
|
adjustments: Adjustments
|
699
745
|
admin:
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
account: Account
|
728
|
-
addresses: Addresses
|
729
|
-
items: Items
|
730
|
-
items_purchased: Items Purchased
|
731
|
-
order_history: Order History
|
732
|
-
order_num: "Order #"
|
733
|
-
orders: Orders
|
734
|
-
store_credit: Store Credit
|
735
|
-
user_information: User Information
|
746
|
+
general_settings:
|
747
|
+
edit:
|
748
|
+
no_cart_tax_country: "No taxes on carts without address"
|
749
|
+
images:
|
750
|
+
index:
|
751
|
+
choose_files: Choose files to upload
|
752
|
+
drag_and_drop: or drag and drop them here
|
753
|
+
image_process_failed: Server failed to process the image
|
754
|
+
upload_images: Upload Images
|
755
|
+
payments:
|
756
|
+
source_forms:
|
757
|
+
storecredit:
|
758
|
+
not_supported: "Creating store credit payments via the admin is not currently supported."
|
759
|
+
prices:
|
760
|
+
any_country: "Any Country"
|
761
|
+
index:
|
762
|
+
amount_greater_than: Amount greater than
|
763
|
+
amount_less_than: Amount less than
|
764
|
+
new_price: New Price
|
765
|
+
edit:
|
766
|
+
edit_price: Edit Price
|
767
|
+
new:
|
768
|
+
new_price: New Price
|
769
|
+
promotions:
|
770
|
+
form:
|
771
|
+
starts_at_placeholder: Immediately
|
772
|
+
expires_at_placeholder: Never
|
736
773
|
store_credits:
|
737
774
|
add: "Add store credit"
|
738
775
|
amount_authorized: "Amount Authorized"
|
@@ -766,6 +803,7 @@ en:
|
|
766
803
|
select_amount_update_reason: "Select a reason for updating the amount"
|
767
804
|
total_unused: "Total unused"
|
768
805
|
type_html_header: "Credit Type"
|
806
|
+
view: "View store credit"
|
769
807
|
errors:
|
770
808
|
cannot_change_used_store_credit: "Store credit that has been claimed cannot be changed"
|
771
809
|
cannot_be_modified: "cannot be modified"
|
@@ -773,8 +811,46 @@ en:
|
|
773
811
|
amount_authorized_exceeds_total_credit: " exceeds the available credit"
|
774
812
|
amount_used_not_zero: "is greater than zero. Can not delete store credit"
|
775
813
|
update_reason_required: "A reason for the change must be selected"
|
814
|
+
tab:
|
815
|
+
areas: Locations
|
816
|
+
checkout: Refunds and Returns
|
817
|
+
configuration: Configuration
|
818
|
+
display_order: Display Order
|
819
|
+
general: Store
|
820
|
+
option_types: Option Types
|
821
|
+
orders: Orders
|
822
|
+
overview: Overview
|
823
|
+
payments: Payments
|
824
|
+
products: Products
|
825
|
+
promotions: Promotions
|
826
|
+
promotion_categories: Promotion Categories
|
827
|
+
properties: Property Types
|
828
|
+
reports: Reports
|
829
|
+
rma: RMA
|
830
|
+
settings: Settings
|
831
|
+
shipping: Shipping
|
832
|
+
stock: Stock
|
833
|
+
stock_items: Store Stock
|
834
|
+
stock_transfers: Stock Transfers
|
835
|
+
taxes: Taxes
|
836
|
+
taxonomies: Taxonomies
|
837
|
+
taxons: Taxons
|
838
|
+
users: Users
|
776
839
|
taxons:
|
777
840
|
display_order: Display Order
|
841
|
+
user:
|
842
|
+
account: Account
|
843
|
+
addresses: Addresses
|
844
|
+
items: Items
|
845
|
+
items_purchased: Items Purchased
|
846
|
+
order_history: Order History
|
847
|
+
order_num: "Order #"
|
848
|
+
orders: Orders
|
849
|
+
store_credit: Store Credit
|
850
|
+
user_information: User Information
|
851
|
+
users:
|
852
|
+
user_page_actions:
|
853
|
+
create_order: Create order for this user
|
778
854
|
variants:
|
779
855
|
table_filter:
|
780
856
|
show_deleted: Show deleted variants
|
@@ -787,16 +863,6 @@ en:
|
|
787
863
|
use_product_tax_category: Use Product Tax Category
|
788
864
|
pricing: Pricing
|
789
865
|
pricing_hint: These values are populated from the product details page and can be overridden below
|
790
|
-
prices:
|
791
|
-
any_country: "Any Country"
|
792
|
-
index:
|
793
|
-
amount_greater_than: Amount greater than
|
794
|
-
amount_less_than: Amount less than
|
795
|
-
new_price: New Price
|
796
|
-
edit:
|
797
|
-
edit_price: Edit Price
|
798
|
-
new:
|
799
|
-
new_price: New Price
|
800
866
|
administration: Administration
|
801
867
|
agree_to_privacy_policy: Agree to Privacy Policy
|
802
868
|
agree_to_terms_of_service: Agree to Terms of Service
|
@@ -849,7 +915,6 @@ en:
|
|
849
915
|
back_to_promotions_list: Back To Promotions List
|
850
916
|
back_to_promotion_categories_list: Back To Promotions Categories List
|
851
917
|
back_to_properties_list: Back To Property Types List
|
852
|
-
back_to_prototypes_list: Back To Prototypes List
|
853
918
|
back_to_reports_list: Back To Reports List
|
854
919
|
back_to_refund_reason_list: Back To Refund Reason List
|
855
920
|
back_to_reimbursement_type_list: Back To Reimbursement Type List
|
@@ -970,7 +1035,6 @@ en:
|
|
970
1035
|
customer_returns: Customer Returns
|
971
1036
|
create: Create
|
972
1037
|
create_a_new_account: Create a new account
|
973
|
-
create_new_order: Create new order
|
974
1038
|
create_reimbursement: Create reimbursement
|
975
1039
|
create_one: Create One.
|
976
1040
|
created_at: Created At
|
@@ -1036,7 +1100,6 @@ en:
|
|
1036
1100
|
editing_promotion: Editing Promotion
|
1037
1101
|
editing_promotion_category: Editing Promotion Category
|
1038
1102
|
editing_property: Editing Property Type
|
1039
|
-
editing_prototype: Editing Prototype
|
1040
1103
|
edit_refund_reason: Edit Refund Reason
|
1041
1104
|
editing_refund: Editing Refund
|
1042
1105
|
editing_refund_reason: Editing Refund Reason
|
@@ -1057,6 +1120,7 @@ en:
|
|
1057
1120
|
eligibility_errors:
|
1058
1121
|
messages:
|
1059
1122
|
has_excluded_product: Your cart contains a product that prevents this coupon code from being applied.
|
1123
|
+
has_excluded_taxon: Your cart contains a product from an excluded category that prevents this coupon code from being applied.
|
1060
1124
|
item_total_less_than: This coupon code can't be applied to orders less than %{amount}.
|
1061
1125
|
item_total_less_than_or_equal: This coupon code can't be applied to orders less than or equal to %{amount}.
|
1062
1126
|
limit_once_per_user: This coupon code can only be used once per user.
|
@@ -1114,12 +1178,22 @@ en:
|
|
1114
1178
|
hints:
|
1115
1179
|
spree/price:
|
1116
1180
|
country: "This determines in what country the price is valid.<br/>Default: Any Country"
|
1181
|
+
master_variant: "Changing master variant prices will not change variant prices below, but will be used to populate all new variants"
|
1182
|
+
options: "These options are used to create variants in the variants table. They can be changed in the variants tab"
|
1117
1183
|
spree/product:
|
1118
1184
|
promotionable: "This determines whether or not promotions can apply to this product.<br/>Default: Checked"
|
1119
1185
|
shipping_category: "This determines what kind of shipping this product requires.<br/> Default: Default"
|
1120
1186
|
tax_category: "This determines what kind of taxation is applied to this product.<br/> Default: None"
|
1187
|
+
spree/promotion:
|
1188
|
+
starts_at: "This determines when the promotion can be applied to orders. <br/> If no value is specified, the promotion will be immediately available."
|
1189
|
+
expires_at: "This determines when the promotion expires. <br/> If no value is specified, the promotion will never expires."
|
1190
|
+
spree/store:
|
1191
|
+
cart_tax_country_iso: "This determines which country is used for taxes on carts (orders which don't yet have an address).<br/> Default: None."
|
1121
1192
|
spree/variant:
|
1122
1193
|
tax_category: "This determines what kind of taxation is applied to this variant.<br/> Default: Use tax category of the product associated with this variant"
|
1194
|
+
deleted: "Deleted Variant"
|
1195
|
+
deleted_explanation: "This variant was deleted on %{date}."
|
1196
|
+
deleted_explanation_with_replacement: "This variant was deleted on %{date}. It has since been replaced by another with the same SKU."
|
1123
1197
|
failed_payment_attempts: Failed Payment Attempts
|
1124
1198
|
failure: Failure
|
1125
1199
|
filename: Filename
|
@@ -1207,6 +1281,7 @@ en:
|
|
1207
1281
|
inventory_adjustment: Inventory Adjustment
|
1208
1282
|
inventory_canceled: Inventory canceled
|
1209
1283
|
inventory_error_flash_for_insufficient_quantity: An item in your cart has become unavailable.
|
1284
|
+
inventory_not_available: Inventory not available for %{item}.
|
1210
1285
|
inventory_state: Inventory State
|
1211
1286
|
inventory_states:
|
1212
1287
|
backordered: backordered
|
@@ -1265,6 +1340,7 @@ en:
|
|
1265
1340
|
manual_intervention_required: Manual intervention required
|
1266
1341
|
manage_variants: Manage Variants
|
1267
1342
|
master_price: Master Price
|
1343
|
+
master_variant: Master Variant
|
1268
1344
|
match_choices:
|
1269
1345
|
all: All
|
1270
1346
|
none: None
|
@@ -1301,7 +1377,6 @@ en:
|
|
1301
1377
|
new_promotion: New Promotion
|
1302
1378
|
new_promotion_category: New Promotion Category
|
1303
1379
|
new_property: New Property Type
|
1304
|
-
new_prototype: New Prototype
|
1305
1380
|
new_refund: New Refund
|
1306
1381
|
new_refund_reason: New Refund Reason
|
1307
1382
|
new_rma_reason: New RMA Reason
|
@@ -1565,6 +1640,9 @@ en:
|
|
1565
1640
|
description: Available only to user who have not purchased in a while
|
1566
1641
|
name: First Repeat Purchase Since
|
1567
1642
|
form_text: "Apply this promotion to users whose last order was more than X days ago: "
|
1643
|
+
user_role:
|
1644
|
+
description: Order includes User with specified Role(s)
|
1645
|
+
name: User Role(s)
|
1568
1646
|
promotions: Promotions
|
1569
1647
|
promotion_successfully_created: Promotion has been successfully created!
|
1570
1648
|
promotion_total_changed_before_complete: "One or more of the promotions on your order have become ineligible and were removed. Please check the new order amounts and try again."
|
@@ -1572,8 +1650,6 @@ en:
|
|
1572
1650
|
propagate_all_variants: Propagate all variants
|
1573
1651
|
properties: Property Types
|
1574
1652
|
property: Property Type
|
1575
|
-
prototype: Prototype
|
1576
|
-
prototypes: Prototypes
|
1577
1653
|
provider: Provider
|
1578
1654
|
provider_settings_warning: If you are changing the provider type, you must save first before you can edit the provider settings
|
1579
1655
|
qty: Qty
|
@@ -1670,7 +1746,6 @@ en:
|
|
1670
1746
|
secure_connection_type: Secure Connection Type
|
1671
1747
|
security_settings: Security Settings
|
1672
1748
|
select: Select
|
1673
|
-
select_from_prototype: Select From Prototype
|
1674
1749
|
select_a_reason: Select a reason
|
1675
1750
|
select_a_stock_location: Select a stock location
|
1676
1751
|
select_stock: Select stock
|
@@ -1837,6 +1912,7 @@ en:
|
|
1837
1912
|
label: Order must contain %{select} of these taxons
|
1838
1913
|
match_all: all
|
1839
1914
|
match_any: at least one
|
1915
|
+
match_none: none
|
1840
1916
|
taxonomies: Taxonomies
|
1841
1917
|
taxonomy: Taxonomy
|
1842
1918
|
taxonomy_edit: Edit taxonomy
|
@@ -1903,6 +1979,11 @@ en:
|
|
1903
1979
|
user: User
|
1904
1980
|
user_rule:
|
1905
1981
|
choose_users: Choose users
|
1982
|
+
user_role_rule:
|
1983
|
+
choose_roles: Choose Roles
|
1984
|
+
label: User must contain %{select} of these roles
|
1985
|
+
match_all: all
|
1986
|
+
match_any: at least one
|
1906
1987
|
users: Users
|
1907
1988
|
validation:
|
1908
1989
|
unpaid_amount_not_zero: "Amount was not fully reimbursed. Still due: %{amount}"
|
@@ -1915,6 +1996,7 @@ en:
|
|
1915
1996
|
value: Value
|
1916
1997
|
variant: Variant
|
1917
1998
|
variant_placeholder: Choose a variant
|
1999
|
+
variant_pricing: Variant Pricing
|
1918
2000
|
variant_properties: Variant Properties
|
1919
2001
|
variant_search: Variant Search
|
1920
2002
|
variant_search_placeholder: "SKU or Option Value"
|