quickeebooks 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +18 -18
- data/README.md +9 -2
- data/Rakefile +1 -1
- data/lib/quickeebooks.rb +37 -1
- data/lib/quickeebooks/online/model/account.rb +12 -1
- data/lib/quickeebooks/online/model/company_meta_data.rb +30 -0
- data/lib/quickeebooks/online/model/credit_card.rb +14 -0
- data/lib/quickeebooks/online/model/credit_charge_info.rb +17 -0
- data/lib/quickeebooks/online/model/credit_charge_response.rb +13 -0
- data/lib/quickeebooks/online/model/customer.rb +13 -4
- data/lib/quickeebooks/online/model/id.rb +21 -0
- data/lib/quickeebooks/online/model/intuit_type.rb +17 -0
- data/lib/quickeebooks/online/model/invoice.rb +25 -2
- data/lib/quickeebooks/online/model/invoice_header.rb +4 -2
- data/lib/quickeebooks/online/model/invoice_line_item.rb +7 -6
- data/lib/quickeebooks/online/model/item.rb +8 -2
- data/lib/quickeebooks/online/model/payment.rb +58 -0
- data/lib/quickeebooks/online/model/payment_detail.rb +12 -0
- data/lib/quickeebooks/online/model/payment_header.rb +24 -0
- data/lib/quickeebooks/online/model/payment_line_item.rb +15 -0
- data/lib/quickeebooks/online/service/account.rb +5 -5
- data/lib/quickeebooks/online/service/company_meta_data.rb +24 -0
- data/lib/quickeebooks/online/service/customer.rb +5 -5
- data/lib/quickeebooks/online/service/invoice.rb +39 -10
- data/lib/quickeebooks/online/service/item.rb +5 -5
- data/lib/quickeebooks/online/service/payment.rb +63 -0
- data/lib/quickeebooks/online/service/service_base.rb +62 -31
- data/lib/quickeebooks/version.rb +1 -1
- data/lib/quickeebooks/windows/model/account.rb +7 -0
- data/lib/quickeebooks/windows/model/address.rb +8 -0
- data/lib/quickeebooks/windows/model/custom_field.rb +1 -1
- data/lib/quickeebooks/windows/model/customer.rb +12 -1
- data/lib/quickeebooks/windows/model/customer_msg.rb +31 -0
- data/lib/quickeebooks/windows/model/error.rb +19 -0
- data/lib/quickeebooks/windows/model/external_key.rb +21 -0
- data/lib/quickeebooks/windows/model/id.rb +21 -0
- data/lib/quickeebooks/windows/model/invoice.rb +10 -2
- data/lib/quickeebooks/windows/model/invoice_header.rb +13 -15
- data/lib/quickeebooks/windows/model/invoice_line_item.rb +7 -7
- data/lib/quickeebooks/windows/model/item.rb +6 -3
- data/lib/quickeebooks/windows/model/object_ref.rb +14 -0
- data/lib/quickeebooks/windows/model/other_name.rb +16 -0
- data/lib/quickeebooks/windows/model/other_name_id.rb +21 -0
- data/lib/quickeebooks/windows/model/rest_response.rb +34 -0
- data/lib/quickeebooks/windows/model/sales_rep.rb +40 -0
- data/lib/quickeebooks/windows/model/sales_tax.rb +33 -0
- data/lib/quickeebooks/windows/model/ship_method.rb +31 -0
- data/lib/quickeebooks/windows/model/success.rb +17 -0
- data/lib/quickeebooks/windows/model/vendor.rb +16 -0
- data/lib/quickeebooks/windows/model/vendor_id.rb +21 -0
- data/lib/quickeebooks/windows/service/customer.rb +1 -1
- data/lib/quickeebooks/windows/service/customer_msg.rb +15 -0
- data/lib/quickeebooks/windows/service/invoice.rb +19 -1
- data/lib/quickeebooks/windows/service/item.rb +1 -1
- data/lib/quickeebooks/windows/service/sales_rep.rb +16 -0
- data/lib/quickeebooks/windows/service/sales_tax.rb +15 -0
- data/lib/quickeebooks/windows/service/service_base.rb +47 -8
- data/lib/quickeebooks/windows/service/ship_method.rb +15 -0
- data/quickeebooks.gemspec +2 -1
- data/spec/quickeebooks/online/company_meta_data_spec.rb +30 -0
- data/spec/quickeebooks/online/invoice_spec.rb +2 -2
- data/spec/quickeebooks/online/payment_spec.rb +23 -0
- data/spec/quickeebooks/online/services/account_spec.rb +28 -20
- data/spec/quickeebooks/online/services/company_meta_data_spec.rb +40 -0
- data/spec/quickeebooks/online/services/customer_spec.rb +32 -28
- data/spec/quickeebooks/online/services/invoice_spec.rb +52 -0
- data/spec/quickeebooks/online/services/service_base_spec.rb +17 -7
- data/spec/quickeebooks/windows/services/customer_spec.rb +49 -0
- data/spec/quickeebooks/windows/services/invoice_spec.rb +133 -0
- data/spec/quickeebooks/windows/services/sales_rep_spec.rb +47 -0
- data/spec/quickeebooks/windows/services/sales_taxes_spec.rb +41 -0
- data/spec/quickeebooks/windows/services/ship_method_spec.rb +38 -0
- data/spec/quickeebooks_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/xml/online/api_error.xml +6 -0
- data/spec/xml/online/company_meta_data.xml +37 -0
- data/spec/xml/online/determine_base_url.xml +10 -0
- data/spec/xml/online/invoice.xml +26 -31
- data/spec/xml/online/payment.xml +24 -0
- data/spec/xml/windows/invoice_success_create.xml +11 -0
- data/spec/xml/windows/invoices.xml +436 -0
- data/spec/xml/windows/sales_reps.xml +204 -0
- data/spec/xml/windows/sales_taxes.xml +34 -0
- data/spec/xml/windows/ship_methods.xml +139 -0
- metadata +80 -22
data/Gemfile.lock
CHANGED
@@ -1,44 +1,44 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
quickeebooks (0.0.
|
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.
|
14
|
-
activesupport (= 3.2.
|
14
|
+
activemodel (3.2.6)
|
15
|
+
activesupport (= 3.2.6)
|
15
16
|
builder (~> 3.0.0)
|
16
|
-
activesupport (3.2.
|
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.
|
24
|
-
nokogiri (1.5.
|
25
|
-
oauth (0.4.
|
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
|
33
|
-
rspec-core (~> 2.0
|
34
|
-
rspec-expectations (~> 2.0
|
35
|
-
rspec-mocks (~> 2.0
|
36
|
-
rspec-core (2.0
|
37
|
-
rspec-expectations (2.
|
38
|
-
diff-lcs (
|
39
|
-
rspec-mocks (2.
|
40
|
-
|
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 (
|
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
|
-
|
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
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 =>
|
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
|