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
@@ -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 :
|
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
|
-
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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,
|
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
|
-
|
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
|
-
|
62
|
+
destination_file_name
|
35
63
|
else
|
36
64
|
nil
|
37
65
|
end
|
38
66
|
end
|
39
67
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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(
|
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(
|
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(
|
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(
|
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(
|
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
|