solidus_avatax_certified 1.0.0 → 1.1.0
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/.travis.yml +28 -0
- data/Gemfile +3 -0
- data/README.md +4 -0
- data/app/assets/javascripts/spree/backend/address_validator.js +1 -1
- data/app/assets/javascripts/spree/frontend/address_validator.js +1 -1
- data/app/controllers/spree/admin/avatax_settings_controller.rb +5 -13
- data/app/models/solidus_avatax_certified/address.rb +2 -8
- data/app/models/solidus_avatax_certified/avatax_log.rb +10 -20
- data/app/models/solidus_avatax_certified/line.rb +0 -6
- data/app/models/solidus_avatax_certified/preference_updater.rb +11 -28
- data/app/models/solidus_avatax_certified/request/base.rb +64 -0
- data/app/models/solidus_avatax_certified/request/cancel_tax.rb +14 -0
- data/app/models/solidus_avatax_certified/request/get_tax.rb +27 -0
- data/app/models/solidus_avatax_certified/request/return_tax.rb +50 -0
- data/app/models/solidus_avatax_certified/response/address_validation.rb +11 -0
- data/app/models/solidus_avatax_certified/response/base.rb +25 -0
- data/app/models/solidus_avatax_certified/response/cancel_tax.rb +15 -0
- data/app/models/solidus_avatax_certified/response/get_tax.rb +11 -0
- data/app/models/spree/address_decorator.rb +2 -2
- data/app/models/spree/adjustment_decorator.rb +0 -2
- data/app/models/spree/avalara_transaction.rb +20 -108
- data/app/models/spree/avatax_configuration.rb +25 -0
- data/app/models/spree/calculator/avalara_transaction.rb +18 -10
- data/app/models/spree/order_decorator.rb +7 -15
- data/app/models/spree/payment_decorator.rb +2 -7
- data/app/models/spree/refund_decorator.rb +6 -10
- data/app/models/spree/shipping_rate_decorator.rb +1 -1
- data/app/models/tax_svc.rb +71 -61
- data/app/views/spree/admin/avatax_settings/edit.html.erb +34 -54
- data/app/views/spree/admin/avatax_settings/show.html.erb +28 -35
- data/app/views/spree/checkout/_address_validator_button.html.erb +1 -1
- data/config/initializers/avatax.rb +11 -2
- data/config/locales/en.yml +9 -3
- data/config/routes.rb +1 -1
- data/db/migrate/20170509201056_drop_spree_avalara_preferences.rb +6 -0
- data/lib/solidus_avatax_certified/exceptions.rb +4 -0
- data/lib/solidus_avatax_certified/preference_seeder.rb +9 -27
- data/lib/solidus_avatax_certified/version.rb +3 -0
- data/lib/solidus_avatax_certified.rb +2 -0
- data/solidus_avatax_certified.gemspec +6 -3
- data/spec/controllers/spree/admin/avatax_settings_controller_spec.rb +8 -8
- data/spec/factories/response_hash_factories.rb +88 -0
- data/spec/features/checkout_spec.rb +1 -1
- data/spec/features/vat_spec.rb +1 -1
- data/spec/models/solidus_avatax_certified/address_spec.rb +22 -7
- data/spec/models/solidus_avatax_certified/avatax_log_spec.rb +17 -24
- data/spec/models/solidus_avatax_certified/line_spec.rb +8 -4
- data/spec/models/solidus_avatax_certified/request/base_spec.rb +13 -0
- data/spec/models/solidus_avatax_certified/request/cancel_tax_spec.rb +13 -0
- data/spec/models/solidus_avatax_certified/request/get_tax_spec.rb +31 -0
- data/spec/models/solidus_avatax_certified/request/return_tax_spec.rb +31 -0
- data/spec/models/solidus_avatax_certified/response/base_spec.rb +21 -0
- data/spec/models/spree/address_decorator_spec.rb +5 -5
- data/spec/models/spree/adjustment_decorator_spec.rb +0 -10
- data/spec/models/spree/avalara_transaction_spec.rb +12 -12
- data/spec/models/spree/calculator/avalara_transaction_spec.rb +4 -3
- data/spec/models/spree/order_decorator_spec.rb +38 -12
- data/spec/models/spree/payment_decorator_spec.rb +7 -9
- data/spec/models/spree/refund_decorator_spec.rb +1 -1
- data/spec/models/tax_svc_spec.rb +65 -0
- data/spec/spec_helper.rb +3 -2
- data/spec/support/avatax_config_preferences.rb +1 -3
- data/spec/support/vcr.rb +1 -1
- data/spec/vcr/Spree_Order/_cancel_avalara/error/should_raise_exception_if_preference_is_enabled.yml +191 -0
- data/spec/vcr/Spree_Order/_cancel_avalara/error/should_receive_ResultCode_of_Error.yml +191 -0
- data/spec/vcr/{SolidusAvataxCertified_Address/_validate/fails_when_information_is_incorrect.yml → Spree_Order/_validate_ship_address/validation_failed/raise_exceptions_if_raise_exceptions_preference_is_enabled.yml} +8 -8
- data/spec/vcr/Spree_Order/_validate_ship_address/validation_failed/should_return_false.yml +54 -0
- data/spec/vcr/Spree_Payment/_avalara_finalize/should_receive_avalara_finalize.yml +205 -0
- data/spec/vcr/TaxSvc/_cancel_tax/respond_with_success.yml +121 -0
- data/spec/vcr/TaxSvc/_cancel_tax/should_raise_error.yml +58 -0
- data/spec/vcr/TaxSvc/_get_tax/fails/fails_when_no_lines_are_given.yml +60 -0
- data/spec/vcr/TaxSvc/_get_tax/fails/fails_when_no_params_are_given.yml +68 -0
- data/spec/vcr/TaxSvc/_get_tax/fails/responds_with_error_when_result_code_is_not_a_success.yml +61 -0
- data/spec/vcr/TaxSvc/_get_tax/gets_tax_when_all_credentials_are_there.yml +68 -0
- data/spec/vcr/TaxSvc/_ping/should_return_estimate.yml +81 -0
- data/spec/vcr/address_validation_failure.yml +54 -0
- data/spec/vcr/address_validation_success.yml +16 -16
- data/spec/vcr/order_capture.yml +21 -21
- data/spec/vcr/order_capture_finalize.yml +22 -91
- metadata +56 -13
- data/GEM_VERSION +0 -1
- data/app/models/spree/avalara_preference.rb +0 -72
- data/spec/factories/avalara_preference_factory.rb +0 -7
- data/spec/models/spree/avalara_preference_spec.rb +0 -173
- data/spec/vcr/Spree_Payment/_avalara_finalize/should_update_the_amount_to_be_the_order_total.yml +0 -136
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 88d7c785ac3c5a75d216e1ceb29f7a541579be6c
|
|
4
|
+
data.tar.gz: 6d5b6363588951eeef89cbe13a747ee4c4ae29c2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4831e98ede6e7d067b7d889184553261726f04faeac142133c7b53cddd19f46d1179b2ee680baf93dafbcbfd633c5edab8bcca6fc25104c96480d8d12b90067d
|
|
7
|
+
data.tar.gz: f4a2e6f51878e652053d1c2bc4f951e592a441cdf7f85cff13409a4d28403154b395304d3625991396509bf57410db61e6249612893b538bf4f5085eb7fa5308
|
data/.travis.yml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
sudo: false
|
|
2
|
+
language: ruby
|
|
3
|
+
rvm:
|
|
4
|
+
- 2.3.3
|
|
5
|
+
before_install:
|
|
6
|
+
- rvm @default,@global do gem uninstall bundler -x
|
|
7
|
+
- gem install bundler --version '~> 1.13.0'
|
|
8
|
+
- bundle --version
|
|
9
|
+
before_script:
|
|
10
|
+
- sh -e /etc/init.d/xvfb start
|
|
11
|
+
- export DISPLAY=:99.0
|
|
12
|
+
- bundle exec rake test_app
|
|
13
|
+
script:
|
|
14
|
+
- bundle exec rspec
|
|
15
|
+
env:
|
|
16
|
+
matrix:
|
|
17
|
+
- SOLIDUS_BRANCH=v1.0 DB=postgres
|
|
18
|
+
- SOLIDUS_BRANCH=v1.1 DB=postgres
|
|
19
|
+
- SOLIDUS_BRANCH=v1.2 DB=postgres
|
|
20
|
+
- SOLIDUS_BRANCH=v1.3 DB=postgres
|
|
21
|
+
- SOLIDUS_BRANCH=v1.4 DB=postgres
|
|
22
|
+
- SOLIDUS_BRANCH=v2.0 DB=postgres
|
|
23
|
+
- SOLIDUS_BRANCH=v1.0 DB=mysql
|
|
24
|
+
- SOLIDUS_BRANCH=v1.1 DB=mysql
|
|
25
|
+
- SOLIDUS_BRANCH=v1.2 DB=mysql
|
|
26
|
+
- SOLIDUS_BRANCH=v1.3 DB=mysql
|
|
27
|
+
- SOLIDUS_BRANCH=v1.4 DB=mysql
|
|
28
|
+
- SOLIDUS_BRANCH=v2.0 DB=mysql
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
[](https://travis-ci.org/boomerdigital/solidus_avatax_certified)
|
|
2
|
+
|
|
1
3
|
SolidusAvataxCertified
|
|
2
4
|
===========
|
|
3
5
|
|
|
@@ -12,6 +14,8 @@ From Avalara's own explanation of the certification program:
|
|
|
12
14
|
> Avalara’s partners who have created certified integrations for AvaTax have demonstrated that those integrations contain elements which are essential to providing customers with easy-to-use software that gives accurate sales tax calculations. The certification criteria used to demonstrate these elements are based on Avalara’s years of experience integrating into ERP, ecommerce and point-of-sale applications.
|
|
13
15
|
|
|
14
16
|
|
|
17
|
+
**For Solidus versions v2.1 and up, please use branch v2.1**
|
|
18
|
+
|
|
15
19
|
**[For Installation and Setup instructions, please visit our wiki.](https://github.com/boomerdigital/solidus_avatax_certified/wiki)**
|
|
16
20
|
|
|
17
21
|
Testing
|
|
@@ -37,7 +37,7 @@ AddressValidator.prototype = {
|
|
|
37
37
|
|
|
38
38
|
$.each(["Line1", "Line2", "City", "PostalCode"], function(index, value){
|
|
39
39
|
var keyVal = controller.getKeyByValue(value);
|
|
40
|
-
$(wrapper + " input[id*='" + keyVal + "']").val(data.Address[value]);
|
|
40
|
+
$(wrapper + " input[id*='" + keyVal + "']").val(data.result.Address[value]);
|
|
41
41
|
}.bind(address));
|
|
42
42
|
|
|
43
43
|
this.showFlash(data);
|
|
@@ -39,7 +39,7 @@ AddressValidator.prototype = {
|
|
|
39
39
|
|
|
40
40
|
$.each(["Line1", "Line2", "City", "PostalCode"], function(index, value){
|
|
41
41
|
var keyVal = controller.getKeyByValue(value);
|
|
42
|
-
$(wrapper + " input[id*='" + keyVal + "']").val(data.Address[value]);
|
|
42
|
+
$(wrapper + " input[id*='" + keyVal + "']").val(data.result.Address[value]);
|
|
43
43
|
}.bind(address));
|
|
44
44
|
|
|
45
45
|
this.showFlash(data);
|
|
@@ -7,20 +7,12 @@ module Spree
|
|
|
7
7
|
def show
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def
|
|
11
|
-
send_file "#{Rails.root}/log/
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def get_file_post_order_to_avalara
|
|
15
|
-
send_file "#{Rails.root}/log/post_order_to_avalara.log"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def get_file_avalara_order
|
|
19
|
-
send_file "#{Rails.root}/log/avalara_order.log"
|
|
10
|
+
def download_avatax_log
|
|
11
|
+
send_file "#{Rails.root}/log/avatax.log"
|
|
20
12
|
end
|
|
21
13
|
|
|
22
14
|
def erase_data
|
|
23
|
-
File.open("log
|
|
15
|
+
File.open("log/avatax.log", 'w') {}
|
|
24
16
|
|
|
25
17
|
head :ok
|
|
26
18
|
end
|
|
@@ -67,10 +59,10 @@ module Spree
|
|
|
67
59
|
private
|
|
68
60
|
|
|
69
61
|
def load_avatax_origin
|
|
70
|
-
if Spree::
|
|
62
|
+
if Spree::Avatax::Config.origin.blank?
|
|
71
63
|
@avatax_origin = {}
|
|
72
64
|
else
|
|
73
|
-
@avatax_origin = JSON.parse(Spree::
|
|
65
|
+
@avatax_origin = JSON.parse(Spree::Avatax::Config.origin)
|
|
74
66
|
end
|
|
75
67
|
end
|
|
76
68
|
|
|
@@ -10,7 +10,7 @@ module SolidusAvataxCertified
|
|
|
10
10
|
def initialize(order)
|
|
11
11
|
@order = order
|
|
12
12
|
@ship_address = order.ship_address
|
|
13
|
-
@origin_address = JSON.parse(Spree::
|
|
13
|
+
@origin_address = JSON.parse(Spree::Avatax::Config.origin)
|
|
14
14
|
@addresses = []
|
|
15
15
|
|
|
16
16
|
build_addresses
|
|
@@ -20,8 +20,6 @@ module SolidusAvataxCertified
|
|
|
20
20
|
origin_address
|
|
21
21
|
order_ship_address unless @ship_address.nil?
|
|
22
22
|
origin_ship_addresses
|
|
23
|
-
|
|
24
|
-
logger.debug @addresses
|
|
25
23
|
end
|
|
26
24
|
|
|
27
25
|
def origin_address
|
|
@@ -81,15 +79,11 @@ module SolidusAvataxCertified
|
|
|
81
79
|
|
|
82
80
|
def validation_response(address)
|
|
83
81
|
validator = TaxSvc.new
|
|
84
|
-
validator.validate_address(address)
|
|
82
|
+
validator.validate_address(address).validation_result
|
|
85
83
|
end
|
|
86
84
|
|
|
87
85
|
def stock_loc_ids
|
|
88
86
|
order.shipments.pluck(:stock_location_id).uniq
|
|
89
87
|
end
|
|
90
|
-
|
|
91
|
-
def logger
|
|
92
|
-
@logger ||= SolidusAvataxCertified::AvataxLog.new('avalara_order_addresses', 'SolidusAvataxCertified::Address', "Building Addresses for Order#: #{order.number}")
|
|
93
|
-
end
|
|
94
88
|
end
|
|
95
89
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
module SolidusAvataxCertified
|
|
2
2
|
class AvataxLog
|
|
3
|
-
def initialize(
|
|
4
|
-
if !Spree::
|
|
3
|
+
def initialize(file_name, log_info = nil, schedule = nil)
|
|
4
|
+
if !Spree::Avatax::Config.log_to_stdout
|
|
5
5
|
schedule = 'weekly' unless schedule != nil
|
|
6
|
-
@logger ||= Logger.new("#{Rails.root}/log
|
|
6
|
+
@logger ||= Logger.new("#{Rails.root}/log/avatax.log", schedule)
|
|
7
7
|
progname(file_name.split('/').last.chomp('.rb'))
|
|
8
8
|
info(log_info) unless log_info.nil?
|
|
9
9
|
else
|
|
@@ -17,7 +17,7 @@ module SolidusAvataxCertified
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def enabled?
|
|
20
|
-
Spree::
|
|
20
|
+
Spree::Avatax::Config.log || Spree::Avatax::Config.log_to_stdout
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def progname(progname = nil)
|
|
@@ -26,11 +26,9 @@ module SolidusAvataxCertified
|
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
def info(
|
|
29
|
+
def info(message, obj = nil)
|
|
30
30
|
if enabled?
|
|
31
|
-
|
|
32
|
-
logger.info "[AVATAX] #{log_info}"
|
|
33
|
-
end
|
|
31
|
+
logger.info "[AVATAX] #{message} #{obj}"
|
|
34
32
|
end
|
|
35
33
|
end
|
|
36
34
|
|
|
@@ -46,23 +44,15 @@ module SolidusAvataxCertified
|
|
|
46
44
|
end
|
|
47
45
|
|
|
48
46
|
|
|
49
|
-
def debug(obj,
|
|
47
|
+
def debug(obj, message='')
|
|
50
48
|
if enabled?
|
|
51
|
-
logger.debug "[AVATAX] #{obj.inspect}"
|
|
52
|
-
if text.nil?
|
|
53
|
-
obj
|
|
54
|
-
else
|
|
55
|
-
logger.debug "[AVATAX] text"
|
|
56
|
-
text
|
|
57
|
-
end
|
|
49
|
+
logger.debug "[AVATAX] #{message} #{obj.inspect}"
|
|
58
50
|
end
|
|
59
51
|
end
|
|
60
52
|
|
|
61
|
-
def error(
|
|
53
|
+
def error(obj, message='')
|
|
62
54
|
if enabled?
|
|
63
|
-
|
|
64
|
-
logger.error "[AVATAX] #{log_info}"
|
|
65
|
-
end
|
|
55
|
+
logger.error "[AVATAX] #{message} #{obj}"
|
|
66
56
|
end
|
|
67
57
|
end
|
|
68
58
|
end
|
|
@@ -18,8 +18,6 @@ module SolidusAvataxCertified
|
|
|
18
18
|
item_lines_array
|
|
19
19
|
shipment_lines_array
|
|
20
20
|
end
|
|
21
|
-
|
|
22
|
-
logger.debug @lines
|
|
23
21
|
end
|
|
24
22
|
|
|
25
23
|
def item_line(line_item)
|
|
@@ -133,10 +131,6 @@ module SolidusAvataxCertified
|
|
|
133
131
|
line_item.adjustments.promotion.eligible.any? || order.adjustments.promotion.eligible.any?
|
|
134
132
|
end
|
|
135
133
|
|
|
136
|
-
def logger
|
|
137
|
-
@logger ||= SolidusAvataxCertified::AvataxLog.new('avalara_order_lines', 'SolidusAvataxCertified::Line', "Building Lines for Order#: #{order.number}")
|
|
138
|
-
end
|
|
139
|
-
|
|
140
134
|
def tax_included_in_price?(item)
|
|
141
135
|
# Need better error handling
|
|
142
136
|
# if no tax rates, raise error tax rates needs to be set up
|
|
@@ -7,56 +7,39 @@ module SolidusAvataxCertified
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def update
|
|
10
|
+
update_storable_settings
|
|
11
|
+
update_boolean_settings
|
|
10
12
|
update_validation_enabled_countries
|
|
11
13
|
update_origin_address
|
|
12
|
-
update_stored_preferences
|
|
13
|
-
update_boolean_preferences
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
private
|
|
17
17
|
|
|
18
|
-
def
|
|
19
|
-
Spree::
|
|
20
|
-
|
|
21
|
-
update_value(preference, ENV["AVATAX_#{preference.name.upcase}"])
|
|
22
|
-
else
|
|
23
|
-
update_value(preference, @avatax_preferences[preference.name.downcase])
|
|
24
|
-
end
|
|
18
|
+
def update_boolean_settings
|
|
19
|
+
Spree::AvataxConfiguration.boolean_preferences.each do |key|
|
|
20
|
+
Spree::Avatax::Config[key.to_sym] = @avatax_preferences[key] || false
|
|
25
21
|
end
|
|
26
22
|
end
|
|
27
23
|
|
|
28
|
-
def
|
|
29
|
-
Spree::
|
|
30
|
-
|
|
31
|
-
update_value(boolean, 'true')
|
|
32
|
-
else
|
|
33
|
-
update_value(boolean, 'false')
|
|
34
|
-
end
|
|
24
|
+
def update_storable_settings
|
|
25
|
+
Spree::AvataxConfiguration.storable_env_preferences.each do |key|
|
|
26
|
+
Spree::Avatax::Config[key.to_sym] = @avatax_preferences[key] || ENV["AVATAX_#{key.upcase}"]
|
|
35
27
|
end
|
|
36
28
|
end
|
|
37
29
|
|
|
30
|
+
|
|
38
31
|
def update_origin_address
|
|
39
32
|
set_region
|
|
40
33
|
set_country
|
|
41
|
-
|
|
34
|
+
Spree::Avatax::Config.origin = @avatax_origin.to_json
|
|
42
35
|
end
|
|
43
36
|
|
|
44
37
|
def update_validation_enabled_countries
|
|
45
38
|
if @avatax_preferences['address_validation_enabled_countries'].present?
|
|
46
|
-
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def update_value(preference, param)
|
|
51
|
-
if value_changed?(preference, param)
|
|
52
|
-
preference.update_attributes(value: param)
|
|
39
|
+
Spree::Avatax::Config.address_validation_enabled_countries = @avatax_preferences['address_validation_enabled_countries']
|
|
53
40
|
end
|
|
54
41
|
end
|
|
55
42
|
|
|
56
|
-
def value_changed?(preference, param)
|
|
57
|
-
preference.value != param
|
|
58
|
-
end
|
|
59
|
-
|
|
60
43
|
def set_region
|
|
61
44
|
region = @avatax_origin['Region']
|
|
62
45
|
unless region.blank?
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module SolidusAvataxCertified
|
|
2
|
+
module Request
|
|
3
|
+
class Base
|
|
4
|
+
attr_reader :order, :request
|
|
5
|
+
|
|
6
|
+
def initialize(order, opts={})
|
|
7
|
+
@order = order
|
|
8
|
+
@doc_type = opts[:doc_type]
|
|
9
|
+
@commit = opts[:commit]
|
|
10
|
+
@request = {}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def generate
|
|
14
|
+
raise 'Method needs to be implemented in subclass.'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
def base_tax_hash
|
|
20
|
+
{
|
|
21
|
+
CustomerCode: customer_code,
|
|
22
|
+
CompanyCode: company_code,
|
|
23
|
+
CustomerUsageType: order.customer_usage_type,
|
|
24
|
+
ExemptionNo: order.user.try(:exemption_number),
|
|
25
|
+
Client: avatax_client_version,
|
|
26
|
+
ReferenceCode: order.number,
|
|
27
|
+
DetailLevel: 'Tax',
|
|
28
|
+
CurrencyCode: order.currency
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# If there is a vat id, set BusinessIdentificationNo
|
|
33
|
+
def check_vat_id
|
|
34
|
+
if !business_id_no.blank?
|
|
35
|
+
@request[:BusinessIdentificationNo] = business_id_no
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def address_lines
|
|
40
|
+
@address_lines ||= SolidusAvataxCertified::Address.new(order).addresses
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def sales_lines
|
|
44
|
+
@sales_lines ||= SolidusAvataxCertified::Line.new(order, @doc_type).lines
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def company_code
|
|
48
|
+
@company_code ||= Spree::Avatax::Config.company_code
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def business_id_no
|
|
52
|
+
order.user.try(:vat_id)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def customer_code
|
|
56
|
+
order.user ? order.user.id : order.email
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def avatax_client_version
|
|
60
|
+
AVATAX_CLIENT_VERSION || 'a0o33000004FH8l'
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module SolidusAvataxCertified
|
|
2
|
+
module Request
|
|
3
|
+
class CancelTax < SolidusAvataxCertified::Request::Base
|
|
4
|
+
def generate
|
|
5
|
+
@request = {
|
|
6
|
+
CompanyCode: company_code,
|
|
7
|
+
DocType: @doc_type,
|
|
8
|
+
DocCode: order.number,
|
|
9
|
+
CancelCode: 'DocVoided'
|
|
10
|
+
}
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module SolidusAvataxCertified
|
|
2
|
+
module Request
|
|
3
|
+
class GetTax < SolidusAvataxCertified::Request::Base
|
|
4
|
+
def generate
|
|
5
|
+
@request = {
|
|
6
|
+
DocCode: order.number,
|
|
7
|
+
DocDate: doc_date,
|
|
8
|
+
Discount: order.all_adjustments.promotion.eligible.sum(:amount).abs.to_s,
|
|
9
|
+
Commit: @commit,
|
|
10
|
+
DocType: @doc_type ? @doc_type : 'SalesOrder',
|
|
11
|
+
Addresses: address_lines,
|
|
12
|
+
Lines: sales_lines
|
|
13
|
+
}.merge(base_tax_hash)
|
|
14
|
+
|
|
15
|
+
check_vat_id
|
|
16
|
+
|
|
17
|
+
@request
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
def doc_date
|
|
23
|
+
order.completed? ? order.completed_at.strftime('%F') : Date.today.strftime('%F')
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module SolidusAvataxCertified
|
|
2
|
+
module Request
|
|
3
|
+
class ReturnTax < SolidusAvataxCertified::Request::Base
|
|
4
|
+
|
|
5
|
+
def initialize(order, opts={})
|
|
6
|
+
super
|
|
7
|
+
@refund = opts[:refund]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def generate
|
|
11
|
+
@request = {
|
|
12
|
+
DocCode: order.number.to_s + '.' + @refund.id.to_s,
|
|
13
|
+
DocDate: Date.today.strftime('%F'),
|
|
14
|
+
Commit: @commit,
|
|
15
|
+
DocType: @doc_type ? @doc_type : 'ReturnOrder',
|
|
16
|
+
Addresses: address_lines,
|
|
17
|
+
Lines: sales_lines
|
|
18
|
+
}.merge(base_tax_hash)
|
|
19
|
+
|
|
20
|
+
check_vat_id
|
|
21
|
+
|
|
22
|
+
@request
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
protected
|
|
26
|
+
|
|
27
|
+
def doc_date
|
|
28
|
+
Date.today.strftime('%F')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def base_tax_hash
|
|
32
|
+
super.merge(tax_override)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def tax_override
|
|
36
|
+
{
|
|
37
|
+
TaxOverride: {
|
|
38
|
+
TaxOverrideType: 'TaxDate',
|
|
39
|
+
Reason: @refund.try(:reason).try(:name).limit(255) || 'Return',
|
|
40
|
+
TaxDate: order.completed_at.strftime('%F')
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def sales_lines
|
|
46
|
+
@sales_lines ||= SolidusAvataxCertified::Line.new(order, @doc_type, @refund).lines
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module SolidusAvataxCertified
|
|
2
|
+
module Response
|
|
3
|
+
class Base
|
|
4
|
+
attr_accessor :result
|
|
5
|
+
# To Do
|
|
6
|
+
# 1. Create way to display errors cleanly
|
|
7
|
+
|
|
8
|
+
def initialize(result)
|
|
9
|
+
@result = result
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def success?
|
|
13
|
+
result['ResultCode'] == 'Success'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def error?
|
|
17
|
+
!success? rescue true
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def description
|
|
21
|
+
raise 'Method needs to be implemented in subclass.'
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module SolidusAvataxCertified
|
|
2
|
+
module Response
|
|
3
|
+
class CancelTax < SolidusAvataxCertified::Response::Base
|
|
4
|
+
alias :tax_result :result
|
|
5
|
+
|
|
6
|
+
def initialize(result)
|
|
7
|
+
@result = result['CancelTaxResult']
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def description
|
|
11
|
+
'Cancel Tax'
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Spree::Address.class_eval do
|
|
2
2
|
def validation_enabled?
|
|
3
|
-
Spree::
|
|
3
|
+
Spree::Avatax::Config.address_validation && country_validation_enabled?
|
|
4
4
|
end
|
|
5
5
|
|
|
6
6
|
def country_validation_enabled?
|
|
@@ -8,6 +8,6 @@ Spree::Address.class_eval do
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def self.validation_enabled_countries
|
|
11
|
-
Spree::
|
|
11
|
+
Spree::Avatax::Config.address_validation_enabled_countries
|
|
12
12
|
end
|
|
13
13
|
end
|