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.
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