quickbooks-ruby 0.4.0 → 1.0.16
Sign up to get free protection for your applications and to get access to all the features.
- 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
|