quickbooks-ruby 0.4.0 → 1.0.16
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 +5 -5
- data/lib/quickbooks-ruby.rb +65 -13
- data/lib/quickbooks/faraday/middleware/gzip.rb +74 -0
- data/lib/quickbooks/model/base_model.rb +13 -2
- data/lib/quickbooks/model/batch_request.rb +11 -6
- data/lib/quickbooks/model/batch_response.rb +11 -6
- data/lib/quickbooks/model/bill.rb +3 -0
- data/lib/quickbooks/model/change_data_capture.rb +50 -0
- data/lib/quickbooks/model/company_currency.rb +19 -0
- data/lib/quickbooks/model/company_info.rb +2 -1
- data/lib/quickbooks/model/custom_field.rb +18 -0
- data/lib/quickbooks/model/customer.rb +6 -1
- data/lib/quickbooks/model/customer_type.rb +15 -0
- data/lib/quickbooks/model/deposit_line_detail.rb +2 -2
- data/lib/quickbooks/model/description_line_detail.rb +7 -0
- data/lib/quickbooks/model/effective_tax_rate.rb +15 -0
- data/lib/quickbooks/model/exchange_rate.rb +23 -0
- data/lib/quickbooks/model/group_line_detail.rb +2 -1
- data/lib/quickbooks/model/invoice.rb +7 -1
- data/lib/quickbooks/model/invoice_change.rb +2 -1
- data/lib/quickbooks/model/invoice_group_line_detail.rb +14 -0
- data/lib/quickbooks/model/invoice_line_item.rb +34 -4
- data/lib/quickbooks/model/item.rb +11 -3
- data/lib/quickbooks/model/item_group_detail.rb +9 -0
- data/lib/quickbooks/model/item_group_line.rb +20 -0
- data/lib/quickbooks/model/line.rb +12 -0
- data/lib/quickbooks/model/line_ex.rb +9 -0
- data/lib/quickbooks/model/linked_transaction.rb +7 -0
- data/lib/quickbooks/model/physical_address.rb +2 -2
- data/lib/quickbooks/model/preferences.rb +28 -4
- data/lib/quickbooks/model/purchase_change.rb +7 -0
- data/lib/quickbooks/model/purchase_line_item.rb +1 -0
- data/lib/quickbooks/model/purchase_order.rb +3 -1
- data/lib/quickbooks/model/refund_receipt_change.rb +8 -0
- data/lib/quickbooks/model/report.rb +9 -7
- data/lib/quickbooks/model/sales_receipt.rb +4 -2
- data/lib/quickbooks/model/tax_rate.rb +1 -1
- data/lib/quickbooks/model/time_activity.rb +2 -1
- data/lib/quickbooks/model/transfer.rb +21 -0
- data/lib/quickbooks/model/vendor.rb +1 -0
- data/lib/quickbooks/service/access_token.rb +12 -11
- data/lib/quickbooks/service/base_service.rb +148 -24
- data/lib/quickbooks/service/batch.rb +1 -1
- data/lib/quickbooks/service/change_data_capture.rb +24 -0
- data/lib/quickbooks/service/company_currency.rb +18 -0
- data/lib/quickbooks/service/credit_memo.rb +6 -0
- data/lib/quickbooks/service/custom_field.rb +20 -0
- data/lib/quickbooks/service/customer.rb +5 -0
- data/lib/quickbooks/service/customer_type.rb +20 -0
- data/lib/quickbooks/service/estimate.rb +6 -0
- data/lib/quickbooks/service/exchange_rate.rb +25 -0
- data/lib/quickbooks/service/invoice.rb +24 -1
- data/lib/quickbooks/service/item.rb +5 -0
- data/lib/quickbooks/service/payment.rb +13 -0
- data/lib/quickbooks/service/preferences.rb +1 -1
- data/lib/quickbooks/service/purchase_change.rb +16 -0
- data/lib/quickbooks/service/purchase_order.rb +16 -0
- data/lib/quickbooks/service/refund_receipt_change.rb +16 -0
- data/lib/quickbooks/service/responses/methods.rb +17 -0
- data/lib/quickbooks/service/responses/oauth2_http_response.rb +43 -0
- data/lib/quickbooks/service/responses/oauth_http_response.rb +17 -0
- data/lib/quickbooks/service/sales_receipt.rb +30 -0
- data/lib/quickbooks/service/service_crud.rb +21 -0
- data/lib/quickbooks/service/service_crud_json.rb +1 -1
- data/lib/quickbooks/service/transfer.rb +16 -0
- data/lib/quickbooks/service/upload.rb +5 -1
- data/lib/quickbooks/util/logging.rb +4 -0
- data/lib/quickbooks/util/multipart.rb +2 -65
- data/lib/quickbooks/util/name_entity.rb +2 -1
- data/lib/quickbooks/util/query_builder.rb +6 -5
- data/lib/quickbooks/version.rb +1 -1
- metadata +73 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 80fd943e9fb98498f7b52adde6510420661a52096e86332e019b03a51e4485e5
|
4
|
+
data.tar.gz: c259acc229c14cfd586d670ed58f273e1d4b0d6dd81f0e2eddff56b4cc93e6f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08b8913a1412ee319d017b833099c6ef88aab2aba9339849805915e7f090759f0a388d74e24b9b984db0f81016693310849ea1e0ef8b8e1ce3164ad68de7173d'
|
7
|
+
data.tar.gz: c05b69125cc0debc6364a0a9b82fa14703691e2e2dd5f5722ba34035c7b90c3da5a9b14dc164811f94ba35e63ac590daab1d923c0bf4bfa801818ff46799057a
|
data/lib/quickbooks-ruby.rb
CHANGED
@@ -6,13 +6,19 @@ require 'cgi'
|
|
6
6
|
require 'uri'
|
7
7
|
require 'date'
|
8
8
|
require 'forwardable'
|
9
|
-
require '
|
9
|
+
require 'oauth2'
|
10
10
|
require 'net/http/post/multipart'
|
11
11
|
require 'quickbooks/util/collection'
|
12
12
|
require 'quickbooks/util/logging'
|
13
13
|
require 'quickbooks/util/http_encoding_helper'
|
14
14
|
require 'quickbooks/util/name_entity'
|
15
15
|
require 'quickbooks/util/query_builder'
|
16
|
+
require 'quickbooks/faraday/middleware/gzip'
|
17
|
+
|
18
|
+
#== OAuth Responses
|
19
|
+
require 'quickbooks/service/responses/oauth_http_response'
|
20
|
+
require 'quickbooks/service/responses/methods'
|
21
|
+
require 'quickbooks/service/responses/oauth2_http_response'
|
16
22
|
|
17
23
|
#== Models
|
18
24
|
require 'quickbooks/model/definition'
|
@@ -23,6 +29,7 @@ require 'quickbooks/model/base_reference'
|
|
23
29
|
require 'quickbooks/model/document_numbering'
|
24
30
|
require 'quickbooks/model/global_tax_calculation'
|
25
31
|
require 'quickbooks/model/has_line_items'
|
32
|
+
require 'quickbooks/model/name_value'
|
26
33
|
require 'quickbooks/model/access_token_response'
|
27
34
|
require 'quickbooks/model/meta_data'
|
28
35
|
require 'quickbooks/model/class'
|
@@ -32,6 +39,7 @@ require 'quickbooks/model/attachable'
|
|
32
39
|
require 'quickbooks/model/custom_field'
|
33
40
|
require 'quickbooks/model/sales_item_line_detail'
|
34
41
|
require 'quickbooks/model/sub_total_line_detail'
|
42
|
+
require 'quickbooks/model/description_line_detail'
|
35
43
|
require 'quickbooks/model/department'
|
36
44
|
require 'quickbooks/model/discount_line_detail'
|
37
45
|
require 'quickbooks/model/discount_override'
|
@@ -44,8 +52,11 @@ require 'quickbooks/model/tax_line'
|
|
44
52
|
require 'quickbooks/model/transaction_tax_detail'
|
45
53
|
require 'quickbooks/model/entity'
|
46
54
|
require 'quickbooks/model/journal_entry_line_detail'
|
55
|
+
require 'quickbooks/model/line_ex'
|
47
56
|
require 'quickbooks/model/line'
|
48
57
|
require 'quickbooks/model/journal_entry'
|
58
|
+
require 'quickbooks/model/item_group_line'
|
59
|
+
require 'quickbooks/model/item_group_detail'
|
49
60
|
require 'quickbooks/model/item'
|
50
61
|
require 'quickbooks/model/budget_line_item'
|
51
62
|
require 'quickbooks/model/budget'
|
@@ -61,9 +72,12 @@ require 'quickbooks/model/email_address'
|
|
61
72
|
require 'quickbooks/model/web_site_address'
|
62
73
|
require 'quickbooks/model/physical_address'
|
63
74
|
require 'quickbooks/model/invoice_line_item'
|
64
|
-
require 'quickbooks/model/
|
75
|
+
require 'quickbooks/model/invoice_group_line_detail'
|
65
76
|
require 'quickbooks/model/company_info'
|
77
|
+
require 'quickbooks/model/company_currency'
|
78
|
+
require 'quickbooks/model/customer_type'
|
66
79
|
require 'quickbooks/model/customer'
|
80
|
+
require 'quickbooks/model/delivery_info'
|
67
81
|
require 'quickbooks/model/sales_receipt'
|
68
82
|
require 'quickbooks/model/payment'
|
69
83
|
require 'quickbooks/model/payment_method'
|
@@ -76,6 +90,7 @@ require 'quickbooks/model/bill_payment_credit_card'
|
|
76
90
|
require 'quickbooks/model/bill_payment'
|
77
91
|
require 'quickbooks/model/vendor'
|
78
92
|
require 'quickbooks/model/employee'
|
93
|
+
require 'quickbooks/model/exchange_rate'
|
79
94
|
require 'quickbooks/model/term'
|
80
95
|
require 'quickbooks/model/markup_info'
|
81
96
|
require 'quickbooks/model/group_line_detail'
|
@@ -86,8 +101,8 @@ require 'quickbooks/model/purchase'
|
|
86
101
|
require 'quickbooks/model/purchase_order'
|
87
102
|
require 'quickbooks/model/vendor_credit'
|
88
103
|
require 'quickbooks/model/estimate'
|
89
|
-
require 'quickbooks/model/delivery_info'
|
90
104
|
require 'quickbooks/model/invoice'
|
105
|
+
require 'quickbooks/model/effective_tax_rate'
|
91
106
|
require 'quickbooks/model/tax_rate'
|
92
107
|
require 'quickbooks/model/tax_rate_detail'
|
93
108
|
require 'quickbooks/model/tax_rate_detail_line'
|
@@ -97,10 +112,10 @@ require 'quickbooks/model/tax_agency'
|
|
97
112
|
require 'quickbooks/model/tax_service'
|
98
113
|
require 'quickbooks/model/tax_code'
|
99
114
|
require 'quickbooks/model/fault'
|
115
|
+
require 'quickbooks/model/refund_receipt'
|
100
116
|
require 'quickbooks/model/batch_request'
|
101
117
|
require 'quickbooks/model/batch_response'
|
102
118
|
require 'quickbooks/model/preferences'
|
103
|
-
require 'quickbooks/model/refund_receipt'
|
104
119
|
require 'quickbooks/model/change_model'
|
105
120
|
require 'quickbooks/model/invoice_change'
|
106
121
|
require 'quickbooks/model/customer_change'
|
@@ -109,7 +124,10 @@ require 'quickbooks/model/item_change'
|
|
109
124
|
require 'quickbooks/model/report'
|
110
125
|
require 'quickbooks/model/credit_memo_change'
|
111
126
|
require 'quickbooks/model/payment_change'
|
112
|
-
|
127
|
+
require 'quickbooks/model/purchase_change'
|
128
|
+
require 'quickbooks/model/transfer'
|
129
|
+
require 'quickbooks/model/change_data_capture'
|
130
|
+
require 'quickbooks/model/refund_receipt_change'
|
113
131
|
|
114
132
|
#== Services
|
115
133
|
require 'quickbooks/service/service_crud'
|
@@ -120,10 +138,14 @@ require 'quickbooks/service/access_token'
|
|
120
138
|
require 'quickbooks/service/class'
|
121
139
|
require 'quickbooks/service/attachable'
|
122
140
|
require 'quickbooks/service/company_info'
|
141
|
+
require 'quickbooks/service/company_currency'
|
142
|
+
require 'quickbooks/service/customer_type'
|
143
|
+
require 'quickbooks/service/custom_field'
|
123
144
|
require 'quickbooks/service/customer'
|
124
145
|
require 'quickbooks/service/department'
|
125
146
|
require 'quickbooks/service/invoice'
|
126
147
|
require 'quickbooks/service/deposit'
|
148
|
+
|
127
149
|
require 'quickbooks/service/item'
|
128
150
|
require 'quickbooks/service/budget'
|
129
151
|
require 'quickbooks/service/journal_entry'
|
@@ -135,6 +157,7 @@ require 'quickbooks/service/bill'
|
|
135
157
|
require 'quickbooks/service/bill_payment'
|
136
158
|
require 'quickbooks/service/vendor'
|
137
159
|
require 'quickbooks/service/employee'
|
160
|
+
require 'quickbooks/service/exchange_rate'
|
138
161
|
require 'quickbooks/service/payment'
|
139
162
|
require 'quickbooks/service/term'
|
140
163
|
require 'quickbooks/service/time_activity'
|
@@ -159,11 +182,18 @@ require 'quickbooks/service/item_change'
|
|
159
182
|
require 'quickbooks/service/reports'
|
160
183
|
require 'quickbooks/service/credit_memo_change'
|
161
184
|
require 'quickbooks/service/payment_change'
|
185
|
+
require 'quickbooks/service/purchase_change'
|
186
|
+
require 'quickbooks/service/transfer'
|
187
|
+
require 'quickbooks/service/change_data_capture'
|
188
|
+
require 'quickbooks/service/refund_receipt_change'
|
189
|
+
|
190
|
+
# Register Faraday Middleware
|
191
|
+
Faraday::Middleware.register_middleware :gzip => lambda { Gzip }
|
162
192
|
|
163
193
|
module Quickbooks
|
164
194
|
@@sandbox_mode = false
|
165
|
-
|
166
195
|
@@logger = nil
|
196
|
+
@@minorversion = 47
|
167
197
|
|
168
198
|
class << self
|
169
199
|
def sandbox_mode
|
@@ -174,6 +204,14 @@ module Quickbooks
|
|
174
204
|
@@sandbox_mode = sandbox_mode
|
175
205
|
end
|
176
206
|
|
207
|
+
def minorversion=(v)
|
208
|
+
@@minorversion = v
|
209
|
+
end
|
210
|
+
|
211
|
+
def minorversion
|
212
|
+
@@minorversion
|
213
|
+
end
|
214
|
+
|
177
215
|
def logger
|
178
216
|
@@logger ||= ::Logger.new($stdout) # TODO: replace with a real log file
|
179
217
|
end
|
@@ -203,16 +241,30 @@ module Quickbooks
|
|
203
241
|
end
|
204
242
|
end # << self
|
205
243
|
|
206
|
-
class
|
244
|
+
class Error < StandardError; end
|
245
|
+
class InvalidModelException < Error; end
|
246
|
+
class AuthorizationFailure < Error
|
247
|
+
attr_accessor :code, :detail, :type
|
207
248
|
|
208
|
-
|
209
|
-
|
249
|
+
def initialize(error_hash = {})
|
250
|
+
@code = error_hash[:code]
|
251
|
+
@detail = error_hash[:detail]
|
252
|
+
@type = error_hash[:type]
|
253
|
+
super(error_hash[:message])
|
254
|
+
end
|
255
|
+
end
|
256
|
+
class Forbidden < Error; end
|
257
|
+
class NotFound < Error; end
|
258
|
+
class RequestTooLarge < Error; end
|
259
|
+
class ThrottleExceeded < Forbidden; end
|
260
|
+
class TooManyRequests < Error; end
|
261
|
+
class ServiceUnavailable < Error; end
|
262
|
+
class MissingRealmError < Error; end
|
263
|
+
class UnsupportedOperation < Error; end
|
210
264
|
|
211
|
-
class
|
212
|
-
|
265
|
+
class IntuitRequestException < Error
|
266
|
+
attr_accessor :message, :code, :detail, :type, :intuit_tid, :request_xml, :request_json
|
213
267
|
|
214
|
-
class IntuitRequestException < StandardError
|
215
|
-
attr_accessor :message, :code, :detail, :type, :request_xml, :request_json
|
216
268
|
def initialize(msg)
|
217
269
|
self.message = msg
|
218
270
|
super(msg)
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# https://github.com/lostisland/faraday_middleware/blob/master/lib/faraday_middleware/gzip.rb
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
|
5
|
+
# Middleware to automatically decompress response bodies. If the
|
6
|
+
# "Accept-Encoding" header wasn't set in the request, this sets it to
|
7
|
+
# "gzip,deflate" and appropriately handles the compressed response from the
|
8
|
+
# server. This resembles what Ruby 1.9+ does internally in Net::HTTP#get.
|
9
|
+
#
|
10
|
+
# This middleware is NOT necessary when these adapters are used:
|
11
|
+
# - net_http on Ruby 1.9+
|
12
|
+
# - net_http_persistent on Ruby 2.0+
|
13
|
+
# - em_http
|
14
|
+
class Gzip < Faraday::Middleware
|
15
|
+
dependency 'zlib'
|
16
|
+
|
17
|
+
ACCEPT_ENCODING = 'Accept-Encoding'.freeze
|
18
|
+
CONTENT_ENCODING = 'Content-Encoding'.freeze
|
19
|
+
CONTENT_LENGTH = 'Content-Length'.freeze
|
20
|
+
SUPPORTED_ENCODINGS = 'gzip,deflate,br'.freeze
|
21
|
+
RUBY_ENCODING = '1.9'.respond_to?(:force_encoding)
|
22
|
+
|
23
|
+
def call(env)
|
24
|
+
env[:request_headers][ACCEPT_ENCODING] ||= SUPPORTED_ENCODINGS
|
25
|
+
@app.call(env).on_complete do |response_env|
|
26
|
+
break if response_env[:response_headers].nil?
|
27
|
+
|
28
|
+
case response_env[:response_headers][CONTENT_ENCODING]
|
29
|
+
when 'gzip'
|
30
|
+
reset_body(response_env, &method(:uncompress_gzip))
|
31
|
+
when 'deflate'
|
32
|
+
reset_body(response_env, &method(:inflate))
|
33
|
+
when 'br'
|
34
|
+
reset_body(response_env, &method(:brotli_inflate))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def reset_body(env)
|
40
|
+
env[:body] = yield(env[:body])
|
41
|
+
env[:response_headers].delete(CONTENT_ENCODING)
|
42
|
+
env[:response_headers][CONTENT_LENGTH] = env[:body].length
|
43
|
+
end
|
44
|
+
|
45
|
+
def uncompress_gzip(body)
|
46
|
+
io = StringIO.new(body)
|
47
|
+
gzip_reader = if RUBY_ENCODING
|
48
|
+
Zlib::GzipReader.new(io, :encoding => 'ASCII-8BIT')
|
49
|
+
else
|
50
|
+
Zlib::GzipReader.new(io)
|
51
|
+
end
|
52
|
+
gzip_reader.read
|
53
|
+
end
|
54
|
+
|
55
|
+
def inflate(body)
|
56
|
+
# Inflate as a DEFLATE (RFC 1950+RFC 1951) stream
|
57
|
+
Zlib::Inflate.inflate(body)
|
58
|
+
rescue Zlib::DataError
|
59
|
+
# Fall back to inflating as a "raw" deflate stream which
|
60
|
+
# Microsoft servers return
|
61
|
+
inflate = Zlib::Inflate.new(-Zlib::MAX_WBITS)
|
62
|
+
begin
|
63
|
+
inflate.inflate(body)
|
64
|
+
ensure
|
65
|
+
inflate.close
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def brotli_inflate(body)
|
70
|
+
self.class.dependency 'brotli'
|
71
|
+
|
72
|
+
Brotli.inflate(body)
|
73
|
+
end
|
74
|
+
end
|
@@ -2,6 +2,7 @@ module Quickbooks
|
|
2
2
|
module Model
|
3
3
|
class BaseModel
|
4
4
|
include Definition
|
5
|
+
include ActiveModel::AttributeMethods
|
5
6
|
include ActiveModel::Validations
|
6
7
|
include Validator
|
7
8
|
include ROXML
|
@@ -27,6 +28,14 @@ module Quickbooks
|
|
27
28
|
step2
|
28
29
|
end
|
29
30
|
|
31
|
+
def as_json(options = nil)
|
32
|
+
options = {} if options.nil?
|
33
|
+
except_conditions = ["roxml_references"]
|
34
|
+
except_conditions << options[:except]
|
35
|
+
options[:except] = except_conditions.flatten.uniq.compact
|
36
|
+
super(options)
|
37
|
+
end
|
38
|
+
|
30
39
|
def to_xml_ns(options = {})
|
31
40
|
to_xml_inject_ns(self.class::XML_NODE, options)
|
32
41
|
end
|
@@ -46,7 +55,7 @@ module Quickbooks
|
|
46
55
|
def inspect
|
47
56
|
# it would be nice if we could inspect all the children,
|
48
57
|
# but it's likely to blow the stack in some cases
|
49
|
-
"#<#{self.class} " +
|
58
|
+
"#<#{self.class} " +
|
50
59
|
"#{attributes.map{|k,v| "#{k}: #{v.nil? ? 'nil' : v.to_s }"}.join ", "}>"
|
51
60
|
end
|
52
61
|
class << self
|
@@ -78,7 +87,9 @@ module Quickbooks
|
|
78
87
|
references = args.empty? ? reference_attrs : args
|
79
88
|
|
80
89
|
references.each do |attribute|
|
81
|
-
|
90
|
+
last_index = attribute.to_s.rindex('_ref')
|
91
|
+
field_name = !last_index.nil? ? attribute.to_s.slice(0, last_index) : attribute
|
92
|
+
method_name = "#{field_name}_id=".to_sym
|
82
93
|
unless instance_methods(false).include?(method_name)
|
83
94
|
method_definition = <<-METH
|
84
95
|
def #{method_name}(id)
|
@@ -8,16 +8,21 @@ class Quickbooks::Model::BatchRequest < Quickbooks::Model::BaseModel
|
|
8
8
|
xml_accessor :bId, :from => "@bId"
|
9
9
|
|
10
10
|
# Supported Entities
|
11
|
-
xml_accessor :item, from: "Item", as: Quickbooks::Model::Item
|
12
11
|
xml_accessor :account, from: "Account", as: Quickbooks::Model::Account
|
13
|
-
xml_accessor :invoice, from: "Invoice", as: Quickbooks::Model::Invoice
|
14
|
-
xml_accessor :customer, from: "Customer", as: Quickbooks::Model::Customer
|
15
|
-
xml_accessor :bill, from: "Bill", as: Quickbooks::Model::Bill
|
16
|
-
xml_accessor :sales_receipt, from: "SalesReceipt", as: Quickbooks::Model::SalesReceipt
|
17
12
|
xml_accessor :bill_payment, from: "BillPayment", as: Quickbooks::Model::BillPayment
|
18
|
-
xml_accessor :
|
13
|
+
xml_accessor :bill, from: "Bill", as: Quickbooks::Model::Bill
|
19
14
|
xml_accessor :credit_memo, from: "CreditMemo", as: Quickbooks::Model::CreditMemo
|
15
|
+
xml_accessor :customer, from: "Customer", as: Quickbooks::Model::Customer
|
16
|
+
xml_accessor :invoice, from: "Invoice", as: Quickbooks::Model::Invoice
|
17
|
+
xml_accessor :item, from: "Item", as: Quickbooks::Model::Item
|
18
|
+
xml_accessor :journal_entry, from: "JournalEntry", as: Quickbooks::Model::JournalEntry
|
20
19
|
xml_accessor :payment, from: "Payment", as: Quickbooks::Model::Payment
|
20
|
+
xml_accessor :purchase_order, from: "PurchaseOrder", as: Quickbooks::Model::PurchaseOrder
|
21
|
+
xml_accessor :purchase, from: "Purchase", as: Quickbooks::Model::Purchase
|
22
|
+
xml_accessor :refund_receipt, from: "RefundReceipt", as: Quickbooks::Model::RefundReceipt
|
23
|
+
xml_accessor :sales_receipt, from: "SalesReceipt", as: Quickbooks::Model::SalesReceipt
|
24
|
+
xml_accessor :time_activity, from: "TimeActivity", as: Quickbooks::Model::TimeActivity
|
25
|
+
xml_accessor :vendor, from: "Vendor", as: Quickbooks::Model::Vendor
|
21
26
|
end
|
22
27
|
|
23
28
|
XML_COLLECTION_NODE = "IntuitBatchRequest"
|
@@ -7,16 +7,21 @@ class Quickbooks::Model::BatchResponse < Quickbooks::Model::BaseModel
|
|
7
7
|
xml_accessor :fault, :from => 'Fault', :as => Quickbooks::Model::Fault
|
8
8
|
|
9
9
|
# Supported Entities
|
10
|
-
xml_accessor :item, from: "Item", as: Quickbooks::Model::Item
|
11
10
|
xml_accessor :account, from: "Account", as: Quickbooks::Model::Account
|
12
|
-
xml_accessor :invoice, from: "Invoice", as: Quickbooks::Model::Invoice
|
13
|
-
xml_accessor :customer, from: "Customer", as: Quickbooks::Model::Customer
|
14
|
-
xml_accessor :bill, from: "Bill", as: Quickbooks::Model::Bill
|
15
|
-
xml_accessor :sales_receipt, from: "SalesReceipt", as: Quickbooks::Model::SalesReceipt
|
16
11
|
xml_accessor :bill_payment, from: "BillPayment", as: Quickbooks::Model::BillPayment
|
17
|
-
xml_accessor :
|
12
|
+
xml_accessor :bill, from: "Bill", as: Quickbooks::Model::Bill
|
18
13
|
xml_accessor :credit_memo, from: "CreditMemo", as: Quickbooks::Model::CreditMemo
|
14
|
+
xml_accessor :customer, from: "Customer", as: Quickbooks::Model::Customer
|
15
|
+
xml_accessor :invoice, from: "Invoice", as: Quickbooks::Model::Invoice
|
16
|
+
xml_accessor :item, from: "Item", as: Quickbooks::Model::Item
|
17
|
+
xml_accessor :journal_entry, from: "JournalEntry", as: Quickbooks::Model::JournalEntry
|
19
18
|
xml_accessor :payment, from: "Payment", as: Quickbooks::Model::Payment
|
19
|
+
xml_accessor :purchase_order, from: "PurchaseOrder", as: Quickbooks::Model::PurchaseOrder
|
20
|
+
xml_accessor :purchase, from: "Purchase", as: Quickbooks::Model::Purchase
|
21
|
+
xml_accessor :refund_receipt, from: "RefundReceipt", as: Quickbooks::Model::RefundReceipt
|
22
|
+
xml_accessor :sales_receipt, from: "SalesReceipt", as: Quickbooks::Model::SalesReceipt
|
23
|
+
xml_accessor :time_activity, from: "TimeActivity", as: Quickbooks::Model::TimeActivity
|
24
|
+
xml_accessor :vendor, from: "Vendor", as: Quickbooks::Model::Vendor
|
20
25
|
|
21
26
|
def fault?
|
22
27
|
fault
|
@@ -16,9 +16,12 @@ module Quickbooks
|
|
16
16
|
xml_accessor :department_ref, :from => 'DepartmentRef', :as => BaseReference
|
17
17
|
|
18
18
|
xml_accessor :line_items, :from => 'Line', :as => [BillLineItem]
|
19
|
+
xml_accessor :txn_tax_detail, :from => 'TxnTaxDetail', :as => TransactionTaxDetail
|
19
20
|
|
20
21
|
xml_accessor :private_note, :from => 'PrivateNote'
|
21
22
|
|
23
|
+
xml_accessor :linked_transactions, :from => 'LinkedTxn', :as => [LinkedTransaction]
|
24
|
+
|
22
25
|
xml_accessor :vendor_ref, :from => 'VendorRef', :as => BaseReference
|
23
26
|
xml_accessor :payer_ref, :from => 'PayerRef', :as => BaseReference
|
24
27
|
xml_accessor :sales_term_ref, :from => 'SalesTermRef', :as => BaseReference
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Quickbooks
|
2
|
+
module Model
|
3
|
+
class ChangeDataCapture < BaseModel
|
4
|
+
|
5
|
+
attr_accessor :xml
|
6
|
+
|
7
|
+
TYPES = ["Bill", "BillPayment", "CreditMemo", "Deposit", "Invoice", "JournalEntry", "Payment",
|
8
|
+
"Purchase", "RefundReceipt", "SalesReceipt", "PurchaseOrder", "VendorCredit", "Transfer",
|
9
|
+
"Estimate", "Account", "Budget", "Class", "Customer", "Department", "Employee", "Item",
|
10
|
+
"PaymentMethod", "Term", "Vendor"]
|
11
|
+
|
12
|
+
def all_types
|
13
|
+
data = {}
|
14
|
+
TYPES.each do |entity|
|
15
|
+
if xml.css(entity).first != nil
|
16
|
+
data[entity] = all_of_type(entity)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
data
|
20
|
+
end
|
21
|
+
|
22
|
+
# time when refresh was requests from cdc/ endpoiint
|
23
|
+
# more information @here - https://developer.intuit.com/app/developer/qbo/docs/develop/explore-the-quickbooks-online-api/change-data-capture#using-change-data-capture
|
24
|
+
#
|
25
|
+
def time
|
26
|
+
attribute = xml.root.attribute('time')
|
27
|
+
attribute.value if attribute
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def all_of_type(entity)
|
33
|
+
parse_block(xml.css(entity).first.parent, entity)
|
34
|
+
end
|
35
|
+
|
36
|
+
def parse_block(node, entity)
|
37
|
+
model = "Quickbooks::Model::#{entity}".constantize
|
38
|
+
models = []
|
39
|
+
all_items = node.css(entity).map do |item|
|
40
|
+
if item.attribute("status").try(:value) == "Deleted"
|
41
|
+
Quickbooks::Model::ChangeModel.from_xml(item)
|
42
|
+
else
|
43
|
+
model.from_xml(item)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|