avatax 17.8.1 → 17.9.1
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/.gitignore +1 -0
- data/example/avatax.rb +37 -4
- data/lib/avatax/client/accounts.rb +12 -0
- data/lib/avatax/client/companies.rb +1 -0
- data/lib/avatax/client/filingcalendars.rb +14 -3
- data/lib/avatax/client/filings.rb +1 -1
- data/lib/avatax/client/nexus.rb +3 -0
- data/lib/avatax/client/onboarding.rb +1 -1
- data/lib/avatax/client/registrar.rb +1 -1
- data/lib/avatax/client/reports.rb +98 -4
- data/lib/avatax/client/taxcontent.rb +4 -0
- data/lib/avatax/client/transactions.rb +52 -18
- data/lib/avatax/request.rb +13 -11
- data/lib/avatax/version.rb +1 -1
- data/spec/avatax/client/accounts_spec.rb +2 -15
- data/spec/avatax/client/transactions_spec.rb +40 -0
- data/spec/avatax_spec.rb +10 -22
- data/spec/credentials.yaml.example +4 -0
- data/spec/spec_helper.rb +19 -39
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0680587db1990a807285ce4440ee7ab4c2b6038c'
|
4
|
+
data.tar.gz: 8b57b3f6eab1e7ad9db997186e2ea8c890ad6149
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64b065f5aecbc0d52212ce81ca68e4106e92e0f5ce9b702ad28b7bac6a8a6b7733b0c5721e9a499a976fcf0a405ea4e75898ff1f8d81afab0c334d4ea65fe14c
|
7
|
+
data.tar.gz: 1a21be078475e0781f14d183b2c79a7696c2c838a95f6da867df3642ccfb64955976441d87df713ebb14ce8d16ee7b2411e9238f89586ea642fad736a4c869ba
|
data/.gitignore
CHANGED
data/example/avatax.rb
CHANGED
@@ -4,11 +4,44 @@ require File.expand_path('../../lib/avatax', __FILE__)
|
|
4
4
|
credentials = YAML.load_file(File.expand_path('../credentials.yaml', __FILE__))
|
5
5
|
|
6
6
|
AvaTax.configure do |config|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
begin
|
8
|
+
credentials = YAML.load_file(File.expand_path('../credentials.yaml', __FILE__))
|
9
|
+
config.endpoint = credentials['endpoint']
|
10
|
+
config.username = credentials['username']
|
11
|
+
config.password = credentials['password']
|
12
|
+
rescue
|
13
|
+
config.endpoint = 'https://sandbox-rest.avatax.com'
|
14
|
+
config.username = ENV['SANDBOX_USERNAME']
|
15
|
+
config.password = ENV['SANDBOX_PASSWORD']
|
16
|
+
end
|
10
17
|
end
|
11
18
|
|
12
19
|
@client = AvaTax::Client.new(:logger => true)
|
13
20
|
|
14
|
-
puts @client.query_companies
|
21
|
+
#puts @client.query_companies
|
22
|
+
|
23
|
+
createTransactionModel = {
|
24
|
+
type: 'SalesInvoice',
|
25
|
+
companyCode: 'DEFAULT',
|
26
|
+
date: '2017-06-05',
|
27
|
+
customerCode: 'ABC',
|
28
|
+
"addresses": {
|
29
|
+
"ShipFrom": {
|
30
|
+
"line1": "123 Main Street",
|
31
|
+
"city": "Irvine",
|
32
|
+
"region": "CA",
|
33
|
+
"country": "US",
|
34
|
+
"postalCode": "92615"
|
35
|
+
},
|
36
|
+
"ShipTo": {
|
37
|
+
"line1": "100 Market Street",
|
38
|
+
"city": "San Francisco",
|
39
|
+
"region": "CA",
|
40
|
+
"country": "US",
|
41
|
+
"postalCode": "94105"
|
42
|
+
}
|
43
|
+
},
|
44
|
+
lines: [{amount: 100}]
|
45
|
+
}
|
46
|
+
transaction = @client.create_transaction(createTransactionModel)
|
47
|
+
puts transaction
|
@@ -6,8 +6,17 @@ module AvaTax
|
|
6
6
|
# Reset this account's license key
|
7
7
|
#
|
8
8
|
# Resets the existing license key for this account to a new key.
|
9
|
+
#
|
9
10
|
# To reset your account, you must specify the ID of the account you wish to reset and confirm the action.
|
11
|
+
#
|
12
|
+
# This API is only available to account administrators for the account in question, and may only be called after
|
13
|
+
# an account has been activated by reading and accepting Avalara's terms and conditions. To activate your account
|
14
|
+
# please log onto the AvaTax website or call the `ActivateAccount` API.
|
15
|
+
#
|
10
16
|
# Resetting a license key cannot be undone. Any previous license keys will immediately cease to work when a new key is created.
|
17
|
+
#
|
18
|
+
# When you call this API, all account administrators for this account will receive an email with the newly updated license key.
|
19
|
+
# The email will specify which user reset the license key and it will contain the new key to use to update your connectors.
|
11
20
|
# @param id [Integer] The ID of the account you wish to update.
|
12
21
|
# @param model [Object] A request confirming that you wish to reset the license key of this account.
|
13
22
|
# @return [Object]
|
@@ -24,6 +33,9 @@ module AvaTax
|
|
24
33
|
# This activation request can only be called by account administrators. You must indicate
|
25
34
|
# that you have read and accepted Avalara's terms and conditions to call this API.
|
26
35
|
#
|
36
|
+
# Once you have activated your account, use the `AccountResetLicenseKey` API to generate
|
37
|
+
# a license key for your account.
|
38
|
+
#
|
27
39
|
# If you have not read or accepted the terms and conditions, this API call will return the
|
28
40
|
# unchanged account model.
|
29
41
|
# @param id [Integer] The ID of the account to activate
|
@@ -40,6 +40,7 @@ module AvaTax
|
|
40
40
|
#
|
41
41
|
# This API only provides a limited subset of functionality compared to the 'Create Company' API call.
|
42
42
|
# If you need additional features or options not present in this 'Quick Setup' API call, please use the full 'Create Company' call instead.
|
43
|
+
# Please allow 1 minute before making transactions using the company.
|
43
44
|
# @param model [Object] Information about the company you wish to create.
|
44
45
|
# @return [Object]
|
45
46
|
def company_initialize(model)
|
@@ -48,6 +48,19 @@ module AvaTax
|
|
48
48
|
end
|
49
49
|
|
50
50
|
|
51
|
+
# Create a filing calendar
|
52
|
+
#
|
53
|
+
# This API is available by invitation only and only available for users with Compliance access
|
54
|
+
# A "filing request" represents information that compliance uses to file a return
|
55
|
+
# @param companyId [Integer] The unique ID of the company that will add the new filing calendar
|
56
|
+
# @param model [FilingCalendarModel[]] Filing calendars that will be added
|
57
|
+
# @return [Object]
|
58
|
+
def create_filing_calendars(companyId, model)
|
59
|
+
path = "/api/v2/companies/#{companyId}/filingcalendars"
|
60
|
+
post(path, model)
|
61
|
+
end
|
62
|
+
|
63
|
+
|
51
64
|
# Create a new filing request to create a filing calendar
|
52
65
|
#
|
53
66
|
# This API is available by invitation only.
|
@@ -255,11 +268,9 @@ module AvaTax
|
|
255
268
|
end
|
256
269
|
|
257
270
|
|
258
|
-
# Edit existing Filing Calendar
|
271
|
+
# Edit existing Filing Calendar
|
259
272
|
#
|
260
273
|
# This API is available by invitation only.
|
261
|
-
# This API only allows updating of internal notes and company filing instructions.
|
262
|
-
# All other updates must go through a filing request at this time.
|
263
274
|
# @param companyId [Integer] The unique ID of the company that owns the filing request object
|
264
275
|
# @param id [Integer] The unique ID of the filing calendar object
|
265
276
|
# @param model [Object] The filing calendar model you are wishing to update with.
|
@@ -388,7 +388,7 @@ module AvaTax
|
|
388
388
|
|
389
389
|
# Rebuild a set of filings for the specified company in the given filing period, country and region.
|
390
390
|
#
|
391
|
-
# This API is available by invitation only.
|
391
|
+
# This API is available by invitation only.audit.CheckAuthorizationReturns(null, companyId);
|
392
392
|
# Rebuilding a return means re-creating or updating the amounts to be filed for a filing.
|
393
393
|
# Rebuilding has to be done whenever a customer adds transactions to a filing.
|
394
394
|
# A "filing period" is the year and month of the date of the latest customer transaction allowed to be reported on a filing,
|
data/lib/avatax/client/nexus.rb
CHANGED
@@ -13,6 +13,7 @@ module AvaTax
|
|
13
13
|
# Note that not all fields within a nexus can be updated; Avalara publishes a list of all defined nexus at the
|
14
14
|
# '/api/v2/definitions/nexus' endpoint.
|
15
15
|
# You may only define nexus matching the official list of declared nexus.
|
16
|
+
# Please allow 1 minute before start using the created Nexus in your transactions.
|
16
17
|
# @param companyId [Integer] The ID of the company that owns this nexus.
|
17
18
|
# @param model [NexusModel[]] The nexus you wish to create.
|
18
19
|
# @return [NexusModel[]]
|
@@ -25,6 +26,7 @@ module AvaTax
|
|
25
26
|
# Delete a single nexus
|
26
27
|
#
|
27
28
|
# Marks the existing nexus object at this URL as deleted.
|
29
|
+
# Please allow 1 minute to stop collecting tax in your transaction on the deleted Nexus.
|
28
30
|
# @param companyId [Integer] The ID of the company that owns this nexus.
|
29
31
|
# @param id [Integer] The ID of the nexus you wish to delete.
|
30
32
|
# @return [ErrorDetail[]]
|
@@ -129,6 +131,7 @@ module AvaTax
|
|
129
131
|
# You may only define nexus matching the official list of declared nexus.
|
130
132
|
# All data from the existing object will be replaced with data in the object you PUT.
|
131
133
|
# To set a field's value to null, you may either set its value to null or omit that field from the object you post.
|
134
|
+
# Please allow 1 minute to start seeing your updated Nexus taking effect on your transactions.
|
132
135
|
# @param companyId [Integer] The ID of the company that this nexus belongs to.
|
133
136
|
# @param id [Integer] The ID of the nexus you wish to update
|
134
137
|
# @param model [Object] The nexus object you wish to update.
|
@@ -18,7 +18,7 @@ module AvaTax
|
|
18
18
|
# terms and conditions. If they do so, they can receive a license key as part of this API and their
|
19
19
|
# API will be created in `Active` status. If the customer has not yet read and accepted these terms and
|
20
20
|
# conditions, the account will be created in `New` status and they can receive a license key by logging
|
21
|
-
# onto AvaTax and reviewing terms and conditions online.
|
21
|
+
# onto the AvaTax website and reviewing terms and conditions online.
|
22
22
|
# @param model [Object] Information about the account you wish to create and the selected product offerings.
|
23
23
|
# @return [Object]
|
24
24
|
def request_new_account(model)
|
@@ -3,17 +3,111 @@ module AvaTax
|
|
3
3
|
module Reports
|
4
4
|
|
5
5
|
|
6
|
-
#
|
6
|
+
# Download a report
|
7
7
|
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
8
|
+
# This API downloads the file associated with a report.
|
9
|
+
#
|
10
|
+
# If the report is not yet complete, you will receive a `ReportNotFinished` error. To check if a report is complete,
|
11
|
+
# use the `GetReport` API.
|
12
|
+
#
|
13
|
+
# Reports are run as asynchronous report tasks on the server. When complete, the report file will be available for download
|
14
|
+
# for up to 30 days after completion. To run an asynchronous report, you should follow these steps:
|
15
|
+
#
|
16
|
+
# * Begin a report by calling the report's Initiate API. There is a separate initiate API call for each report type.
|
17
|
+
# * In the result of the Initiate API, you receive back a report's `id` value.
|
18
|
+
# * Check the status of a report by calling `GetReport` and passing in the report's `id` value.
|
19
|
+
# * When a report's status is `Completed`, call `DownloadReport` to retrieve the file.
|
20
|
+
#
|
21
|
+
# This API works for all report types.
|
22
|
+
# @param id [Integer] The unique ID number of this report
|
23
|
+
# @return [Object]
|
24
|
+
def download_report(id)
|
25
|
+
path = "/api/v2/reports/#{id}/attachment"
|
26
|
+
get(path)
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
# Intiate and download an ExportDocumentLine report
|
31
|
+
#
|
32
|
+
# This API is deprecated.
|
33
|
+
#
|
34
|
+
# Please use the asynchronous reports APIs:
|
35
|
+
#
|
36
|
+
# * Begin a report by calling the report's Initiate API. There is a separate initiate API call for each report type.
|
37
|
+
# * In the result of the Initiate API, you receive back a report's `id` value.
|
38
|
+
# * Check the status of a report by calling `GetReport` and passing in the report's `id` value.
|
39
|
+
# * When a report's status is `Completed`, call `DownloadReport` to retrieve the file.
|
40
|
+
# @param companyId [Integer] The unique ID number of the company to report on.
|
41
|
+
# @param model [Object] Options that may be configured to customize the report.
|
11
42
|
# @return [Object]
|
12
43
|
def export_document_line(companyId, model)
|
13
44
|
path = "/api/v2/companies/#{companyId}/reports/exportdocumentline"
|
14
45
|
post(path, model)
|
15
46
|
end
|
16
47
|
|
48
|
+
|
49
|
+
# Retrieve a single report
|
50
|
+
#
|
51
|
+
# Retrieve a single report by its unique ID number.
|
52
|
+
#
|
53
|
+
# Reports are run as asynchronous report tasks on the server. When complete, the report file will be available for download
|
54
|
+
# for up to 30 days after completion. To run an asynchronous report, you should follow these steps:
|
55
|
+
#
|
56
|
+
# * Begin a report by calling the report's Initiate API. There is a separate initiate API call for each report type.
|
57
|
+
# * In the result of the Initiate API, you receive back a report's `id` value.
|
58
|
+
# * Check the status of a report by calling `GetReport` and passing in the report's `id` value.
|
59
|
+
# * When a report's status is `Completed`, call `DownloadReport` to retrieve the file.
|
60
|
+
#
|
61
|
+
# This API call returns information about any report type.
|
62
|
+
# @param id [Integer] The unique ID number of the report to retrieve
|
63
|
+
# @return [Object]
|
64
|
+
def get_report(id)
|
65
|
+
path = "/api/v2/reports/#{id}"
|
66
|
+
get(path)
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
# Initiate an ExportDocumentLine report task
|
71
|
+
#
|
72
|
+
# Begins running an `ExportDocumentLine` report task and returns the identity of the report.
|
73
|
+
#
|
74
|
+
# Reports are run as asynchronous report tasks on the server. When complete, the report file will be available for download
|
75
|
+
# for up to 30 days after completion. To run an asynchronous report, you should follow these steps:
|
76
|
+
#
|
77
|
+
# * Begin a report by calling the report's Initiate API. There is a separate initiate API call for each report type.
|
78
|
+
# * In the result of the Initiate API, you receive back a report's `id` value.
|
79
|
+
# * Check the status of a report by calling `GetReport` and passing in the report's `id` value.
|
80
|
+
# * When a report's status is `Completed`, call `DownloadReport` to retrieve the file.
|
81
|
+
#
|
82
|
+
# The `ExportDocumentLine` report produces information about invoice lines recorded within your account.
|
83
|
+
# @param companyId [Integer] The unique ID number of the company to report on.
|
84
|
+
# @param model [Object] Options that may be configured to customize the report.
|
85
|
+
# @return [Object]
|
86
|
+
def initiate_export_document_line_report(companyId, model)
|
87
|
+
path = "/api/v2/companies/#{companyId}/reports/exportdocumentline/initiate"
|
88
|
+
post(path, model)
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
# List all report tasks for account
|
93
|
+
#
|
94
|
+
# List all report tasks for your account.
|
95
|
+
#
|
96
|
+
# Reports are run as asynchronous report tasks on the server. When complete, the report file will be available for download
|
97
|
+
# for up to 30 days after completion. To run an asynchronous report, you should follow these steps:
|
98
|
+
#
|
99
|
+
# * Begin a report by calling the report's Initiate API. There is a separate initiate API call for each report type.
|
100
|
+
# * In the result of the Initiate API, you receive back a report's `id` value.
|
101
|
+
# * Check the status of a report by calling `GetReport` and passing in the report's `id` value.
|
102
|
+
# * When a report's status is `Completed`, call `DownloadReport` to retrieve the file.
|
103
|
+
#
|
104
|
+
# This API call returns information about all report types across your entire account.
|
105
|
+
# @return [FetchResult]
|
106
|
+
def list_reports()
|
107
|
+
path = "/api/v2/reports"
|
108
|
+
get(path)
|
109
|
+
end
|
110
|
+
|
17
111
|
end
|
18
112
|
end
|
19
113
|
end
|
@@ -16,6 +16,8 @@ module AvaTax
|
|
16
16
|
#
|
17
17
|
# This API builds the file on demand, and is limited to files with no more than 7500 scenarios. To build a tax content
|
18
18
|
# file for a single location at a time, please use `BuildTaxContentFileForLocation`.
|
19
|
+
#
|
20
|
+
# NOTE: This API does not work for Tennessee tax holiday scenarios.
|
19
21
|
# @param model [Object] Parameters about the desired file format and report format, specifying which company, locations and TaxCodes to include.
|
20
22
|
# @return [Object]
|
21
23
|
def build_tax_content_file(model)
|
@@ -37,6 +39,8 @@ module AvaTax
|
|
37
39
|
#
|
38
40
|
# This API builds the file on demand, and is limited to files with no more than 7500 scenarios. To build a tax content
|
39
41
|
# file for a multiple locations in a single file, please use `BuildTaxContentFile`.
|
42
|
+
#
|
43
|
+
# NOTE: This API does not work for Tennessee tax holiday scenarios.
|
40
44
|
# @param companyId [Integer] The ID number of the company that owns this location.
|
41
45
|
# @param id [Integer] The ID number of the location to retrieve point-of-sale data.
|
42
46
|
# @param date [DateTime] The date for which point-of-sale data would be calculated (today by default)
|
@@ -61,7 +61,7 @@ module AvaTax
|
|
61
61
|
#
|
62
62
|
# Retrieve audit information about a transaction stored in AvaTax.
|
63
63
|
#
|
64
|
-
# The
|
64
|
+
# The `AuditTransaction` API retrieves audit information related to a specific transaction. This audit
|
65
65
|
# information includes the following:
|
66
66
|
#
|
67
67
|
# * The `CompanyId` of the company that created the transaction
|
@@ -87,7 +87,7 @@ module AvaTax
|
|
87
87
|
#
|
88
88
|
# Retrieve audit information about a transaction stored in AvaTax.
|
89
89
|
#
|
90
|
-
# The
|
90
|
+
# The `AuditTransaction` API retrieves audit information related to a specific transaction. This audit
|
91
91
|
# information includes the following:
|
92
92
|
#
|
93
93
|
# * The `CompanyId` of the company that created the transaction
|
@@ -160,15 +160,22 @@ module AvaTax
|
|
160
160
|
end
|
161
161
|
|
162
162
|
|
163
|
-
# Create a
|
163
|
+
# Create or adjust a transaction
|
164
|
+
#
|
165
|
+
# Records a new transaction or adjust an existing transaction in AvaTax.
|
166
|
+
#
|
167
|
+
# The `CreateOrAdjustTransaction` endpoint is used to create a new transaction or update an existing one. This API
|
168
|
+
# can help you create an idempotent service that creates transactions
|
169
|
+
# If there exists a transaction identified by code, the original transaction will be adjusted by using the meta data
|
170
|
+
# in the input transaction.
|
164
171
|
#
|
165
|
-
#
|
172
|
+
# The `CreateOrAdjustTransaction` API cannot modify any transaction that has been reported to a tax authority using
|
173
|
+
# the Avalara Managed Returns Service or any other tax filing service. If you call this API to attempt to modify
|
174
|
+
# a transaction that has been reported on a tax filing, you will receive the error `CannotModifyLockedTransaction`.
|
166
175
|
#
|
167
|
-
#
|
168
|
-
# or if there exists a transaction identified by code, the original transaction will be adjusted by using the meta data
|
169
|
-
# in the input transaction
|
176
|
+
# To generate a refund for a transaction, use the `RefundTransaction` API.
|
170
177
|
#
|
171
|
-
# If you don't specify type in
|
178
|
+
# If you don't specify the field `type` in your request, you will get an estimate of type `SalesOrder`, which will not be recorded in the database.
|
172
179
|
#
|
173
180
|
# A transaction represents a unique potentially taxable action that your company has recorded, and transactions include actions like
|
174
181
|
# sales, purchases, inventory transfer, and returns (also called refunds).
|
@@ -180,10 +187,11 @@ module AvaTax
|
|
180
187
|
# * Addresses
|
181
188
|
# * SummaryOnly (omit lines and details - reduces API response size)
|
182
189
|
# * LinesOnly (omit details - reduces API response size)
|
190
|
+
# * ForceTimeout - Simulates a timeout. This adds a 30 second delay and error to your API call. This can be used to test your code to ensure it can respond correctly in the case of a dropped connection.
|
183
191
|
#
|
184
192
|
# If you omit the `$include` parameter, the API will assume you want `Summary,Addresses`.
|
185
193
|
# @param include [String] Specifies objects to include in the response after transaction is created
|
186
|
-
# @param model [Object] The transaction you wish to create
|
194
|
+
# @param model [Object] The transaction you wish to create or adjust
|
187
195
|
# @return [Object]
|
188
196
|
def create_or_adjust_transaction(model, options={})
|
189
197
|
path = "/api/v2/transactions/createoradjust"
|
@@ -199,7 +207,13 @@ module AvaTax
|
|
199
207
|
# and rates to apply to all line items in this transaction, and reports the total tax calculated by AvaTax based on your
|
200
208
|
# company's configuration and the data provided in this API call.
|
201
209
|
#
|
202
|
-
#
|
210
|
+
# The `CreateTransaction` API will report an error if a committed transaction already exists with the same `code`. To
|
211
|
+
# avoid this error, use the `CreateOrAdjustTransaction` API - it will create the transaction if it does not exist, or
|
212
|
+
# update it if it does exist.
|
213
|
+
#
|
214
|
+
# To generate a refund for a transaction, use the `RefundTransaction` API.
|
215
|
+
#
|
216
|
+
# If you don't specify the field `type` in your request, you will get an estimate of type `SalesOrder`, which will not be recorded in the database.
|
203
217
|
#
|
204
218
|
# A transaction represents a unique potentially taxable action that your company has recorded, and transactions include actions like
|
205
219
|
# sales, purchases, inventory transfer, and returns (also called refunds).
|
@@ -211,6 +225,7 @@ module AvaTax
|
|
211
225
|
# * Addresses
|
212
226
|
# * SummaryOnly (omit lines and details - reduces API response size)
|
213
227
|
# * LinesOnly (omit details - reduces API response size)
|
228
|
+
# * ForceTimeout - Simulates a timeout. This adds a 30 second delay and error to your API call. This can be used to test your code to ensure it can respond correctly in the case of a dropped connection.
|
214
229
|
#
|
215
230
|
# If you omit the `$include` parameter, the API will assume you want `Summary,Addresses`.
|
216
231
|
# @param include [String] Specifies objects to include in the response after transaction is created
|
@@ -252,10 +267,14 @@ module AvaTax
|
|
252
267
|
|
253
268
|
# Retrieve a single transaction by code
|
254
269
|
#
|
255
|
-
# Get the current transaction identified by this URL.
|
270
|
+
# Get the current `SalesInvoice` transaction identified by this URL.
|
271
|
+
#
|
272
|
+
# To fetch other kinds of transactions, use `GetTransactionByCodeAndType`.
|
273
|
+
#
|
256
274
|
# If this transaction was adjusted, the return value of this API will be the current transaction with this code, and previous revisions of
|
257
|
-
# the transaction will be attached to the
|
258
|
-
#
|
275
|
+
# the transaction will be attached to the `history` data field.
|
276
|
+
#
|
277
|
+
# You may specify one or more of the following values in the `$include` parameter to fetch additional nested data, using commas to separate multiple values:
|
259
278
|
#
|
260
279
|
# * Lines
|
261
280
|
# * Details (implies lines)
|
@@ -276,9 +295,11 @@ module AvaTax
|
|
276
295
|
# Retrieve a single transaction by code
|
277
296
|
#
|
278
297
|
# Get the current transaction identified by this URL.
|
298
|
+
#
|
279
299
|
# If this transaction was adjusted, the return value of this API will be the current transaction with this code, and previous revisions of
|
280
|
-
# the transaction will be attached to the
|
281
|
-
#
|
300
|
+
# the transaction will be attached to the `history` data field.
|
301
|
+
#
|
302
|
+
# You may specify one or more of the following values in the `$include` parameter to fetch additional nested data, using commas to separate multiple values:
|
282
303
|
#
|
283
304
|
# * Lines
|
284
305
|
# * Details (implies lines)
|
@@ -380,8 +401,21 @@ module AvaTax
|
|
380
401
|
# for a previously created `SalesInvoice` transaction. You can choose to create a full or partial refund, and
|
381
402
|
# specify individual line items from the original sale for refund.
|
382
403
|
#
|
383
|
-
#
|
384
|
-
#
|
404
|
+
# The `RefundTransaction` API ensures that the tax amount you refund to the customer exactly matches the tax that
|
405
|
+
# was calculated during the original transaction, regardless of any changes to your company's configuration, rules,
|
406
|
+
# nexus, or any other setting.
|
407
|
+
#
|
408
|
+
# This API is intended to be a shortcut to allow you to quickly and accurately generate a refund for the following
|
409
|
+
# common refund scenarios:
|
410
|
+
#
|
411
|
+
# * A full refund of a previous sale
|
412
|
+
# * Refunding the tax that was charged on a previous sale, when the customer provides an exemption certificate after the purchase
|
413
|
+
# * Refunding one or more items (lines) from a previous sale
|
414
|
+
# * Granting a customer a percentage refund of a previous sale
|
415
|
+
#
|
416
|
+
# For more complex scenarios than the ones above, please use `CreateTransaction` with document type `ReturnInvoice` to
|
417
|
+
# create a custom refund transaction.
|
418
|
+
#
|
385
419
|
# You may specify one or more of the following values in the '$include' parameter to fetch additional nested data, using commas to separate multiple values:
|
386
420
|
#
|
387
421
|
# * Lines
|
@@ -450,4 +484,4 @@ module AvaTax
|
|
450
484
|
|
451
485
|
end
|
452
486
|
end
|
453
|
-
end
|
487
|
+
end
|
data/lib/avatax/request.rb
CHANGED
@@ -1,37 +1,39 @@
|
|
1
1
|
require 'hashie'
|
2
|
+
require 'json'
|
2
3
|
|
3
4
|
module AvaTax
|
4
5
|
module Request
|
5
6
|
|
6
7
|
def get(path, options={})
|
7
|
-
request(:get, path, options)
|
8
|
+
request(:get, path, nil, options)
|
8
9
|
end
|
9
10
|
|
10
|
-
def post(path, options={})
|
11
|
-
request(:post, path, options)
|
11
|
+
def post(path, model, options={})
|
12
|
+
request(:post, path, model, options)
|
12
13
|
end
|
13
14
|
|
14
|
-
def put(path, options={})
|
15
|
-
request(:put, path, options)
|
15
|
+
def put(path, model, options={})
|
16
|
+
request(:put, path, model, options)
|
16
17
|
end
|
17
18
|
|
18
19
|
def delete(path, options={})
|
19
|
-
request(:delete, path, options)
|
20
|
+
request(:delete, path, nil, options)
|
20
21
|
end
|
21
22
|
|
22
|
-
def request(method, path, options)
|
23
|
+
def request(method, path, model, options={})
|
23
24
|
response = connection.send(method) do |request|
|
24
25
|
case method
|
25
26
|
when :get, :delete
|
26
|
-
request.url(URI.encode(path)
|
27
|
+
request.url("#{URI.encode(path)}?#{URI.encode_www_form(options)}")
|
27
28
|
when :post, :put
|
28
|
-
request.path = URI.encode(path)
|
29
|
+
request.path = ("#{URI.encode(path)}?#{URI.encode_www_form(options)}")
|
29
30
|
request.headers['Content-Type'] = 'application/json'
|
30
|
-
request.body =
|
31
|
+
request.body = model.to_json unless model.empty?
|
31
32
|
end
|
32
33
|
end
|
33
34
|
|
34
|
-
|
35
|
+
#::Hashie::Mash.new response.body
|
36
|
+
response.body
|
35
37
|
end
|
36
38
|
|
37
39
|
end
|
data/lib/avatax/version.rb
CHANGED
@@ -1,26 +1,13 @@
|
|
1
1
|
require File.expand_path('../../../spec_helper', __FILE__)
|
2
2
|
|
3
3
|
describe AvaTax::Client do
|
4
|
-
before do
|
5
|
-
@client = AvaTax::Client.new()
|
6
|
-
end
|
7
4
|
|
8
5
|
describe ".accounts" do
|
9
|
-
before do
|
10
|
-
stub_get("/api/v2/accounts").
|
11
|
-
to_return(:body => fixture("accounts.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should get the correct resource" do
|
15
|
-
@client.query_accounts()
|
16
|
-
expect(a_get("/api/v2/accounts")).to have_been_made
|
17
|
-
end
|
18
|
-
|
19
6
|
it "should return an array of accounts" do
|
20
7
|
accounts = @client.query_accounts
|
21
8
|
expect(accounts).to be_a Object
|
22
|
-
expect(accounts['value'].first['id']).to
|
23
|
-
expect(accounts.value.first.id).to equal 200000251
|
9
|
+
expect(accounts['value'].first['id']).to be_a Integer
|
24
10
|
end
|
25
11
|
end
|
12
|
+
|
26
13
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.expand_path('../../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe AvaTax::Client do
|
4
|
+
|
5
|
+
describe ".transactions" do
|
6
|
+
before do
|
7
|
+
@base_transaction = {
|
8
|
+
type: 'SalesInvoice',
|
9
|
+
companyCode: @company_code,
|
10
|
+
date: '2017-06-05',
|
11
|
+
customerCode: 'ABC',
|
12
|
+
addresses: {
|
13
|
+
ShipFrom: {
|
14
|
+
line1: "123 Main Street",
|
15
|
+
city: "Irvine",
|
16
|
+
region: "CA",
|
17
|
+
country: "US",
|
18
|
+
postalCode: "92615"
|
19
|
+
},
|
20
|
+
ShipTo: {
|
21
|
+
line1: "100 Market Street",
|
22
|
+
city: "San Francisco",
|
23
|
+
region: "CA",
|
24
|
+
country: "US",
|
25
|
+
postalCode: "94105"
|
26
|
+
}
|
27
|
+
},
|
28
|
+
lines: [{amount: 100}]
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should create a transaction" do
|
33
|
+
transaction = @client.create_transaction(@base_transaction)
|
34
|
+
expect(transaction).to be_a Object
|
35
|
+
expect(transaction["id"]).to be_a Integer
|
36
|
+
expect(transaction["status"]).to eq "Saved"
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
data/spec/avatax_spec.rb
CHANGED
@@ -1,27 +1,15 @@
|
|
1
1
|
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
begin
|
3
|
+
credentials = YAML.load_file(File.expand_path('../credentials.yaml', __FILE__))
|
4
|
+
rescue
|
5
|
+
credentials = {
|
6
|
+
"endpoint" => 'https://sandbox-rest.avatax.com',
|
7
|
+
"username" => ENV['SANDBOX_USERNAME'],
|
8
|
+
"password" => ENV['SANDBOX_PASSWORD'],
|
9
|
+
}
|
10
|
+
end
|
2
11
|
|
3
12
|
describe AvaTax do
|
4
|
-
after do
|
5
|
-
AvaTax.reset
|
6
|
-
end
|
7
|
-
|
8
|
-
context "when delegating to a client" do
|
9
|
-
|
10
|
-
before do
|
11
|
-
stub_get("/api/v2/accounts").
|
12
|
-
to_return(:body => fixture("accounts.json"), :headers => {:content_type => "application/json; charset=utf-8"})
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should get the correct resource" do
|
16
|
-
AvaTax.query_accounts()
|
17
|
-
expect(a_get("/api/v2/accounts")).to have_been_made
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should return the same results as a client" do
|
21
|
-
expect(AvaTax.query_accounts()).to eq AvaTax::Client.new().query_accounts()
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
13
|
|
26
14
|
describe ".client" do
|
27
15
|
it "should be a AvaTax::Client" do
|
@@ -31,7 +19,7 @@ describe AvaTax do
|
|
31
19
|
|
32
20
|
describe ".endpoint" do
|
33
21
|
it "should return the default endpoint" do
|
34
|
-
expect(AvaTax.endpoint).to eq
|
22
|
+
expect(AvaTax.endpoint).to eq credentials['endpoint']
|
35
23
|
end
|
36
24
|
end
|
37
25
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,47 +1,27 @@
|
|
1
1
|
require File.expand_path('../../lib/avatax', __FILE__)
|
2
2
|
require 'rspec'
|
3
|
-
require '
|
3
|
+
require 'yaml'
|
4
4
|
|
5
|
-
RSpec.configure do |config|
|
6
|
-
config.include WebMock::API
|
7
|
-
end
|
8
|
-
|
9
|
-
def a_delete(path)
|
10
|
-
a_request(:delete, AvaTax.endpoint + path)
|
11
|
-
end
|
12
|
-
|
13
|
-
def a_get(path)
|
14
|
-
a_request(:get, AvaTax.endpoint + path)
|
15
|
-
end
|
16
|
-
|
17
|
-
def a_post(path)
|
18
|
-
a_request(:post, AvaTax.endpoint + path)
|
19
|
-
end
|
20
|
-
|
21
|
-
def a_put(path)
|
22
|
-
a_request(:put, AvaTax.endpoint + path)
|
23
|
-
end
|
24
5
|
|
25
|
-
|
26
|
-
|
6
|
+
AvaTax.configure do |config|
|
7
|
+
begin
|
8
|
+
credentials = YAML.load_file(File.expand_path('../credentials.yaml', __FILE__))
|
9
|
+
config.endpoint = credentials['endpoint']
|
10
|
+
config.username = credentials['username']
|
11
|
+
config.password = credentials['password']
|
12
|
+
rescue
|
13
|
+
config.endpoint = 'https://sandbox-rest.avatax.com'
|
14
|
+
config.username = ENV['SANDBOX_USERNAME']
|
15
|
+
config.password = ENV['SANDBOX_PASSWORD']
|
16
|
+
end
|
27
17
|
end
|
28
18
|
|
29
|
-
|
30
|
-
|
31
|
-
end
|
19
|
+
client = AvaTax::Client.new()
|
20
|
+
companies = client.query_companies
|
32
21
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
stub_request(:put, AvaTax.endpoint + path)
|
39
|
-
end
|
40
|
-
|
41
|
-
def fixture_path
|
42
|
-
File.expand_path("../fixtures", __FILE__)
|
43
|
-
end
|
44
|
-
|
45
|
-
def fixture(file)
|
46
|
-
File.new(fixture_path + '/' + file)
|
22
|
+
RSpec.configure do |config|
|
23
|
+
config.before {
|
24
|
+
@client = client
|
25
|
+
@company_code = companies["value"][1]["companyCode"]
|
26
|
+
}
|
47
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avatax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 17.
|
4
|
+
version: 17.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcus Vorwaller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -179,7 +179,9 @@ files:
|
|
179
179
|
- lib/avatax/request.rb
|
180
180
|
- lib/avatax/version.rb
|
181
181
|
- spec/avatax/client/accounts_spec.rb
|
182
|
+
- spec/avatax/client/transactions_spec.rb
|
182
183
|
- spec/avatax_spec.rb
|
184
|
+
- spec/credentials.yaml.example
|
183
185
|
- spec/fixtures/accounts.json
|
184
186
|
- spec/spec_helper.rb
|
185
187
|
homepage: https://github.com/avadev/AvaTax-REST-V2-Ruby-SDK
|
@@ -220,6 +222,8 @@ specification_version: 4
|
|
220
222
|
summary: Ruby wrapper for the AvaTax API
|
221
223
|
test_files:
|
222
224
|
- spec/avatax/client/accounts_spec.rb
|
225
|
+
- spec/avatax/client/transactions_spec.rb
|
223
226
|
- spec/avatax_spec.rb
|
227
|
+
- spec/credentials.yaml.example
|
224
228
|
- spec/fixtures/accounts.json
|
225
229
|
- spec/spec_helper.rb
|