quickeebooks 0.0.3 → 0.0.4

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 (85) hide show
  1. data/Gemfile.lock +18 -18
  2. data/README.md +9 -2
  3. data/Rakefile +1 -1
  4. data/lib/quickeebooks.rb +37 -1
  5. data/lib/quickeebooks/online/model/account.rb +12 -1
  6. data/lib/quickeebooks/online/model/company_meta_data.rb +30 -0
  7. data/lib/quickeebooks/online/model/credit_card.rb +14 -0
  8. data/lib/quickeebooks/online/model/credit_charge_info.rb +17 -0
  9. data/lib/quickeebooks/online/model/credit_charge_response.rb +13 -0
  10. data/lib/quickeebooks/online/model/customer.rb +13 -4
  11. data/lib/quickeebooks/online/model/id.rb +21 -0
  12. data/lib/quickeebooks/online/model/intuit_type.rb +17 -0
  13. data/lib/quickeebooks/online/model/invoice.rb +25 -2
  14. data/lib/quickeebooks/online/model/invoice_header.rb +4 -2
  15. data/lib/quickeebooks/online/model/invoice_line_item.rb +7 -6
  16. data/lib/quickeebooks/online/model/item.rb +8 -2
  17. data/lib/quickeebooks/online/model/payment.rb +58 -0
  18. data/lib/quickeebooks/online/model/payment_detail.rb +12 -0
  19. data/lib/quickeebooks/online/model/payment_header.rb +24 -0
  20. data/lib/quickeebooks/online/model/payment_line_item.rb +15 -0
  21. data/lib/quickeebooks/online/service/account.rb +5 -5
  22. data/lib/quickeebooks/online/service/company_meta_data.rb +24 -0
  23. data/lib/quickeebooks/online/service/customer.rb +5 -5
  24. data/lib/quickeebooks/online/service/invoice.rb +39 -10
  25. data/lib/quickeebooks/online/service/item.rb +5 -5
  26. data/lib/quickeebooks/online/service/payment.rb +63 -0
  27. data/lib/quickeebooks/online/service/service_base.rb +62 -31
  28. data/lib/quickeebooks/version.rb +1 -1
  29. data/lib/quickeebooks/windows/model/account.rb +7 -0
  30. data/lib/quickeebooks/windows/model/address.rb +8 -0
  31. data/lib/quickeebooks/windows/model/custom_field.rb +1 -1
  32. data/lib/quickeebooks/windows/model/customer.rb +12 -1
  33. data/lib/quickeebooks/windows/model/customer_msg.rb +31 -0
  34. data/lib/quickeebooks/windows/model/error.rb +19 -0
  35. data/lib/quickeebooks/windows/model/external_key.rb +21 -0
  36. data/lib/quickeebooks/windows/model/id.rb +21 -0
  37. data/lib/quickeebooks/windows/model/invoice.rb +10 -2
  38. data/lib/quickeebooks/windows/model/invoice_header.rb +13 -15
  39. data/lib/quickeebooks/windows/model/invoice_line_item.rb +7 -7
  40. data/lib/quickeebooks/windows/model/item.rb +6 -3
  41. data/lib/quickeebooks/windows/model/object_ref.rb +14 -0
  42. data/lib/quickeebooks/windows/model/other_name.rb +16 -0
  43. data/lib/quickeebooks/windows/model/other_name_id.rb +21 -0
  44. data/lib/quickeebooks/windows/model/rest_response.rb +34 -0
  45. data/lib/quickeebooks/windows/model/sales_rep.rb +40 -0
  46. data/lib/quickeebooks/windows/model/sales_tax.rb +33 -0
  47. data/lib/quickeebooks/windows/model/ship_method.rb +31 -0
  48. data/lib/quickeebooks/windows/model/success.rb +17 -0
  49. data/lib/quickeebooks/windows/model/vendor.rb +16 -0
  50. data/lib/quickeebooks/windows/model/vendor_id.rb +21 -0
  51. data/lib/quickeebooks/windows/service/customer.rb +1 -1
  52. data/lib/quickeebooks/windows/service/customer_msg.rb +15 -0
  53. data/lib/quickeebooks/windows/service/invoice.rb +19 -1
  54. data/lib/quickeebooks/windows/service/item.rb +1 -1
  55. data/lib/quickeebooks/windows/service/sales_rep.rb +16 -0
  56. data/lib/quickeebooks/windows/service/sales_tax.rb +15 -0
  57. data/lib/quickeebooks/windows/service/service_base.rb +47 -8
  58. data/lib/quickeebooks/windows/service/ship_method.rb +15 -0
  59. data/quickeebooks.gemspec +2 -1
  60. data/spec/quickeebooks/online/company_meta_data_spec.rb +30 -0
  61. data/spec/quickeebooks/online/invoice_spec.rb +2 -2
  62. data/spec/quickeebooks/online/payment_spec.rb +23 -0
  63. data/spec/quickeebooks/online/services/account_spec.rb +28 -20
  64. data/spec/quickeebooks/online/services/company_meta_data_spec.rb +40 -0
  65. data/spec/quickeebooks/online/services/customer_spec.rb +32 -28
  66. data/spec/quickeebooks/online/services/invoice_spec.rb +52 -0
  67. data/spec/quickeebooks/online/services/service_base_spec.rb +17 -7
  68. data/spec/quickeebooks/windows/services/customer_spec.rb +49 -0
  69. data/spec/quickeebooks/windows/services/invoice_spec.rb +133 -0
  70. data/spec/quickeebooks/windows/services/sales_rep_spec.rb +47 -0
  71. data/spec/quickeebooks/windows/services/sales_taxes_spec.rb +41 -0
  72. data/spec/quickeebooks/windows/services/ship_method_spec.rb +38 -0
  73. data/spec/quickeebooks_spec.rb +1 -1
  74. data/spec/spec_helper.rb +1 -1
  75. data/spec/xml/online/api_error.xml +6 -0
  76. data/spec/xml/online/company_meta_data.xml +37 -0
  77. data/spec/xml/online/determine_base_url.xml +10 -0
  78. data/spec/xml/online/invoice.xml +26 -31
  79. data/spec/xml/online/payment.xml +24 -0
  80. data/spec/xml/windows/invoice_success_create.xml +11 -0
  81. data/spec/xml/windows/invoices.xml +436 -0
  82. data/spec/xml/windows/sales_reps.xml +204 -0
  83. data/spec/xml/windows/sales_taxes.xml +34 -0
  84. data/spec/xml/windows/ship_methods.xml +139 -0
  85. metadata +80 -22
data/Gemfile.lock CHANGED
@@ -1,44 +1,44 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- quickeebooks (0.0.1)
4
+ quickeebooks (0.0.4)
5
5
  activemodel
6
6
  nokogiri
7
7
  oauth
8
8
  roxml
9
+ uuidtools
9
10
 
10
11
  GEM
11
12
  remote: http://rubygems.org/
12
13
  specs:
13
- activemodel (3.2.1)
14
- activesupport (= 3.2.1)
14
+ activemodel (3.2.6)
15
+ activesupport (= 3.2.6)
15
16
  builder (~> 3.0.0)
16
- activesupport (3.2.1)
17
+ activesupport (3.2.6)
17
18
  i18n (~> 0.6)
18
19
  multi_json (~> 1.0)
19
20
  builder (3.0.0)
20
21
  diff-lcs (1.1.3)
21
22
  fakeweb (1.3.0)
22
23
  i18n (0.6.0)
23
- multi_json (1.1.0)
24
- nokogiri (1.5.0)
25
- oauth (0.4.5)
24
+ multi_json (1.3.6)
25
+ nokogiri (1.5.5)
26
+ oauth (0.4.6)
26
27
  rake (0.9.2.2)
27
28
  rcov (0.9.11)
28
29
  roxml (3.3.1)
29
30
  activesupport (>= 2.3.0)
30
31
  nokogiri (>= 1.3.3)
31
32
  rr (1.0.4)
32
- rspec (2.0.1)
33
- rspec-core (~> 2.0.1)
34
- rspec-expectations (~> 2.0.1)
35
- rspec-mocks (~> 2.0.1)
36
- rspec-core (2.0.1)
37
- rspec-expectations (2.0.1)
38
- diff-lcs (>= 1.1.2)
39
- rspec-mocks (2.0.1)
40
- rspec-core (~> 2.0.1)
41
- rspec-expectations (~> 2.0.1)
33
+ rspec (2.11.0)
34
+ rspec-core (~> 2.11.0)
35
+ rspec-expectations (~> 2.11.0)
36
+ rspec-mocks (~> 2.11.0)
37
+ rspec-core (2.11.0)
38
+ rspec-expectations (2.11.1)
39
+ diff-lcs (~> 1.1.3)
40
+ rspec-mocks (2.11.1)
41
+ uuidtools (2.1.2)
42
42
 
43
43
  PLATFORMS
44
44
  ruby
@@ -49,4 +49,4 @@ DEPENDENCIES
49
49
  rake
50
50
  rcov (~> 0.9.8)
51
51
  rr (~> 1.0.2)
52
- rspec (~> 2.0.0)
52
+ rspec (= 2.11.0)
data/README.md CHANGED
@@ -58,6 +58,7 @@ customer_service.list
58
58
  # Instantiate a Windows API
59
59
  customer_service = Quickeebooks::Windows::Service::Customer.new(oauth_client, realm_id)
60
60
  customer_service.list
61
+ ```
61
62
 
62
63
  All of the documentation below is geared towards the Online flavor but unless noted one should be able to replace it with Windows.
63
64
 
@@ -284,10 +285,16 @@ Current Services:
284
285
  The `Quickeebooks::Online::Service::Invoice` has the ability to retrieve an invoice as a PDF document:
285
286
 
286
287
  ```ruby
287
- invoice_as_pdf(invoice_id)
288
+ invoice_as_pdf(invoice_id, destination_file_name)
289
+ ```
290
+
291
+ Usage: Download invoice #89 and store it at `/tmp/invoice.pdf`:
292
+
293
+ ```ruby
294
+ invoice_as_pdf(89, "/tmp/invoice.pdf")
288
295
  ```
289
296
 
290
- The `invoice_as_pdf` method returns a string representing the path to the PDF on the local disk. The method uses `ENV['TMPDIR']` to write the file to a temporary storage location. _Note:_ it is up to you the caller to remove or clean up the file when you are done.
297
+ _Note:_ it is up to you the caller to remove or clean up the file when you are done.
291
298
 
292
299
  ## Author
293
300
 
data/Rakefile CHANGED
@@ -12,6 +12,6 @@ require "quickeebooks"
12
12
  task :default => :spec
13
13
 
14
14
  desc "Run all specs"
15
- Rspec::Core::RakeTask.new(:spec) do |t|
15
+ RSpec::Core::RakeTask.new(:spec) do |t|
16
16
  t.pattern = 'spec/**/*_spec.rb'
17
17
  end
data/lib/quickeebooks.rb CHANGED
@@ -32,7 +32,7 @@ module ROXML
32
32
  params[:fields] ||= []
33
33
  params.reverse_merge!(:name => self.class.tag_name, :namespace => self.class.roxml_namespace)
34
34
  params[:namespace] = nil if ['*', 'xmlns'].include?(params[:namespace])
35
- XML.new_node([params[:namespace], params[:name]].compact.join(':')).tap do |root|
35
+ node = XML.new_node([params[:namespace], params[:name]].compact.join(':')).tap do |root|
36
36
  refs = (self.roxml_references.present? \
37
37
  ? self.roxml_references \
38
38
  : self.class.roxml_attrs.map {|attr| attr.to_ref(self) })
@@ -55,6 +55,7 @@ end
55
55
 
56
56
  # Models
57
57
  require 'quickeebooks/online/model/intuit_type'
58
+ require 'quickeebooks/online/model/company_meta_data'
58
59
  require 'quickeebooks/online/model/customer'
59
60
  require 'quickeebooks/online/model/account'
60
61
  require 'quickeebooks/online/model/invoice'
@@ -65,25 +66,60 @@ require 'quickeebooks/online/model/unit_price'
65
66
  require 'quickeebooks/online/model/meta_data'
66
67
  require 'quickeebooks/online/model/price'
67
68
  require 'quickeebooks/online/model/account_reference'
69
+ require 'quickeebooks/online/model/payment'
70
+ require 'quickeebooks/online/model/payment_header'
71
+ require 'quickeebooks/online/model/payment_line_item'
72
+ require 'quickeebooks/online/model/payment_detail'
73
+ require 'quickeebooks/online/model/credit_card'
74
+ require 'quickeebooks/online/model/credit_charge_info'
75
+ require 'quickeebooks/online/model/credit_charge_response'
68
76
 
69
77
  # Services
70
78
  require 'quickeebooks/online/service/filter'
71
79
  require 'quickeebooks/online/service/pagination'
72
80
  require 'quickeebooks/online/service/sort'
81
+ require 'quickeebooks/online/service/company_meta_data'
73
82
  require 'quickeebooks/online/service/customer'
74
83
  require 'quickeebooks/online/service/account'
75
84
  require 'quickeebooks/online/service/invoice'
76
85
  require 'quickeebooks/online/service/item'
77
86
  require 'quickeebooks/online/service/entitlement'
87
+ require 'quickeebooks/online/service/payment'
78
88
 
79
89
  #== Windows
90
+
91
+ # Models
80
92
  require 'quickeebooks/windows/model/intuit_type'
93
+ require 'quickeebooks/windows/model/id'
81
94
  require 'quickeebooks/windows/model/custom_field'
82
95
  require 'quickeebooks/windows/model/price'
83
96
  require 'quickeebooks/windows/model/customer'
84
97
  require 'quickeebooks/windows/model/account'
85
98
  require 'quickeebooks/windows/model/item'
99
+ require 'quickeebooks/windows/model/invoice'
100
+ require 'quickeebooks/windows/model/invoice_header'
101
+ require 'quickeebooks/windows/model/invoice_line_item'
102
+ require 'quickeebooks/windows/model/address'
103
+ require 'quickeebooks/windows/model/rest_response'
104
+ require 'quickeebooks/windows/model/success'
105
+ require 'quickeebooks/windows/model/error'
106
+ require 'quickeebooks/windows/model/object_ref'
107
+ require 'quickeebooks/windows/model/sales_rep'
108
+ require 'quickeebooks/windows/model/vendor'
109
+ require 'quickeebooks/windows/model/vendor_id'
110
+ require 'quickeebooks/windows/model/external_key'
111
+ require 'quickeebooks/windows/model/ship_method'
112
+ require 'quickeebooks/windows/model/sales_tax'
113
+ require 'quickeebooks/windows/model/customer_msg'
114
+
115
+
116
+ # Services
86
117
  require 'quickeebooks/windows/service/service_base'
87
118
  require 'quickeebooks/windows/service/account'
88
119
  require 'quickeebooks/windows/service/customer'
89
120
  require 'quickeebooks/windows/service/item'
121
+ require 'quickeebooks/windows/service/invoice'
122
+ require 'quickeebooks/windows/service/sales_rep'
123
+ require 'quickeebooks/windows/service/ship_method'
124
+ require 'quickeebooks/windows/service/sales_tax'
125
+ require 'quickeebooks/windows/service/customer_msg'
@@ -1,12 +1,17 @@
1
1
  require "quickeebooks"
2
2
  require "quickeebooks/online/model/meta_data"
3
3
  require "quickeebooks/online/model/account_detail_type"
4
+ require "quickeebooks/online/model/id"
4
5
 
5
6
  module Quickeebooks
6
7
  module Online
7
8
  module Model
8
9
  class Account < Quickeebooks::Online::Model::IntuitType
9
10
  include ActiveModel::Validations
11
+
12
+ REST_RESOURCE = "account"
13
+ XML_NODE = "Account"
14
+
10
15
  xml_convention :camelcase
11
16
  xml_accessor :id, :from => 'Id'
12
17
  xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
@@ -15,7 +20,7 @@ module Quickeebooks
15
20
  xml_accessor :desc, :from => 'Desc'
16
21
  xml_accessor :sub_type, :from => 'Subtype'
17
22
  xml_accessor :acct_num, :from => 'AcctNum'
18
- xml_accessor :account_parent_id, :from => 'AccountParentId'
23
+ xml_accessor :account_parent_id, :from => 'AccountParentId', :as => Quickeebooks::Online::Model::Id
19
24
  xml_accessor :current_balance, :from => 'CurrentBalance', :as => Float
20
25
  xml_accessor :opening_balance_date, :from => 'OpeningBalanceDate', :as => Date
21
26
 
@@ -25,6 +30,7 @@ module Quickeebooks
25
30
  def to_xml_ns(options = {})
26
31
  to_xml_inject_ns('Account', options)
27
32
  end
33
+
28
34
 
29
35
  def valid_for_update?
30
36
  if sync_token.nil?
@@ -39,6 +45,11 @@ module Quickeebooks
39
45
  return false if(id.nil? || sync_token.nil?)
40
46
  id.to_i > 0 && !sync_token.to_s.empty? && sync_token.to_i >= 0
41
47
  end
48
+
49
+ #== Class methods
50
+ def self.resource_for_collection
51
+ "#{self::REST_RESOURCE}s"
52
+ end
42
53
 
43
54
  end
44
55
  end
@@ -0,0 +1,30 @@
1
+ # see https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0050_Data_Services/0400_QuickBooks_Online/CompanyMetaData
2
+ require "quickeebooks"
3
+ require "quickeebooks/online/model/address"
4
+ require "quickeebooks/online/model/phone"
5
+ require "quickeebooks/online/model/email"
6
+
7
+ module Quickeebooks
8
+ module Online
9
+ module Model
10
+ class CompanyMetaData < Quickeebooks::Online::Model::IntuitType
11
+ include ActiveModel::Validations
12
+
13
+ REST_RESOURCE = "companymetadata"
14
+
15
+ xml_convention :camelcase
16
+ xml_accessor :external_realm_id, :from => 'ExternalRealmId'
17
+ xml_accessor :registered_company_name, :from => 'QBNRegisteredCompanyName'
18
+ xml_accessor :industry_type, :from => 'IndustryType'
19
+ xml_accessor :addresses, :from => 'Address', :as => [Quickeebooks::Online::Model::Address]
20
+ xml_accessor :legal_address, :from => 'LegalAddress', :as => Quickeebooks::Online::Model::Address
21
+ xml_accessor :emails, :from => 'Email', :as => [Quickeebooks::Online::Model::Email]
22
+ xml_accessor :phone, :from => 'Phone', :as => Quickeebooks::Online::Model::Phone
23
+
24
+ def to_xml_ns(options = {})
25
+ to_xml_inject_ns('CompanyMetaData', options)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,14 @@
1
+ require 'quickeebooks/online/model/credit_charge_info'
2
+ require 'quickeebooks/online/model/credit_charge_response'
3
+
4
+ module Quickeebooks
5
+ module Online
6
+ module Model
7
+ class CreditCard < Quickeebooks::Online::Model::IntuitType
8
+ xml_name 'CreditCard'
9
+ xml_accessor :credit_charge_info, :from => 'CreditChargeInfo', :as => Quickeebooks::Online::Model::CreditChargeInfo
10
+ xml_accessor :credit_charge_response, :from => 'CreditChargeResponse', :as => Quickeebooks::Online::Model::CreditChargeResponse
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ module Quickeebooks
2
+ module Online
3
+ module Model
4
+ class CreditChargeInfo < Quickeebooks::Online::Model::IntuitType
5
+ xml_name 'CreditChargeInfo'
6
+ xml_accessor :number, :from => 'Number'
7
+ xml_accessor :type, :from => 'Type'
8
+ xml_accessor :name_on_acct, :from => 'NameOnAcct'
9
+ xml_accessor :cc_expiration_month, :from => 'CcExpireMn', :as => Integer
10
+ xml_accessor :cc_expiration_year, :from => 'CcExpireYr', :as => Integer
11
+ xml_accessor :billing_address_street, :from => 'BillAddrStreet'
12
+ xml_accessor :zip_code, :from => 'ZipCode'
13
+ xml_accessor :cvv, :from => 'Ccv'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ module Quickeebooks
2
+ module Online
3
+ module Model
4
+ class CreditChargeResponse < Quickeebooks::Online::Model::IntuitType
5
+ xml_name 'CreditChargeResponse'
6
+ xml_accessor :cc_transaction_id, :from => 'CCTransId'
7
+ xml_accessor :status, :from => 'Status'
8
+ xml_accessor :auth_code, :from => 'AuthCode'
9
+ xml_accessor :avs_street, :from => 'AvsStreet'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,4 +1,5 @@
1
1
  require "quickeebooks"
2
+ require "quickeebooks/online/model/id"
2
3
  require "quickeebooks/online/model/meta_data"
3
4
  require "quickeebooks/online/model/address"
4
5
  require "quickeebooks/online/model/phone"
@@ -13,9 +14,12 @@ module Quickeebooks
13
14
  module Model
14
15
  class Customer < Quickeebooks::Online::Model::IntuitType
15
16
  include ActiveModel::Validations
17
+
18
+ XML_NODE = "Customer"
19
+ REST_RESOURCE = "customer"
16
20
 
17
21
  xml_convention :camelcase
18
- xml_accessor :id, :from => 'Id'
22
+ xml_accessor :id, :from => 'Id', :as => Quickeebooks::Online::Model::Id
19
23
  xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
20
24
  xml_accessor :name, :from => 'Name'
21
25
  xml_accessor :meta_data, :from => 'MetaData', :as => Quickeebooks::Online::Model::MetaData
@@ -32,8 +36,8 @@ module Quickeebooks
32
36
  xml_accessor :tax_identifier, :from => 'TaxIdentifier'
33
37
  xml_accessor :notes, :from => 'Notes', :as => [Quickeebooks::Online::Model::Note]
34
38
  xml_accessor :custom_fields, :from => 'CustomField', :as => [Quickeebooks::Online::Model::CustomerCustomField]
35
- xml_accessor :sales_term_id, :from => 'SalesTermId'
36
- xml_accessor :paymethod_method_id, :from => 'PaymentMethodId'
39
+ xml_accessor :sales_term_id, :from => 'SalesTermId', :as => Quickeebooks::Online::Model::Id
40
+ xml_accessor :paymethod_method_id, :from => 'PaymentMethodId', :as => Quickeebooks::Online::Model::Id
37
41
  xml_accessor :open_balance, :from => 'OpenBalance', :as => Quickeebooks::Online::Model::OpenBalance
38
42
 
39
43
  validates_length_of :name, :minimum => 1
@@ -56,9 +60,14 @@ module Quickeebooks
56
60
  # To delete an account Intuit requires we provide Id and SyncToken fields
57
61
  def valid_for_deletion?
58
62
  return false if(id.nil? || sync_token.nil?)
59
- id.to_i > 0 && !sync_token.to_s.empty? && sync_token.to_i >= 0
63
+ id.value.to_i > 0 && !sync_token.to_s.empty? && sync_token.to_i >= 0
60
64
  end
61
65
 
66
+ #== Class methods
67
+ def self.resource_for_collection
68
+ "#{self::REST_RESOURCE}s"
69
+ end
70
+
62
71
  end
63
72
  end
64
73
  end
@@ -0,0 +1,21 @@
1
+ require "quickeebooks"
2
+
3
+ module Quickeebooks
4
+ module Online
5
+ module Model
6
+ class Id < Quickeebooks::Online::Model::IntuitType
7
+
8
+
9
+ DOMAIN = "QBO"
10
+
11
+ xml_convention :camelcase
12
+ xml_accessor :idDomain, :from => '@idDomain' # Attribute with name 'idDomain'
13
+ xml_accessor :value, :from => :content
14
+
15
+ def initialize(value = nil)
16
+ self.value = value
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -3,7 +3,24 @@ module Quickeebooks
3
3
  module Model
4
4
  class IntuitType
5
5
  include ROXML
6
+
7
+ # These can be over-ridden in each model object as needed
8
+ # For the most part a model object has a single resource for all operations
9
+ # E.g. <baseURL>/resource/invoice/v2/<realmID>
10
+ # But for the Account object its collection is plural while all other operations are singular
11
+ # E.g.
12
+ # Fetch all accounts: <baseURL>/resource/accounts/v2/<realmID>
13
+ # vs
14
+ # Create an account, fetch an account, etc: <baseURL>/resource/account/v2/<realmID>
15
+ def self.resource_for_collection
16
+ self::REST_RESOURCE
17
+ end
18
+
19
+ def self.resource_for_singular
20
+ self::REST_RESOURCE
21
+ end
6
22
 
23
+
7
24
  private
8
25
 
9
26
  # ROXML doesnt insert the namespaces into generated XML so we need to do it ourselves
@@ -1,5 +1,6 @@
1
1
  # https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0050_Data_Services/0400_QuickBooks_Online/Invoice
2
2
 
3
+ require 'quickeebooks/online/model/id'
3
4
  require 'quickeebooks/online/model/invoice_header'
4
5
  require 'quickeebooks/online/model/invoice_line_item'
5
6
  require 'quickeebooks/online/model/address'
@@ -11,15 +12,19 @@ module Quickeebooks
11
12
  module Model
12
13
  class Invoice < Quickeebooks::Online::Model::IntuitType
13
14
  include ActiveModel::Validations
15
+
16
+ XML_NODE = "Invoice"
17
+ REST_RESOURCE = "invoice"
18
+
14
19
  xml_convention :camelcase
15
- xml_accessor :id, :from => 'Id', :as => Integer
20
+ xml_accessor :id, :from => 'Id', :as => Quickeebooks::Online::Model::Id
16
21
  xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
17
22
  xml_accessor :meta_data, :from => 'MetaData', :as => Quickeebooks::Online::Model::MetaData
18
23
  xml_accessor :header, :from => 'Header', :as => Quickeebooks::Online::Model::InvoiceHeader
19
24
  xml_accessor :bill_address, :from => 'BillAddr', :as => Quickeebooks::Online::Model::Address
20
25
  xml_accessor :ship_address, :from => 'ShipAddr', :as => Quickeebooks::Online::Model::Address
21
26
  xml_accessor :bill_email, :from => 'BillEmail'
22
- xml_accessor :ship_method_id, :from => 'ShipMethodId'
27
+ xml_accessor :ship_method_id, :from => 'ShipMethodId', :as => Quickeebooks::Online::Model::Id
23
28
  xml_accessor :ship_method_name, :from => 'ShipMethodName'
24
29
  xml_accessor :balance, :from => 'Balance', :as => Float
25
30
  xml_accessor :discount_amount, :from => 'DiscountAmt', :as => Float
@@ -34,6 +39,24 @@ module Quickeebooks
34
39
  ensure_line_items_initialization
35
40
  end
36
41
 
42
+ def valid_for_update?
43
+ errors.empty?
44
+ end
45
+
46
+ def valid_for_deletion?
47
+ return false if(id.nil? || sync_token.nil?)
48
+ id.to_i > 0 && !sync_token.to_s.empty? && sync_token.to_i >= 0
49
+ end
50
+
51
+ def to_xml_ns(options = {})
52
+ to_xml_inject_ns(XML_NODE, options)
53
+ end
54
+
55
+ #== Class methods
56
+ def self.resource_for_collection
57
+ "#{self::REST_RESOURCE}s"
58
+ end
59
+
37
60
  private
38
61
 
39
62
  def after_parse