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
@@ -12,9 +12,12 @@ module Quickeebooks
12
12
 
13
13
  XML_COLLECTION_NODE = 'Items'
14
14
  XML_NODE = 'Item'
15
+
16
+ # https://services.intuit.com/sb/item/v2/<realmID>
17
+ REST_RESOURCE = "item"
15
18
 
16
19
  xml_name 'Item'
17
- xml_accessor :id, :from => 'Id'
20
+ xml_accessor :id, :from => 'Id', :as => Quickeebooks::Windows::Model::Id
18
21
  xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
19
22
  xml_accessor :external_key, :from => 'ExternalKey'
20
23
  xml_accessor :synchronized, :from => 'Synchronized'
@@ -22,7 +25,7 @@ module Quickeebooks
22
25
  xml_accessor :custom_fields, :from => 'CustomField', :as => [Quickeebooks::Windows::Model::CustomField]
23
26
  xml_accessor :draft
24
27
  xml_accessor :object_state, :from => 'ObjectState'
25
- xml_accessor :item_parent_id, :from => 'ItemParentId'
28
+ xml_accessor :item_parent_id, :from => 'ItemParentId', :as => Quickeebooks::Windows::Model::Id
26
29
  xml_accessor :item_parent_name, :from => 'ItemParentName'
27
30
  xml_accessor :name, :from => 'Name'
28
31
  xml_accessor :desc, :from => 'Desc'
@@ -31,7 +34,7 @@ module Quickeebooks
31
34
  xml_accessor :active
32
35
  xml_accessor :rate_percent, :from => 'RatePercent'
33
36
  xml_accessor :type, :from => 'Type'
34
- xml_accessor :uomid, :from => 'UOMId'
37
+ xml_accessor :uomid, :from => 'UOMId', :as => Quickeebooks::Windows::Model::Id
35
38
  xml_accessor :uomabbrv, :from => 'UOMAbbrv'
36
39
  xml_accessor :account_reference, :from => 'IncomeAccountRef', :as => Quickeebooks::Windows::Model::AccountReference
37
40
  xml_accessor :purchase_desc, :from => 'PurchaseDesc'
@@ -0,0 +1,14 @@
1
+ module Quickeebooks
2
+ module Windows
3
+ module Model
4
+ class ObjectRef < Quickeebooks::Windows::Model::IntuitType
5
+
6
+ xml_convention :camelcase
7
+ xml_accessor :id, :as => Quickeebooks::Windows::Model::Id
8
+ xml_accessor :sync_token, :as => Integer
9
+ xml_accessor :last_updated_time, :as => Time
10
+
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ require "quickeebooks"
2
+ require 'quickeebooks/windows/model/other_name_id'
3
+
4
+ module Quickeebooks
5
+ module Windows
6
+ module Model
7
+ class OtherName < Quickeebooks::Windows::Model::IntuitType
8
+
9
+ xml_convention :camelcase
10
+ xml_accessor :other_name_id, :from => 'OtherNameId', :as => Quickeebooks::Windows::Model::OtherNameId
11
+ xml_accessor :other_name_name
12
+
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ require "quickeebooks"
2
+
3
+ module Quickeebooks
4
+ module Windows
5
+ module Model
6
+ class OtherNameId < Quickeebooks::Windows::Model::IntuitType
7
+
8
+ DOMAIN = "QB"
9
+
10
+ xml_convention :camelcase
11
+ xml_accessor :idDomain, :from => '@idDomain' # Attribute with name 'idDomain'
12
+ xml_accessor :value, :from => :content
13
+
14
+ def initialize(value = nil)
15
+ self.idDomain = DOMAIN
16
+ self.value = value
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,34 @@
1
+ require "quickeebooks/windows/model/success"
2
+ require "quickeebooks/windows/model/error"
3
+
4
+ module Quickeebooks
5
+ module Windows
6
+ module Model
7
+ class RestResponse < Quickeebooks::Windows::Model::IntuitType
8
+
9
+ xml_convention :camelcase
10
+ xml_accessor :success, :as => Quickeebooks::Windows::Model::Success
11
+ xml_accessor :error, :as => Quickeebooks::Windows::Model::Error
12
+
13
+ def success?
14
+ success != nil
15
+ end
16
+
17
+ def error?
18
+ error != nil
19
+ end
20
+
21
+ def to_s
22
+ s = "#<RestResponse>: "
23
+ if success?
24
+ s += "Success[#{success.request_name}] @ #{success.processed_time} - "
25
+ else
26
+ s += "Error[#{error.request_name}] @ #{error.processed_time} - "
27
+ s += "Code: #{error.code}, Desc: #{error.desc}"
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,40 @@
1
+ require 'quickeebooks'
2
+ require 'quickeebooks/windows/model/id'
3
+ require 'quickeebooks/windows/model/vendor'
4
+ require 'quickeebooks/windows/model/other_name'
5
+ require 'quickeebooks/windows/model/external_key'
6
+ require 'quickeebooks/windows/model/meta_data'
7
+
8
+ module Quickeebooks
9
+ module Windows
10
+ module Model
11
+ class SalesRep < Quickeebooks::Windows::Model::IntuitType
12
+
13
+ XML_COLLECTION_NODE = 'SalesReps'
14
+ XML_NODE = 'SalesRep'
15
+
16
+ # https://services.intuit.com/sb/salesrep/v2/<realmID>
17
+ REST_RESOURCE = "salesrep"
18
+
19
+ xml_convention :camelcase
20
+ xml_accessor :id, :as => Quickeebooks::Windows::Model::Id
21
+ xml_accessor :meta_data, :from => 'MetaData', :as => Quickeebooks::Windows::Model::MetaData
22
+ xml_accessor :external_key, :as => Quickeebooks::Windows::Model::ExternalKey
23
+ xml_accessor :synchronized
24
+ xml_accessor :name_of, :from => 'NameOf'
25
+ xml_accessor :vendor, :as => Quickeebooks::Windows::Model::Vendor
26
+ xml_accessor :other_name, :as => Quickeebooks::Windows::Model::OtherName
27
+ xml_accessor :initials
28
+
29
+ def vendor?
30
+ vendor != nil
31
+ end
32
+
33
+ def other_name?
34
+ other_name != nil
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ require 'quickeebooks'
2
+ require 'quickeebooks/windows/model/id'
3
+ require 'quickeebooks/windows/model/external_key'
4
+ require 'quickeebooks/windows/model/custom_field'
5
+ require 'quickeebooks/windows/model/meta_data'
6
+
7
+ module Quickeebooks
8
+ module Windows
9
+ module Model
10
+ class SalesTax < Quickeebooks::Windows::Model::IntuitType
11
+
12
+ XML_COLLECTION_NODE = 'SalesTaxes'
13
+ XML_NODE = 'SalesTax'
14
+
15
+ # https://services.intuit.com/sb/salestax/v2/<realmID>
16
+ REST_RESOURCE = "salestax"
17
+
18
+ xml_convention :camelcase
19
+ xml_accessor :id, :as => Quickeebooks::Windows::Model::Id
20
+ xml_accessor :sync_token
21
+ xml_accessor :meta_data, :from => 'MetaData', :as => Quickeebooks::Windows::Model::MetaData
22
+ xml_accessor :external_key, :as => Quickeebooks::Windows::Model::ExternalKey
23
+ xml_accessor :synchronized
24
+ xml_accessor :custom_fields, :as => [Quickeebooks::Windows::Model::CustomField]
25
+ xml_accessor :name
26
+ xml_accessor :desc
27
+ xml_accessor :tax_rate, :as => Float
28
+
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,31 @@
1
+ require 'quickeebooks'
2
+ require 'quickeebooks/windows/model/id'
3
+ require 'quickeebooks/windows/model/external_key'
4
+ require 'quickeebooks/windows/model/custom_field'
5
+ require 'quickeebooks/windows/model/meta_data'
6
+
7
+ module Quickeebooks
8
+ module Windows
9
+ module Model
10
+ class ShipMethod < Quickeebooks::Windows::Model::IntuitType
11
+
12
+ XML_COLLECTION_NODE = 'ShipMethods'
13
+ XML_NODE = 'ShipMethod'
14
+
15
+ # https://services.intuit.com/sb/shipmethod/v2/<realmID>
16
+ REST_RESOURCE = "shipmethod"
17
+
18
+ xml_convention :camelcase
19
+ xml_accessor :id, :as => Quickeebooks::Windows::Model::Id
20
+ xml_accessor :sync_token
21
+ xml_accessor :meta_data, :from => 'MetaData', :as => Quickeebooks::Windows::Model::MetaData
22
+ xml_accessor :external_key, :as => Quickeebooks::Windows::Model::ExternalKey
23
+ xml_accessor :synchronized
24
+ xml_accessor :custom_fields, :as => [Quickeebooks::Windows::Model::CustomField]
25
+ xml_accessor :name
26
+ xml_accessor :active
27
+
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,17 @@
1
+ require "quickeebooks/windows/model/object_ref"
2
+ module Quickeebooks
3
+ module Windows
4
+ module Model
5
+ class Success < Quickeebooks::Windows::Model::IntuitType
6
+
7
+ xml_convention :camelcase
8
+
9
+ xml_accessor :request_id, :from => '@RequestId'
10
+ xml_accessor :object_ref, :as => Quickeebooks::Windows::Model::ObjectRef
11
+ xml_accessor :request_name
12
+ xml_accessor :processed_time, :as => Time
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ require "quickeebooks"
2
+ require 'quickeebooks/windows/model/vendor_id'
3
+
4
+ module Quickeebooks
5
+ module Windows
6
+ module Model
7
+ class Vendor < Quickeebooks::Windows::Model::IntuitType
8
+
9
+ xml_convention :camelcase
10
+ xml_accessor :vendor_id, :from => 'VendorId', :as => Quickeebooks::Windows::Model::VendorId
11
+ xml_accessor :vendor_name
12
+
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ require "quickeebooks"
2
+
3
+ module Quickeebooks
4
+ module Windows
5
+ module Model
6
+ class VendorId < Quickeebooks::Windows::Model::IntuitType
7
+
8
+ DOMAIN = "QB"
9
+
10
+ xml_convention :camelcase
11
+ xml_accessor :idDomain, :from => '@idDomain' # Attribute with name 'idDomain'
12
+ xml_accessor :value, :from => :content
13
+
14
+ def initialize(value = nil)
15
+ self.idDomain = DOMAIN
16
+ self.value = value
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -11,7 +11,7 @@ module Quickeebooks
11
11
  custom_field_query += '<CustomerQuery xmlns="http://www.intuit.com/sb/cdm/v2">'
12
12
  custom_field_query += "<StartPage>#{page}</StartPage><ChunkSize>#{per_page}</ChunkSize>"
13
13
  custom_field_query += '</CustomerQuery>'
14
- fetch_collection("customer", "Customer", Quickeebooks::Windows::Model::Customer, custom_field_query.strip, filters, page, per_page, sort, options)
14
+ fetch_collection(Quickeebooks::Windows::Model::Customer, custom_field_query.strip, filters, page, per_page, sort, options)
15
15
  end
16
16
 
17
17
  end
@@ -0,0 +1,15 @@
1
+ require 'quickeebooks/windows/service/service_base'
2
+
3
+ module Quickeebooks
4
+ module Windows
5
+ module Service
6
+ class CustomerMsg < Quickeebooks::Windows::Service::ServiceBase
7
+
8
+ def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
9
+ fetch_collection(Quickeebooks::Windows::Model::CustomerMsg, nil, filters, page, per_page, sort, options)
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -18,7 +18,25 @@ module Quickeebooks
18
18
  # sort: +Sort+ object
19
19
  # options: +Hash+ extra arguments
20
20
  def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
21
- fetch_collection("invoices", "Invoice", Quickeebooks::Windows::Model::Invoice, nil, filters, page, per_page, sort, options)
21
+ fetch_collection(Quickeebooks::Windows::Model::Invoice, nil, filters, page, per_page, sort, options)
22
+ end
23
+
24
+ def invoice_as_pdf(invoice_id, destination_file_name)
25
+ raise NoMethodError, 'invoice_as_pdf is not implemented in Quickeebooks for Windows, only available in the Online adapter.'
26
+ end
27
+
28
+ def create(invoice)
29
+ # XML is a wrapped 'object' where the type is specified as an attribute
30
+ # <Object xsi:type="Invoice">
31
+ xml_node = invoice.to_xml(:name => 'Object')
32
+ xml_node.set_attribute('xsi:type', 'Invoice')
33
+ xml = <<-XML
34
+ <Add xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" RequestId="#{guid}" xmlns="http://www.intuit.com/sb/cdm/v2">
35
+ <ExternalRealmId>#{self.realm_id}</ExternalRealmId>
36
+ #{xml_node}
37
+ </Add>
38
+ XML
39
+ perform_write(Quickeebooks::Windows::Model::Invoice, xml)
22
40
  end
23
41
 
24
42
  end
@@ -11,7 +11,7 @@ module Quickeebooks
11
11
  custom_field_query += '<ItemQuery xmlns="http://www.intuit.com/sb/cdm/v2">'
12
12
  custom_field_query += "<StartPage>#{page}</StartPage><ChunkSize>#{per_page}</ChunkSize>"
13
13
  custom_field_query += '<CustomFieldEnable>true</CustomFieldEnable></ItemQuery>'
14
- fetch_collection("item", "Item", Quickeebooks::Windows::Model::Item, custom_field_query.strip, filters, page, per_page, sort, options)
14
+ fetch_collection(Quickeebooks::Windows::Model::Item, custom_field_query.strip, filters, page, per_page, sort, options)
15
15
  end
16
16
 
17
17
  end
@@ -0,0 +1,16 @@
1
+ require 'quickeebooks/windows/model/sales_rep'
2
+ require 'quickeebooks/windows/service/service_base'
3
+
4
+ module Quickeebooks
5
+ module Windows
6
+ module Service
7
+ class SalesRep < Quickeebooks::Windows::Service::ServiceBase
8
+
9
+ def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
10
+ fetch_collection(Quickeebooks::Windows::Model::SalesRep, nil, filters, page, per_page, sort, options)
11
+ end
12
+
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ require 'quickeebooks/windows/service/service_base'
2
+
3
+ module Quickeebooks
4
+ module Windows
5
+ module Service
6
+ class SalesTax < Quickeebooks::Windows::Service::ServiceBase
7
+
8
+ def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
9
+ fetch_collection(Quickeebooks::Windows::Model::SalesTax, nil, filters, page, per_page, sort, options)
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,6 +1,7 @@
1
1
  require 'rexml/document'
2
2
  require 'uri'
3
3
  require 'cgi'
4
+ require 'uuidtools'
4
5
 
5
6
  class IntuitRequestException < Exception
6
7
  attr_accessor :code, :cause
@@ -23,9 +24,24 @@ module Quickeebooks
23
24
 
24
25
  XML_NS = %{xmlns:ns2="http://www.intuit.com/sb/cdm/qbo" xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:ns3="http://www.intuit.com/sb/cdm"}
25
26
 
26
- def initialize(oauth_access_token, realm_id)
27
+ def initialize(oauth_access_token = nil, realm_id = nil)
27
28
  @base_uri = 'https://services.intuit.com/sb'
28
- @oauth = oauth_access_token
29
+
30
+ if !oauth_access_token.nil? && !realm_id.nil?
31
+ msg = "Quickeebooks::Windows::ServiceBase - "
32
+ msg += "This version of the constructor is deprecated. "
33
+ msg += "Use the no-arg constructor and set the AccessToken and the RealmID using the accessors."
34
+ warn(msg)
35
+ access_token = oauth_access_token
36
+ realm_id = realm_id
37
+ end
38
+ end
39
+
40
+ def access_token=(token)
41
+ @oauth = token
42
+ end
43
+
44
+ def realm_id=(realm_id)
29
45
  @realm_id = realm_id
30
46
  end
31
47
 
@@ -36,6 +52,10 @@ module Quickeebooks
36
52
  def url_for_base(raw)
37
53
  "#{@base_uri}/#{raw}/v2/#{@realm_id}"
38
54
  end
55
+
56
+ def guid
57
+ UUIDTools::UUID.random_create.to_s.gsub('-', '')
58
+ end
39
59
 
40
60
  private
41
61
 
@@ -52,15 +72,13 @@ module Quickeebooks
52
72
  %Q{<?xml version="1.0" encoding="utf-8"?>\n#{xml.strip}}
53
73
  end
54
74
 
55
- def fetch_collection(resource, container, model, custom_field_query = nil, filters = [], page = 1, per_page = 20, sort = nil, options ={})
56
- raise ArgumentError, "missing resource to fetch" if resource.nil?
57
- raise ArgumentError, "missing result container" if container.nil?
75
+ def fetch_collection(model, custom_field_query = nil, filters = [], page = 1, per_page = 20, sort = nil, options ={})
58
76
  raise ArgumentError, "missing model to instantiate" if model.nil?
59
77
 
60
78
  if custom_field_query != nil
61
- response = do_http_post(url_for_resource(resource), custom_field_query, {}, {'Content-Type' => 'text/xml'})
79
+ response = do_http_post(url_for_resource(model::REST_RESOURCE), custom_field_query, {}, {'Content-Type' => 'text/xml'})
62
80
  else
63
- response = do_http_get(url_for_resource(resource), {}, {'Content-Type' => 'text/html'})
81
+ response = do_http_get(url_for_resource(model::REST_RESOURCE), {}, {'Content-Type' => 'text/html'})
64
82
  end
65
83
  if response
66
84
  collection = Quickeebooks::Collection.new
@@ -78,7 +96,7 @@ module Quickeebooks
78
96
  collection.entries = results
79
97
  collection.current_page = 1 # TODO: fix this
80
98
  rescue => ex
81
- log("Error parsing XML: #{ex.message}")
99
+ #log("Error parsing XML: #{ex.message}")
82
100
  raise IntuitRequestException.new("Error parsing XML: #{ex.message}")
83
101
  end
84
102
  collection
@@ -86,6 +104,27 @@ module Quickeebooks
86
104
  nil
87
105
  end
88
106
  end
107
+
108
+ def perform_write(model, body = "", params = {}, headers = {})
109
+ url = url_for_resource(model::REST_RESOURCE)
110
+ unless headers.has_key?('Content-Type')
111
+ headers['Content-Type'] = 'text/xml'
112
+ end
113
+ response = do_http_post(url, body.strip, params, headers)
114
+
115
+ result = nil
116
+ if response
117
+ case response.code.to_i
118
+ when 200
119
+ result = Quickeebooks::Windows::Model::RestResponse.from_xml(response.body)
120
+ when 401
121
+ raise IntuitRequestException.new("Authorization failure: token timed out?")
122
+ when 404
123
+ raise IntuitRequestException.new("Resource Not Found: Check URL and try again")
124
+ end
125
+ end
126
+ result
127
+ end
89
128
 
90
129
  def do_http_post(url, body = "", params = {}, headers = {}) # throws IntuitRequestException
91
130
  url = add_query_string_to_url(url, params)