Use localize_number in models

This commit is contained in:
Pierre de Lacroix
2017-11-29 16:48:44 +01:00
committed by Rob Harrington
parent 920900b619
commit 2cd570383f
10 changed files with 62 additions and 1 deletions

View File

@@ -1,4 +1,5 @@
require_dependency 'spree/calculator'
require 'spree/localized_number'
class Calculator::FlatPercentPerItem < Spree::Calculator
# Spree's FlatPercentItemTotal calculator sums all amounts, and then calculates a percentage
@@ -6,11 +7,14 @@ class Calculator::FlatPercentPerItem < Spree::Calculator
# In the cart, we display line item individual amounts rounded, so to have consistent
# calculations we do the same internally. Here, we round adjustments at the individual
# item level first, then multiply by the item quantity.
extend Spree::LocalizedNumber
preference :flat_percent, :decimal, :default => 0
attr_accessible :preferred_flat_percent
localize_number :preferred_flat_percent
def self.description
I18n.t(:flat_percent_per_item)
end

View File

@@ -1,5 +1,9 @@
require 'spree/localized_number'
module Spree
Adjustment.class_eval do
extend Spree::LocalizedNumber
# Deletion of metadata is handled in the database.
# So we don't need the option `dependent: :destroy` as long as
# AdjustmentMetadata has no destroy logic itself.
@@ -17,6 +21,8 @@ module Spree
attr_accessible :included_tax
localize_number :amount
def set_included_tax!(rate)
tax = amount - (amount / (1 + rate))
set_absolute_included_tax! tax
@@ -73,6 +79,5 @@ module Spree
result
end
end
end

View File

@@ -1,5 +1,11 @@
require 'spree/localized_number'
module Spree
Calculator::FlatPercentItemTotal.class_eval do
extend Spree::LocalizedNumber
localize_number :preferred_flat_percent
def compute(object)
item_total = line_items_for(object).map(&:amount).sum
value = item_total * BigDecimal(self.preferred_flat_percent.to_s) / 100.0

View File

@@ -0,0 +1,9 @@
require 'spree/localized_number'
module Spree
Calculator::FlatRate.class_eval do
extend Spree::LocalizedNumber
localize_number :preferred_amount
end
end

View File

@@ -1,5 +1,12 @@
require 'spree/localized_number'
module Spree
Calculator::FlexiRate.class_eval do
extend Spree::LocalizedNumber
localize_number :preferred_first_item,
:preferred_additional_item
def compute(object)
sum = 0
max = self.preferred_max_items.to_i

View File

@@ -1,5 +1,11 @@
require 'spree/localized_number'
module Spree
Calculator::PerItem.class_eval do
extend Spree::LocalizedNumber
localize_number :preferred_amount
def compute(object=nil)
return 0 if object.nil?
self.preferred_amount * line_items_for(object).reduce(0) do |sum, value|

View File

@@ -0,0 +1,11 @@
require 'spree/localized_number'
module Spree
Calculator::PriceSack.class_eval do
extend Spree::LocalizedNumber
localize_number :preferred_minimal_amount,
:preferred_normal_amount,
:preferred_discount_amount
end
end

View File

@@ -1,11 +1,17 @@
require 'spree/localized_number'
module Spree
Payment.class_eval do
extend Spree::LocalizedNumber
has_one :adjustment, as: :source, dependent: :destroy
after_save :ensure_correct_adjustment, :update_order
attr_accessible :source
localize_number :amount
def ensure_correct_adjustment
revoke_adjustment_eligibility if ['failed', 'invalid'].include?(state)
return if adjustment.try(:finalized?)

View File

@@ -3,6 +3,7 @@ require 'open_food_network/variant_and_line_item_naming'
require 'open_food_network/products_cache'
Spree::Variant.class_eval do
extend Spree::LocalizedNumber
# Remove method From Spree, so method from the naming module is used instead
# This file may be double-loaded in delayed job environment, so we check before
# removing the Spree method to prevent error.
@@ -55,6 +56,8 @@ Spree::Variant.class_eval do
.where("o_inventory_items.id IS NULL OR o_inventory_items.visible = (?)", true)
}
localize_number :price, :cost_price, :weight
# Define sope as class method to allow chaining with other scopes filtering id.
# In Rails 3, merging two scopes on the same column will consider only the last scope.
def self.in_distributor(distributor)

View File

@@ -1,4 +1,6 @@
class VariantOverride < ActiveRecord::Base
extend Spree::LocalizedNumber
acts_as_taggable
belongs_to :hub, class_name: 'Enterprise'
@@ -17,6 +19,8 @@ class VariantOverride < ActiveRecord::Base
where(hub_id: hubs)
}
localize_number :price
def self.indexed(hub)
Hash[
for_hubs(hub).preload(:variant).map { |vo| [vo.variant, vo] }