quickeebooks 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/Gemfile.lock +42 -11
  2. data/Guardfile +8 -0
  3. data/HISTORY.md +5 -0
  4. data/coverage/index.html +6201 -2451
  5. data/lib/quickeebooks.rb +16 -1
  6. data/lib/quickeebooks/online/model/bill_payment.rb +26 -0
  7. data/lib/quickeebooks/online/model/bill_payment_header.rb +24 -0
  8. data/lib/quickeebooks/online/model/bill_payment_line_item.rb +13 -0
  9. data/lib/quickeebooks/online/model/customer.rb +0 -42
  10. data/lib/quickeebooks/online/model/id.rb +9 -0
  11. data/lib/quickeebooks/online/model/tracking_class.rb +43 -0
  12. data/lib/quickeebooks/online/service/bill_payment.rb +16 -0
  13. data/lib/quickeebooks/online/service/invoice.rb +3 -3
  14. data/lib/quickeebooks/online/service/service_base.rb +4 -4
  15. data/lib/quickeebooks/online/service/tracking_class.rb +13 -0
  16. data/lib/quickeebooks/version.rb +1 -1
  17. data/lib/quickeebooks/windows/model/id.rb +8 -2
  18. data/lib/quickeebooks/windows/model/id_set.rb +24 -0
  19. data/lib/quickeebooks/windows/model/intuit_type.rb +1 -1
  20. data/lib/quickeebooks/windows/model/ng_id.rb +24 -0
  21. data/lib/quickeebooks/windows/model/ng_id_set.rb +28 -0
  22. data/lib/quickeebooks/windows/model/payment.rb +14 -0
  23. data/lib/quickeebooks/windows/model/payment_header.rb +38 -12
  24. data/lib/quickeebooks/windows/model/payment_line_item.rb +2 -1
  25. data/lib/quickeebooks/windows/model/payment_method.rb +28 -0
  26. data/lib/quickeebooks/windows/model/sync_status_param.rb +28 -0
  27. data/lib/quickeebooks/windows/model/sync_status_request.rb +31 -0
  28. data/lib/quickeebooks/windows/model/sync_status_response.rb +156 -0
  29. data/lib/quickeebooks/windows/service/payment.rb +14 -0
  30. data/lib/quickeebooks/windows/service/payment_method.rb +24 -0
  31. data/lib/quickeebooks/windows/service/sync_status.rb +34 -0
  32. data/quickeebooks.gemspec +3 -1
  33. data/spec/quickeebooks/online/bill_payment_spec.rb +18 -0
  34. data/spec/quickeebooks/online/id_spec.rb +18 -0
  35. data/spec/quickeebooks/online/services/bill_payment_spec.rb +69 -0
  36. data/spec/quickeebooks/online/services/invoice_spec.rb +12 -0
  37. data/spec/quickeebooks/online/services/tracking_class_spec.rb +99 -0
  38. data/spec/quickeebooks/online/tracking_class_spec.rb +32 -0
  39. data/spec/quickeebooks/windows/id_spec.rb +18 -0
  40. data/spec/quickeebooks/windows/services/payment_method_spec.rb +36 -0
  41. data/spec/quickeebooks/windows/services/payment_spec.rb +30 -0
  42. data/spec/quickeebooks/windows/services/sync_status_spec.rb +35 -0
  43. data/spec/spec_helper.rb +1 -2
  44. data/spec/xml/online/bill_payment.xml +20 -0
  45. data/spec/xml/online/bill_payment2.xml +20 -0
  46. data/spec/xml/online/bill_payments.xml +26 -0
  47. data/spec/xml/online/deleted_invoice.xml +2 -0
  48. data/spec/xml/online/tracking_class.xml +11 -0
  49. data/spec/xml/online/tracking_class_updated.xml +11 -0
  50. data/spec/xml/online/tracking_classes.xml +26 -0
  51. data/spec/xml/windows/payment_create_success.xml +11 -0
  52. data/spec/xml/windows/payment_methods.xml +121 -0
  53. data/spec/xml/windows/sync_status_responses.xml +186 -0
  54. data/tmp/console.rb +10 -0
  55. metadata +71 -5
  56. data/quickeebooks-0.1.7.gem +0 -0
@@ -115,6 +115,10 @@ require 'quickeebooks/online/model/employee'
115
115
  require 'quickeebooks/online/model/time_activity'
116
116
  require 'quickeebooks/online/model/time_activity_employee'
117
117
  require 'quickeebooks/online/model/time_activity_vendor'
118
+ require 'quickeebooks/online/model/bill_payment'
119
+ require 'quickeebooks/online/model/bill_payment_header'
120
+ require 'quickeebooks/online/model/bill_payment_line_item'
121
+ require 'quickeebooks/online/model/tracking_class'
118
122
 
119
123
  # Services
120
124
  require 'quickeebooks/online/service/filter'
@@ -124,6 +128,7 @@ require 'quickeebooks/online/service/company_meta_data'
124
128
  require 'quickeebooks/online/service/customer'
125
129
  require 'quickeebooks/online/service/account'
126
130
  require 'quickeebooks/online/service/bill'
131
+ require 'quickeebooks/online/service/bill_payment'
127
132
  require 'quickeebooks/online/service/invoice'
128
133
  require 'quickeebooks/online/service/item'
129
134
  require 'quickeebooks/online/service/entitlement'
@@ -134,13 +139,16 @@ require 'quickeebooks/online/service/sales_receipt'
134
139
  require 'quickeebooks/online/service/journal_entry'
135
140
  require 'quickeebooks/online/service/employee'
136
141
  require 'quickeebooks/online/service/time_activity'
137
-
142
+ require 'quickeebooks/online/service/tracking_class'
138
143
 
139
144
  #== Windows
140
145
 
141
146
  # Models
142
147
  require 'quickeebooks/windows/model/intuit_type'
143
148
  require 'quickeebooks/windows/model/id'
149
+ require 'quickeebooks/windows/model/ng_id'
150
+ require 'quickeebooks/windows/model/ng_id_set'
151
+ require 'quickeebooks/windows/model/id_set'
144
152
  require 'quickeebooks/windows/model/custom_field'
145
153
  require 'quickeebooks/windows/model/price'
146
154
  require 'quickeebooks/windows/model/customer'
@@ -163,6 +171,7 @@ require 'quickeebooks/windows/model/sales_tax'
163
171
  require 'quickeebooks/windows/model/customer_msg'
164
172
  require 'quickeebooks/windows/model/company_meta_data'
165
173
  require 'quickeebooks/windows/model/payment'
174
+ require 'quickeebooks/windows/model/payment_method'
166
175
  require 'quickeebooks/windows/model/payment_header'
167
176
  require 'quickeebooks/windows/model/payment_line_item'
168
177
  require 'quickeebooks/windows/model/payment_detail'
@@ -180,6 +189,10 @@ require 'quickeebooks/windows/model/time_activity_vendor'
180
189
  require 'quickeebooks/windows/model/job'
181
190
  require 'quickeebooks/windows/model/sync_activity_response'
182
191
  require 'quickeebooks/windows/model/sync_status_drill_down'
192
+ require 'quickeebooks/windows/model/sync_status_param'
193
+ require 'quickeebooks/windows/model/sync_status_request'
194
+ require 'quickeebooks/windows/model/sync_status_response'
195
+
183
196
 
184
197
  # Services
185
198
  require 'quickeebooks/windows/service/filter'
@@ -196,9 +209,11 @@ require 'quickeebooks/windows/service/sales_tax'
196
209
  require 'quickeebooks/windows/service/customer_msg'
197
210
  require 'quickeebooks/windows/service/company_meta_data'
198
211
  require 'quickeebooks/windows/service/payment'
212
+ require 'quickeebooks/windows/service/payment_method'
199
213
  require 'quickeebooks/windows/service/clazz'
200
214
  require 'quickeebooks/windows/service/access_token'
201
215
  require 'quickeebooks/windows/service/employee'
202
216
  require 'quickeebooks/windows/service/time_activity'
203
217
  require 'quickeebooks/windows/service/job'
204
218
  require 'quickeebooks/windows/service/sync_activity'
219
+ require 'quickeebooks/windows/service/sync_status'
@@ -0,0 +1,26 @@
1
+ # https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0400_quickbooks_online/billpayment
2
+ require 'quickeebooks/online/model/bill_payment_header'
3
+ require 'quickeebooks/online/model/bill_payment_line_item'
4
+ require 'quickeebooks/online/model/meta_data'
5
+ require 'quickeebooks/common/online_line_item_model_methods'
6
+
7
+ module Quickeebooks
8
+ module Online
9
+ module Model
10
+ class BillPayment < Quickeebooks::Online::Model::IntuitType
11
+ include ActiveModel::Validations
12
+ include OnlineLineItemModelMethods
13
+ XML_NODE = "BillPayment"
14
+ REST_RESOURCE = "bill-payment"
15
+
16
+ xml_convention :camelcase
17
+ xml_accessor :id, :from => 'Id', :as => Quickeebooks::Online::Model::Id
18
+ xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
19
+ xml_accessor :meta_data, :from => 'MetaData', :as => Quickeebooks::Online::Model::MetaData
20
+ xml_accessor :header, :from => 'Header', :as => Quickeebooks::Online::Model::BillPaymentHeader
21
+ xml_accessor :line_items, :from => 'Line', :as => [Quickeebooks::Online::Model::BillPaymentLineItem]
22
+
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ require 'time'
2
+
3
+ module Quickeebooks
4
+ module Online
5
+ module Model
6
+ class BillPaymentHeader < Quickeebooks::Online::Model::IntuitType
7
+ xml_name 'Header'
8
+ xml_accessor :doc_number, :from => 'DocNumber'
9
+ xml_accessor :txn_date, :from => 'TxnDate', :as => Time
10
+ xml_accessor :msg, :from => 'Msg'
11
+ xml_accessor :note, :from => 'Note'
12
+ xml_accessor :status, :from => 'Status'
13
+ xml_accessor :entity_id, :from => 'EntityId', :as => Quickeebooks::Online::Model::Id
14
+ xml_accessor :entity_type, :from => 'EntityType'
15
+ xml_accessor :bank_account_id, :from => 'BankAccountId', :as => Quickeebooks::Online::Model::Id
16
+ xml_accessor :to_be_printed, :from => 'ToBePrinted'
17
+
18
+ xml_accessor :cc_account_id, :from => 'CCAccountId', :as => Quickeebooks::Online::Model::Id
19
+
20
+ xml_accessor :total_amount, :from => 'TotalAmt', :as => Float
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,13 @@
1
+ module Quickeebooks
2
+ module Online
3
+ module Model
4
+ class BillPaymentLineItem < Quickeebooks::Online::Model::IntuitType
5
+ xml_name 'Line'
6
+ xml_accessor :id, :from => 'Id', :as => Integer
7
+ xml_accessor :desc, :from => 'Desc'
8
+ xml_accessor :amount, :from => 'Amount', :as => Float
9
+ xml_accessor :txn_id, :from => 'TxnId', :as => Quickeebooks::Online::Model::Id
10
+ end
11
+ end
12
+ end
13
+ end
@@ -27,48 +27,6 @@ module Quickeebooks
27
27
 
28
28
  validates_length_of :name, :minimum => 1
29
29
 
30
- def address=(address)
31
- self.addresses ||= []
32
- self.addresses << address
33
- end
34
-
35
- def billing_address
36
- select_address("Billing")
37
- end
38
-
39
- def shipping_address
40
- select_address("Shipping")
41
- end
42
-
43
- def primary_phone
44
- select_phone("Primary")
45
- end
46
-
47
- def secondary_phone
48
- select_phone("Secondary")
49
- end
50
-
51
- def mobile_phone
52
- select_phone("Mobile")
53
- end
54
-
55
- def fax
56
- select_phone("Fax")
57
- end
58
-
59
- def pager
60
- select_phone("Pager")
61
- end
62
-
63
- private
64
- def select_phone(type)
65
- phones.detect { |phone| phone.device_type == type }
66
- end
67
-
68
- def select_address(tag)
69
- addresses.detect { |address| address.tag == tag }
70
- end
71
-
72
30
  end
73
31
  end
74
32
  end
@@ -15,6 +15,15 @@ module Quickeebooks
15
15
  def initialize(value = nil)
16
16
  self.value = value
17
17
  end
18
+
19
+ def to_i
20
+ self.value.to_i
21
+ end
22
+
23
+ def to_s
24
+ self.value.to_s
25
+ end
26
+
18
27
  end
19
28
  end
20
29
  end
@@ -0,0 +1,43 @@
1
+ # https://developer.intuit.com/docs/0025_intuit_anywhere/0050_data_services/v2/0400_quickbooks_online/class
2
+ require 'quickeebooks/online/model/meta_data'
3
+
4
+ module Quickeebooks
5
+ module Online
6
+ module Model
7
+ class TrackingClass < Quickeebooks::Online::Model::IntuitType
8
+ XML_NODE = "Class"
9
+ REST_RESOURCE = "class"
10
+
11
+ include ActiveModel::Validations
12
+ xml_name 'Class'
13
+ xml_convention :camelcase
14
+ xml_accessor :id, :from => 'Id', :as => Quickeebooks::Online::Model::Id
15
+ xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
16
+ xml_accessor :meta_data, :from => 'MetaData', :as => Quickeebooks::Online::Model::MetaData
17
+ xml_accessor :name, :from => 'Name'
18
+ xml_accessor :class_parent_id, :from => 'ClassParentId', :as => Quickeebooks::Online::Model::Id
19
+
20
+ def to_xml_ns(options = {})
21
+ to_xml_inject_ns(XML_NODE, options)
22
+ end
23
+
24
+ def valid_for_update?
25
+ if sync_token.nil?
26
+ errors.add(:sync_token, "Missing required attribute SyncToken for update")
27
+ end
28
+ valid?
29
+ errors.empty?
30
+ end
31
+
32
+ def valid_for_deletion?
33
+ return false if(id.nil? || sync_token.nil?)
34
+ id.to_i > 0 && !sync_token.to_s.empty? && sync_token.to_i >= 0
35
+ end
36
+
37
+ def self.resource_for_collection
38
+ REST_RESOURCE + "es"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,16 @@
1
+ require 'quickeebooks/online/service/service_base'
2
+ require 'quickeebooks/online/model/bill_payment'
3
+ require 'quickeebooks/online/model/bill_payment_header'
4
+ require 'quickeebooks/online/model/bill_payment_line_item'
5
+ require 'quickeebooks/common/service_crud'
6
+ require 'nokogiri'
7
+
8
+ module Quickeebooks
9
+ module Online
10
+ module Service
11
+ class BillPayment < ServiceBase
12
+ include ServiceCRUD
13
+ end
14
+ end
15
+ end
16
+ end
@@ -29,7 +29,7 @@ module Quickeebooks
29
29
 
30
30
  def update(invoice)
31
31
  raise InvalidModelException.new("Missing required parameters for update") unless invoice.valid_for_update?
32
- url = "#{url_for_resource(Quickeebooks::Online::Model::Invoice.resource_for_singular)}/#{invoice.id.value}"
32
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Invoice.resource_for_singular)}/#{invoice.id}"
33
33
  xml = invoice.to_xml_ns
34
34
  response = do_http_post(url, valid_xml_document(xml))
35
35
  if response.code.to_i == 200
@@ -68,7 +68,7 @@ module Quickeebooks
68
68
  def delete(invoice)
69
69
  raise InvalidModelException.new("Missing required parameters for delete") unless invoice.valid_for_deletion?
70
70
  xml = valid_xml_document(invoice.to_xml_ns(:fields => ['Id', 'SyncToken']))
71
- url = "#{url_for_resource(Quickeebooks::Online::Model::Invoice::REST_RESOURCE)}/#{invoice.id}"
71
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Invoice::REST_RESOURCE)}/#{invoice.id.value}"
72
72
  response = do_http_post(url, xml, {:methodx => "delete"})
73
73
  response.code.to_i == 200
74
74
  end
@@ -76,4 +76,4 @@ module Quickeebooks
76
76
  end
77
77
  end
78
78
  end
79
- end
79
+ end
@@ -38,11 +38,11 @@ module Quickeebooks
38
38
  def access_token=(token)
39
39
  @oauth = token
40
40
  end
41
-
41
+
42
42
  def realm_id=(realm_id)
43
43
  @realm_id = realm_id
44
44
  end
45
-
45
+
46
46
  # uri is of the form `https://qbo.intuit.com/qbo36`
47
47
  def base_url=(uri)
48
48
  @base_uri = uri
@@ -70,7 +70,7 @@ module Quickeebooks
70
70
  end
71
71
 
72
72
  private
73
-
73
+
74
74
  def parse_xml(xml)
75
75
  Nokogiri::XML(xml)
76
76
  end
@@ -88,7 +88,7 @@ module Quickeebooks
88
88
 
89
89
  def fetch_collection(model, filters = [], page = 1, per_page = 20, sort = nil, options ={})
90
90
  raise ArgumentError, "missing model to instantiate" if model.nil?
91
-
91
+
92
92
  post_body_lines = []
93
93
 
94
94
  if filters.is_a?(Array) && filters.length > 0
@@ -0,0 +1,13 @@
1
+ require 'quickeebooks/online/service/service_base'
2
+ require 'quickeebooks/online/model/tracking_class'
3
+ require 'quickeebooks/common/service_crud'
4
+
5
+ module Quickeebooks
6
+ module Online
7
+ module Service
8
+ class TrackingClass < ServiceBase
9
+ include ServiceCRUD
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  module Quickeebooks
2
2
 
3
- VERSION = "0.1.8"
3
+ VERSION = "0.1.9"
4
4
 
5
5
  end
@@ -11,8 +11,10 @@ module Quickeebooks
11
11
  xml_accessor :idDomain, :from => '@idDomain' # Attribute with name 'idDomain'
12
12
  xml_accessor :value, :from => :content
13
13
 
14
- def initialize(value = nil)
15
- self.idDomain = DOMAIN
14
+ def initialize(value = nil, suppress_domain_attribute = false)
15
+ unless suppress_domain_attribute
16
+ self.idDomain = DOMAIN
17
+ end
16
18
  self.value = value
17
19
  end
18
20
 
@@ -20,6 +22,10 @@ module Quickeebooks
20
22
  self.value.to_i
21
23
  end
22
24
 
25
+ def to_s
26
+ self.value.to_s
27
+ end
28
+
23
29
  end
24
30
  end
25
31
  end
@@ -0,0 +1,24 @@
1
+ module Quickeebooks
2
+ module Windows
3
+ module Model
4
+ class IdSet < Quickeebooks::Windows::Model::IntuitType
5
+
6
+ xml_convention :camelcase
7
+ xml_accessor :id, :from => 'Id', :as => Quickeebooks::Windows::Model::Id
8
+
9
+ def initialize(value = nil)
10
+ self.id = Quickeebooks::Windows::Model::Id.new(value, true)
11
+ end
12
+
13
+ def to_i
14
+ id ? id.to_i : "__uninitialized__"
15
+ end
16
+
17
+ def to_s
18
+ id ? id.to_s : "__uninitialized__"
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -7,6 +7,6 @@ module Quickeebooks
7
7
  include Logging
8
8
 
9
9
  end
10
- end
10
+ end
11
11
  end
12
12
  end
@@ -0,0 +1,24 @@
1
+ module Quickeebooks
2
+ module Windows
3
+ module Model
4
+ class NgId < Quickeebooks::Windows::Model::IntuitType
5
+
6
+ xml_convention :camelcase
7
+ xml_accessor :value, :from => :content
8
+
9
+ def initialize(value = nil)
10
+ self.value = value
11
+ end
12
+
13
+ def to_i
14
+ self.value.to_i
15
+ end
16
+
17
+ def to_s
18
+ self.value.to_s
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,28 @@
1
+ require 'quickeebooks/windows/model/ng_id'
2
+
3
+ module Quickeebooks
4
+ module Windows
5
+ module Model
6
+ class NgIdSet < Quickeebooks::Windows::Model::IntuitType
7
+ xml_convention :camelcase
8
+ xml_accessor :ng_id, :from => 'NgId', :as => Quickeebooks::Windows::Model::NgId
9
+ xml_accessor :sync_token, :from => 'SyncToken'
10
+ xml_accessor :ng_object_type, :from => 'NgObjectType'
11
+ xml_accessor :party_id, :from => 'PartyId'
12
+
13
+ def initialize(value = nil)
14
+ self.ng_id = Quickeebooks::Windows::Model::NgId.new(value)
15
+ end
16
+
17
+ def to_i
18
+ self.ng_id ? self.ng_id.to_i : "__uninitialized__"
19
+ end
20
+
21
+ def to_s
22
+ self.ng_id ? self.ng_id.to_s : "__uninitialized__"
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end