Skip to content

Commit

Permalink
Merge branch 'v1.2' of github.com:boomerdigital/solidus_avatax_certif…
Browse files Browse the repository at this point in the history
…ied into v1.2
  • Loading branch information
acreilly committed Aug 2, 2016
2 parents e05cf29 + a443b72 commit 01459c5
Show file tree
Hide file tree
Showing 17 changed files with 180 additions and 61 deletions.
11 changes: 11 additions & 0 deletions app/controllers/spree/admin/users_controller_decorator.rb
Original file line number Diff line number Diff line change
@@ -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
28 changes: 3 additions & 25 deletions app/models/solidus_avatax_certified/address.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand All @@ -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)
Expand All @@ -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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion app/models/solidus_avatax_certified/preference_updater.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Expand Down
13 changes: 13 additions & 0 deletions app/models/spree/address_decorator.rb
Original file line number Diff line number Diff line change
@@ -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
4 changes: 4 additions & 0 deletions app/models/spree/avalara_preference.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 1 addition & 11 deletions app/models/spree/avalara_transaction.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down Expand Up @@ -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?
Expand Down
22 changes: 22 additions & 0 deletions app/models/spree/order_decorator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
13 changes: 7 additions & 6 deletions app/views/spree/admin/avatax_settings/edit.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@
<label><%= t('avatax_servicepath_address') %></label><br />
<input type="text" placeholder="<%= AVATAX_SERVICEPATH_ADDRESS %>", readonly>
</p>
<p>
<label><%= t('avatax_client_version') %></label><br />
<input type="text" placeholder="<%= AVATAX_CLIENT_VERSION %>", readonly>
</p>
</fieldset>

<fieldset>
Expand All @@ -65,15 +61,20 @@
<%= check_box_tag('settings[log_to_stdout]','yes' , Spree::AvalaraPreference.log_to_stdout.value, :class => 'avatax') %>
</p>
</fieldset>

<fieldset>
<legend><%= t('avatax_address_validation') %></legend>
<p>
<label><%= t('enable_avatax_address_validation') %></label><br />
<%= check_box_tag('settings[address_validation]','yes' , Spree::AvalaraPreference.address_validation.value, :class => 'avatax') %>
</p>
<p>
<label>Refuse Checkout if Address Validation Fails</label><br />
<%= check_box_tag('settings[refuse_checkout_address_validation_error]','yes' , Spree::AvalaraPreference.refuse_checkout_address_validation_error.value, :class => 'avatax') %>
</p>
</fieldset>
<fieldset>

<fieldset>
<legend><%= t('avatax_address_validation_enabled_countries') %></legend>
<p>
<% current_countries = Spree::Country.where(name: Spree::AvalaraPreference.validation_enabled_countries_array) %>
Expand Down
8 changes: 4 additions & 4 deletions app/views/spree/admin/avatax_settings/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@
<th scope="row"><%= t("enable_avatax_address_validation") %>:</th>
<td><%= Spree::AvalaraPreference.address_validation.value %></td>
</tr>
<tr>
<th scope="row">Refuse Checkout if Address Validation Fails</th>
<td><%= Spree::AvalaraPreference.refuse_checkout_address_validation_error.value %></td>
</tr>
<tr>
<th scope="row"><%= t("avatax_address_validation_enabled_countries") %>:</th>
<% address_validated_countries = Spree::AvalaraPreference.validation_enabled_countries_array %>
Expand All @@ -63,10 +67,6 @@
<th scope="row"><%= t("enable_avatax_document_committing") %>:</th>
<td><%= Spree::AvalaraPreference.document_commit.value %></td>
</tr>
<tr>
<th scope="row"><%= t("client_version") %>:</th>
<td><%= AVATAX_CLIENT_VERSION %></td>
</tr>

<tr>
<th scope="row"><%= t("business_address") %>:</th>
Expand Down
13 changes: 8 additions & 5 deletions app/views/spree/admin/users/avalara_information.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,18 @@
</div>

<div data-hook="admin_user_edit_form">
<%= form_for [:admin, @user], as: :user, url: admin_user_url(@user), method: :put do |f| %>
<%= form_for [:admin, @user], as: :user, url: avalara_information_admin_user_url(@user), method: :put do |f| %>
<div class="alpha six columns">
<div class="field">
<label>Customer Code</label>
<input type="text" class="fullwidth" placeholder="<%= @user.id %>", readonly>
</div>
</div>
<% use_codes_list = Spree::AvalaraEntityUseCode.all.map {|use_code| ["#{use_code.use_code}) #{use_code.use_code_description}", use_code.id]} %>
<div class="omega six columns">
<%= f.field_container :avalara_entity_use_code_id do %>
<%= label_tag :avalara_entity_use_code_id, t(:avalara_entity_use_code) %><br />
<%= hidden_field_tag 'user[avalara_entity_use_code_id]', f.object.avalara_entity_use_code_id , :class => "use_code_picker fullwidth" %>
<%= f.select(:avalara_entity_use_code_id, use_codes_list) %>
<% end %>
</div>
<div class="omega six columns">
Expand All @@ -33,9 +34,11 @@
<% end %>
</div>
<br><br><br>
<div class="alpha fullwidth" data-hook="admin_user_edit_form_button">
<%= render :partial => 'spree/admin/shared/edit_resource_links', :locals => { :collection_url => admin_users_url } %>
</div>
<% if can?(:update, @user) %>
<div data-hook="admin_user_edit_form_button">
<%= render :partial => 'spree/admin/shared/edit_resource_links', :locals => { :collection_url => admin_users_url } %>
</div>
<% end %>
</div>
<% end %>
</fieldset>
Expand Down
2 changes: 1 addition & 1 deletion config/initializers/avatax.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
gem_version = File.read(File.expand_path('../../../GEM_VERSION',__FILE__)).strip
solidus_version = File.read(File.expand_path('../../../SOLIDUS_VERSION',__FILE__)).strip

AVATAX_CLIENT_VERSION = "SolidusV#{solidus_version}-ExtV#{gem_version}"
AVATAX_CLIENT_VERSION = "a0o33000004FH8l"
AVATAX_SERVICEPATH_ADDRESS = '/1.0/address/'
AVATAX_SERVICEPATH_TAX = '/1.0/tax/'
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
resources :users do
member do
get :avalara_information
put :avalara_information
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions lib/solidus_avatax_certified/preference_seeder.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module SolidusAvataxCertified
class PreferenceSeeder
BOOLEAN_PREFERENCES = ['iseligible', 'log', 'address_validation', 'tax_calculation', 'document_commit', 'log_to_stdout'].freeze
BOOLEAN_PREFERENCES = ['iseligible', 'log', 'address_validation', 'tax_calculation', 'document_commit', 'log_to_stdout', 'refuse_checkout_address_validation_error'].freeze
STORABLE_ENV_PREFERENCES = ['company_code', 'endpoint', 'account', 'license_key'].freeze

class << self
Expand Down Expand Up @@ -31,7 +31,7 @@ def stored_env_prefs

def boolean_prefs
BOOLEAN_PREFERENCES.each do |preference|
if preference == 'log_to_stdout'
if ['refuse_checkout_address_validation_error', 'log_to_stdout'].include?(preference)
pref = Spree::AvalaraPreference.new(name: preference, value: 'false', object_type: 'boolean')
else
pref = Spree::AvalaraPreference.new(name: preference, value: 'true', object_type: 'boolean')
Expand Down
8 changes: 4 additions & 4 deletions spec/models/solidus_avatax_certified/address_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,11 @@
result = address_lines.validate
expect(address_lines.validate).to eq("Address validation disabled")
end
end

describe '#country_enabled?' do
it 'returns true if the current country is enabled' do
expect(address_lines.country_enabled?).to be_truthy
it 'fails when information is incorrect' do
order.ship_address.update_attributes(city: nil)

expect(address_lines.validate['ResultCode']).to eq('Error')
end
end
end
44 changes: 44 additions & 0 deletions spec/models/spree/address_decorator_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
require 'spec_helper'

describe Spree::Address, type: :model do
let(:address) { create(:address) }

describe '#validation_enabled?' do
it 'returns true if preference is true and country validation is enabled' do
Spree::AvalaraPreference.address_validation.update_attributes(value: 'true')
Spree::AvalaraPreference.validation_enabled_countries.update_attributes(value: 'United States,Canada')

expect(address.validation_enabled?).to be_truthy
end

it 'returns false if address validation preference is false' do
Spree::AvalaraPreference.address_validation.update_attributes(value: 'false')

expect(address.validation_enabled?).to be_falsey
end

it 'returns false if enabled country is not present' do
Spree::AvalaraPreference.validation_enabled_countries.update_attributes(value: 'Canada')

expect(address.validation_enabled?).to be_falsey
end
end

describe '#country_validation_enabled?' do
it 'returns true if the current country is enabled' do
expect(address.country_validation_enabled?).to be_truthy
end
end

describe '#validation_enabled_countries' do
it 'returns an array' do
expect(Spree::Address.validation_enabled_countries).to be_kind_of(Array)
end

it 'includes United States' do
Spree::AvalaraPreference.validation_enabled_countries.update_attributes(value: 'United States,Canada')

expect(Spree::Address.validation_enabled_countries).to include('United States')
end
end
end
Loading

0 comments on commit 01459c5

Please sign in to comment.