quickeebooks 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/Gemfile.lock +42 -11
  2. data/Guardfile +8 -0
  3. data/HISTORY.md +5 -0
  4. data/coverage/index.html +6201 -2451
  5. data/lib/quickeebooks.rb +16 -1
  6. data/lib/quickeebooks/online/model/bill_payment.rb +26 -0
  7. data/lib/quickeebooks/online/model/bill_payment_header.rb +24 -0
  8. data/lib/quickeebooks/online/model/bill_payment_line_item.rb +13 -0
  9. data/lib/quickeebooks/online/model/customer.rb +0 -42
  10. data/lib/quickeebooks/online/model/id.rb +9 -0
  11. data/lib/quickeebooks/online/model/tracking_class.rb +43 -0
  12. data/lib/quickeebooks/online/service/bill_payment.rb +16 -0
  13. data/lib/quickeebooks/online/service/invoice.rb +3 -3
  14. data/lib/quickeebooks/online/service/service_base.rb +4 -4
  15. data/lib/quickeebooks/online/service/tracking_class.rb +13 -0
  16. data/lib/quickeebooks/version.rb +1 -1
  17. data/lib/quickeebooks/windows/model/id.rb +8 -2
  18. data/lib/quickeebooks/windows/model/id_set.rb +24 -0
  19. data/lib/quickeebooks/windows/model/intuit_type.rb +1 -1
  20. data/lib/quickeebooks/windows/model/ng_id.rb +24 -0
  21. data/lib/quickeebooks/windows/model/ng_id_set.rb +28 -0
  22. data/lib/quickeebooks/windows/model/payment.rb +14 -0
  23. data/lib/quickeebooks/windows/model/payment_header.rb +38 -12
  24. data/lib/quickeebooks/windows/model/payment_line_item.rb +2 -1
  25. data/lib/quickeebooks/windows/model/payment_method.rb +28 -0
  26. data/lib/quickeebooks/windows/model/sync_status_param.rb +28 -0
  27. data/lib/quickeebooks/windows/model/sync_status_request.rb +31 -0
  28. data/lib/quickeebooks/windows/model/sync_status_response.rb +156 -0
  29. data/lib/quickeebooks/windows/service/payment.rb +14 -0
  30. data/lib/quickeebooks/windows/service/payment_method.rb +24 -0
  31. data/lib/quickeebooks/windows/service/sync_status.rb +34 -0
  32. data/quickeebooks.gemspec +3 -1
  33. data/spec/quickeebooks/online/bill_payment_spec.rb +18 -0
  34. data/spec/quickeebooks/online/id_spec.rb +18 -0
  35. data/spec/quickeebooks/online/services/bill_payment_spec.rb +69 -0
  36. data/spec/quickeebooks/online/services/invoice_spec.rb +12 -0
  37. data/spec/quickeebooks/online/services/tracking_class_spec.rb +99 -0
  38. data/spec/quickeebooks/online/tracking_class_spec.rb +32 -0
  39. data/spec/quickeebooks/windows/id_spec.rb +18 -0
  40. data/spec/quickeebooks/windows/services/payment_method_spec.rb +36 -0
  41. data/spec/quickeebooks/windows/services/payment_spec.rb +30 -0
  42. data/spec/quickeebooks/windows/services/sync_status_spec.rb +35 -0
  43. data/spec/spec_helper.rb +1 -2
  44. data/spec/xml/online/bill_payment.xml +20 -0
  45. data/spec/xml/online/bill_payment2.xml +20 -0
  46. data/spec/xml/online/bill_payments.xml +26 -0
  47. data/spec/xml/online/deleted_invoice.xml +2 -0
  48. data/spec/xml/online/tracking_class.xml +11 -0
  49. data/spec/xml/online/tracking_class_updated.xml +11 -0
  50. data/spec/xml/online/tracking_classes.xml +26 -0
  51. data/spec/xml/windows/payment_create_success.xml +11 -0
  52. data/spec/xml/windows/payment_methods.xml +121 -0
  53. data/spec/xml/windows/sync_status_responses.xml +186 -0
  54. data/tmp/console.rb +10 -0
  55. metadata +71 -5
  56. data/quickeebooks-0.1.7.gem +0 -0
@@ -0,0 +1,18 @@
1
+ describe "Quickeebooks::Online::Model::Id" do
2
+
3
+ it "can be converted to String" do
4
+ id = Quickeebooks::Online::Model::Id.new(42)
5
+ id.to_s.should == "42"
6
+ end
7
+
8
+ it "can be converted to Integer" do
9
+ id = Quickeebooks::Online::Model::Id.new(42)
10
+ id.to_i.should == 42
11
+ end
12
+
13
+ it "can be coerced into a String" do
14
+ id = Quickeebooks::Online::Model::Id.new(42)
15
+ "/whatever/#{id}".should == "/whatever/42"
16
+ end
17
+
18
+ end
@@ -0,0 +1,69 @@
1
+ describe "Quickeebooks::Online::Service::BillPayment" do
2
+ before(:all) do
3
+ construct_oauth_service :bill_payment
4
+ end
5
+
6
+ describe "list" do
7
+ it "should fetch list of bill payments" do
8
+ xml = onlineFixture "bill_payments.xml"
9
+ url = @service.url_for_resource(Quickeebooks::Online::Model::BillPayment.resource_for_collection)
10
+ FakeWeb.register_uri :post, url, :status => ['200', 'OK'], :body => xml
11
+ bill_payments = @service.list
12
+ bill_payments.count.should == 1
13
+ bill_payments.entries.count.should == 1
14
+ bill_payments.entries[0].id.value.should == '16'
15
+ end
16
+ end
17
+
18
+ describe "create" do
19
+ it "should create a bill payment" do
20
+ xml = onlineFixture "bill_payment.xml"
21
+ url = @service.url_for_resource(Quickeebooks::Online::Model::BillPayment.resource_for_singular)
22
+ FakeWeb.register_uri :post, url, :status => ["200", "OK"], :body => xml
23
+ bill_payment = Quickeebooks::Online::Model::BillPayment.new
24
+ bill_payment.header = Quickeebooks::Online::Model::BillPaymentHeader.new
25
+ bill_payment.header.total_amount = 25.00
26
+ result = @service.create bill_payment
27
+ result.id.value.to_i.should > 0
28
+ end
29
+ end
30
+
31
+ describe "delete" do
32
+ it "should delete a bill payment" do
33
+ url = "#{@service.url_for_resource(Quickeebooks::Online::Model::BillPayment.resource_for_singular)}/56?methodx=delete"
34
+ FakeWeb.register_uri :post, url, :status => ["200", "OK"]
35
+ bill_payment = Quickeebooks::Online::Model::BillPayment.new
36
+ bill_payment.id = Quickeebooks::Online::Model::Id.new("56")
37
+ bill_payment.sync_token = 0
38
+ result = @service.delete bill_payment
39
+ result.should == true
40
+ end
41
+ end
42
+
43
+ describe "fetch_by_id" do
44
+ it "should retrive bill payment by id" do
45
+ xml = onlineFixture("bill_payment.xml")
46
+ url = "#{@service.url_for_resource(Quickeebooks::Online::Model::BillPayment.resource_for_singular)}/56"
47
+ FakeWeb.register_uri :get, url, :status => ["200", "OK"], :body => xml
48
+ bill_payment = @service.fetch_by_id(56)
49
+ bill_payment.header.total_amount.should == 5000
50
+ end
51
+ end
52
+
53
+ describe "update" do
54
+ it "should update existing bill payment" do
55
+ xml2 = onlineFixture("bill_payment2.xml")
56
+ bill_payment = Quickeebooks::Online::Model::BillPayment.new
57
+ bill_payment.header = Quickeebooks::Online::Model::BillPaymentHeader.new
58
+ bill_payment.header.total_amount = 75.00
59
+ bill_payment.id = Quickeebooks::Online::Model::Id.new("56")
60
+ bill_payment.sync_token = 2
61
+
62
+ url = "#{@service.url_for_resource(Quickeebooks::Online::Model::BillPayment.resource_for_singular)}/#{bill_payment.id.value}"
63
+
64
+ FakeWeb.register_uri :post, url, :status => ["200", "OK"], :body => xml2
65
+ updated = @service.update(bill_payment)
66
+ updated.header.total_amount.should == 75.00
67
+ end
68
+ end
69
+ end
@@ -39,4 +39,16 @@ describe "Quickeebooks::Online::Service::Invoice" do
39
39
  result.id.value.to_i.should > 0
40
40
  end
41
41
 
42
+ it "can delete an invoice" do
43
+ fixture_xml = onlineFixture("invoice.xml")
44
+ response_xml = onlineFixture("deleted_invoice.xml")
45
+
46
+ invoice_id = "123"
47
+ url = @service.url_for_resource(Quickeebooks::Online::Model::Invoice.resource_for_singular) + "/13?methodx=delete"
48
+ FakeWeb.register_uri(:post, url, :status => ["200", "OK"], :body => response_xml)
49
+ invoice = Quickeebooks::Online::Model::Invoice.from_xml(fixture_xml)
50
+
51
+ result = @service.delete(invoice)
52
+ end
53
+
42
54
  end
@@ -0,0 +1,99 @@
1
+ describe Quickeebooks::Online::Service::TrackingClass do
2
+ before(:all) do
3
+ construct_oauth_service :tracking_class
4
+ end
5
+
6
+ describe ".list" do
7
+ before(:each) do
8
+ xml = onlineFixture("tracking_classes.xml")
9
+ url = @service.url_for_resource(Quickeebooks::Online::Model::TrackingClass.resource_for_collection)
10
+ FakeWeb.register_uri(:post, url, :status => ["200", "OK"], :body => xml)
11
+ end
12
+
13
+ subject { @service.list }
14
+
15
+ it { subject.count.should == 2 }
16
+ it { subject.entries.count.should == 2 }
17
+ it { subject.entries[0].id.value.should == '1' }
18
+
19
+ end
20
+
21
+ describe ".create" do
22
+ before(:each) do
23
+ xml = onlineFixture("tracking_class.xml")
24
+ url = @service.url_for_resource(Quickeebooks::Online::Model::TrackingClass.resource_for_singular)
25
+ FakeWeb.register_uri(:post, url, :status => ["200", "OK"], :body => xml)
26
+
27
+ @tracking_class = Quickeebooks::Online::Model::TrackingClass.new
28
+
29
+ @tracking_class.name = "2012-11-02"
30
+ @tracking_class.class_parent_id = Quickeebooks::Online::Model::Id.new("3000000000000040889")
31
+ end
32
+
33
+ subject { @service.create(@tracking_class) }
34
+
35
+ it { subject.id.value.should == "3000000000000029839" }
36
+ end
37
+
38
+ describe ".delete" do
39
+ before(:each) do
40
+ @tracking_class_id = "3000000000000029839"
41
+ url = @service.url_for_resource(Quickeebooks::Online::Model::TrackingClass.resource_for_singular)
42
+ url += "/#{@tracking_class_id}?methodx=delete"
43
+ FakeWeb.register_uri(:post, url, :status => ["200", "OK"])
44
+
45
+ @tracking_class = Quickeebooks::Online::Model::TrackingClass.new
46
+
47
+ @tracking_class.id = Quickeebooks::Online::Model::Id.new(@tracking_class_id)
48
+ @tracking_class.name = "2012-11-02"
49
+ @tracking_class.sync_token = 0
50
+ end
51
+
52
+ subject { @service.delete @tracking_class }
53
+
54
+ it { should be_true }
55
+
56
+ end
57
+
58
+ describe ".fetch_by_id" do
59
+ before(:each) do
60
+ @tracking_class_id = "3000000000000029839"
61
+ xml = onlineFixture("tracking_class.xml")
62
+ url = @service.url_for_resource(Quickeebooks::Online::Model::TrackingClass.resource_for_singular)
63
+ url += "/#{@tracking_class_id}"
64
+ FakeWeb.register_uri(:get, url, :status => ["200", "OK"], :body => xml)
65
+ end
66
+
67
+ subject { @service.fetch_by_id(3000000000000029839) }
68
+
69
+ it { should be_kind_of(Quickeebooks::Online::Model::TrackingClass) }
70
+ it { subject.name.should == "2012-11-02" }
71
+ it { subject.id.value.should == @tracking_class_id }
72
+ it { subject.class_parent_id.value.should == "3000000000000040889" }
73
+ end
74
+
75
+ describe ".update" do
76
+ before(:each) do
77
+ @tracking_class_id = "3000000000000029839"
78
+ xml = onlineFixture("tracking_class_updated.xml")
79
+ url = @service.url_for_resource(Quickeebooks::Online::Model::TrackingClass.resource_for_singular)
80
+ url += "/#{@tracking_class_id}"
81
+ FakeWeb.register_uri(:post, url, :status => ["200", "OK"], :body => xml)
82
+
83
+ @tracking_class = Quickeebooks::Online::Model::TrackingClass.new
84
+ @tracking_class.id = Quickeebooks::Online::Model::Id.new(@tracking_class_id)
85
+ @tracking_class.name = "2013-11-02"
86
+ @tracking_class.class_parent_id = Quickeebooks::Online::Model::Id.new("3000000000000040889")
87
+ @tracking_class.sync_token = 1
88
+ end
89
+
90
+ subject { @service.update(@tracking_class) }
91
+
92
+ it { should be_kind_of(Quickeebooks::Online::Model::TrackingClass) }
93
+ it { subject.name.should == @tracking_class.name }
94
+ it { subject.id.value.should == @tracking_class.id.value }
95
+ it { subject.class_parent_id.value.should == @tracking_class.class_parent_id.value }
96
+
97
+ end
98
+ end
99
+
@@ -0,0 +1,32 @@
1
+ describe "Quickeebooks::Online::Model::TrackingClass" do
2
+ it { Quickeebooks::Online::Model::TrackingClass.resource_for_singular.should == "class" }
3
+ it { Quickeebooks::Online::Model::TrackingClass.resource_for_collection.should == "classes" }
4
+
5
+ describe "#from_xml" do
6
+ describe "parse tracking class from XML" do
7
+ let(:tracking_class){ Quickeebooks::Online::Model::TrackingClass.from_xml(onlineFixture("tracking_class.xml")) }
8
+
9
+ it{ tracking_class.should be_a Quickeebooks::Online::Model::TrackingClass }
10
+ it{ tracking_class.id.value.should == "3000000000000029839" }
11
+ it{ tracking_class.sync_token.should == 0 }
12
+ it{ tracking_class.name.should == "2012-11-02" }
13
+ it{ tracking_class.class_parent_id == "3000000000000040889" }
14
+ it{ tracking_class.meta_data.create_time == Time.parse("2012-11-15T12:39:48-08:00") }
15
+ it{ tracking_class.meta_data.last_updated_time == Time.parse("2013-03-29T09:26:54-07:00") }
16
+ end
17
+ end
18
+
19
+ describe ".to_xml_ns" do
20
+
21
+ let(:tracking_class) {
22
+ tracking_class = Quickeebooks::Online::Model::TrackingClass.new
23
+ tracking_class.name = "2013-06-21"
24
+ tracking_class.class_parent_id = Quickeebooks::Online::Model::Id.new('3000000000000040634')
25
+ tracking_class
26
+ }
27
+
28
+ subject { tracking_class.to_xml_ns }
29
+
30
+ it { should match("<Class 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\">\n<Name>2013-06-21</Name>\n<ClassParentId>3000000000000040634</ClassParentId>\n</Class>") }
31
+ end
32
+ end
@@ -0,0 +1,18 @@
1
+ describe "Quickeebooks::Windows::Model::Id" do
2
+
3
+ it "can be converted to String" do
4
+ id = Quickeebooks::Windows::Model::Id.new(42)
5
+ id.to_s.should == "42"
6
+ end
7
+
8
+ it "can be converted to Integer" do
9
+ id = Quickeebooks::Windows::Model::Id.new(42)
10
+ id.to_i.should == 42
11
+ end
12
+
13
+ it "can be coerced into a String" do
14
+ id = Quickeebooks::Windows::Model::Id.new(42)
15
+ "/whatever/#{id}".should == "/whatever/42"
16
+ end
17
+
18
+ end
@@ -0,0 +1,36 @@
1
+ describe "Quickeebooks::Windows::Service::PaymentMethod" do
2
+ before(:all) do
3
+ FakeWeb.allow_net_connect = false
4
+ qb_key = "key"
5
+ qb_secret = "secreet"
6
+
7
+ @realm_id = "9991111222"
8
+ @base_uri = "https://qbo.intuit.com/qbo36"
9
+ @oauth_consumer = OAuth::Consumer.new(qb_key, qb_key, {
10
+ :site => "https://oauth.intuit.com",
11
+ :request_token_path => "/oauth/v1/get_request_token",
12
+ :authorize_path => "/oauth/v1/get_access_token",
13
+ :access_token_path => "/oauth/v1/get_access_token"
14
+ })
15
+ @oauth = OAuth::AccessToken.new(@oauth_consumer, "blah", "blah")
16
+ end
17
+
18
+ it "can fetch a list of payment methods" do
19
+ xml = windowsFixture("payment_methods.xml")
20
+ service = Quickeebooks::Windows::Service::PaymentMethod.new
21
+ service.access_token = @oauth
22
+ service.realm_id = @realm_id
23
+
24
+ model = Quickeebooks::Windows::Model::PaymentMethod
25
+ FakeWeb.register_uri(:post,
26
+ service.url_for_resource(model::REST_RESOURCE),
27
+ :status => ["200", "OK"],
28
+ :body => xml)
29
+ methods = service.list
30
+ methods.entries.count.should == 9
31
+
32
+ method1 = methods.entries.first
33
+ method1.id.value.should == "9"
34
+ method1.name.should == "E-Check"
35
+ end
36
+ end
@@ -39,4 +39,34 @@ describe "Quickeebooks::Windows::Service::Payment" do
39
39
  line1.should_not be_nil
40
40
  line1.amount.should == header.total_amount
41
41
  end
42
+
43
+ it "can create a payment" do
44
+ xml = windowsFixture("payment_create_success.xml")
45
+ service = Quickeebooks::Windows::Service::Payment.new
46
+ model = Quickeebooks::Windows::Model::Payment
47
+ customer = Quickeebooks::Windows::Model::Payment.new
48
+
49
+ service.access_token = @oauth
50
+ service.realm_id = @realm_id
51
+ FakeWeb.register_uri(:post, service.url_for_resource(model::REST_RESOURCE), :status => ["200", "OK"], :body => xml)
52
+
53
+ payment = Quickeebooks::Windows::Model::Payment.new
54
+ payment.header = Quickeebooks::Windows::Model::PaymentHeader.new
55
+ payment.header.customer_id = Quickeebooks::Windows::Model::Id.new("4")
56
+ payment.header.payment_method_id = Quickeebooks::Windows::Model::Id.new("8") # Gift Card
57
+
58
+ payment.header.doc_number = "99999"
59
+ payment.header.txn_date = Date.civil(2013, 5, 3)
60
+ payment.header.total_amount = 88
61
+
62
+ line_item = Quickeebooks::Windows::Model::PaymentLineItem.new
63
+ line_item.desc = "Dog Grooming"
64
+ line_item.amount = 88
65
+ payment.line_items << line_item
66
+
67
+ create_response = service.create(payment)
68
+ create_response.success?.should == true
69
+ create_response.success.object_ref.id.value.should == "984434"
70
+ create_response.success.request_name.should == "PaymentAdd"
71
+ end
42
72
  end
@@ -0,0 +1,35 @@
1
+ describe "Quickeebooks::Windows::Service::SyncStatus" do
2
+ before(:all) do
3
+ FakeWeb.allow_net_connect = false
4
+ qb_key = "key"
5
+ qb_secret = "secreet"
6
+
7
+ @realm_id = "9991111222"
8
+ @base_uri = "https://qbo.intuit.com/qbo36"
9
+ @oauth_consumer = OAuth::Consumer.new(qb_key, qb_key, {
10
+ :site => "https://oauth.intuit.com",
11
+ :request_token_path => "/oauth/v1/get_request_token",
12
+ :authorize_path => "/oauth/v1/get_access_token",
13
+ :access_token_path => "/oauth/v1/get_access_token"
14
+ })
15
+ @oauth = OAuth::AccessToken.new(@oauth_consumer, "blah", "blah")
16
+ end
17
+
18
+ it "can fetch a list of sync statuses" do
19
+ xml = windowsFixture("sync_status_responses.xml")
20
+ model = Quickeebooks::Windows::Model::SyncStatusRequest
21
+ service = Quickeebooks::Windows::Service::SyncStatus.new
22
+ service.access_token = @oauth
23
+ service.realm_id = @realm_id
24
+ FakeWeb.register_uri(:post, service.url_for_resource(model::REST_RESOURCE), :status => ["200", "OK"], :body => xml)
25
+
26
+ request = Quickeebooks::Windows::Model::SyncStatusRequest.new
27
+ sync_status_responses = service.retrieve(request)
28
+
29
+ sync_status_responses.entries.count.should == 15
30
+ single_response = sync_status_responses.entries.first
31
+ single_response.ng_id_set.to_i.should == 145058
32
+ single_response.state_desc.should == "Next Gen record created"
33
+ end
34
+
35
+ end
@@ -45,5 +45,4 @@ end
45
45
 
46
46
  def windowsFixture(file)
47
47
  File.new(fixture_path + '/windows/' + file).read
48
- end
49
-
48
+ end
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <BillPayment xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:ns2="http://www.intuit.com/sb/cdm/qbopayroll/v1" xmlns:ns3="http://www.intuit.com/sb/cdm/qbo">
3
+ <Id>13</Id>
4
+ <SyncToken>0</SyncToken>
5
+ <MetaData>
6
+ <CreateTime>2010-09-08T22:46:06-07:00</CreateTime>
7
+ <LastUpdatedTime>2010-09-08T22:46:06-07:00</LastUpdatedTime>
8
+ </MetaData>
9
+ <Header>
10
+ <DocNumber>15</DocNumber>
11
+ <TxnDate>2010-09-08-07:00</TxnDate>
12
+ <EntityId>1</EntityId>
13
+ <APAccountId>31</APAccountId>
14
+ <TotalAmt>5000.00</TotalAmt>
15
+ </Header>
16
+ <Line>
17
+ <Amount>5000.00</Amount>
18
+ <TxnId>12</TxnId>
19
+ </Line>
20
+ </BillPayment>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <BillPayment xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:ns2="http://www.intuit.com/sb/cdm/qbopayroll/v1" xmlns:ns3="http://www.intuit.com/sb/cdm/qbo">
3
+ <Id>13</Id>
4
+ <SyncToken>0</SyncToken>
5
+ <MetaData>
6
+ <CreateTime>2010-09-08T22:46:06-07:00</CreateTime>
7
+ <LastUpdatedTime>2010-09-08T22:46:06-07:00</LastUpdatedTime>
8
+ </MetaData>
9
+ <Header>
10
+ <DocNumber>15</DocNumber>
11
+ <TxnDate>2010-09-08-07:00</TxnDate>
12
+ <EntityId>1</EntityId>
13
+ <APAccountId>31</APAccountId>
14
+ <TotalAmt>75.00</TotalAmt>
15
+ </Header>
16
+ <Line>
17
+ <Amount>75.00</Amount>
18
+ <TxnId>12</TxnId>
19
+ </Line>
20
+ </BillPayment>
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <qbo:SearchResults xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:qbp="http://www.intuit.com/sb/cdm/qbopayroll/v1" xmlns:qbo="http://www.intuit.com/sb/cdm/qbo">
3
+ <qbo:CdmCollections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:BillPayments">
4
+ <BillPayment>
5
+ <Id>16</Id>
6
+ <SyncToken>1</SyncToken>
7
+ <MetaData>
8
+ <CreateTime>2010-09-08T22:46:06-07:00</CreateTime>
9
+ <LastUpdatedTime>010-09-08T22:46:06-07:00</LastUpdatedTime>
10
+ </MetaData>
11
+ <Header>
12
+ <DocNumber>15</DocNumber>
13
+ <TxnDate>2010-09-08-07:00</TxnDate>
14
+ <EntityId>1</EntityId>
15
+ <APAccountId>31</APAccountId>
16
+ <TotalAmt>7000.00</TotalAmt>
17
+ </Header>
18
+ <Line>
19
+ <Amount>7000.00</Amount>
20
+ <TxnId>12</TxnId>
21
+ </Line>
22
+ </BillPayment>
23
+ </qbo:CdmCollections>
24
+ <qbo:Count>1</qbo:Count>
25
+ <qbo:CurrentPage>1</qbo:CurrentPage>
26
+ </qbo:SearchResults>