quickeebooks 0.0.3 → 0.0.4

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