quickbooks 0.4.0 → 0.9.9
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.txt +23 -0
- data/License.txt +54 -0
- data/Manifest.txt +73 -0
- data/README.txt +79 -0
- data/Rakefile +17 -78
- data/lib/quickbooks.rb +153 -7
- data/lib/quickbooks/adaptability.rb +67 -0
- data/lib/quickbooks/adapters/http_adapter.rb +94 -0
- data/lib/quickbooks/adapters/https_adapter.rb +57 -0
- data/lib/quickbooks/adapters/ole_adapter.rb +141 -110
- data/lib/quickbooks/adapters/spew_adapter.rb +39 -0
- data/lib/quickbooks/adapters/tcp_adapter.rb +71 -0
- data/lib/quickbooks/adapters/test_adapter.rb +62 -0
- data/lib/quickbooks/element.rb +385 -0
- data/lib/quickbooks/element_collection.rb +105 -0
- data/lib/quickbooks/extlib.rb +8 -0
- data/lib/quickbooks/extlib/assertions.rb +8 -0
- data/lib/quickbooks/extlib/class.rb +98 -0
- data/lib/quickbooks/extlib/days_and_times.rb +10 -0
- data/lib/quickbooks/extlib/days_and_times/duration.rb +362 -0
- data/lib/quickbooks/extlib/days_and_times/numeric.rb +48 -0
- data/lib/quickbooks/extlib/days_and_times/object.rb +19 -0
- data/lib/quickbooks/extlib/days_and_times/time.rb +137 -0
- data/lib/quickbooks/extlib/hash.rb +327 -0
- data/lib/quickbooks/extlib/hook.rb +366 -0
- data/lib/quickbooks/extlib/inflection.rb +436 -0
- data/lib/quickbooks/extlib/logger.rb +202 -0
- data/lib/quickbooks/extlib/object.rb +162 -0
- data/lib/quickbooks/extlib/pathname.rb +15 -0
- data/lib/quickbooks/extlib/rubygems.rb +38 -0
- data/lib/quickbooks/extlib/string.rb +32 -0
- data/lib/quickbooks/extlib/time.rb +41 -0
- data/lib/quickbooks/model.rb +503 -121
- data/lib/quickbooks/option.rb +95 -0
- data/lib/quickbooks/property.rb +69 -0
- data/lib/quickbooks/ruby_ext.rb +251 -0
- data/lib/quickbooks/type.rb +75 -0
- data/lib/quickbooks/types.rb +58 -0
- data/lib/quickbooks/version.rb +10 -0
- data/lib/quickbooks/xsd.rb +243 -0
- data/lib/quickbooks/xsd/attribute.rb +57 -0
- data/lib/quickbooks/xsd/choice.rb +94 -0
- data/lib/quickbooks/xsd/complex_type.rb +77 -0
- data/lib/quickbooks/xsd/element.rb +214 -0
- data/lib/quickbooks/xsd/group.rb +94 -0
- data/lib/quickbooks/xsd/restriction.rb +51 -0
- data/lib/quickbooks/xsd/sequence.rb +85 -0
- data/lib/quickbooks/xsd/simple_type.rb +87 -0
- data/lib/quickbooks/xsd/union.rb +70 -0
- data/lib/quickbooks/xsd/validation.rb +89 -0
- data/lib/quickbooks/xsd/xml_parse.rb +80 -0
- data/quickbooks.gemspec +36 -0
- data/source/qbxml21_demo.xsd +2223 -0
- data/source/qbxmlops_demo.xsd +483 -0
- data/source/qbxmltypes.xsd +160 -0
- data/spec/association_spec.rb +5 -0
- data/spec/element_collection_spec.rb +8 -0
- data/spec/find_spec.rb +30 -0
- data/spec/lib/quickbooks/element_spec.rb +83 -0
- data/spec/lib/quickbooks/elements/sales_order_add_spec.rb +14 -0
- data/spec/lib/quickbooks/elements/vendor_add_spec.rb +78 -0
- data/spec/lib/quickbooks/model_spec.rb +89 -0
- data/spec/lib/quickbooks/models/customer_spec.rb +52 -0
- data/spec/lib/quickbooks/models/invoice_spec.rb +12 -0
- data/spec/lib/quickbooks/models/sales_order_line_spec.rb +0 -0
- data/spec/lib/quickbooks/models/sales_order_spec.rb +145 -0
- data/spec/lib/quickbooks/xsd/choice_spec.rb +18 -0
- data/spec/pending_spec.rb +11 -0
- data/spec/quickbooks_spec.rb +38 -0
- data/spec/repeatable_spec.rb +20 -0
- data/spec/requires_spec.rb +10 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/validation_spec.rb +24 -0
- metadata +133 -285
- metadata.gz.sig +0 -0
- data/LICENSE +0 -16
- data/README +0 -49
- data/doc/classes/Array.html +0 -368
- data/doc/classes/Array.src/M000026.html +0 -18
- data/doc/classes/Array.src/M000027.html +0 -21
- data/doc/classes/Array.src/M000028.html +0 -18
- data/doc/classes/Array.src/M000029.html +0 -19
- data/doc/classes/Array.src/M000030.html +0 -18
- data/doc/classes/Array.src/M000031.html +0 -23
- data/doc/classes/Array.src/M000032.html +0 -18
- data/doc/classes/Array.src/M000033.html +0 -18
- data/doc/classes/Array.src/M000034.html +0 -18
- data/doc/classes/Array.src/M000035.html +0 -19
- data/doc/classes/Array.src/M000036.html +0 -18
- data/doc/classes/Array.src/M000037.html +0 -23
- data/doc/classes/Array.src/M000038.html +0 -18
- data/doc/classes/Array.src/M000039.html +0 -21
- data/doc/classes/Array.src/M000040.html +0 -18
- data/doc/classes/Array.src/M000041.html +0 -18
- data/doc/classes/Class.html +0 -171
- data/doc/classes/Class.src/M000042.html +0 -18
- data/doc/classes/Class.src/M000043.html +0 -18
- data/doc/classes/Hash.html +0 -516
- data/doc/classes/Hash.src/M000001.html +0 -18
- data/doc/classes/Hash.src/M000002.html +0 -21
- data/doc/classes/Hash.src/M000003.html +0 -18
- data/doc/classes/Hash.src/M000004.html +0 -21
- data/doc/classes/Hash.src/M000005.html +0 -18
- data/doc/classes/Hash.src/M000006.html +0 -20
- data/doc/classes/Hash.src/M000007.html +0 -18
- data/doc/classes/Hash.src/M000008.html +0 -22
- data/doc/classes/Hash.src/M000009.html +0 -18
- data/doc/classes/Hash.src/M000010.html +0 -21
- data/doc/classes/Hash.src/M000011.html +0 -24
- data/doc/classes/Hash.src/M000012.html +0 -18
- data/doc/classes/Hash.src/M000013.html +0 -21
- data/doc/classes/Hash.src/M000014.html +0 -18
- data/doc/classes/Hash.src/M000015.html +0 -21
- data/doc/classes/Hash.src/M000016.html +0 -18
- data/doc/classes/Hash.src/M000017.html +0 -21
- data/doc/classes/Hash.src/M000018.html +0 -27
- data/doc/classes/Hash.src/M000019.html +0 -20
- data/doc/classes/Hash.src/M000020.html +0 -18
- data/doc/classes/Hash.src/M000021.html +0 -18
- data/doc/classes/Hash.src/M000022.html +0 -18
- data/doc/classes/Hash.src/M000023.html +0 -18
- data/doc/classes/Hash.src/M000024.html +0 -18
- data/doc/classes/Hash.src/M000025.html +0 -28
- data/doc/classes/Object.html +0 -278
- data/doc/classes/Object.src/M000044.html +0 -24
- data/doc/classes/Object.src/M000045.html +0 -19
- data/doc/classes/Object.src/M000046.html +0 -24
- data/doc/classes/Object.src/M000047.html +0 -18
- data/doc/classes/Object.src/M000048.html +0 -19
- data/doc/classes/Object.src/M000049.html +0 -18
- data/doc/classes/Object.src/M000050.html +0 -18
- data/doc/classes/Object.src/M000051.html +0 -18
- data/doc/classes/Qbxml.html +0 -131
- data/doc/classes/Qbxml/Request.html +0 -224
- data/doc/classes/Qbxml/Request.src/M000132.html +0 -66
- data/doc/classes/Qbxml/Request.src/M000133.html +0 -19
- data/doc/classes/Qbxml/Request.src/M000134.html +0 -83
- data/doc/classes/Qbxml/RequestSet.html +0 -199
- data/doc/classes/Qbxml/RequestSet.src/M000135.html +0 -22
- data/doc/classes/Qbxml/RequestSet.src/M000136.html +0 -26
- data/doc/classes/Qbxml/RequestSet.src/M000137.html +0 -18
- data/doc/classes/Qbxml/RequestSet.src/M000138.html +0 -22
- data/doc/classes/Qbxml/Response.html +0 -302
- data/doc/classes/Qbxml/Response.src/M000123.html +0 -24
- data/doc/classes/Qbxml/Response.src/M000124.html +0 -19
- data/doc/classes/Qbxml/Response.src/M000125.html +0 -55
- data/doc/classes/Qbxml/Response.src/M000126.html +0 -18
- data/doc/classes/Qbxml/Response.src/M000127.html +0 -18
- data/doc/classes/Qbxml/Response.src/M000128.html +0 -18
- data/doc/classes/Qbxml/Response.src/M000129.html +0 -18
- data/doc/classes/Qbxml/Response.src/M000130.html +0 -18
- data/doc/classes/Qbxml/Response.src/M000131.html +0 -63
- data/doc/classes/Qbxml/ResponseSet.html +0 -244
- data/doc/classes/Qbxml/ResponseSet.src/M000116.html +0 -22
- data/doc/classes/Qbxml/ResponseSet.src/M000117.html +0 -26
- data/doc/classes/Qbxml/ResponseSet.src/M000118.html +0 -24
- data/doc/classes/Qbxml/ResponseSet.src/M000119.html +0 -20
- data/doc/classes/Qbxml/ResponseSet.src/M000120.html +0 -27
- data/doc/classes/Qbxml/ResponseSet.src/M000121.html +0 -18
- data/doc/classes/Qbxml/ResponseSet.src/M000122.html +0 -18
- data/doc/classes/Quickbooks.html +0 -196
- data/doc/classes/Quickbooks/Address.html +0 -139
- data/doc/classes/Quickbooks/Address.src/M000115.html +0 -19
- data/doc/classes/Quickbooks/Base.html +0 -567
- data/doc/classes/Quickbooks/Base.src/M000095.html +0 -18
- data/doc/classes/Quickbooks/Base.src/M000096.html +0 -20
- data/doc/classes/Quickbooks/Base.src/M000097.html +0 -19
- data/doc/classes/Quickbooks/Base.src/M000098.html +0 -18
- data/doc/classes/Quickbooks/Base.src/M000099.html +0 -19
- data/doc/classes/Quickbooks/Base.src/M000100.html +0 -30
- data/doc/classes/Quickbooks/Base.src/M000101.html +0 -22
- data/doc/classes/Quickbooks/Base.src/M000102.html +0 -30
- data/doc/classes/Quickbooks/Base.src/M000103.html +0 -19
- data/doc/classes/Quickbooks/Base.src/M000104.html +0 -19
- data/doc/classes/Quickbooks/Base.src/M000105.html +0 -18
- data/doc/classes/Quickbooks/Base.src/M000106.html +0 -18
- data/doc/classes/Quickbooks/Base.src/M000107.html +0 -19
- data/doc/classes/Quickbooks/Base.src/M000108.html +0 -18
- data/doc/classes/Quickbooks/Base.src/M000109.html +0 -45
- data/doc/classes/Quickbooks/Base.src/M000110.html +0 -18
- data/doc/classes/Quickbooks/Base.src/M000111.html +0 -18
- data/doc/classes/Quickbooks/Base.src/M000112.html +0 -20
- data/doc/classes/Quickbooks/BillAddress.html +0 -113
- data/doc/classes/Quickbooks/CreditCardInfo.html +0 -113
- data/doc/classes/Quickbooks/Customer.html +0 -113
- data/doc/classes/Quickbooks/CustomerTypeRef.html +0 -113
- data/doc/classes/Quickbooks/Deleted.html +0 -113
- data/doc/classes/Quickbooks/ItemSalesTaxRef.html +0 -113
- data/doc/classes/Quickbooks/JobTypeRef.html +0 -113
- data/doc/classes/Quickbooks/ListDeleted.html +0 -139
- data/doc/classes/Quickbooks/ListDeleted.src/M000114.html +0 -18
- data/doc/classes/Quickbooks/ListItem.html +0 -170
- data/doc/classes/Quickbooks/ListItem.src/M000093.html +0 -20
- data/doc/classes/Quickbooks/ListItem.src/M000094.html +0 -18
- data/doc/classes/Quickbooks/Model.html +0 -462
- data/doc/classes/Quickbooks/Model.src/M000073.html +0 -24
- data/doc/classes/Quickbooks/Model.src/M000074.html +0 -19
- data/doc/classes/Quickbooks/Model.src/M000075.html +0 -18
- data/doc/classes/Quickbooks/Model.src/M000076.html +0 -18
- data/doc/classes/Quickbooks/Model.src/M000077.html +0 -18
- data/doc/classes/Quickbooks/Model.src/M000078.html +0 -22
- data/doc/classes/Quickbooks/Model.src/M000079.html +0 -32
- data/doc/classes/Quickbooks/Model.src/M000080.html +0 -32
- data/doc/classes/Quickbooks/Model.src/M000081.html +0 -18
- data/doc/classes/Quickbooks/Model.src/M000082.html +0 -18
- data/doc/classes/Quickbooks/Model.src/M000083.html +0 -22
- data/doc/classes/Quickbooks/Model.src/M000084.html +0 -23
- data/doc/classes/Quickbooks/Model.src/M000085.html +0 -18
- data/doc/classes/Quickbooks/Model.src/M000086.html +0 -21
- data/doc/classes/Quickbooks/Model.src/M000087.html +0 -26
- data/doc/classes/Quickbooks/Model.src/M000088.html +0 -26
- data/doc/classes/Quickbooks/Model.src/M000089.html +0 -26
- data/doc/classes/Quickbooks/Model.src/M000090.html +0 -21
- data/doc/classes/Quickbooks/Model.src/M000091.html +0 -23
- data/doc/classes/Quickbooks/OleAdapter.html +0 -129
- data/doc/classes/Quickbooks/OleAdapter/Connection.html +0 -343
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000058.html +0 -18
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000059.html +0 -19
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000060.html +0 -24
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000061.html +0 -18
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000062.html +0 -18
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000063.html +0 -21
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000064.html +0 -24
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000065.html +0 -20
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000066.html +0 -24
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000067.html +0 -24
- data/doc/classes/Quickbooks/OleAdapter/Ole.html +0 -209
- data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000068.html +0 -21
- data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000069.html +0 -22
- data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000070.html +0 -18
- data/doc/classes/Quickbooks/ParentRef.html +0 -113
- data/doc/classes/Quickbooks/PreferredPaymentMethodRef.html +0 -113
- data/doc/classes/Quickbooks/PriceLevelRef.html +0 -113
- data/doc/classes/Quickbooks/QbxmlDebugAdapter.html +0 -111
- data/doc/classes/Quickbooks/QbxmlDebugAdapter/Connection.html +0 -139
- data/doc/classes/Quickbooks/QbxmlDebugAdapter/Connection.src/M000057.html +0 -18
- data/doc/classes/Quickbooks/Ref.html +0 -146
- data/doc/classes/Quickbooks/Ref.src/M000113.html +0 -18
- data/doc/classes/Quickbooks/SalesRepRef.html +0 -113
- data/doc/classes/Quickbooks/SalesTaxCodeRef.html +0 -113
- data/doc/classes/Quickbooks/ShipAddress.html +0 -113
- data/doc/classes/Quickbooks/TermsRef.html +0 -113
- data/doc/classes/Quickbooks/Transaction.html +0 -154
- data/doc/classes/Quickbooks/Transaction.src/M000071.html +0 -19
- data/doc/classes/Quickbooks/Transaction.src/M000072.html +0 -18
- data/doc/classes/Quickbooks/TxnDeleted.html +0 -139
- data/doc/classes/Quickbooks/TxnDeleted.src/M000092.html +0 -18
- data/doc/classes/String.html +0 -203
- data/doc/classes/String.src/M000052.html +0 -18
- data/doc/classes/String.src/M000053.html +0 -18
- data/doc/classes/String.src/M000054.html +0 -18
- data/doc/classes/String.src/M000055.html +0 -18
- data/doc/classes/String.src/M000056.html +0 -18
- data/doc/created.rid +0 -1
- data/doc/files/LICENSE.html +0 -129
- data/doc/files/README.html +0 -225
- data/doc/files/lib/qbxml/request_rb.html +0 -110
- data/doc/files/lib/qbxml/response_rb.html +0 -109
- data/doc/files/lib/qbxml/support_rb.html +0 -101
- data/doc/files/lib/qbxml_rb.html +0 -122
- data/doc/files/lib/quickbooks/adapters/ole_adapter_rb.html +0 -108
- data/doc/files/lib/quickbooks/adapters/qbxml_debug_adapter_rb.html +0 -108
- data/doc/files/lib/quickbooks/base_rb.html +0 -327
- data/doc/files/lib/quickbooks/model_rb.html +0 -108
- data/doc/files/lib/quickbooks/models/common/address_rb.html +0 -101
- data/doc/files/lib/quickbooks/models/common/all_refs_rb.html +0 -101
- data/doc/files/lib/quickbooks/models/customer/credit_card_info_rb.html +0 -101
- data/doc/files/lib/quickbooks/models/customer_rb.html +0 -110
- data/doc/files/lib/quickbooks/models/deleted_rb.html +0 -101
- data/doc/files/lib/quickbooks/models/list_item_rb.html +0 -101
- data/doc/files/lib/quickbooks/models/transaction_rb.html +0 -101
- data/doc/files/lib/quickbooks/ruby_magic_rb.html +0 -120
- data/doc/files/lib/quickbooks_rb.html +0 -125
- data/doc/fr_class_index.html +0 -64
- data/doc/fr_file_index.html +0 -45
- data/doc/fr_method_index.html +0 -164
- data/doc/index.html +0 -24
- data/doc/rdoc-style.css +0 -208
- data/lib/qbxml.rb +0 -3
- data/lib/qbxml/request.rb +0 -207
- data/lib/qbxml/response.rb +0 -197
- data/lib/qbxml/support.rb +0 -130
- data/lib/quickbooks/adapters/qbxml_debug_adapter.rb +0 -10
- data/lib/quickbooks/base.rb +0 -277
- data/lib/quickbooks/models/common/address.rb +0 -14
- data/lib/quickbooks/models/common/all_refs.rb +0 -37
- data/lib/quickbooks/models/customer.rb +0 -70
- data/lib/quickbooks/models/customer/credit_card_info.rb +0 -5
- data/lib/quickbooks/models/deleted.rb +0 -22
- data/lib/quickbooks/models/list_item.rb +0 -41
- data/lib/quickbooks/models/transaction.rb +0 -49
- data/lib/quickbooks/ruby_magic.rb +0 -213
data/lib/quickbooks/base.rb
DELETED
@@ -1,277 +0,0 @@
|
|
1
|
-
# Contains Quickbooks::Base, which inherits from Quickbooks::Model. Simple objects like BillAddress and CreditCardInfo also
|
2
|
-
# inherit from Quickbooks::Model, but any objects that are stored as their own 'entity' are below Quickbooks::Base in the
|
3
|
-
# inheritance tree. Two models inherit directly from Quickbooks::Base: ListItem and Transaction. All other whole-entity
|
4
|
-
# models inherit from either of these. Only a couple are written so far, as I've had use for them. They're pretty easy to
|
5
|
-
# write though -- take a look at customer.rb, for example: all that needs defining for most models is any filters (and aliases)
|
6
|
-
# specific to that model, and a listing of that model's attributes. If you write a model, please send in your code to
|
7
|
-
# gems@behindlogic.com!
|
8
|
-
#
|
9
|
-
# Inherits from ListItem:
|
10
|
-
# - Account
|
11
|
-
# - Account List
|
12
|
-
# - BillingRate
|
13
|
-
# - Class
|
14
|
-
# - Currency
|
15
|
-
# - Customer
|
16
|
-
# - CustomerMessage
|
17
|
-
# - CustomerType
|
18
|
-
# - DateDrivenTerms
|
19
|
-
# - Employee
|
20
|
-
# - ItemDiscount
|
21
|
-
# - ItemFixedAsset
|
22
|
-
# - ItemGroup
|
23
|
-
# - ItemInventory
|
24
|
-
# - ItemInventoryAssembly
|
25
|
-
# - ItemNonInventory
|
26
|
-
# - ItemOtherCharge
|
27
|
-
# - ItemPayment
|
28
|
-
# - ItemSalesTax
|
29
|
-
# - ItemSalesTaxGroup
|
30
|
-
# - ItemService
|
31
|
-
# - ItemSubtotal
|
32
|
-
# - JobType
|
33
|
-
# - OtherName
|
34
|
-
# - PaymentMethod
|
35
|
-
# - PayrollItemNonWage
|
36
|
-
# - PayrollItemWage
|
37
|
-
# - PriceLevel
|
38
|
-
# - SalesRep
|
39
|
-
# - SalesTaxCode
|
40
|
-
# - ShipMethod
|
41
|
-
# - StandardTerms
|
42
|
-
# - TaxCode
|
43
|
-
# - Template
|
44
|
-
# - ToDo
|
45
|
-
# - Vehicle
|
46
|
-
# - Vendor
|
47
|
-
# - VendorType
|
48
|
-
# Inherits from Transaction:
|
49
|
-
# - Bill
|
50
|
-
# - BillPaymentCheck
|
51
|
-
# - BillPaymentCreditCard
|
52
|
-
# - BuildAssembly
|
53
|
-
# - Charge
|
54
|
-
# - Check
|
55
|
-
# - CreditCardCharge
|
56
|
-
# - CreditCardCredit
|
57
|
-
# - CreditCardRefund
|
58
|
-
# - CreditMemo
|
59
|
-
# - Deposit
|
60
|
-
# - Estimate
|
61
|
-
# - InventoryAdjustment
|
62
|
-
# - Invoice
|
63
|
-
# - ItemReceipt
|
64
|
-
# - JournalEntry
|
65
|
-
# - PurchaseOrder
|
66
|
-
# - ReceivePayment
|
67
|
-
# - SalesOrder
|
68
|
-
# - SalesReceipt
|
69
|
-
# - SalesTaxPaymentCheck
|
70
|
-
# - TimeTracking
|
71
|
-
# - VehicleMileage
|
72
|
-
# - VendorCredit
|
73
|
-
|
74
|
-
require 'quickbooks/model'
|
75
|
-
require 'qbxml'
|
76
|
-
|
77
|
-
module Quickbooks
|
78
|
-
# Base is just base for ListItem and Transaction. It inherits from Model, just as Ref does.
|
79
|
-
#
|
80
|
-
# Some Qbxml specifications require certain finder-options to be placed inside a containing entity, such as:
|
81
|
-
# ...
|
82
|
-
# <DeletedDateRangeFilter>
|
83
|
-
# <FromDeletedDate>#{(Time.now - 5*60*60).xmlschema}</FromDeletedDate>
|
84
|
-
# <ToDeletedDate>#{(Time.now - 3*60*60).xmlschema}</ToDeletedDate>
|
85
|
-
# </DeletedDateRangeFilter>
|
86
|
-
# ...
|
87
|
-
# The Quickbooks Models define aliases to these "inside" options. The equivalent to the above [partial] request:
|
88
|
-
# Quickbooks::Deleted.all(:deleted_after => (Time.now - 5*60*60).xmlschema, :deleted_before => (Time.now - 3*60*60).xmlschema)
|
89
|
-
# (Type-casting hasn't made it in yet.)
|
90
|
-
#
|
91
|
-
# Qbxml makes a special allowance for Deleted items. Much of the time, we'd rather access a model's deleted items through that
|
92
|
-
# model class instead of through the deleted class. So Qbxml allows any class to ask for its deleted items through a call like
|
93
|
-
# this:
|
94
|
-
# Quickbooks::Customer.deleted(:deleted_after => Time.now - 3*60*60)
|
95
|
-
class Base < Model
|
96
|
-
|
97
|
-
self.filter_aliases = {:limit => :max_returned}
|
98
|
-
|
99
|
-
# Stores a log of Qbxml::Response objects that were a result of methods performed on this object.
|
100
|
-
attr_accessor :response_log
|
101
|
-
def response_log #:nodoc:
|
102
|
-
@response_log || (@response_log = [])
|
103
|
-
end
|
104
|
-
|
105
|
-
# Returns success (true/false) status of the last quickbooks communication called from this object.
|
106
|
-
def success?
|
107
|
-
@response_log.last.success?
|
108
|
-
end
|
109
|
-
def inspect #:nodoc:
|
110
|
-
"#<#{self.class.name}:#{self.object_id} #{instance_variables.reject {|i| i.is_one_of?('@response_log', '@original_values')}.map {|i| "#{i}=#{instance_variable_get(i).inspect}"}.join(' ')}>"
|
111
|
-
end
|
112
|
-
class << self
|
113
|
-
|
114
|
-
def use_adapter(adapter)
|
115
|
-
# Should complain if the adapter doesn't exist.
|
116
|
-
require "#{File.dirname(__FILE__)}/adapters/#{adapter.to_s}_adapter"
|
117
|
-
@@connection_adapter = Object.module_eval("::Quickbooks::#{adapter.to_s.camelize}Adapter::Connection", __FILE__, __LINE__)
|
118
|
-
end
|
119
|
-
|
120
|
-
# Establishes a connection to the Quickbooks RDS Server for all Model Classes
|
121
|
-
def establish_connection(*args)
|
122
|
-
@@connection_adapter ||= use_adapter(:ole)
|
123
|
-
@@connection = @@connection_adapter.new(*args)
|
124
|
-
end
|
125
|
-
|
126
|
-
# Returns the current Connection
|
127
|
-
def connection
|
128
|
-
@connection || (@@connection ||= self.establish_connection())
|
129
|
-
end
|
130
|
-
|
131
|
-
# Sets the current Connection.
|
132
|
-
#
|
133
|
-
# This is normally not needed, but in the case that you may want to connect a separate connection to Quickbooks,
|
134
|
-
# you can use this method to explicitly set the connection in a class that inherits from Quickbooks::Base.
|
135
|
-
# Quickbooks::Models::Base.connection = Quickbooks::Connection.new('My Test App', 'C:\\Some File.QBW', 'user', 'pass')
|
136
|
-
def connection=(conn)
|
137
|
-
raise ArgumentError, "Cannot set connection to anything but a (*)Adapter::Connection object" unless conn.class.name =~ /Adapter::Connection$/
|
138
|
-
@connection = conn
|
139
|
-
end
|
140
|
-
|
141
|
-
# Generates a request by sending *args to Qbxml::Request.new, sends the request over the current connection,
|
142
|
-
# and interprets the response using Qbxml::ResponseSet.
|
143
|
-
# The response is then instantiated into an object or an array of objects.
|
144
|
-
#
|
145
|
-
# This method is used mostly internally, but it is the yoke of this library - use it to perform custom requests.
|
146
|
-
def query(obj_or_args,*args)
|
147
|
-
# If an object is sent, we need to reinstantiate the response into that object
|
148
|
-
reinstantiate = if obj_or_args.is_a?(Quickbooks::Base)
|
149
|
-
obj_or_args
|
150
|
-
elsif obj_or_args.is_a?(Class)
|
151
|
-
nil
|
152
|
-
else
|
153
|
-
args.unshift(obj_or_args)
|
154
|
-
nil
|
155
|
-
end
|
156
|
-
objects = [] # This will hold and return the instantiated objects from the quickbooks response
|
157
|
-
# The following is subject to bugginess, IF the response contains more than one object: it will instantiate only the last one.
|
158
|
-
self.request(reinstantiate || self, *args).each { |response| objects << response.instantiate(reinstantiate) } # Does not instantiate if it's an error, but simply records response into response_log
|
159
|
-
objects.length == 1 ? objects[0] : objects
|
160
|
-
end
|
161
|
-
|
162
|
-
# Generates a request using Qbxml::Request, sends it, and returns a Qbxml::ResponseSet object containing the response(s).
|
163
|
-
def request(*args)
|
164
|
-
Qbxml::ResponseSet.new(
|
165
|
-
self.connection.send_xml(
|
166
|
-
Qbxml::Request.new(*args).to_xml
|
167
|
-
)
|
168
|
-
)
|
169
|
-
end
|
170
|
-
|
171
|
-
# Instantiate a new object with just attributes, or an existing object replacing the attributes
|
172
|
-
def instantiate(obj_or_attrs={},attrs={})
|
173
|
-
if obj_or_attrs.is_a?(Quickbooks::Base)
|
174
|
-
obj = obj_or_attrs
|
175
|
-
else
|
176
|
-
obj = allocate
|
177
|
-
attrs = obj_or_attrs
|
178
|
-
end
|
179
|
-
attrs.each do |key,value|
|
180
|
-
if obj.respond_to?(key.to_s.underscore+'=')
|
181
|
-
obj.send(key.to_s.underscore+'=', value)
|
182
|
-
obj.original_values[key.to_s.underscore] = obj.instance_variable_get('@' + key.to_s.underscore).dup
|
183
|
-
end
|
184
|
-
end if attrs
|
185
|
-
obj # Will be either a nice object, or a Qbxml::Error object.
|
186
|
-
end
|
187
|
-
|
188
|
-
# Queries Quickbooks for all of the objects of the current class's type. For example, Quickbooks::Customer.all will return an array of Quickbooks::Customer objects representing all customers.
|
189
|
-
def all(filters={})
|
190
|
-
filters.reverse_merge!(:active_status => 'All')
|
191
|
-
[query(self, :query, filters)].flatten
|
192
|
-
end
|
193
|
-
|
194
|
-
# Queries Quickbooks for the first object of the current class's type. For example, Quickbooks::Customer.first will return a Quickbooks::Customer object representing the first customer.
|
195
|
-
def first(filters={})
|
196
|
-
(filters.merge!(:max_returned => 1) unless filters.keys.include?(:list_id) || filters.keys.include?(:txn_id) || filters.keys.include?(:full_name)) if filters.is_a?(Hash)
|
197
|
-
query(self, :query, filters)
|
198
|
-
end
|
199
|
-
|
200
|
-
# Still in testing... these should be equivalent:
|
201
|
-
# Quickbooks::Customer.deleted(:deleted_before => Time.now) == Quickbooks::Deleted.all(:type => 'Customer', :deleted_before => Time.now)
|
202
|
-
def deleted(filters={})
|
203
|
-
query(self, :deleted, filters)
|
204
|
-
end
|
205
|
-
|
206
|
-
# Creates a new object of the current class's type. For example, Quickbooks::Customer.create(:name => 'Tommy') will create a customer object with a Name of Tommy.
|
207
|
-
def create(*args)
|
208
|
-
new(*args).save
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
# Generates a new object that can be saved into Quickbooks once the required attributes are set.
|
213
|
-
def initialize(*args)
|
214
|
-
super # from Quickbooks::Model - sets the *args into attributes
|
215
|
-
@new_record = true
|
216
|
-
end
|
217
|
-
|
218
|
-
# Returns true if the object is a new object (that doesn't represent an existing object in Quickbooks).
|
219
|
-
def new_record?
|
220
|
-
@new_record
|
221
|
-
end
|
222
|
-
|
223
|
-
# Saves the attributes that have changed.
|
224
|
-
#
|
225
|
-
# If the EditSequence is out of date but none of the changes conflict, the object will be saved to Quickbooks.
|
226
|
-
# But if there are conflicts, the updated values from Quickbooks will be written to the original_values, and false is returned.
|
227
|
-
# This way you can deal with the differences (conflicts), if you so desire, and simply call save again to commit your changes.
|
228
|
-
def save
|
229
|
-
return false unless dirty?
|
230
|
-
self.errors.clear # Clear out any errors: start with a clean slate!
|
231
|
-
if new_record?
|
232
|
-
self.class.query(self, :add)
|
233
|
-
ret = !dirty?
|
234
|
-
@new_record = false if ret
|
235
|
-
else
|
236
|
-
# Smart system that respects EditSequences and other people's changes.
|
237
|
-
# 1) Try to save
|
238
|
-
# 2) When we get a status of 3200, that means our EditSequence is not up to date
|
239
|
-
# 3) Replace self's original_attributes with those just retrieved, and update the automatic attributes, like EditSequence and TimeModified
|
240
|
-
# 4) Return false, return the object dirty but ready to save
|
241
|
-
old_originals = original_values.dup # Save the old_originals so we can detect any attributes that changed since we last loaded the object
|
242
|
-
ret = self.class.query(self, :mod).error? ? false : true # Saves if possible, if EditSequence is out of date, it will read the up-to-date object into original_values
|
243
|
-
# If save failed (dirty?) because of old record (status 3200), but none of the fields conflict (attributes I've modified and are still different aren't the same attributes as any of the attributes someone else updated), then re-save!
|
244
|
-
if dirty? && self.response_log.last.status == 3200 && (dirty_attributes.only(dirty_attributes(old_originals).keys).keys - self.class.read_only.stringify_values).length == (dirty_attributes(old_originals).keys - old_originals.diff(original_values).keys - self.class.read_only.stringify_values).length
|
245
|
-
# 'Revert' fields I didn't modify to equal the values of the more up-to-date record just loaded.
|
246
|
-
# Fields I didn't modify: dirty_attributes - dirty_attributes(old_originals).keys
|
247
|
-
(dirty_attributes - dirty_attributes(old_originals).keys).each_key do |at|
|
248
|
-
self.send(at + '=', original_values[at]) if respond_to?(at + '=')
|
249
|
-
end
|
250
|
-
ret = self.save
|
251
|
-
end
|
252
|
-
end
|
253
|
-
# ret should be a false value if self has errors. Either way, ret gets the errors too.
|
254
|
-
ret.errors << self.errors if self.error?
|
255
|
-
# Should be true or false with an error attached.
|
256
|
-
ret
|
257
|
-
end
|
258
|
-
|
259
|
-
# Reloads the record from Quickbooks, discarding any changes that have been made to it.
|
260
|
-
def reload
|
261
|
-
self.class.query(self, :query)
|
262
|
-
end
|
263
|
-
|
264
|
-
# Destroys a record in Quickbooks. Note that even though Quickbooks will destroy the record,
|
265
|
-
# the record's ListID and DeletedTime can be accessed by doing a query for deleted objects of the appropriate type.
|
266
|
-
def destroy
|
267
|
-
self.class.query(self, :delete).nil?
|
268
|
-
end
|
269
|
-
|
270
|
-
# Usual comparison (super), but add in false if either is a new record.
|
271
|
-
def ==(other)
|
272
|
-
return false unless other.is_a?(self.class)
|
273
|
-
return false if self.new_record? || other.new_record?
|
274
|
-
super
|
275
|
-
end
|
276
|
-
end
|
277
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Quickbooks
|
2
|
-
class Address < Model
|
3
|
-
def self.inherited(klass)
|
4
|
-
super
|
5
|
-
klass.read_write :addr1, :addr2, :addr3, :addr4, :addr5, :city, :state, :postal_code, :country, :note
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
class BillAddress < Address
|
10
|
-
end
|
11
|
-
|
12
|
-
class ShipAddress < Address
|
13
|
-
end
|
14
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module Quickbooks
|
2
|
-
# A reference simply is a link to another object. These are mostly included in other models as attributes.
|
3
|
-
class Ref < Model
|
4
|
-
def self.inherited(klass)
|
5
|
-
klass.read_only :list_id, :full_name
|
6
|
-
end
|
7
|
-
|
8
|
-
# Put in here the connector code for 'association' calls
|
9
|
-
end
|
10
|
-
|
11
|
-
class ParentRef < Ref
|
12
|
-
end
|
13
|
-
|
14
|
-
class CustomerTypeRef < Ref
|
15
|
-
end
|
16
|
-
|
17
|
-
class TermsRef < Ref
|
18
|
-
end
|
19
|
-
|
20
|
-
class SalesRepRef < Ref
|
21
|
-
end
|
22
|
-
|
23
|
-
class SalesTaxCodeRef < Ref
|
24
|
-
end
|
25
|
-
|
26
|
-
class ItemSalesTaxRef < Ref
|
27
|
-
end
|
28
|
-
|
29
|
-
class PreferredPaymentMethodRef < Ref
|
30
|
-
end
|
31
|
-
|
32
|
-
class JobTypeRef < Ref
|
33
|
-
end
|
34
|
-
|
35
|
-
class PriceLevelRef < Ref
|
36
|
-
end
|
37
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'quickbooks/models/common/all_refs'
|
2
|
-
require 'quickbooks/models/common/address'
|
3
|
-
require 'quickbooks/models/customer/credit_card_info'
|
4
|
-
|
5
|
-
module Quickbooks
|
6
|
-
class Customer < ListItem
|
7
|
-
self.valid_filters = ['active_status', 'from_modified_date', 'to_modified_date', 'name_filter', 'name_range_filter', 'total_balance_filter']
|
8
|
-
|
9
|
-
# Properties are in the order required by QBXML
|
10
|
-
read_write :name,
|
11
|
-
:is_active,
|
12
|
-
ParentRef,
|
13
|
-
:company_name,
|
14
|
-
:salutation,
|
15
|
-
:first_name,
|
16
|
-
:middle_name,
|
17
|
-
:last_name,
|
18
|
-
:suffix,
|
19
|
-
BillAddress,
|
20
|
-
ShipAddress,
|
21
|
-
:print_as,
|
22
|
-
:phone,
|
23
|
-
# :mobile, # only in QBOE
|
24
|
-
:pager,
|
25
|
-
:alt_phone,
|
26
|
-
:fax,
|
27
|
-
:email,
|
28
|
-
:contact,
|
29
|
-
:alt_contact,
|
30
|
-
CustomerTypeRef,
|
31
|
-
TermsRef,
|
32
|
-
SalesRepRef,
|
33
|
-
# :open_balance,
|
34
|
-
# :open_balance_date,
|
35
|
-
SalesTaxCodeRef,
|
36
|
-
ItemSalesTaxRef,
|
37
|
-
:sales_tax_country,
|
38
|
-
:resale_nmber,
|
39
|
-
:account_number,
|
40
|
-
:credit_limit,
|
41
|
-
PreferredPaymentMethodRef,
|
42
|
-
CreditCardInfo,
|
43
|
-
:job_status,
|
44
|
-
:job_start_date,
|
45
|
-
:job_projected_end_date,
|
46
|
-
:job_end_date,
|
47
|
-
:job_desc,
|
48
|
-
JobTypeRef,
|
49
|
-
:notes,
|
50
|
-
:is_statement_with_parent,
|
51
|
-
:delivery_method,
|
52
|
-
PriceLevelRef
|
53
|
-
|
54
|
-
# def initialize
|
55
|
-
# @parent_ref = ListItem.new
|
56
|
-
# @bill_address = Address.new
|
57
|
-
# @terms_ref = ListItem.new
|
58
|
-
# @sales_rep_ref = ListItem.new
|
59
|
-
# @sales_tax_code_ref = ListItem.new
|
60
|
-
# @item_sales_tax_ref = ListItem.new
|
61
|
-
# @preferred_payment_method_ref = ListItem.new
|
62
|
-
# @job_type_ref = ListItem.new
|
63
|
-
# @price_live_ref = ListItem.new
|
64
|
-
# @data_ext_ref = ListItem.new
|
65
|
-
# @ship_address = Address.new
|
66
|
-
# @customer_type_ref = ListItem.new
|
67
|
-
# @credit_card_info = CreditCardInfo.new
|
68
|
-
# end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module Quickbooks
|
2
|
-
class Deleted < Base
|
3
|
-
self.filter_aliases = {'type' => 'list_del_type', 'deleted_after' => 'deleted_date_range_filter/from_deleted_date', 'deleted_before' => 'deleted_date_range_filter/to_deleted_date'}
|
4
|
-
end
|
5
|
-
|
6
|
-
class ListDeleted < Deleted
|
7
|
-
self.valid_filters = ['list_del_type', 'deleted_date_range_filter/from_deleted_date', 'deleted_date_range_filter/to_deleted_date']
|
8
|
-
class << self
|
9
|
-
def ListOrTxn
|
10
|
-
'List'
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
class TxnDeleted < Deleted
|
15
|
-
self.valid_filters = ['txn_del_type' 'deleted_date_range_filter/from_deleted_date', 'deleted_date_range_filter/to_deleted_date']
|
16
|
-
class << self
|
17
|
-
def ListOrTxn
|
18
|
-
'Txn'
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module Quickbooks
|
2
|
-
# A ListItem is identified in quickbooks by ListID. All ListItems also have a unique FullName, so if you know
|
3
|
-
# what the FullName of a ListItem is, you can find it that way. Always use the underscore version of finders, such as:
|
4
|
-
# Quickbooks::Customer.first(:list_id => '12345-6789-09876543')
|
5
|
-
# Quickbooks::Deleted.all(:list_del_type => 'Customer', :deleted_after => Time.now - 24*60*60)
|
6
|
-
# (See Deleted for specifics on those options.)
|
7
|
-
class ListItem < Base
|
8
|
-
|
9
|
-
self.valid_filters = ['list_id', 'full_name']
|
10
|
-
self.filter_aliases = {'updated_after' => 'from_modified_date', 'updated_before' => 'to_modified_date'}
|
11
|
-
|
12
|
-
def self.inherited(klass)
|
13
|
-
super
|
14
|
-
# :time_deleted only comes from ListDeleted, but that way all ListDeleted attributes can be instantiated into the respective ListItem model
|
15
|
-
klass.read_only :list_id, :full_name, :edit_sequence, :time_created, :time_modified, :time_deleted
|
16
|
-
end
|
17
|
-
|
18
|
-
class << self
|
19
|
-
def ListOrTxn
|
20
|
-
'List'
|
21
|
-
end
|
22
|
-
|
23
|
-
# def child_types
|
24
|
-
# [ "Account", "Account List", "BillingRate",
|
25
|
-
# "Class", "Currency", "Customer",
|
26
|
-
# "CustomerMessage", "CustomerType",
|
27
|
-
# "DateDrivenTerms", "Employee", "ItemDiscount",
|
28
|
-
# "ItemFixedAsset", "ItemGroup", "ItemInventory",
|
29
|
-
# "ItemInventoryAssembly", "ItemNonInventory",
|
30
|
-
# "ItemOtherCharge", "ItemPayment", "ItemSalesTax",
|
31
|
-
# "ItemSalesTaxGroup", "ItemService", "ItemSubtotal",
|
32
|
-
# "JobType", "OtherName", "PaymentMethod",
|
33
|
-
# "PayrollItemNonWage", "PayrollItemWage", "PriceLevel",
|
34
|
-
# "SalesRep", "SalesTaxCode", "ShipMethod",
|
35
|
-
# "StandardTerms", "TaxCode", "Template", "ToDo",
|
36
|
-
# "Vehicle", "Vendor", "VendorType"
|
37
|
-
# ]
|
38
|
-
# end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|