diff --git a/app/controllers/spree/admin/users_controller_decorator.rb b/app/controllers/spree/admin/users_controller_decorator.rb
new file mode 100644
index 00000000..0dc52c8a
--- /dev/null
+++ b/app/controllers/spree/admin/users_controller_decorator.rb
@@ -0,0 +1,11 @@
+Spree::Admin::UsersController.class_eval do
+ def avalara_information
+ if request.put?
+ if @user.update_attributes(user_params)
+ flash.now[:success] = Spree.t(:account_updated)
+ end
+ end
+
+ render :avalara_information
+ end
+end
diff --git a/app/models/solidus_avatax_certified/address.rb b/app/models/solidus_avatax_certified/address.rb
index 403d267c..a11baa19 100644
--- a/app/models/solidus_avatax_certified/address.rb
+++ b/app/models/solidus_avatax_certified/address.rb
@@ -62,7 +62,7 @@ def origin_ship_addresses
end
def validate
- return 'Address validation disabled' unless address_validation_enabled?
+ return 'Address validation disabled' unless @ship_address.validation_enabled?
return @ship_address if @ship_address.nil?
address_hash = {
@@ -77,14 +77,6 @@ def validate
validation_response(address_hash)
end
- def country_enabled?
- enabled_countries.include?(@ship_address.country.try(:name))
- end
-
- def address_validation_enabled?
- Spree::AvalaraPreference.address_validation.is_true? && country_enabled?
- end
-
private
def validation_response(address)
@@ -94,19 +86,9 @@ def validation_response(address)
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
res = http.get(uri.request_uri, 'Authorization' => credential)
- response = JSON.parse(res.body)
- address = response['Address']
+ logger.debug res
- if address['City'] != @ship_address.city || address['Region'] != @ship_address.state.abbr
- response['ResultCode'] = 'Error'
- response['Messages'] = [
- {
- 'Summary' => "Did you mean #{address['Line1']}, #{address['City']}, #{address['Region']}, #{address['PostalCode']}?"
- }
- ]
- end
-
- return response
+ JSON.parse(res.body)
rescue => e
"error in address validation: #{e}"
end
@@ -131,10 +113,6 @@ def account_number
Spree::AvalaraPreference.account.value
end
- def enabled_countries
- Spree::AvalaraPreference.validation_enabled_countries_array
- end
-
def logger
@logger ||= SolidusAvataxCertified::AvataxLog.new('avalara_order_addresses', 'SolidusAvataxCertified::Address', "Building Addresses for Order#: #{order.number}")
end
diff --git a/app/models/solidus_avatax_certified/preference_updater.rb b/app/models/solidus_avatax_certified/preference_updater.rb
index bd8e4cf0..a01076d6 100644
--- a/app/models/solidus_avatax_certified/preference_updater.rb
+++ b/app/models/solidus_avatax_certified/preference_updater.rb
@@ -17,7 +17,7 @@ def update
def update_stored_preferences
Spree::AvalaraPreference.storable_envs.each do |preference|
- if !ENV.fetch("AVATAX_#{preference.name.upcase}").nil?
+ if !ENV["AVATAX_#{preference.name.upcase}"].blank?
update_value(preference, ENV["AVATAX_#{preference.name.upcase}"])
else
update_value(preference, @avatax_preferences[preference.name.downcase])
diff --git a/app/models/spree/address_decorator.rb b/app/models/spree/address_decorator.rb
new file mode 100644
index 00000000..c21e039a
--- /dev/null
+++ b/app/models/spree/address_decorator.rb
@@ -0,0 +1,13 @@
+Spree::Address.class_eval do
+ def validation_enabled?
+ Spree::AvalaraPreference.address_validation.is_true? && country_validation_enabled?
+ end
+
+ def country_validation_enabled?
+ Spree::Address.validation_enabled_countries.include?(country.try(:name))
+ end
+
+ def self.validation_enabled_countries
+ Spree::AvalaraPreference.validation_enabled_countries_array
+ end
+end
diff --git a/app/models/spree/avalara_preference.rb b/app/models/spree/avalara_preference.rb
index ac9a7463..aa85e93f 100644
--- a/app/models/spree/avalara_preference.rb
+++ b/app/models/spree/avalara_preference.rb
@@ -45,6 +45,10 @@ def self.address_validation
find_by(name: 'address_validation')
end
+ def self.refuse_checkout_address_validation_error
+ find_by(name: 'refuse_checkout_address_validation_error')
+ end
+
def self.tax_calculation
find_by(name: 'tax_calculation')
end
diff --git a/app/models/spree/avalara_transaction.rb b/app/models/spree/avalara_transaction.rb
index 7c78eb6f..74fda00b 100644
--- a/app/models/spree/avalara_transaction.rb
+++ b/app/models/spree/avalara_transaction.rb
@@ -74,16 +74,6 @@ def post_order_to_avalara(commit = false, invoice_detail = nil)
avatax_address = SolidusAvataxCertified::Address.new(order)
avatax_line = SolidusAvataxCertified::Line.new(order, invoice_detail)
- response = avatax_address.validate
-
- unless response.nil?
- if response['ResultCode'] == 'Success'
- logger.info('Address Validation Success')
- else
- logger.info('Address Validation Failed')
- end
- end
-
doc_date = order.completed? ? order.completed_at.strftime('%F') : Date.today.strftime('%F')
gettaxes = {
@@ -161,7 +151,7 @@ def customer_code
end
def avatax_client_version
- AVATAX_CLIENT_VERSION || 'SolidusV1.2.0-ExtV0.0.1'
+ AVATAX_CLIENT_VERSION || 'a0o33000004FH8l'
end
def document_committing_enabled?
diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb
index d77d7669..8afc9bc5 100644
--- a/app/models/spree/order_decorator.rb
+++ b/app/models/spree/order_decorator.rb
@@ -7,6 +7,9 @@
self.state_machine.before_transition :to => :canceled,
:do => :cancel_avalara,
:if => :avalara_eligible?
+ self.state_machine.before_transition :to => :delivery,
+ :do => :validate_ship_address,
+ :if => :address_validation_enabled?
def avalara_eligible?
Spree::AvalaraPreference.iseligible.is_true?
@@ -41,6 +44,19 @@ def avalara_capture_finalize
@rtn_tax
end
+ def validate_ship_address
+ avatax_address = SolidusAvataxCertified::Address.new(self)
+ response = avatax_address.validate
+
+ return response if response['ResultCode'] == 'Success'
+ return response if !Spree::AvalaraPreference.refuse_checkout_address_validation_error.is_true?
+
+ messages = response['Messages'].each do |message|
+ errors.add(:address_validation_failure, message['Summary'])
+ end
+ return false
+ end
+
def avatax_cache_key
key = ['Spree::Order']
key << self.number
@@ -57,6 +73,12 @@ def stock_locations
Spree::StockLocation.where(id: stock_loc_ids)
end
+ def address_validation_enabled?
+ return false if ship_address.nil?
+
+ ship_address.validation_enabled?
+ end
+
def logger
@logger ||= SolidusAvataxCertified::AvataxLog.new('avalara_order', 'order class', 'start order processing')
end
diff --git a/app/views/spree/admin/avatax_settings/edit.html.erb b/app/views/spree/admin/avatax_settings/edit.html.erb
index e282a621..4f20ea8e 100644
--- a/app/views/spree/admin/avatax_settings/edit.html.erb
+++ b/app/views/spree/admin/avatax_settings/edit.html.erb
@@ -36,10 +36,6 @@
-
-
-
-
-
+
-