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
@@ -11,8 +11,9 @@ module Quickeebooks
11
11
  xml_accessor :doc_number, :from => 'DocNumber'
12
12
  xml_accessor :txn_date, :from => 'TxnDate', :as => Time
13
13
  xml_accessor :msg, :from => 'Msg'
14
- xml_accessor :customer_id, :from => 'CustomerId'
15
- xml_accessor :sales_tax_code_id, :from => 'SalesTaxCodeId'
14
+ xml_accessor :customer_id, :from => 'CustomerId', :as => Quickeebooks::Online::Model::Id
15
+ xml_accessor :customer_name, :from => 'CustomerName'
16
+ xml_accessor :sales_tax_code_id, :from => 'SalesTaxCodeId', :as => Quickeebooks::Online::Model::Id
16
17
  xml_accessor :sales_tax_code_name, :from => 'SalesTaxCodeName'
17
18
  xml_accessor :sub_total_amount, :from => 'SubTotalAmt', :as => Float
18
19
  xml_accessor :tax_rate, :from => 'TaxRate', :as => Float
@@ -22,6 +23,7 @@ module Quickeebooks
22
23
  xml_accessor :discount_amount, :from => 'DiscountAmt', :as => Float
23
24
  xml_accessor :status, :from => 'Status'
24
25
  xml_accessor :ship_date, :from => 'ShipDate', :as => Time
26
+ xml_accessor :to_be_emailed, :from => 'ToBeEmailed'
25
27
  end
26
28
  end
27
29
  end
@@ -1,19 +1,20 @@
1
- module Quickeebooks
1
+ require 'quickeebooks/online/model/id'
2
2
 
3
+ module Quickeebooks
3
4
  module Online
4
5
  module Model
5
6
  class InvoiceLineItem < Quickeebooks::Online::Model::IntuitType
6
7
  xml_name 'Line'
7
- xml_accessor :id, :from => 'Id'
8
+ xml_accessor :id, :from => 'Id', :as => Quickeebooks::Online::Model::Id
8
9
  xml_accessor :desc, :from => 'Desc'
9
10
  xml_accessor :amount, :from => 'Amount', :as => Float
10
- xml_accessor :class_id, :from => 'ClassId'
11
+ xml_accessor :class_id, :from => 'ClassId', :as => Quickeebooks::Online::Model::Id
11
12
  xml_accessor :taxable, :from => 'Taxable'
12
- xml_accessor :item_id, :from => 'ItemId'
13
+ xml_accessor :item_id, :from => 'ItemId', :as => Quickeebooks::Online::Model::Id
13
14
  xml_accessor :unit_price, :from => 'UnitPrice', :as => Float
14
15
  xml_accessor :quantity, :from => 'Qty', :as => Float
15
- xml_accessor :override_item_account_id, :from => 'OverrideItemAccountId'
16
- xml_accessor :sales_tax_code_id, :from => 'SalesTaxCodeId'
16
+ xml_accessor :override_item_account_id, :from => 'OverrideItemAccountId', :as => Quickeebooks::Online::Model::Id
17
+ xml_accessor :sales_tax_code_id, :from => 'SalesTaxCodeId', :as => Quickeebooks::Online::Model::Id
17
18
  xml_accessor :sales_tax_code_name, :from => 'SalesTaxCodeName'
18
19
  xml_accessor :service_date, :from => 'ServiceDate', :as => Time
19
20
  end
@@ -1,4 +1,5 @@
1
1
  require 'time'
2
+ require "quickeebooks/online/model/id"
2
3
  require 'quickeebooks/online/model/price'
3
4
  require 'quickeebooks/online/model/meta_data'
4
5
  require 'quickeebooks/online/model/account_reference'
@@ -9,12 +10,17 @@ module Quickeebooks
9
10
  module Model
10
11
  class Item < Quickeebooks::Online::Model::IntuitType
11
12
  include ActiveModel::Validations
13
+
14
+ XML_NODE = "Item"
15
+
16
+ # <baseURL>/resource/items/v2/<realmID>
17
+ REST_RESOURCE = "items"
12
18
 
13
19
  xml_name 'Item'
14
- xml_accessor :id, :from => 'Id'
20
+ xml_accessor :id, :from => 'Id', :as => Quickeebooks::Online::Model::Id
15
21
  xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
16
22
  xml_accessor :meta_data, :from => 'MetaData', :as => Quickeebooks::Online::Model::MetaData
17
- xml_accessor :item_parent_id, :from => 'ItemParentId'
23
+ xml_accessor :item_parent_id, :from => 'ItemParentId', :as => Quickeebooks::Online::Model::Id
18
24
  xml_accessor :item_parent_name, :from => 'ItemParentName'
19
25
  xml_accessor :name, :from => 'Name'
20
26
  xml_accessor :desc, :from => 'Desc'
@@ -0,0 +1,58 @@
1
+ require 'quickeebooks/online/model/payment_header'
2
+ require 'quickeebooks/online/model/payment_line_item'
3
+ require 'quickeebooks/online/model/payment_detail'
4
+ require 'quickeebooks/online/model/credit_card'
5
+ require 'quickeebooks/online/model/credit_charge_info'
6
+ require 'quickeebooks/online/model/credit_charge_response'
7
+ require 'quickeebooks/online/model/meta_data'
8
+
9
+ module Quickeebooks
10
+ module Online
11
+ module Model
12
+ class Payment < Quickeebooks::Online::Model::IntuitType
13
+ XML_NODE = "Payment"
14
+ REST_RESOURCE = "payment"
15
+
16
+ include ActiveModel::Validations
17
+ xml_convention :camelcase
18
+ xml_accessor :id, :from => 'Id', :as => Quickeebooks::Online::Model::Id
19
+ xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
20
+ xml_accessor :meta_data, :from => 'MetaData', :as => Quickeebooks::Online::Model::MetaData
21
+ xml_accessor :header, :from => 'Header', :as => Quickeebooks::Online::Model::PaymentHeader
22
+ xml_accessor :line_items, :from => 'Line', :as => [Quickeebooks::Online::Model::PaymentLineItem]
23
+
24
+ def initialize
25
+ ensure_line_items_initialization
26
+ end
27
+
28
+ def valid_for_update?
29
+ errors.empty?
30
+ end
31
+
32
+ def to_xml_ns(options = {})
33
+ to_xml_inject_ns(XML_NODE, options)
34
+ end
35
+
36
+ def valid_for_deletion?
37
+ return false if(id.nil? || sync_token.nil?)
38
+ id.to_i > 0 && !sync_token.to_s.empty? && sync_token.to_i >= 0
39
+ end
40
+
41
+ #== Class methods
42
+ def self.resource_for_collection
43
+ "#{self::REST_RESOURCE}s"
44
+ end
45
+
46
+ private
47
+
48
+ def after_parse
49
+ end
50
+
51
+ def ensure_line_items_initialization
52
+ self.line_items ||= []
53
+ end
54
+
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,12 @@
1
+ require 'quickeebooks/online/model/credit_card'
2
+
3
+ module Quickeebooks
4
+ module Online
5
+ module Model
6
+ class PaymentDetail < Quickeebooks::Online::Model::IntuitType
7
+ xml_name 'Detail'
8
+ xml_accessor :credit_card, :from => 'CreditCard', :as => Quickeebooks::Online::Model::CreditCard
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,24 @@
1
+ require 'time'
2
+ require 'quickeebooks/online/model/payment_detail'
3
+
4
+ module Quickeebooks
5
+ module Online
6
+ module Model
7
+ class PaymentHeader < Quickeebooks::Online::Model::IntuitType
8
+ xml_name 'Header'
9
+ xml_accessor :doc_number, :from => 'DocNumber'
10
+ xml_accessor :txn_date, :from => 'TxnDate', :as => Time
11
+ xml_accessor :note, :from => 'Note'
12
+ xml_accessor :status, :from => 'Status'
13
+ xml_accessor :customer_id, :from => 'CustomerId', :as => Quickeebooks::Online::Model::Id
14
+ xml_accessor :customer_name, :from => 'CustomerName'
15
+ xml_accessor :deposit_to_account_id, :from => 'DepositToAccountId', :as => Quickeebooks::Online::Model::Id
16
+ xml_accessor :payment_method_id, :from => 'PaymentMethodId', :as => Quickeebooks::Online::Model::Id
17
+ xml_accessor :payment_method_name, :from => 'PaymentMethodName'
18
+ xml_accessor :detail, :from => 'Detail', :as => Quickeebooks::Online::Model::PaymentDetail
19
+ xml_accessor :total_amount, :from => 'TotalAmt', :as => Float
20
+ xml_accessor :process_payment, :from => 'ProcessPayment'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ require 'quickeebooks/online/model/id'
2
+
3
+ module Quickeebooks
4
+ module Online
5
+ module Model
6
+ class PaymentLineItem < Quickeebooks::Online::Model::IntuitType
7
+ xml_name 'Line'
8
+ xml_accessor :id, :from => 'Id', :as => Integer
9
+ xml_accessor :amount, :from => 'Amount', :as => Float
10
+ xml_accessor :desc, :from => 'Desc'
11
+ xml_accessor :txn_id, :from => 'TxnId', :as => Quickeebooks::Online::Model::Id
12
+ end
13
+ end
14
+ end
15
+ end
@@ -7,13 +7,13 @@ module Quickeebooks
7
7
  class Account < ServiceBase
8
8
 
9
9
  def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
10
- fetch_collection("accounts", "Account", Quickeebooks::Online::Model::Account, filters, page, per_page, sort, options)
10
+ fetch_collection(Quickeebooks::Online::Model::Account, filters, page, per_page, sort, options)
11
11
  end
12
12
 
13
13
  def create(account)
14
14
  raise InvalidModelException unless account.valid?
15
15
  xml = account.to_xml_ns
16
- response = do_http_post(url_for_resource("account"), valid_xml_document(xml))
16
+ response = do_http_post(url_for_resource(Quickeebooks::Online::Model::Account.resource_for_singular), valid_xml_document(xml))
17
17
  if response && response.code.to_i == 200
18
18
  Quickeebooks::Online::Model::Account.from_xml(response.body)
19
19
  else
@@ -24,7 +24,7 @@ module Quickeebooks
24
24
  def update(account)
25
25
  raise InvalidModelException unless account.valid_for_update?
26
26
  xml = account.to_xml_ns
27
- url = "#{url_for_resource("account")}/#{account.id}"
27
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Account.resource_for_singular)}/#{account.id}"
28
28
  response = do_http_post(url, valid_xml_document(xml))
29
29
  if response && response.code.to_i == 200
30
30
  Quickeebooks::Online::Model::Account.from_xml(response.body)
@@ -34,14 +34,14 @@ module Quickeebooks
34
34
  end
35
35
 
36
36
  def fetch_by_id(account_id)
37
- response = do_http_get("#{url_for_resource("account")}/#{account_id}")
37
+ response = do_http_get("#{url_for_resource(Quickeebooks::Online::Model::Account.resource_for_singular)}/#{account_id}")
38
38
  Quickeebooks::Online::Model::Account.from_xml(response.body)
39
39
  end
40
40
 
41
41
  def delete(account)
42
42
  raise InvalidModelException.new("Missing required parameters for delete") unless account.valid_for_deletion?
43
43
  xml = valid_xml_document(account.to_xml_ns(:fields => ['Id', 'SyncToken']))
44
- url = "#{url_for_resource("account")}/#{account.id}"
44
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Account.resource_for_singular)}/#{account.id}"
45
45
  response = do_http_post(url, xml, {:methodx => "delete"})
46
46
  response.code.to_i == 200
47
47
  end
@@ -0,0 +1,24 @@
1
+ require 'quickeebooks/online/service/service_base'
2
+ require 'nokogiri'
3
+
4
+ module Quickeebooks
5
+ module Online
6
+ module Service
7
+ # read only, corresponds to the realm_id
8
+ # see https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0050_Data_Services/0400_QuickBooks_Online/CompanyMetaData
9
+ class CompanyMetaData < ServiceBase
10
+
11
+ def load
12
+ url = url_for_resource(Quickeebooks::Online::Model::CompanyMetaData.resource_for_singular)
13
+ response = do_http_get(url)
14
+ if response && response.code.to_i == 200
15
+ Quickeebooks::Online::Model::CompanyMetaData.from_xml(response.body)
16
+ else
17
+ nil
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -9,7 +9,7 @@ module Quickeebooks
9
9
  def create(customer)
10
10
  raise InvalidModelException unless customer.valid?
11
11
  xml = customer.to_xml_ns
12
- response = do_http_post(url_for_resource("customer"), valid_xml_document(xml))
12
+ response = do_http_post(url_for_resource(Quickeebooks::Online::Model::Customer.resource_for_singular), valid_xml_document(xml))
13
13
  if response.code.to_i == 200
14
14
  Quickeebooks::Online::Model::Customer.from_xml(response.body)
15
15
  else
@@ -18,7 +18,7 @@ module Quickeebooks
18
18
  end
19
19
 
20
20
  def fetch_by_id(id)
21
- url = "#{url_for_resource("customer")}/#{id}"
21
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Customer.resource_for_singular)}/#{id}"
22
22
  response = do_http_get(url)
23
23
  if response && response.code.to_i == 200
24
24
  Quickeebooks::Online::Model::Customer.from_xml(response.body)
@@ -29,7 +29,7 @@ module Quickeebooks
29
29
 
30
30
  def update(customer)
31
31
  raise InvalidModelException.new("Missing required parameters for update") unless customer.valid_for_update?
32
- url = "#{url_for_resource("customer")}/#{customer.id}"
32
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Customer.resource_for_singular)}/#{customer.id.value}"
33
33
  xml = customer.to_xml_ns
34
34
  response = do_http_post(url, valid_xml_document(xml))
35
35
  if response.code.to_i == 200
@@ -42,13 +42,13 @@ module Quickeebooks
42
42
  def delete(customer)
43
43
  raise InvalidModelException.new("Missing required parameters for delete") unless customer.valid_for_deletion?
44
44
  xml = valid_xml_document(customer.to_xml_ns(:fields => ['Id', 'SyncToken']))
45
- url = "#{url_for_resource("customer")}/#{customer.id}"
45
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Customer.resource_for_singular)}/#{customer.id.value}"
46
46
  response = do_http_post(url, xml, {:methodx => "delete"})
47
47
  response.code.to_i == 200
48
48
  end
49
49
 
50
50
  def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
51
- fetch_collection("customers", "Customer", Quickeebooks::Online::Model::Customer, filters, page, per_page, sort, options)
51
+ fetch_collection(Quickeebooks::Online::Model::Customer, filters, page, per_page, sort, options)
52
52
  end
53
53
 
54
54
  end
@@ -9,7 +9,36 @@ module Quickeebooks
9
9
  module Service
10
10
  class Invoice < ServiceBase
11
11
 
12
+ def create(invoice)
13
+ raise InvalidModelException unless invoice.valid?
14
+ xml = invoice.to_xml_ns
15
+ response = do_http_post(url_for_resource(Quickeebooks::Online::Model::Invoice.resource_for_singular), valid_xml_document(xml))
16
+ if response.code.to_i == 200
17
+ Quickeebooks::Online::Model::Invoice.from_xml(response.body)
18
+ else
19
+ nil
20
+ end
21
+ end
22
+
23
+ # Fetch an invoice by its ID
24
+ # Returns: +Invoice+ object
25
+ def fetch_by_id(invoice_id)
26
+ response = do_http_get("#{url_for_resource(Quickeebooks::Online::Model::Invoice::REST_RESOURCE)}/#{invoice_id}")
27
+ Quickeebooks::Online::Model::Invoice.from_xml(response.body)
28
+ end
12
29
 
30
+ def update(invoice)
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}"
33
+ xml = invoice.to_xml_ns
34
+ response = do_http_post(url, valid_xml_document(xml))
35
+ if response.code.to_i == 200
36
+ Quickeebooks::Online::Model::Invoice.from_xml(response.body)
37
+ else
38
+ nil
39
+ end
40
+ end
41
+
13
42
  # Fetch a +Collection+ of +Invoice+ objects
14
43
  # Arguments:
15
44
  # filters: Array of +Filter+ objects to apply
@@ -18,30 +47,30 @@ module Quickeebooks
18
47
  # sort: +Sort+ object
19
48
  # options: +Hash+ extra arguments
20
49
  def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
21
- fetch_collection("invoices", "Invoice", Quickeebooks::Online::Model::Invoice, filters, page, per_page, sort, options)
50
+ fetch_collection(Quickeebooks::Online::Model::Invoice, filters, page, per_page, sort, options)
22
51
  end
23
52
 
24
53
  # Returns the absolute path to the PDF on disk
25
54
  # Its left to the caller to unlink the file at some later date
26
55
  # Returns: +String+ : absolute path to file on disk or nil if couldnt fetch PDF
27
- def invoice_as_pdf(invoice_id, destination_parent_directory)
56
+ def invoice_as_pdf(invoice_id, destination_file_name)
28
57
  response = do_http_get("#{url_for_resource("invoice-document")}/#{invoice_id}", {}, {'Content-Type' => 'application/pdf'})
29
58
  if response && response.code.to_i == 200
30
- file_name = File.join(destination_parent_directory, "invoice-document-#{invoice_id}-#{Time.now.strftime('%Y-%m-%d_%H-%M')}.pdf")
31
- File.open(file_name, "wb") do |file|
59
+ File.open(destination_file_name, "wb") do |file|
32
60
  file.write(response.body)
33
61
  end
34
- file_name
62
+ destination_file_name
35
63
  else
36
64
  nil
37
65
  end
38
66
  end
39
67
 
40
- # Fetch an invoice by its ID
41
- # Returns: +Invoice+ object
42
- def fetch_by_id(invoice_id)
43
- response = do_http_get("#{url_for_resource("invoice")}/#{invoice_id}")
44
- Quickeebooks::Online::Model::Invoice.from_xml(response.body)
68
+ def delete(invoice)
69
+ raise InvalidModelException.new("Missing required parameters for delete") unless invoice.valid_for_deletion?
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}"
72
+ response = do_http_post(url, xml, {:methodx => "delete"})
73
+ response.code.to_i == 200
45
74
  end
46
75
 
47
76
  end
@@ -7,13 +7,13 @@ module Quickeebooks
7
7
  class Item < ServiceBase
8
8
 
9
9
  def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
10
- fetch_collection("items", "Item", Quickeebooks::Online::Model::Item, filters, page, per_page, sort, options)
10
+ fetch_collection(Quickeebooks::Online::Model::Item, filters, page, per_page, sort, options)
11
11
  end
12
12
 
13
13
  def create(item)
14
14
  raise InvalidModelException unless item.valid?
15
15
  xml = item.to_xml_ns
16
- response = do_http_post(url_for_resource("item"), valid_xml_document(xml))
16
+ response = do_http_post(url_for_resource(Quickeebooks::Online::Model::Item.resource_for_singular), valid_xml_document(xml))
17
17
  if response && response.code.to_i == 200
18
18
  Quickeebooks::Online::Model::Item.from_xml(response.body)
19
19
  else
@@ -24,7 +24,7 @@ module Quickeebooks
24
24
  def update(item)
25
25
  raise InvalidModelException unless item.valid?
26
26
  xml = item.to_xml_ns
27
- url = "#{url_for_resource("item")}/#{item.id}"
27
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Item.resource_for_singular)}/#{item.id}"
28
28
  response = do_http_post(url, valid_xml_document(xml))
29
29
  if response && response.code.to_i == 200
30
30
  Quickeebooks::Online::Model::Item.from_xml(response.body)
@@ -34,14 +34,14 @@ module Quickeebooks
34
34
  end
35
35
 
36
36
  def fetch_by_id(id)
37
- response = do_http_get("#{url_for_resource("item")}/#{id}")
37
+ response = do_http_get("#{url_for_resource(Quickeebooks::Online::Model::Item.resource_for_singular)}/#{id}")
38
38
  Quickeebooks::Online::Model::Item.from_xml(response.body)
39
39
  end
40
40
 
41
41
  def delete(item)
42
42
  raise InvalidModelException.new("Missing required parameters for delete") unless item.valid_for_deletion?
43
43
  xml = valid_xml_document(item.to_xml_ns(:fields => ['Id', 'SyncToken']))
44
- url = "#{url_for_resource("item")}/#{item.id}"
44
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Item.resource_for_singular)}/#{item.id}"
45
45
  response = do_http_post(url, xml, {:methodx => "delete"})
46
46
  response.code.to_i == 200
47
47
  end
@@ -0,0 +1,63 @@
1
+ require 'quickeebooks/online/service/service_base'
2
+ require 'quickeebooks/online/model/payment'
3
+ require 'quickeebooks/online/model/payment_header'
4
+ require 'quickeebooks/online/model/payment_line_item'
5
+ require 'quickeebooks/online/model/payment_detail'
6
+ require 'quickeebooks/online/model/credit_card'
7
+ require 'quickeebooks/online/model/credit_charge_info'
8
+ require 'quickeebooks/online/model/credit_charge_response'
9
+ require 'nokogiri'
10
+
11
+ module Quickeebooks
12
+ module Online
13
+ module Service
14
+ class Payment < ServiceBase
15
+
16
+ def create(payment)
17
+ raise InvalidModelException unless payment.valid?
18
+ xml = payment.to_xml_ns
19
+ response = do_http_post(url_for_resource(Quickeebooks::Online::Model::Payment.resource_for_singular), valid_xml_document(xml))
20
+ if response.code.to_i == 200
21
+ Quickeebooks::Online::Model::Payment.from_xml(response.body)
22
+ else
23
+ nil
24
+ end
25
+ end
26
+
27
+ def fetch_by_id(id)
28
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Payment.resource_for_singular)}/#{id}"
29
+ response = do_http_get(url)
30
+ if response && response.code.to_i == 200
31
+ Quickeebooks::Online::Model::Payment.from_xml(response.body)
32
+ else
33
+ nil
34
+ end
35
+ end
36
+
37
+ def update(payment)
38
+ raise InvalidModelException.new("Missing required parameters for update") unless payment.valid_for_update?
39
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Payment.resource_for_singular)}/#{payment.id}"
40
+ xml = payment.to_xml_ns
41
+ response = do_http_post(url, valid_xml_document(xml))
42
+ if response.code.to_i == 200
43
+ Quickeebooks::Online::Model::Payment.from_xml(response.body)
44
+ else
45
+ nil
46
+ end
47
+ end
48
+
49
+ def list(filters = [], page = 1, per_page = 20, sort = nil, options = {})
50
+ fetch_collection(Quickeebooks::Online::Model::Payment, filters, page, per_page, sort, options)
51
+ end
52
+
53
+ def delete(payment)
54
+ raise InvalidModelException.new("Missing required parameters for delete") unless payment.valid_for_deletion?
55
+ xml = valid_xml_document(payment.to_xml_ns(:fields => ['Id', 'SyncToken']))
56
+ url = "#{url_for_resource(Quickeebooks::Online::Model::Payment.resource_for_singular)}/#{payment.id}"
57
+ response = do_http_post(url, xml, {:methodx => "delete"})
58
+ response.code.to_i == 200
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end