quickbooks-ruby 0.4.0 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/quickbooks-ruby.rb +65 -13
- data/lib/quickbooks/faraday/middleware/gzip.rb +74 -0
- data/lib/quickbooks/model/base_model.rb +13 -2
- data/lib/quickbooks/model/batch_request.rb +11 -6
- data/lib/quickbooks/model/batch_response.rb +11 -6
- data/lib/quickbooks/model/bill.rb +3 -0
- data/lib/quickbooks/model/change_data_capture.rb +50 -0
- data/lib/quickbooks/model/company_currency.rb +19 -0
- data/lib/quickbooks/model/company_info.rb +2 -1
- data/lib/quickbooks/model/custom_field.rb +18 -0
- data/lib/quickbooks/model/customer.rb +6 -1
- data/lib/quickbooks/model/customer_type.rb +15 -0
- data/lib/quickbooks/model/deposit_line_detail.rb +2 -2
- data/lib/quickbooks/model/description_line_detail.rb +7 -0
- data/lib/quickbooks/model/effective_tax_rate.rb +15 -0
- data/lib/quickbooks/model/exchange_rate.rb +23 -0
- data/lib/quickbooks/model/group_line_detail.rb +2 -1
- data/lib/quickbooks/model/invoice.rb +7 -1
- data/lib/quickbooks/model/invoice_change.rb +2 -1
- data/lib/quickbooks/model/invoice_group_line_detail.rb +14 -0
- data/lib/quickbooks/model/invoice_line_item.rb +34 -4
- data/lib/quickbooks/model/item.rb +11 -3
- data/lib/quickbooks/model/item_group_detail.rb +9 -0
- data/lib/quickbooks/model/item_group_line.rb +20 -0
- data/lib/quickbooks/model/line.rb +12 -0
- data/lib/quickbooks/model/line_ex.rb +9 -0
- data/lib/quickbooks/model/linked_transaction.rb +7 -0
- data/lib/quickbooks/model/physical_address.rb +2 -2
- data/lib/quickbooks/model/preferences.rb +28 -4
- data/lib/quickbooks/model/purchase_change.rb +7 -0
- data/lib/quickbooks/model/purchase_line_item.rb +1 -0
- data/lib/quickbooks/model/purchase_order.rb +3 -1
- data/lib/quickbooks/model/refund_receipt_change.rb +8 -0
- data/lib/quickbooks/model/report.rb +9 -7
- data/lib/quickbooks/model/sales_receipt.rb +4 -2
- data/lib/quickbooks/model/tax_rate.rb +1 -1
- data/lib/quickbooks/model/time_activity.rb +2 -1
- data/lib/quickbooks/model/transfer.rb +21 -0
- data/lib/quickbooks/model/vendor.rb +1 -0
- data/lib/quickbooks/service/access_token.rb +12 -11
- data/lib/quickbooks/service/base_service.rb +148 -24
- data/lib/quickbooks/service/batch.rb +1 -1
- data/lib/quickbooks/service/change_data_capture.rb +24 -0
- data/lib/quickbooks/service/company_currency.rb +18 -0
- data/lib/quickbooks/service/credit_memo.rb +6 -0
- data/lib/quickbooks/service/custom_field.rb +20 -0
- data/lib/quickbooks/service/customer.rb +5 -0
- data/lib/quickbooks/service/customer_type.rb +20 -0
- data/lib/quickbooks/service/estimate.rb +6 -0
- data/lib/quickbooks/service/exchange_rate.rb +25 -0
- data/lib/quickbooks/service/invoice.rb +24 -1
- data/lib/quickbooks/service/item.rb +5 -0
- data/lib/quickbooks/service/payment.rb +13 -0
- data/lib/quickbooks/service/preferences.rb +1 -1
- data/lib/quickbooks/service/purchase_change.rb +16 -0
- data/lib/quickbooks/service/purchase_order.rb +16 -0
- data/lib/quickbooks/service/refund_receipt_change.rb +16 -0
- data/lib/quickbooks/service/responses/methods.rb +17 -0
- data/lib/quickbooks/service/responses/oauth2_http_response.rb +43 -0
- data/lib/quickbooks/service/responses/oauth_http_response.rb +17 -0
- data/lib/quickbooks/service/sales_receipt.rb +30 -0
- data/lib/quickbooks/service/service_crud.rb +21 -0
- data/lib/quickbooks/service/service_crud_json.rb +1 -1
- data/lib/quickbooks/service/transfer.rb +16 -0
- data/lib/quickbooks/service/upload.rb +5 -1
- data/lib/quickbooks/util/logging.rb +4 -0
- data/lib/quickbooks/util/multipart.rb +2 -65
- data/lib/quickbooks/util/name_entity.rb +2 -1
- data/lib/quickbooks/util/query_builder.rb +6 -5
- data/lib/quickbooks/version.rb +1 -1
- metadata +73 -62
@@ -0,0 +1,19 @@
|
|
1
|
+
module Quickbooks
|
2
|
+
module Model
|
3
|
+
class CompanyCurrency < BaseModel
|
4
|
+
include NameEntity::PermitAlterations
|
5
|
+
|
6
|
+
XML_COLLECTION_NODE = 'CompanyCurrency'
|
7
|
+
XML_NODE = 'CompanyCurrency'
|
8
|
+
REST_RESOURCE = 'companycurrency'
|
9
|
+
|
10
|
+
xml_name XML_NODE
|
11
|
+
xml_accessor :id, :from => 'Id'
|
12
|
+
xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
|
13
|
+
xml_accessor :meta_data, :from => 'MetaData', :as => MetaData
|
14
|
+
xml_accessor :name, :from => 'Name'
|
15
|
+
xml_accessor :code, :from => 'Code'
|
16
|
+
xml_accessor :active?, :from => 'Active'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -25,7 +25,8 @@ module Quickbooks
|
|
25
25
|
xml_accessor :name_values, :from => 'NameValue', :as => [NameValue]
|
26
26
|
|
27
27
|
def find_name_value(name)
|
28
|
-
name_values.
|
28
|
+
nv = name_values.find { |nv| nv.name == name }
|
29
|
+
nv ? nv.value : nil
|
29
30
|
end
|
30
31
|
|
31
32
|
def find_boolean_name_value(name)
|
@@ -8,6 +8,24 @@ module Quickbooks
|
|
8
8
|
xml_accessor :boolean_value, :from => 'BooleanValue'
|
9
9
|
xml_accessor :date_value, :from => 'DateValue', :as => Date
|
10
10
|
xml_accessor :number_value, :from => 'NumberValue', :as => Integer
|
11
|
+
|
12
|
+
def value
|
13
|
+
case type
|
14
|
+
when 'BooleanType' then boolean_value == 'true'
|
15
|
+
when 'StringType' then string_value
|
16
|
+
when 'DateType' then date_value
|
17
|
+
when 'NumberType' then number_value
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def value=(value)
|
22
|
+
case type
|
23
|
+
when 'BooleanType' then self.boolean_value = value ? 'true' : 'false'
|
24
|
+
when 'StringType' then self.string_value = value
|
25
|
+
when 'DateType' then self.date_value = value
|
26
|
+
when 'NumberType' then self.number_value = value
|
27
|
+
end
|
28
|
+
end
|
11
29
|
end
|
12
30
|
end
|
13
31
|
end
|
@@ -53,12 +53,17 @@ module Quickbooks
|
|
53
53
|
xml_accessor :default_tax_code_ref, :from => 'DefaultTaxCodeRef', :as => BaseReference
|
54
54
|
xml_accessor :notes, :from => 'Notes'
|
55
55
|
xml_accessor :currency_ref, :from => 'CurrencyRef', :as => BaseReference
|
56
|
+
xml_accessor :tax_exemption_reason_id, :from => 'TaxExemptionReasonId'
|
57
|
+
xml_accessor :primary_tax_identifier, :from => 'PrimaryTaxIdentifier'
|
58
|
+
xml_accessor :customer_type_ref, :from => 'CustomerTypeRef', :as => BaseReference
|
59
|
+
xml_accessor :isproject?, :from => 'IsProject'
|
56
60
|
|
57
61
|
#== Validations
|
58
62
|
validate :names_cannot_contain_invalid_characters
|
59
63
|
validate :email_address_is_valid
|
60
64
|
|
61
|
-
reference_setters :parent_ref, :sales_term_ref, :payment_method_ref, :default_tax_code_ref, :currency_ref
|
65
|
+
reference_setters :parent_ref, :sales_term_ref, :payment_method_ref, :default_tax_code_ref, :currency_ref,
|
66
|
+
:customer_type_ref
|
62
67
|
|
63
68
|
def job?
|
64
69
|
job.to_s == 'true'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Quickbooks
|
2
|
+
module Model
|
3
|
+
class CustomerType < BaseModel
|
4
|
+
XML_COLLECTION_NODE = "CustomerType"
|
5
|
+
XML_NODE = "CustomerType"
|
6
|
+
REST_RESOURCE = 'customertype'
|
7
|
+
|
8
|
+
xml_accessor :id, :from => 'Id'
|
9
|
+
xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
|
10
|
+
xml_accessor :meta_data, :from => 'MetaData', :as => MetaData
|
11
|
+
xml_accessor :name, :from => 'Name'
|
12
|
+
xml_accessor :active?, :from => 'Active'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -2,7 +2,7 @@ module Quickbooks
|
|
2
2
|
module Model
|
3
3
|
class DepositLineDetail < BaseModel
|
4
4
|
|
5
|
-
xml_accessor :
|
5
|
+
xml_accessor :entity_ref, :from => 'Entity', :as => BaseReference
|
6
6
|
xml_accessor :class_ref, :from => 'ClassRef', :as => BaseReference
|
7
7
|
xml_accessor :account_ref, :from => 'AccountRef', :as => BaseReference
|
8
8
|
xml_accessor :payment_method_ref, :from => 'PaymentMethodRef', :as => BaseReference
|
@@ -10,7 +10,7 @@ module Quickbooks
|
|
10
10
|
xml_accessor :txn_type, :from => 'TxnType'
|
11
11
|
xml_accessor :custom_fields, :from => 'CustomField', :as => [CustomField]
|
12
12
|
|
13
|
-
reference_setters :class_ref, :account_ref, :payment_method_ref
|
13
|
+
reference_setters :class_ref, :account_ref, :payment_method_ref, :entity_ref
|
14
14
|
|
15
15
|
end
|
16
16
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
module Quickbooks
|
4
|
+
module Model
|
5
|
+
class EffectiveTaxRate < BaseModel
|
6
|
+
XML_COLLECTION_NODE = "EffectiveTaxRate"
|
7
|
+
XML_NODE = "EffectiveTaxRate"
|
8
|
+
REST_RESOURCE = "effectivetaxrate"
|
9
|
+
|
10
|
+
xml_accessor :rate_value, :from => 'RateValue'
|
11
|
+
xml_accessor :effective_date, :from => 'EffectiveDate', :as => Time
|
12
|
+
xml_accessor :end_date, :from => 'EndDate', :as => Time
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Quickbooks
|
2
|
+
module Model
|
3
|
+
class ExchangeRate < BaseModel
|
4
|
+
XML_COLLECTION_NODE = "ExchangeRate"
|
5
|
+
XML_NODE = "ExchangeRate"
|
6
|
+
REST_RESOURCE = "exchangerate"
|
7
|
+
|
8
|
+
xml_accessor :id, :from => "Id"
|
9
|
+
xml_accessor :sync_token, :from => "SyncToken", :as => Integer
|
10
|
+
xml_accessor :meta_data, :from => "MetaData", :as => MetaData
|
11
|
+
|
12
|
+
xml_accessor :custom_fields, :from => 'CustomField', :as => [CustomField]
|
13
|
+
xml_accessor :source_currency_code, :from => 'SourceCurrencyCode'
|
14
|
+
xml_accessor :target_currency_code, :from => 'TargetCurrencyCode'
|
15
|
+
xml_accessor :rate, :from => 'Rate', :as => BigDecimal, :to_xml => to_xml_big_decimal
|
16
|
+
xml_accessor :as_of_date, :from => 'AsOfDate', :as => Date
|
17
|
+
|
18
|
+
validates_presence_of :source_currency_code, :rate, :as_of_date
|
19
|
+
validates_length_of :source_currency_code, :is => 3
|
20
|
+
validates_length_of :target_currency_code, :is => 3
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -3,7 +3,8 @@ module Quickbooks
|
|
3
3
|
class GroupLineDetail < BaseModel
|
4
4
|
include HasLineItems
|
5
5
|
|
6
|
-
xml_accessor :
|
6
|
+
xml_accessor :id, :from => 'Id'
|
7
|
+
xml_accessor :group_item_ref, :from => 'GroupItemRef', :as => BaseReference
|
7
8
|
xml_accessor :quantity, :from => 'Quantity', :as => BigDecimal, :to_xml => to_xml_big_decimal
|
8
9
|
xml_accessor :line_items, :from => 'Line', :as => [Line]
|
9
10
|
|
@@ -24,6 +24,7 @@ module Quickbooks
|
|
24
24
|
xml_accessor :custom_fields, :from => 'CustomField', :as => [CustomField]
|
25
25
|
xml_accessor :auto_doc_number, :from => 'AutoDocNumber' # See auto_doc_number! method below for usage
|
26
26
|
xml_accessor :doc_number, :from => 'DocNumber'
|
27
|
+
xml_accessor :invoice_link, :from => 'InvoiceLink'
|
27
28
|
xml_accessor :txn_date, :from => 'TxnDate', :as => Date
|
28
29
|
xml_accessor :currency_ref, :from => 'CurrencyRef', :as => BaseReference
|
29
30
|
xml_accessor :exchange_rate, :from => 'ExchangeRate', :as => BigDecimal, :to_xml => to_xml_big_decimal
|
@@ -35,6 +36,7 @@ module Quickbooks
|
|
35
36
|
xml_accessor :customer_memo, :from => 'CustomerMemo'
|
36
37
|
xml_accessor :billing_address, :from => 'BillAddr', :as => PhysicalAddress
|
37
38
|
xml_accessor :shipping_address, :from => 'ShipAddr', :as => PhysicalAddress
|
39
|
+
xml_accessor :ship_from_address, :from => 'ShipFromAddr', :as => PhysicalAddress
|
38
40
|
xml_accessor :class_ref, :from => 'ClassRef', :as => BaseReference
|
39
41
|
xml_accessor :sales_term_ref, :from => 'SalesTermRef', :as => BaseReference
|
40
42
|
xml_accessor :due_date, :from => 'DueDate', :as => Date
|
@@ -48,6 +50,7 @@ module Quickbooks
|
|
48
50
|
xml_accessor :print_status, :from => 'PrintStatus'
|
49
51
|
xml_accessor :email_status, :from => 'EmailStatus'
|
50
52
|
xml_accessor :balance, :from => 'Balance', :as => BigDecimal, :to_xml => to_xml_big_decimal
|
53
|
+
xml_accessor :home_balance, :from => 'HomeBalance', :as => BigDecimal, :to_xml => to_xml_big_decimal
|
51
54
|
xml_accessor :deposit, :from => 'Deposit', :as => BigDecimal, :to_xml => to_xml_big_decimal
|
52
55
|
xml_accessor :department_ref, :from => 'DepartmentRef', :as => BaseReference
|
53
56
|
xml_accessor :allow_ipn_payment?, :from => 'AllowIPNPayment'
|
@@ -57,6 +60,7 @@ module Quickbooks
|
|
57
60
|
xml_accessor :allow_online_credit_card_payment?, :from => 'AllowOnlineCreditCardPayment'
|
58
61
|
xml_accessor :allow_online_ach_payment?, :from => 'AllowOnlineACHPayment'
|
59
62
|
xml_accessor :deposit_to_account_ref, :from => 'DepositToAccountRef', :as => BaseReference
|
63
|
+
xml_accessor :bill_email_cc, :from => 'BillEmailCc', :as => EmailAddress
|
60
64
|
|
61
65
|
|
62
66
|
reference_setters
|
@@ -85,6 +89,9 @@ module Quickbooks
|
|
85
89
|
self.bill_email = EmailAddress.new(email_address_string)
|
86
90
|
end
|
87
91
|
|
92
|
+
def billing_email_cc_address=(email_address_string)
|
93
|
+
self.bill_email_cc = EmailAddress.new(email_address_string)
|
94
|
+
end
|
88
95
|
|
89
96
|
def wants_billing_email_sent!
|
90
97
|
self.email_status = EMAIL_STATUS_NEED_TO_SEND
|
@@ -94,7 +101,6 @@ module Quickbooks
|
|
94
101
|
email_status == EMAIL_STATUS_NEED_TO_SEND
|
95
102
|
end
|
96
103
|
|
97
|
-
|
98
104
|
def existence_of_customer_ref
|
99
105
|
if customer_ref.nil? || (customer_ref && customer_ref.value == 0)
|
100
106
|
errors.add(:customer_ref, "CustomerRef is required and must be a non-zero value.")
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Quickbooks
|
2
2
|
module Model
|
3
|
-
# Refer to:
|
3
|
+
# Refer to:
|
4
|
+
# - https://developer.intuit.com/docs/0100_quickbooks_online/0200_dev_guides/accounting/change_data_capture
|
4
5
|
class InvoiceChange < ChangeModel
|
5
6
|
XML_NODE = "Invoice"
|
6
7
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Quickbooks
|
2
|
+
module Model
|
3
|
+
class InvoiceGroupLineDetail < InvoiceLineItem
|
4
|
+
include HasLineItems
|
5
|
+
|
6
|
+
xml_accessor :id, :from => 'Id'
|
7
|
+
xml_accessor :group_item_ref, :from => 'GroupItemRef', :as => BaseReference
|
8
|
+
xml_accessor :quantity, :from => 'Quantity', :as => BigDecimal, :to_xml => to_xml_big_decimal
|
9
|
+
xml_accessor :line_items, :from => 'Line', :as => [InvoiceLineItem]
|
10
|
+
|
11
|
+
reference_setters :group_item_ref
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,12 +1,16 @@
|
|
1
1
|
module Quickbooks
|
2
2
|
module Model
|
3
3
|
class InvoiceLineItem < BaseModel
|
4
|
+
require 'quickbooks/model/invoice_group_line_detail'
|
4
5
|
|
5
6
|
#== Constants
|
6
7
|
SALES_LINE_ITEM_DETAIL = 'SalesItemLineDetail'
|
7
8
|
SUB_TOTAL_LINE_DETAIL = 'SubTotalLineDetail'
|
8
9
|
PAYMENT_LINE_DETAIL = 'PaymentLineDetail'
|
9
10
|
DISCOUNT_LINE_DETAIL = 'DiscountLineDetail'
|
11
|
+
INVOICE_GROUP_LINE_DETAIL = 'GroupLineDetail'
|
12
|
+
DESCRIPTION_LINE_DETAIL = 'DescriptionLineDetail'
|
13
|
+
DESCRIPTION_DETAIL_TYPE = 'DescriptionOnly'
|
10
14
|
|
11
15
|
xml_accessor :id, :from => 'Id'
|
12
16
|
xml_accessor :line_num, :from => 'LineNum', :as => Integer
|
@@ -15,10 +19,16 @@ module Quickbooks
|
|
15
19
|
xml_accessor :detail_type, :from => 'DetailType'
|
16
20
|
|
17
21
|
#== Various detail types
|
18
|
-
xml_accessor :sales_line_item_detail, :from =>
|
19
|
-
xml_accessor :sub_total_line_detail, :from =>
|
20
|
-
xml_accessor :payment_line_detail, :from =>
|
21
|
-
xml_accessor :discount_line_detail, :from =>
|
22
|
+
xml_accessor :sales_line_item_detail, :from => SALES_LINE_ITEM_DETAIL, :as => SalesItemLineDetail
|
23
|
+
xml_accessor :sub_total_line_detail, :from => SUB_TOTAL_LINE_DETAIL, :as => SubTotalLineDetail
|
24
|
+
xml_accessor :payment_line_detail, :from => PAYMENT_LINE_DETAIL, :as => PaymentLineDetail
|
25
|
+
xml_accessor :discount_line_detail, :from => DISCOUNT_LINE_DETAIL, :as => DiscountLineDetail
|
26
|
+
xml_accessor :group_line_detail, :from => INVOICE_GROUP_LINE_DETAIL, :as => InvoiceGroupLineDetail
|
27
|
+
xml_accessor :description_line_detail, :from => DESCRIPTION_LINE_DETAIL, :as => DescriptionLineDetail
|
28
|
+
|
29
|
+
def group_line_detail?
|
30
|
+
detail_type.to_s == INVOICE_GROUP_LINE_DETAIL
|
31
|
+
end
|
22
32
|
|
23
33
|
def sales_item?
|
24
34
|
detail_type.to_s == SALES_LINE_ITEM_DETAIL
|
@@ -32,6 +42,12 @@ module Quickbooks
|
|
32
42
|
detail_type.to_s == DISCOUNT_LINE_DETAIL
|
33
43
|
end
|
34
44
|
|
45
|
+
def description_only?
|
46
|
+
# The detail type for a description-only line detail differs slightly
|
47
|
+
# from the node name (DescriptionOnly vs DescriptionLineDetail)
|
48
|
+
detail_type.to_s == DESCRIPTION_DETAIL_TYPE
|
49
|
+
end
|
50
|
+
|
35
51
|
def sales_item!
|
36
52
|
self.detail_type = SALES_LINE_ITEM_DETAIL
|
37
53
|
self.sales_line_item_detail = SalesItemLineDetail.new
|
@@ -39,6 +55,13 @@ module Quickbooks
|
|
39
55
|
yield self.sales_line_item_detail if block_given?
|
40
56
|
end
|
41
57
|
|
58
|
+
def group_line_detail!
|
59
|
+
self.detail_type = INVOICE_GROUP_LINE_DETAIL
|
60
|
+
self.group_line_detail = InvoiceGroupLineDetail.new
|
61
|
+
|
62
|
+
yield self.group_line_detail if block_given?
|
63
|
+
end
|
64
|
+
|
42
65
|
def payment_item!
|
43
66
|
self.detail_type = PAYMENT_LINE_DETAIL
|
44
67
|
self.payment_line_detail = PaymentLineDetail.new
|
@@ -53,6 +76,13 @@ module Quickbooks
|
|
53
76
|
yield self.discount_line_detail if block_given?
|
54
77
|
end
|
55
78
|
|
79
|
+
def description_only!
|
80
|
+
self.detail_type = DESCRIPTION_DETAIL_TYPE
|
81
|
+
self.description_line_detail = DescriptionLineDetail.new
|
82
|
+
|
83
|
+
yield self.description_line_detail if block_given?
|
84
|
+
end
|
85
|
+
|
56
86
|
end
|
57
87
|
end
|
58
88
|
end
|
@@ -12,20 +12,25 @@ module Quickbooks
|
|
12
12
|
REST_RESOURCE = 'item'
|
13
13
|
|
14
14
|
INVENTORY_TYPE = 'Inventory'
|
15
|
-
NON_INVENTORY_TYPE = '
|
15
|
+
NON_INVENTORY_TYPE = 'NonInventory'
|
16
16
|
SERVICE_TYPE = 'Service'
|
17
|
-
|
17
|
+
CATEGORY_TYPE = 'Category'
|
18
|
+
ITEM_TYPES = [INVENTORY_TYPE, NON_INVENTORY_TYPE, SERVICE_TYPE, CATEGORY_TYPE]
|
18
19
|
|
19
20
|
xml_name 'Item'
|
20
21
|
xml_accessor :id, :from => 'Id'
|
21
22
|
xml_accessor :sync_token, :from => 'SyncToken', :as => Integer
|
22
23
|
xml_accessor :meta_data, :from => 'MetaData', :as => MetaData
|
23
24
|
xml_accessor :name, :from => 'Name'
|
25
|
+
xml_accessor :sku, :from => 'Sku'
|
24
26
|
xml_accessor :description, :from => 'Description'
|
25
27
|
xml_accessor :active?, :from => 'Active'
|
26
28
|
xml_accessor :sub_item?, :from => 'SubItem'
|
27
29
|
xml_accessor :parent_ref, :from => 'ParentRef', :as => Integer
|
28
30
|
xml_accessor :level, :from => 'Level', :as => Integer
|
31
|
+
xml_accessor :pref_vendor_ref, :from => 'PrefVendorRef', :as => BaseReference
|
32
|
+
xml_accessor :tax_classification_ref, :from => 'TaxClassificationRef', :as => BaseReference
|
33
|
+
xml_accessor :class_ref, :from => 'ClassRef', :as => BaseReference
|
29
34
|
|
30
35
|
# read-only
|
31
36
|
xml_accessor :fully_qualified_name, :from => 'FullyQualifiedName'
|
@@ -45,9 +50,13 @@ module Quickbooks
|
|
45
50
|
xml_accessor :sales_tax_code_ref, :from => 'SalesTaxCodeRef', :as => BaseReference
|
46
51
|
xml_accessor :purchase_tax_code_ref, :from => 'PurchaseTaxCodeRef', :as => BaseReference
|
47
52
|
xml_accessor :inv_start_date, :from => 'InvStartDate', :as => Date
|
53
|
+
xml_accessor :custom_fields, :from => "CustomField", as: [CustomField]
|
54
|
+
xml_accessor :print_grouped_items?, :from => 'PrintGroupedItems'
|
55
|
+
xml_accessor :item_group_details, :from => 'ItemGroupDetail', :as => ItemGroupDetail
|
48
56
|
|
49
57
|
reference_setters :parent_ref, :income_account_ref, :expense_account_ref
|
50
58
|
reference_setters :asset_account_ref, :sales_tax_code_ref, :purchase_tax_code_ref
|
59
|
+
reference_setters :pref_vendor_ref, :tax_classification_ref, :class_ref
|
51
60
|
|
52
61
|
#== Validations
|
53
62
|
validates_length_of :name, :minimum => 1
|
@@ -75,7 +84,6 @@ module Quickbooks
|
|
75
84
|
end
|
76
85
|
errors.empty?
|
77
86
|
end
|
78
|
-
|
79
87
|
end
|
80
88
|
end
|
81
89
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Quickbooks
|
2
|
+
module Model
|
3
|
+
class ItemGroupLine < BaseModel
|
4
|
+
xml_accessor :item_ref, :from => 'ItemRef', :as => BaseReference
|
5
|
+
xml_accessor :quantity, :from => 'Qty'
|
6
|
+
|
7
|
+
def id
|
8
|
+
item_ref.value.to_i
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
item_ref.name
|
13
|
+
end
|
14
|
+
|
15
|
+
def type
|
16
|
+
item_ref.type
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,12 +1,15 @@
|
|
1
1
|
module Quickbooks
|
2
2
|
module Model
|
3
3
|
class Line < BaseModel
|
4
|
+
require 'quickbooks/model/group_line_detail'
|
5
|
+
|
4
6
|
#== Constants
|
5
7
|
SALES_ITEM_LINE_DETAIL = 'SalesItemLineDetail'
|
6
8
|
SUB_TOTAL_LINE_DETAIL = 'SubTotalLineDetail'
|
7
9
|
PAYMENT_LINE_DETAIL = 'PaymentLineDetail'
|
8
10
|
DISCOUNT_LINE_DETAIL = 'DiscountLineDetail'
|
9
11
|
JOURNAL_ENTRY_LINE_DETAIL = 'JournalEntryLineDetail'
|
12
|
+
GROUP_LINE_DETAIL = 'GroupLineDetail'
|
10
13
|
|
11
14
|
xml_accessor :id, :from => 'Id'
|
12
15
|
xml_accessor :line_num, :from => 'LineNum', :as => Integer
|
@@ -14,6 +17,7 @@ module Quickbooks
|
|
14
17
|
xml_accessor :amount, :from => 'Amount', :as => BigDecimal, :to_xml => to_xml_big_decimal
|
15
18
|
xml_accessor :detail_type, :from => 'DetailType'
|
16
19
|
xml_accessor :linked_transactions, :from => 'LinkedTxn', :as => [LinkedTransaction]
|
20
|
+
xml_accessor :line_extras, :from => 'LineEx', :as => LineEx
|
17
21
|
|
18
22
|
#== Various detail types
|
19
23
|
xml_accessor :sales_item_line_detail, :from => 'SalesItemLineDetail', :as => SalesItemLineDetail
|
@@ -21,6 +25,7 @@ module Quickbooks
|
|
21
25
|
xml_accessor :payment_line_detail, :from => 'PaymentLineDetail', :as => PaymentLineDetail
|
22
26
|
xml_accessor :discount_line_detail, :from => 'DiscountLineDetail', :as => DiscountOverride
|
23
27
|
xml_accessor :journal_entry_line_detail, :from => 'JournalEntryLineDetail', :as => JournalEntryLineDetail
|
28
|
+
xml_accessor :group_line_detail, :from => 'GroupLineDetail', :as => GroupLineDetail
|
24
29
|
|
25
30
|
def initialize(*args)
|
26
31
|
self.linked_transactions ||= []
|
@@ -72,6 +77,13 @@ module Quickbooks
|
|
72
77
|
yield self.journal_entry_line_detail if block_given?
|
73
78
|
end
|
74
79
|
|
80
|
+
def group_line!
|
81
|
+
self.detail_type = GROUP_LINE_DETAIL
|
82
|
+
self.group_line_detail = GroupLineDetail.new
|
83
|
+
|
84
|
+
yield self.group_line_detail if block_given?
|
85
|
+
end
|
86
|
+
|
75
87
|
private
|
76
88
|
|
77
89
|
def update_linked_transactions(txn_ids, txn_type)
|