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.
Files changed (72) hide show
  1. checksums.yaml +5 -5
  2. data/lib/quickbooks-ruby.rb +65 -13
  3. data/lib/quickbooks/faraday/middleware/gzip.rb +74 -0
  4. data/lib/quickbooks/model/base_model.rb +13 -2
  5. data/lib/quickbooks/model/batch_request.rb +11 -6
  6. data/lib/quickbooks/model/batch_response.rb +11 -6
  7. data/lib/quickbooks/model/bill.rb +3 -0
  8. data/lib/quickbooks/model/change_data_capture.rb +50 -0
  9. data/lib/quickbooks/model/company_currency.rb +19 -0
  10. data/lib/quickbooks/model/company_info.rb +2 -1
  11. data/lib/quickbooks/model/custom_field.rb +18 -0
  12. data/lib/quickbooks/model/customer.rb +6 -1
  13. data/lib/quickbooks/model/customer_type.rb +15 -0
  14. data/lib/quickbooks/model/deposit_line_detail.rb +2 -2
  15. data/lib/quickbooks/model/description_line_detail.rb +7 -0
  16. data/lib/quickbooks/model/effective_tax_rate.rb +15 -0
  17. data/lib/quickbooks/model/exchange_rate.rb +23 -0
  18. data/lib/quickbooks/model/group_line_detail.rb +2 -1
  19. data/lib/quickbooks/model/invoice.rb +7 -1
  20. data/lib/quickbooks/model/invoice_change.rb +2 -1
  21. data/lib/quickbooks/model/invoice_group_line_detail.rb +14 -0
  22. data/lib/quickbooks/model/invoice_line_item.rb +34 -4
  23. data/lib/quickbooks/model/item.rb +11 -3
  24. data/lib/quickbooks/model/item_group_detail.rb +9 -0
  25. data/lib/quickbooks/model/item_group_line.rb +20 -0
  26. data/lib/quickbooks/model/line.rb +12 -0
  27. data/lib/quickbooks/model/line_ex.rb +9 -0
  28. data/lib/quickbooks/model/linked_transaction.rb +7 -0
  29. data/lib/quickbooks/model/physical_address.rb +2 -2
  30. data/lib/quickbooks/model/preferences.rb +28 -4
  31. data/lib/quickbooks/model/purchase_change.rb +7 -0
  32. data/lib/quickbooks/model/purchase_line_item.rb +1 -0
  33. data/lib/quickbooks/model/purchase_order.rb +3 -1
  34. data/lib/quickbooks/model/refund_receipt_change.rb +8 -0
  35. data/lib/quickbooks/model/report.rb +9 -7
  36. data/lib/quickbooks/model/sales_receipt.rb +4 -2
  37. data/lib/quickbooks/model/tax_rate.rb +1 -1
  38. data/lib/quickbooks/model/time_activity.rb +2 -1
  39. data/lib/quickbooks/model/transfer.rb +21 -0
  40. data/lib/quickbooks/model/vendor.rb +1 -0
  41. data/lib/quickbooks/service/access_token.rb +12 -11
  42. data/lib/quickbooks/service/base_service.rb +148 -24
  43. data/lib/quickbooks/service/batch.rb +1 -1
  44. data/lib/quickbooks/service/change_data_capture.rb +24 -0
  45. data/lib/quickbooks/service/company_currency.rb +18 -0
  46. data/lib/quickbooks/service/credit_memo.rb +6 -0
  47. data/lib/quickbooks/service/custom_field.rb +20 -0
  48. data/lib/quickbooks/service/customer.rb +5 -0
  49. data/lib/quickbooks/service/customer_type.rb +20 -0
  50. data/lib/quickbooks/service/estimate.rb +6 -0
  51. data/lib/quickbooks/service/exchange_rate.rb +25 -0
  52. data/lib/quickbooks/service/invoice.rb +24 -1
  53. data/lib/quickbooks/service/item.rb +5 -0
  54. data/lib/quickbooks/service/payment.rb +13 -0
  55. data/lib/quickbooks/service/preferences.rb +1 -1
  56. data/lib/quickbooks/service/purchase_change.rb +16 -0
  57. data/lib/quickbooks/service/purchase_order.rb +16 -0
  58. data/lib/quickbooks/service/refund_receipt_change.rb +16 -0
  59. data/lib/quickbooks/service/responses/methods.rb +17 -0
  60. data/lib/quickbooks/service/responses/oauth2_http_response.rb +43 -0
  61. data/lib/quickbooks/service/responses/oauth_http_response.rb +17 -0
  62. data/lib/quickbooks/service/sales_receipt.rb +30 -0
  63. data/lib/quickbooks/service/service_crud.rb +21 -0
  64. data/lib/quickbooks/service/service_crud_json.rb +1 -1
  65. data/lib/quickbooks/service/transfer.rb +16 -0
  66. data/lib/quickbooks/service/upload.rb +5 -1
  67. data/lib/quickbooks/util/logging.rb +4 -0
  68. data/lib/quickbooks/util/multipart.rb +2 -65
  69. data/lib/quickbooks/util/name_entity.rb +2 -1
  70. data/lib/quickbooks/util/query_builder.rb +6 -5
  71. data/lib/quickbooks/version.rb +1 -1
  72. metadata +73 -62
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: cd738a2e9e6bfa63ccf460226aa60dfe3688713d
4
- data.tar.gz: e91dc8fc720d196c8075fe706667ec8c6c657e24
2
+ SHA256:
3
+ metadata.gz: 80fd943e9fb98498f7b52adde6510420661a52096e86332e019b03a51e4485e5
4
+ data.tar.gz: c259acc229c14cfd586d670ed58f273e1d4b0d6dd81f0e2eddff56b4cc93e6f0
5
5
  SHA512:
6
- metadata.gz: c466d28cb539140345cddc3a39bd11678b659c2150d98b6fcf8b8e04640fae6ab028f00de73bc17512a38af3f0baa03715973dc32463c2d475a9348b9a3ada63
7
- data.tar.gz: e2dca1296eedcbf25578ec27e6eae67fd95ec1c382147cc5d554b7a44ddce2aa914be370c51391ad62cb71ddadfc04906e08084cf07f48a3518cfb854cbc8990
6
+ metadata.gz: '08b8913a1412ee319d017b833099c6ef88aab2aba9339849805915e7f090759f0a388d74e24b9b984db0f81016693310849ea1e0ef8b8e1ce3164ad68de7173d'
7
+ data.tar.gz: c05b69125cc0debc6364a0a9b82fa14703691e2e2dd5f5722ba34035c7b90c3da5a9b14dc164811f94ba35e63ac590daab1d923c0bf4bfa801818ff46799057a
@@ -6,13 +6,19 @@ require 'cgi'
6
6
  require 'uri'
7
7
  require 'date'
8
8
  require 'forwardable'
9
- require 'oauth'
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/name_value'
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 InvalidModelException < StandardError; end
244
+ class Error < StandardError; end
245
+ class InvalidModelException < Error; end
246
+ class AuthorizationFailure < Error
247
+ attr_accessor :code, :detail, :type
207
248
 
208
- class AuthorizationFailure < StandardError; end
209
- class Forbidden < StandardError; end
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 ServiceUnavailable < StandardError; end
212
- class MissingRealmError < StandardError; end
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
- method_name = "#{attribute.to_s.gsub('_ref', '_id')}=".to_sym
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 :purchase, from: "Purchase", as: Quickbooks::Model::Purchase
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 :purchase, from: "Purchase", as: Quickbooks::Model::Purchase
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