quickbooks-ruby 0.4.0 → 1.0.16
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|