avatax 14.4.4 → 17.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +54 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +7 -0
  5. data/.yardopts +5 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE +201 -191
  8. data/README.md +63 -61
  9. data/Rakefile +9 -0
  10. data/avatax.gemspec +39 -0
  11. data/example/avatax.rb +14 -0
  12. data/example/credentials.example.yaml +5 -0
  13. data/lib/avatax.rb +19 -13
  14. data/lib/avatax/api.rb +27 -0
  15. data/lib/avatax/client.rb +32 -0
  16. data/lib/avatax/client/accounts.rb +110 -0
  17. data/lib/avatax/client/addresses.rb +52 -0
  18. data/lib/avatax/client/batches.rb +117 -0
  19. data/lib/avatax/client/companies.rb +218 -0
  20. data/lib/avatax/client/contacts.rb +115 -0
  21. data/lib/avatax/client/definitions.rb +569 -0
  22. data/lib/avatax/client/filingcalendars.rb +313 -0
  23. data/lib/avatax/client/filings.rb +417 -0
  24. data/lib/avatax/client/free.rb +104 -0
  25. data/lib/avatax/client/fundingrequests.rb +53 -0
  26. data/lib/avatax/client/items.rb +111 -0
  27. data/lib/avatax/client/jurisdictionoverrides.rb +125 -0
  28. data/lib/avatax/client/locations.rb +158 -0
  29. data/lib/avatax/client/nexus.rb +157 -0
  30. data/lib/avatax/client/notices.rb +297 -0
  31. data/lib/avatax/client/onboarding.rb +23 -0
  32. data/lib/avatax/client/pointofsale.rb +24 -0
  33. data/lib/avatax/client/registrar.rb +216 -0
  34. data/lib/avatax/client/settings.rb +137 -0
  35. data/lib/avatax/client/subscriptions.rb +66 -0
  36. data/lib/avatax/client/taxcodes.rb +127 -0
  37. data/lib/avatax/client/taxrules.rb +127 -0
  38. data/lib/avatax/client/transactions.rb +473 -0
  39. data/lib/avatax/client/upcs.rb +112 -0
  40. data/lib/avatax/client/users.rb +112 -0
  41. data/lib/avatax/client/utilities.rb +52 -0
  42. data/lib/avatax/configuration.rb +53 -18
  43. data/lib/avatax/connection.rb +28 -0
  44. data/lib/avatax/request.rb +38 -0
  45. data/lib/avatax/version.rb +3 -0
  46. data/spec/avatax/client/accounts_spec.rb +26 -0
  47. data/spec/avatax_spec.rb +59 -0
  48. data/spec/fixtures/accounts.json +16 -0
  49. data/spec/spec_helper.rb +47 -0
  50. metadata +143 -30
  51. data/lib/avatax/address_service.rb +0 -31
  52. data/lib/avatax/tax_service.rb +0 -61
@@ -0,0 +1,104 @@
1
+ module AvaTax
2
+ class Client
3
+ module Free
4
+
5
+
6
+ # FREE API - Request a free trial of AvaTax
7
+ #
8
+ # Call this API to obtain a free AvaTax sandbox account.
9
+ #
10
+ # This API is free to use. No authentication credentials are required to call this API.
11
+ # The account will grant a full trial version of AvaTax (e.g. AvaTaxPro) for a limited period of time.
12
+ # After this introductory period, you may continue to use the free TaxRates API.
13
+ #
14
+ # Limitations on free trial accounts:
15
+ #
16
+ # * Only one free trial per company.
17
+ # * The free trial account does not expire.
18
+ # * Includes a limited time free trial of AvaTaxPro; after that date, the free TaxRates API will continue to work.
19
+ # * Each free trial account must have its own valid email address.
20
+ #
21
+ # @param FreeTrialRequestModel model Required information to provision a free trial account.
22
+ # @return NewAccountModel
23
+ def request_free_trial(model)
24
+ path = "/api/v2/accounts/freetrials/request"
25
+
26
+ post(path, model)
27
+ end
28
+
29
+
30
+ # FREE API - Sales tax rates for a specified address
31
+ #
32
+ # # Free-To-Use
33
+ #
34
+ # The TaxRates API is a free-to-use, no cost option for estimating sales tax rates.
35
+ # Any customer can request a free AvaTax account and make use of the TaxRates API.
36
+ # However, this API is currently limited for US only
37
+ #
38
+ # Note that the TaxRates API assumes the sale of general tangible personal property when estimating the sales tax
39
+ # rate for a specified address. Avalara provides the `CreateTransaction` API, which provides extensive tax calculation
40
+ # support for scenarios including, but not limited to:
41
+ #
42
+ # * Nexus declarations
43
+ # * Taxability based on product/service type
44
+ # * Sourcing rules affecting origin/destination states
45
+ # * Customers who are exempt from certain taxes
46
+ # * States that have dollar value thresholds for tax amounts
47
+ # * Refunds for products purchased on a different date
48
+ # * Detailed jurisdiction names and state assigned codes
49
+ # * And more!
50
+ #
51
+ # Please see [Estimating Tax with REST v2](http://developer.avalara.com/blog/2016/11/04/estimating-tax-with-rest-v2/)
52
+ # for information on how to upgrade to the full AvaTax CreateTransaction API.
53
+ #
54
+ # @param string line1 The street address of the location.
55
+ # @param string line2 The street address of the location.
56
+ # @param string line3 The street address of the location.
57
+ # @param string city The city name of the location.
58
+ # @param string region The state or region of the location
59
+ # @param string postalCode The postal code of the location.
60
+ # @param string country The two letter ISO-3166 country code.
61
+ # @return TaxRateModel
62
+ def tax_rates_by_address(options={})
63
+ path = "/api/v2/taxrates/byaddress"
64
+
65
+ get(path, options)
66
+ end
67
+
68
+
69
+ # FREE API - Sales tax rates for a specified country and postal code
70
+ #
71
+ # # Free-To-Use
72
+ #
73
+ # The TaxRates API is a free-to-use, no cost option for estimating sales tax rates.
74
+ # Any customer can request a free AvaTax account and make use of the TaxRates API.
75
+ # However, this API is currently limited for US only
76
+ #
77
+ # Note that the TaxRates API assumes the sale of general tangible personal property when estimating the sales tax
78
+ # rate for a specified address. Avalara provides the `CreateTransaction` API, which provides extensive tax calculation
79
+ # support for scenarios including, but not limited to:
80
+ #
81
+ # * Nexus declarations
82
+ # * Taxability based on product/service type
83
+ # * Sourcing rules affecting origin/destination states
84
+ # * Customers who are exempt from certain taxes
85
+ # * States that have dollar value thresholds for tax amounts
86
+ # * Refunds for products purchased on a different date
87
+ # * Detailed jurisdiction names and state assigned codes
88
+ # * And more!
89
+ #
90
+ # Please see [Estimating Tax with REST v2](http://developer.avalara.com/blog/2016/11/04/estimating-tax-with-rest-v2/)
91
+ # for information on how to upgrade to the full AvaTax CreateTransaction API.
92
+ #
93
+ # @param string country The two letter ISO-3166 country code.
94
+ # @param string postalCode The postal code of the location.
95
+ # @return TaxRateModel
96
+ def tax_rates_by_postal_code(options={})
97
+ path = "/api/v2/taxrates/bypostalcode"
98
+
99
+ get(path, options)
100
+ end
101
+
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,53 @@
1
+ module AvaTax
2
+ class Client
3
+ module FundingRequests
4
+
5
+
6
+ # Request the javascript for a funding setup widget
7
+ #
8
+ # This API is available by invitation only.
9
+ # Companies that use the Avalara Managed Returns or the SST Certified Service Provider services are
10
+ # required to setup their funding configuration before Avalara can begin filing tax returns on their
11
+ # behalf.
12
+ # Funding configuration for each company is set up by submitting a funding setup request, which can
13
+ # be sent either via email or via an embedded HTML widget.
14
+ # When the funding configuration is submitted to Avalara, it will be reviewed by treasury team members
15
+ # before approval.
16
+ # This API returns back the actual javascript code to insert into your application to render the
17
+ # JavaScript funding setup widget inline.
18
+ # Use the 'methodReturn.javaScript' return value to insert this widget into your HTML page.
19
+ # This API requires a subscription to Avalara Managed Returns or SST Certified Service Provider.
20
+ #
21
+ # @param int id The unique ID number of this funding request
22
+ # @return FundingStatusModel
23
+ def activate_funding_request(id)
24
+ path = "/api/v2/fundingrequests/#{id}/widget"
25
+
26
+ get(path)
27
+ end
28
+
29
+
30
+ # Retrieve status about a funding setup request
31
+ #
32
+ # This API is available by invitation only.
33
+ # Companies that use the Avalara Managed Returns or the SST Certified Service Provider services are
34
+ # required to setup their funding configuration before Avalara can begin filing tax returns on their
35
+ # behalf.
36
+ # Funding configuration for each company is set up by submitting a funding setup request, which can
37
+ # be sent either via email or via an embedded HTML widget.
38
+ # When the funding configuration is submitted to Avalara, it will be reviewed by treasury team members
39
+ # before approval.
40
+ # This API checks the status on an existing funding request.
41
+ # This API requires a subscription to Avalara Managed Returns or SST Certified Service Provider.
42
+ #
43
+ # @param int id The unique ID number of this funding request
44
+ # @return FundingStatusModel
45
+ def funding_request_status(id)
46
+ path = "/api/v2/fundingrequests/#{id}"
47
+
48
+ get(path)
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,111 @@
1
+ module AvaTax
2
+ class Client
3
+ module Items
4
+
5
+
6
+ # Create a new item
7
+ #
8
+ # Creates one or more new item objects attached to this company.
9
+ #
10
+ # @param int companyId The ID of the company that owns this item.
11
+ # @param ItemModel[] model The item you wish to create.
12
+ # @return ItemModel[]
13
+ def create_items(companyId, model)
14
+ path = "/api/v2/companies/#{companyId}/items"
15
+
16
+ post(path, model)
17
+ end
18
+
19
+
20
+ # Delete a single item
21
+ #
22
+ # Marks the item object at this URL as deleted.
23
+ #
24
+ # @param int companyId The ID of the company that owns this item.
25
+ # @param int id The ID of the item you wish to delete.
26
+ # @return ErrorDetail[]
27
+ def delete_item(companyId, id)
28
+ path = "/api/v2/companies/#{companyId}/items/#{id}"
29
+
30
+ delete(path)
31
+ end
32
+
33
+
34
+ # Retrieve a single item
35
+ #
36
+ # Get the item object identified by this URL.
37
+ # An 'Item' represents a product or service that your company offers for sale.
38
+ #
39
+ # @param int companyId The ID of the company that owns this item object
40
+ # @param int id The primary key of this item
41
+ # @return ItemModel
42
+ def get_item(companyId, id)
43
+ path = "/api/v2/companies/#{companyId}/items/#{id}"
44
+
45
+ get(path)
46
+ end
47
+
48
+
49
+ # Retrieve items for this company
50
+ #
51
+ # List all items defined for the current company.
52
+ #
53
+ # An 'Item' represents a product or service that your company offers for sale.
54
+ #
55
+ # Search for specific objects using the criteria in the `$filter` parameter; full documentation is available on [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
56
+ # Paginate your results using the `$top`, `$skip`, and `$orderby` parameters.
57
+ #
58
+ # @param int companyId The ID of the company that defined these items
59
+ # @param string filter A filter statement to identify specific records to retrieve. For more information on filtering, see [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
60
+ # @param string include A comma separated list of child objects to return underneath the primary object.
61
+ # @param int top If nonzero, return no more than this number of results. Used with $skip to provide pagination for large datasets.
62
+ # @param int skip If nonzero, skip this number of results before returning data. Used with $top to provide pagination for large datasets.
63
+ # @param string orderBy A comma separated list of sort statements in the format `(fieldname) [ASC|DESC]`, for example `id ASC`.
64
+ # @return FetchResult
65
+ def list_items_by_company(companyId, options={})
66
+ path = "/api/v2/companies/#{companyId}/items"
67
+
68
+ get(path, options)
69
+ end
70
+
71
+
72
+ # Retrieve all items
73
+ #
74
+ # Get multiple item objects across all companies.
75
+ # An 'Item' represents a product or service that your company offers for sale.
76
+ #
77
+ # Search for specific objects using the criteria in the `$filter` parameter; full documentation is available on [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
78
+ # Paginate your results using the `$top`, `$skip`, and `$orderby` parameters.
79
+ #
80
+ # @param string filter A filter statement to identify specific records to retrieve. For more information on filtering, see [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
81
+ # @param string include A comma separated list of child objects to return underneath the primary object.
82
+ # @param int top If nonzero, return no more than this number of results. Used with $skip to provide pagination for large datasets.
83
+ # @param int skip If nonzero, skip this number of results before returning data. Used with $top to provide pagination for large datasets.
84
+ # @param string orderBy A comma separated list of sort statements in the format `(fieldname) [ASC|DESC]`, for example `id ASC`.
85
+ # @return FetchResult
86
+ def query_items(options={})
87
+ path = "/api/v2/items"
88
+
89
+ get(path, options)
90
+ end
91
+
92
+
93
+ # Update a single item
94
+ #
95
+ # Replace the existing item object at this URL with an updated object.
96
+ # All data from the existing object will be replaced with data in the object you PUT.
97
+ # 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.
98
+ #
99
+ # @param int companyId The ID of the company that this item belongs to.
100
+ # @param int id The ID of the item you wish to update
101
+ # @param ItemModel model The item object you wish to update.
102
+ # @return ItemModel
103
+ def update_item(companyId, id, model)
104
+ path = "/api/v2/companies/#{companyId}/items/#{id}"
105
+
106
+ put(path, model)
107
+ end
108
+
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,125 @@
1
+ module AvaTax
2
+ class Client
3
+ module JurisdictionOverrides
4
+
5
+
6
+ # Create one or more overrides
7
+ #
8
+ # Creates one or more jurisdiction override objects for this account.
9
+ #
10
+ # A Jurisdiction Override is a configuration setting that allows you to select the taxing
11
+ # jurisdiction for a specific address. If you encounter an address that is on the boundary
12
+ # between two different jurisdictions, you can choose to set up a jurisdiction override
13
+ # to switch this address to use different taxing jurisdictions.
14
+ #
15
+ # @param int accountId The ID of the account that owns this override
16
+ # @param JurisdictionOverrideModel[] model The jurisdiction override objects to create
17
+ # @return JurisdictionOverrideModel[]
18
+ def create_jurisdiction_overrides(accountId, model)
19
+ path = "/api/v2/accounts/#{accountId}/jurisdictionoverrides"
20
+
21
+ post(path, model)
22
+ end
23
+
24
+
25
+ # Delete a single override
26
+ #
27
+ # Marks the item object at this URL as deleted.
28
+ #
29
+ # @param int accountId The ID of the account that owns this override
30
+ # @param int id The ID of the override you wish to delete
31
+ # @return ErrorDetail[]
32
+ def delete_jurisdiction_override(accountId, id)
33
+ path = "/api/v2/accounts/#{accountId}/jurisdictionoverrides/#{id}"
34
+
35
+ delete(path)
36
+ end
37
+
38
+
39
+ # Retrieve a single override
40
+ #
41
+ # Get the item object identified by this URL.
42
+ #
43
+ # A Jurisdiction Override is a configuration setting that allows you to select the taxing
44
+ # jurisdiction for a specific address. If you encounter an address that is on the boundary
45
+ # between two different jurisdictions, you can choose to set up a jurisdiction override
46
+ # to switch this address to use different taxing jurisdictions.
47
+ #
48
+ # @param int accountId The ID of the account that owns this override
49
+ # @param int id The primary key of this override
50
+ # @return JurisdictionOverrideModel
51
+ def get_jurisdiction_override(accountId, id)
52
+ path = "/api/v2/accounts/#{accountId}/jurisdictionoverrides/#{id}"
53
+
54
+ get(path)
55
+ end
56
+
57
+
58
+ # Retrieve overrides for this account
59
+ #
60
+ # List all jurisdiction override objects defined for this account.
61
+ #
62
+ # A Jurisdiction Override is a configuration setting that allows you to select the taxing
63
+ # jurisdiction for a specific address. If you encounter an address that is on the boundary
64
+ # between two different jurisdictions, you can choose to set up a jurisdiction override
65
+ # to switch this address to use different taxing jurisdictions.
66
+ #
67
+ # Search for specific objects using the criteria in the `$filter` parameter; full documentation is available on [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
68
+ # Paginate your results using the `$top`, `$skip`, and `$orderby` parameters.
69
+ #
70
+ # @param int accountId The ID of the account that owns this override
71
+ # @param string filter A filter statement to identify specific records to retrieve. For more information on filtering, see [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
72
+ # @param string include A comma separated list of child objects to return underneath the primary object.
73
+ # @param int top If nonzero, return no more than this number of results. Used with $skip to provide pagination for large datasets.
74
+ # @param int skip If nonzero, skip this number of results before returning data. Used with $top to provide pagination for large datasets.
75
+ # @param string orderBy A comma separated list of sort statements in the format `(fieldname) [ASC|DESC]`, for example `id ASC`.
76
+ # @return FetchResult
77
+ def list_jurisdiction_overrides_by_account(accountId, options={})
78
+ path = "/api/v2/accounts/#{accountId}/jurisdictionoverrides"
79
+
80
+ get(path, options)
81
+ end
82
+
83
+
84
+ # Retrieve all overrides
85
+ #
86
+ # Get multiple jurisdiction override objects across all companies.
87
+ #
88
+ # A Jurisdiction Override is a configuration setting that allows you to select the taxing
89
+ # jurisdiction for a specific address. If you encounter an address that is on the boundary
90
+ # between two different jurisdictions, you can choose to set up a jurisdiction override
91
+ # to switch this address to use different taxing jurisdictions.
92
+ #
93
+ # Search for specific objects using the criteria in the `$filter` parameter; full documentation is available on [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
94
+ # Paginate your results using the `$top`, `$skip`, and `$orderby` parameters.
95
+ #
96
+ # @param string filter A filter statement to identify specific records to retrieve. For more information on filtering, see [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
97
+ # @param string include A comma separated list of child objects to return underneath the primary object.
98
+ # @param int top If nonzero, return no more than this number of results. Used with $skip to provide pagination for large datasets.
99
+ # @param int skip If nonzero, skip this number of results before returning data. Used with $top to provide pagination for large datasets.
100
+ # @param string orderBy A comma separated list of sort statements in the format `(fieldname) [ASC|DESC]`, for example `id ASC`.
101
+ # @return FetchResult
102
+ def query_jurisdiction_overrides(options={})
103
+ path = "/api/v2/jurisdictionoverrides"
104
+
105
+ get(path, options)
106
+ end
107
+
108
+
109
+ # Update a single jurisdictionoverride
110
+ #
111
+ # Replace the existing jurisdictionoverride object at this URL with an updated object.
112
+ #
113
+ # @param int accountId The ID of the account that this jurisdictionoverride belongs to.
114
+ # @param int id The ID of the jurisdictionoverride you wish to update
115
+ # @param JurisdictionOverrideModel model The jurisdictionoverride object you wish to update.
116
+ # @return JurisdictionOverrideModel
117
+ def update_jurisdiction_override(accountId, id, model)
118
+ path = "/api/v2/accounts/#{accountId}/jurisdictionoverrides/#{id}"
119
+
120
+ put(path, model)
121
+ end
122
+
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,158 @@
1
+ module AvaTax
2
+ class Client
3
+ module Locations
4
+
5
+
6
+ # Point of sale data file generation
7
+ #
8
+ # Builds a point-of-sale data file containing tax rates and rules for this location, containing tax rates for all
9
+ # items defined for this company. This data file can be used to correctly calculate tax in the event a
10
+ # point-of-sale device is not able to reach AvaTax.
11
+ # This data file can be customized for specific partner devices and usage conditions.
12
+ # The result of this API is the file you requested in the format you requested using the 'responseType' field.
13
+ # This API builds the file on demand, and is limited to a maximum of 7500 items.
14
+ #
15
+ # @param int companyId The ID number of the company that owns this location.
16
+ # @param int id The ID number of the location to retrieve point-of-sale data.
17
+ # @param string date The date for which point-of-sale data would be calculated (today by default)
18
+ # @param string format The format of the file (JSON by default) (See PointOfSaleFileType::* for a list of allowable values)
19
+ # @param string partnerId If specified, requests a custom partner-formatted version of the file. (See PointOfSalePartnerId::* for a list of allowable values)
20
+ # @param boolean includeJurisCodes When true, the file will include jurisdiction codes in the result.
21
+ # @return FileResult
22
+ def build_point_of_sale_data_for_location(companyId, id, options={})
23
+ path = "/api/v2/companies/#{companyId}/locations/#{id}/pointofsaledata"
24
+
25
+ get(path, options)
26
+ end
27
+
28
+
29
+ # Create a new location
30
+ #
31
+ # Create one or more new location objects attached to this company.
32
+ #
33
+ # @param int companyId The ID of the company that owns this location.
34
+ # @param LocationModel[] model The location you wish to create.
35
+ # @return LocationModel[]
36
+ def create_locations(companyId, model)
37
+ path = "/api/v2/companies/#{companyId}/locations"
38
+
39
+ post(path, model)
40
+ end
41
+
42
+
43
+ # Delete a single location
44
+ #
45
+ # Mark the location object at this URL as deleted.
46
+ #
47
+ # @param int companyId The ID of the company that owns this location.
48
+ # @param int id The ID of the location you wish to delete.
49
+ # @return ErrorDetail[]
50
+ def delete_location(companyId, id)
51
+ path = "/api/v2/companies/#{companyId}/locations/#{id}"
52
+
53
+ delete(path)
54
+ end
55
+
56
+
57
+ # Retrieve a single location
58
+ #
59
+ # Get the location object identified by this URL.
60
+ # An 'Location' represents a physical address where a company does business.
61
+ # Many taxing authorities require that you define a list of all locations where your company does business.
62
+ # These locations may require additional custom configuration or tax registration with these authorities.
63
+ # For more information on metadata requirements, see the '/api/v2/definitions/locationquestions' API.
64
+ #
65
+ # @param int companyId The ID of the company that owns this location
66
+ # @param int id The primary key of this location
67
+ # @return LocationModel
68
+ def get_location(companyId, id)
69
+ path = "/api/v2/companies/#{companyId}/locations/#{id}"
70
+
71
+ get(path)
72
+ end
73
+
74
+
75
+ # Retrieve locations for this company
76
+ #
77
+ # List all location objects defined for this company.
78
+ # An 'Location' represents a physical address where a company does business.
79
+ # Many taxing authorities require that you define a list of all locations where your company does business.
80
+ # These locations may require additional custom configuration or tax registration with these authorities.
81
+ # For more information on metadata requirements, see the '/api/v2/definitions/locationquestions' API.
82
+ #
83
+ # Search for specific objects using the criteria in the `$filter` parameter; full documentation is available on [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
84
+ # Paginate your results using the `$top`, `$skip`, and `$orderby` parameters.
85
+ #
86
+ # @param int companyId The ID of the company that owns these locations
87
+ # @param string filter A filter statement to identify specific records to retrieve. For more information on filtering, see [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
88
+ # @param string include A comma separated list of child objects to return underneath the primary object.
89
+ # @param int top If nonzero, return no more than this number of results. Used with $skip to provide pagination for large datasets.
90
+ # @param int skip If nonzero, skip this number of results before returning data. Used with $top to provide pagination for large datasets.
91
+ # @param string orderBy A comma separated list of sort statements in the format `(fieldname) [ASC|DESC]`, for example `id ASC`.
92
+ # @return FetchResult
93
+ def list_locations_by_company(companyId, options={})
94
+ path = "/api/v2/companies/#{companyId}/locations"
95
+
96
+ get(path, options)
97
+ end
98
+
99
+
100
+ # Retrieve all locations
101
+ #
102
+ # Get multiple location objects across all companies.
103
+ # An 'Location' represents a physical address where a company does business.
104
+ # Many taxing authorities require that you define a list of all locations where your company does business.
105
+ # These locations may require additional custom configuration or tax registration with these authorities.
106
+ # For more information on metadata requirements, see the '/api/v2/definitions/locationquestions' API.
107
+ #
108
+ # Search for specific objects using the criteria in the `$filter` parameter; full documentation is available on [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
109
+ # Paginate your results using the `$top`, `$skip`, and `$orderby` parameters.
110
+ #
111
+ # @param string filter A filter statement to identify specific records to retrieve. For more information on filtering, see [Filtering in REST](http://developer.avalara.com/avatax/filtering-in-rest/) .
112
+ # @param string include A comma separated list of child objects to return underneath the primary object.
113
+ # @param int top If nonzero, return no more than this number of results. Used with $skip to provide pagination for large datasets.
114
+ # @param int skip If nonzero, skip this number of results before returning data. Used with $top to provide pagination for large datasets.
115
+ # @param string orderBy A comma separated list of sort statements in the format `(fieldname) [ASC|DESC]`, for example `id ASC`.
116
+ # @return FetchResult
117
+ def query_locations(options={})
118
+ path = "/api/v2/locations"
119
+
120
+ get(path, options)
121
+ end
122
+
123
+
124
+ # Update a single location
125
+ #
126
+ # Replace the existing location object at this URL with an updated object.
127
+ # All data from the existing object will be replaced with data in the object you PUT.
128
+ # 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.
129
+ #
130
+ # @param int companyId The ID of the company that this location belongs to.
131
+ # @param int id The ID of the location you wish to update
132
+ # @param LocationModel model The location you wish to update.
133
+ # @return LocationModel
134
+ def update_location(companyId, id, model)
135
+ path = "/api/v2/companies/#{companyId}/locations/#{id}"
136
+
137
+ put(path, model)
138
+ end
139
+
140
+
141
+ # Validate the location against local requirements
142
+ #
143
+ # Returns validation information for this location.
144
+ # This API call is intended to compare this location against the currently known taxing authority rules and regulations,
145
+ # and provide information about what additional work is required to completely setup this location.
146
+ #
147
+ # @param int companyId The ID of the company that owns this location
148
+ # @param int id The primary key of this location
149
+ # @return LocationValidationModel
150
+ def validate_location(companyId, id)
151
+ path = "/api/v2/companies/#{companyId}/locations/#{id}/validate"
152
+
153
+ get(path)
154
+ end
155
+
156
+ end
157
+ end
158
+ end