netsuite 0.8.2 → 0.8.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/.tool-versions +1 -0
- data/Gemfile +4 -3
- data/README.md +129 -38
- data/circle.yml +36 -13
- data/lib/netsuite.rb +40 -19
- data/lib/netsuite/actions/login.rb +20 -1
- data/lib/netsuite/actions/search.rb +1 -6
- data/lib/netsuite/actions/update.rb +6 -2
- data/lib/netsuite/actions/update_list.rb +109 -0
- data/lib/netsuite/actions/upsert.rb +2 -0
- data/lib/netsuite/configuration.rb +34 -4
- data/lib/netsuite/errors.rb +1 -0
- data/lib/netsuite/records/accounting_period.rb +2 -2
- data/lib/netsuite/records/assembly_build.rb +4 -1
- data/lib/netsuite/records/assembly_item.rb +1 -0
- data/lib/netsuite/records/assembly_unbuild.rb +3 -0
- data/lib/netsuite/records/bin_number.rb +18 -0
- data/lib/netsuite/records/bin_number_list.rb +1 -20
- data/lib/netsuite/records/bin_transfer.rb +38 -0
- data/lib/netsuite/records/bin_transfer_inventory.rb +20 -0
- data/lib/netsuite/records/bin_transfer_inventory_list.rb +10 -0
- data/lib/netsuite/records/cash_refund_item.rb +1 -1
- data/lib/netsuite/records/classification.rb +5 -2
- data/lib/netsuite/records/contact.rb +1 -1
- data/lib/netsuite/records/credit_memo.rb +1 -1
- data/lib/netsuite/records/custom_field_list.rb +10 -2
- data/lib/netsuite/records/custom_record.rb +3 -3
- data/lib/netsuite/records/custom_record_ref.rb +1 -0
- data/lib/netsuite/records/customer.rb +5 -4
- data/lib/netsuite/records/customer_credit_cards.rb +36 -0
- data/lib/netsuite/records/customer_credit_cards_list.rb +10 -0
- data/lib/netsuite/records/customer_deposit.rb +9 -6
- data/lib/netsuite/records/customer_payment.rb +6 -2
- data/lib/netsuite/records/customer_payment_credit.rb +17 -0
- data/lib/netsuite/records/customer_payment_credit_list.rb +12 -0
- data/lib/netsuite/records/customer_sales_team.rb +24 -0
- data/lib/netsuite/records/customer_sales_team_list.rb +9 -0
- data/lib/netsuite/records/customer_status.rb +29 -0
- data/lib/netsuite/records/customer_subscription.rb +18 -0
- data/lib/netsuite/records/customer_subscriptions_list.rb +10 -0
- data/lib/netsuite/records/employee.rb +1 -1
- data/lib/netsuite/records/entity_custom_field.rb +53 -0
- data/lib/netsuite/records/estimate.rb +42 -0
- data/lib/netsuite/records/estimate_item.rb +40 -0
- data/lib/netsuite/records/estimate_item_list.rb +11 -0
- data/lib/netsuite/records/inbound_shipment.rb +33 -0
- data/lib/netsuite/records/inbound_shipment_item.rb +39 -0
- data/lib/netsuite/records/inbound_shipment_item_list.rb +11 -0
- data/lib/netsuite/records/inter_company_journal_entry.rb +48 -0
- data/lib/netsuite/records/inter_company_journal_entry_line.rb +28 -0
- data/lib/netsuite/records/inter_company_journal_entry_line_list.rb +14 -0
- data/lib/netsuite/records/inventory_item.rb +3 -2
- data/lib/netsuite/records/invoice.rb +1 -1
- data/lib/netsuite/records/item_fulfillment.rb +1 -1
- data/lib/netsuite/records/lot_numbered_inventory_item.rb +116 -0
- data/lib/netsuite/records/matrix_option_list.rb +12 -4
- data/lib/netsuite/records/message.rb +30 -0
- data/lib/netsuite/records/non_inventory_resale_item.rb +3 -2
- data/lib/netsuite/records/non_inventory_sale_item.rb +1 -1
- data/lib/netsuite/records/other_charge_sale_item.rb +2 -2
- data/lib/netsuite/records/partner.rb +7 -5
- data/lib/netsuite/records/price.rb +17 -0
- data/lib/netsuite/records/price_level.rb +26 -0
- data/lib/netsuite/records/price_list.rb +9 -0
- data/lib/netsuite/records/pricing.rb +20 -0
- data/lib/netsuite/records/pricing_matrix.rb +2 -2
- data/lib/netsuite/records/promotions.rb +26 -0
- data/lib/netsuite/records/promotions_list.rb +9 -0
- data/lib/netsuite/records/return_authorization_item.rb +1 -1
- data/lib/netsuite/records/sales_order.rb +1 -0
- data/lib/netsuite/records/sales_order_item.rb +12 -5
- data/lib/netsuite/records/sales_role.rb +26 -0
- data/lib/netsuite/records/sales_tax_item.rb +3 -1
- data/lib/netsuite/records/serialized_assembly_item.rb +239 -0
- data/lib/netsuite/records/service_resale_item.rb +1 -1
- data/lib/netsuite/records/service_sale_item.rb +1 -1
- data/lib/netsuite/records/support_case.rb +1 -1
- data/lib/netsuite/records/support_case_type.rb +26 -0
- data/lib/netsuite/records/tax_group.rb +2 -2
- data/lib/netsuite/records/transaction_body_custom_field.rb +61 -0
- data/lib/netsuite/records/transaction_column_custom_field.rb +59 -0
- data/lib/netsuite/records/vendor.rb +2 -1
- data/lib/netsuite/records/vendor_credit.rb +2 -0
- data/lib/netsuite/records/vendor_currency.rb +26 -0
- data/lib/netsuite/records/vendor_currency_list.rb +9 -0
- data/lib/netsuite/records/work_order.rb +8 -0
- data/lib/netsuite/support/actions.rb +2 -0
- data/lib/netsuite/support/country.rb +27 -15
- data/lib/netsuite/support/search_result.rb +20 -5
- data/lib/netsuite/utilities.rb +83 -21
- data/lib/netsuite/version.rb +1 -1
- data/netsuite.gemspec +4 -3
- data/spec/netsuite/actions/login_spec.rb +23 -0
- data/spec/netsuite/actions/update_list_spec.rb +107 -0
- data/spec/netsuite/actions/update_spec.rb +42 -0
- data/spec/netsuite/configuration_spec.rb +111 -6
- data/spec/netsuite/records/address_spec.rb +10 -0
- data/spec/netsuite/records/basic_record_spec.rb +19 -2
- data/spec/netsuite/records/bin_number_spec.rb +23 -0
- data/spec/netsuite/records/classification_spec.rb +10 -1
- data/spec/netsuite/records/custom_field_list_spec.rb +39 -4
- data/spec/netsuite/records/custom_record_spec.rb +1 -1
- data/spec/netsuite/records/customer_credit_cards_list_spec.rb +23 -0
- data/spec/netsuite/records/customer_payment_credit_list_spec.rb +26 -0
- data/spec/netsuite/records/customer_payment_spec.rb +1 -6
- data/spec/netsuite/records/customer_sales_team_list_spec.rb +41 -0
- data/spec/netsuite/records/customer_spec.rb +44 -2
- data/spec/netsuite/records/customer_subscription_spec.rb +41 -0
- data/spec/netsuite/records/customer_subscriptions_list_spec.rb +19 -0
- data/spec/netsuite/records/employee_spec.rb +2 -2
- data/spec/netsuite/records/entity_custom_field_spec.rb +34 -0
- data/spec/netsuite/records/estimate_item_list_spec.rb +26 -0
- data/spec/netsuite/records/estimate_item_spec.rb +40 -0
- data/spec/netsuite/records/estimate_spec.rb +216 -0
- data/spec/netsuite/records/inter_company_journal_entry_line_list_spec.rb +26 -0
- data/spec/netsuite/records/inter_company_journal_entry_line_spec.rb +60 -0
- data/spec/netsuite/records/inter_company_journal_entry_spec.rb +156 -0
- data/spec/netsuite/records/inventory_item_spec.rb +57 -0
- data/spec/netsuite/records/matrix_option_list_spec.rb +15 -5
- data/spec/netsuite/records/message_spec.rb +49 -0
- data/spec/netsuite/records/non_inventory_resale_item_spec.rb +165 -0
- data/spec/netsuite/records/non_inventory_sale_item_spec.rb +1 -1
- data/spec/netsuite/records/partner_spec.rb +143 -0
- data/spec/netsuite/records/price_level_spec.rb +16 -0
- data/spec/netsuite/records/pricing_matrix_spec.rb +15 -13
- data/spec/netsuite/records/return_authorization_item_spec.rb +1 -1
- data/spec/netsuite/records/sales_order_item_spec.rb +11 -5
- data/spec/netsuite/records/service_resale_item_spec.rb +134 -0
- data/spec/netsuite/records/support_case_type_spec.rb +22 -0
- data/spec/netsuite/records/transaction_body_custom_field_spec.rb +32 -0
- data/spec/netsuite/records/transaction_column_custom_field_spec.rb +32 -0
- data/spec/netsuite/records/vendor_credit_spec.rb +29 -0
- data/spec/netsuite/records/vendor_spec.rb +1 -1
- data/spec/netsuite/support/search_result_spec.rb +24 -0
- data/spec/netsuite/utilities_spec.rb +44 -6
- data/spec/spec_helper.rb +5 -4
- data/spec/support/fixtures/update_list/update_list_items.xml +22 -0
- data/spec/support/fixtures/update_list/update_list_one_item.xml +18 -0
- data/spec/support/fixtures/update_list/update_list_with_errors.xml +32 -0
- metadata +111 -11
@@ -1,5 +1,6 @@
|
|
1
1
|
# https://system.netsuite.com/help/helpcenter/en_US/Output/Help/SuiteCloudCustomizationScriptingWebServices/SuiteTalkWebServices/login.html
|
2
2
|
|
3
|
+
|
3
4
|
module NetSuite
|
4
5
|
module Actions
|
5
6
|
class Login
|
@@ -27,14 +28,32 @@ module NetSuite
|
|
27
28
|
# </platformCore:wsRoleList>
|
28
29
|
|
29
30
|
def self.call(credentials)
|
31
|
+
|
32
|
+
soap_header = {}
|
33
|
+
if !credentials[:application_id].nil? && !credentials[:application_id].empty?
|
34
|
+
soap_header = NetSuite::Configuration.soap_header.dup
|
35
|
+
soap_header['platformMsgs:ApplicationInfo'] ||= {}
|
36
|
+
soap_header['platformMsgs:ApplicationInfo']['platformMsgs:applicationId'] = credentials[:application_id]
|
37
|
+
end
|
38
|
+
|
30
39
|
passport = NetSuite::Configuration.auth_header.dup
|
40
|
+
|
41
|
+
|
42
|
+
passport['platformMsgs:passport'] ||= {}
|
31
43
|
passport['platformMsgs:passport']['platformCore:email'] = credentials[:email] || ''
|
32
44
|
passport['platformMsgs:passport']['platformCore:password'] = credentials[:password] || ''
|
33
45
|
passport['platformMsgs:passport']['platformCore:role'] = credentials[:role] || ''
|
46
|
+
|
47
|
+
if passport['platformMsgs:tokenPassport']
|
48
|
+
passport['platformMsgs:passport']['platformCore:account'] ||= passport['platformMsgs:tokenPassport']['platformCore:account']
|
49
|
+
end
|
50
|
+
|
34
51
|
passport['platformMsgs:passport']['platformCore:account'] = credentials[:account] if !credentials[:account].nil?
|
35
52
|
|
53
|
+
passport.delete('platformMsgs:tokenPassport')
|
54
|
+
|
36
55
|
begin
|
37
|
-
response = NetSuite::Configuration.connection(soap_header:
|
56
|
+
response = NetSuite::Configuration.connection(soap_header: soap_header).call :login, message: passport
|
38
57
|
rescue Savon::SOAPFault => e
|
39
58
|
error_details = e.to_hash[:fault]
|
40
59
|
|
@@ -232,11 +232,6 @@ module NetSuite
|
|
232
232
|
@success ||= search_result[:status][:@is_success] == 'true'
|
233
233
|
end
|
234
234
|
|
235
|
-
protected
|
236
|
-
def method_name
|
237
|
-
|
238
|
-
end
|
239
|
-
|
240
235
|
module Support
|
241
236
|
def self.included(base)
|
242
237
|
base.extend(ClassMethods)
|
@@ -247,7 +242,7 @@ module NetSuite
|
|
247
242
|
response = NetSuite::Actions::Search.call([self, options], credentials)
|
248
243
|
|
249
244
|
if response.success?
|
250
|
-
NetSuite::Support::SearchResult.new(response, self)
|
245
|
+
NetSuite::Support::SearchResult.new(response, self, credentials)
|
251
246
|
else
|
252
247
|
false
|
253
248
|
end
|
@@ -71,8 +71,12 @@ module NetSuite
|
|
71
71
|
|
72
72
|
module Support
|
73
73
|
def update(options = {}, credentials={})
|
74
|
-
options
|
75
|
-
|
74
|
+
options[:internal_id] = internal_id if respond_to?(:internal_id) && internal_id
|
75
|
+
|
76
|
+
if !options.include?(:external_id) && (respond_to?(:external_id) && external_id)
|
77
|
+
options[:external_id] = external_id
|
78
|
+
end
|
79
|
+
|
76
80
|
response = NetSuite::Actions::Update.call([self.class, options], credentials)
|
77
81
|
@errors = response.errors
|
78
82
|
response.success?
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# https://system.netsuite.com/help/helpcenter/en_US/Output/Help/SuiteCloudCustomizationScriptingWebServices/SuiteTalkWebServices/updateList.html
|
2
|
+
module NetSuite
|
3
|
+
module Actions
|
4
|
+
class UpdateList
|
5
|
+
include Support::Requests
|
6
|
+
|
7
|
+
def initialize(*objects)
|
8
|
+
@objects = objects
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def request(credentials={})
|
14
|
+
NetSuite::Configuration.connection(
|
15
|
+
{ element_form_default: :unqualified }, credentials
|
16
|
+
).call(:update_list, message: request_body)
|
17
|
+
end
|
18
|
+
|
19
|
+
# <soap:Body>
|
20
|
+
# <updateList>
|
21
|
+
# <record xsi:type="listRel:Customer" externalId="ext1">
|
22
|
+
# <listRel:entityId>Shutter Fly</listRel:entityId>
|
23
|
+
# <listRel:companyName>Shutter Fly, Inc</listRel:companyName>
|
24
|
+
# </record>
|
25
|
+
# <record xsi:type="listRel:Customer" externalId="ext2">
|
26
|
+
# <listRel:entityId>Target</listRel:entityId>
|
27
|
+
# <listRel:companyName>Target</listRel:companyName>
|
28
|
+
# </record>
|
29
|
+
# </updateList>
|
30
|
+
# </soap:Body>
|
31
|
+
def request_body
|
32
|
+
attrs = @objects.map do |o|
|
33
|
+
hash = o.to_record.merge({
|
34
|
+
'@xsi:type' => o.record_type
|
35
|
+
})
|
36
|
+
|
37
|
+
if o.respond_to?(:internal_id) && o.internal_id
|
38
|
+
hash['@internalId'] = o.internal_id
|
39
|
+
end
|
40
|
+
|
41
|
+
if o.respond_to?(:external_id) && o.external_id
|
42
|
+
hash['@externalId'] = o.external_id
|
43
|
+
end
|
44
|
+
|
45
|
+
hash
|
46
|
+
end
|
47
|
+
|
48
|
+
{ 'record' => attrs }
|
49
|
+
end
|
50
|
+
|
51
|
+
def response_hash
|
52
|
+
@response_hash ||= Array[@response.body[:update_list_response][:write_response_list][:write_response]].flatten
|
53
|
+
end
|
54
|
+
|
55
|
+
def response_body
|
56
|
+
@response_body ||= response_hash.map { |h| h[:base_ref] }
|
57
|
+
end
|
58
|
+
|
59
|
+
def response_errors
|
60
|
+
if response_hash.any? { |h| h[:status] && h[:status][:status_detail] }
|
61
|
+
@response_errors ||= errors
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def errors
|
66
|
+
errors = response_hash.select { |h| h[:status] && h[:status][:status_detail] }.map do |obj|
|
67
|
+
error_obj = obj[:status][:status_detail]
|
68
|
+
error_obj = [error_obj] if error_obj.class == Hash
|
69
|
+
errors = error_obj.map do |error|
|
70
|
+
NetSuite::Error.new(error)
|
71
|
+
end
|
72
|
+
|
73
|
+
[obj[:base_ref][:@internal_id], errors]
|
74
|
+
end
|
75
|
+
Hash[errors]
|
76
|
+
end
|
77
|
+
|
78
|
+
def success?
|
79
|
+
@success ||= response_hash.all? { |h| h[:status][:@is_success] == 'true' }
|
80
|
+
end
|
81
|
+
|
82
|
+
module Support
|
83
|
+
|
84
|
+
def self.included(base)
|
85
|
+
base.extend(ClassMethods)
|
86
|
+
end
|
87
|
+
|
88
|
+
module ClassMethods
|
89
|
+
def update_list(records, credentials = {})
|
90
|
+
netsuite_records = records.map do |r|
|
91
|
+
if r.kind_of?(self)
|
92
|
+
r
|
93
|
+
else
|
94
|
+
self.new(r)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
response = NetSuite::Actions::UpdateList.call(netsuite_records, credentials)
|
98
|
+
|
99
|
+
if response.success?
|
100
|
+
netsuite_records
|
101
|
+
else
|
102
|
+
false
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -17,7 +17,9 @@ module NetSuite
|
|
17
17
|
def connection(params={}, credentials={})
|
18
18
|
client = Savon.client({
|
19
19
|
wsdl: cached_wsdl || wsdl,
|
20
|
+
endpoint: endpoint,
|
20
21
|
read_timeout: read_timeout,
|
22
|
+
open_timeout: open_timeout,
|
21
23
|
namespaces: namespaces,
|
22
24
|
soap_header: auth_header(credentials).update(soap_header),
|
23
25
|
pretty_print_xml: true,
|
@@ -93,6 +95,18 @@ module NetSuite
|
|
93
95
|
attributes[:api_version] = version
|
94
96
|
end
|
95
97
|
|
98
|
+
def endpoint=(endpoint)
|
99
|
+
attributes[:endpoint] = endpoint
|
100
|
+
end
|
101
|
+
|
102
|
+
def endpoint(endpoint=nil)
|
103
|
+
if endpoint
|
104
|
+
self.endpoint = endpoint
|
105
|
+
else
|
106
|
+
attributes[:endpoint]
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
96
110
|
def sandbox=(flag)
|
97
111
|
if attributes[:sandbox] != flag
|
98
112
|
attributes[:wsdl] = nil
|
@@ -326,6 +340,18 @@ module NetSuite
|
|
326
340
|
end
|
327
341
|
end
|
328
342
|
|
343
|
+
def open_timeout=(timeout)
|
344
|
+
attributes[:open_timeout] = timeout
|
345
|
+
end
|
346
|
+
|
347
|
+
def open_timeout(timeout = nil)
|
348
|
+
if timeout
|
349
|
+
self.open_timeout = timeout
|
350
|
+
else
|
351
|
+
attributes[:open_timeout]
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
329
355
|
def log=(path)
|
330
356
|
attributes[:log] = path
|
331
357
|
end
|
@@ -337,7 +363,10 @@ module NetSuite
|
|
337
363
|
|
338
364
|
def logger(value = nil)
|
339
365
|
if value.nil?
|
340
|
-
|
366
|
+
# if passed a IO object (like StringIO) `empty?` won't exist
|
367
|
+
valid_log = log && !(log.respond_to?(:empty?) && log.empty?)
|
368
|
+
|
369
|
+
attributes[:logger] ||= ::Logger.new(valid_log ? log : $stdout)
|
341
370
|
else
|
342
371
|
attributes[:logger] = value
|
343
372
|
end
|
@@ -357,12 +386,13 @@ module NetSuite
|
|
357
386
|
end
|
358
387
|
|
359
388
|
def log_level(value = nil)
|
360
|
-
self.log_level = value
|
361
|
-
|
389
|
+
self.log_level = value if value
|
390
|
+
|
391
|
+
attributes[:log_level] || :debug
|
362
392
|
end
|
363
393
|
|
364
394
|
def log_level=(value)
|
365
|
-
attributes[:log_level]
|
395
|
+
attributes[:log_level] = value
|
366
396
|
end
|
367
397
|
end
|
368
398
|
end
|
data/lib/netsuite/errors.rb
CHANGED
@@ -8,12 +8,12 @@ module NetSuite
|
|
8
8
|
|
9
9
|
actions :get, :get_list, :add, :delete, :upsert, :search
|
10
10
|
|
11
|
-
fields :allow_non_gl_changes, :end_date, :is_adjust, :is_quarter, :is_year, :period_name, :start_date
|
11
|
+
fields :allow_non_gl_changes, :end_date, :is_adjust, :is_quarter, :is_year, :period_name, :start_date, :closed
|
12
12
|
|
13
13
|
record_refs :parent
|
14
14
|
|
15
15
|
attr_reader :internal_id
|
16
|
-
attr_accessor :external_id
|
16
|
+
attr_accessor :external_id, :search_joins
|
17
17
|
|
18
18
|
def initialize(attributes = {})
|
19
19
|
@internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
|
@@ -5,15 +5,18 @@ module NetSuite
|
|
5
5
|
include Support::RecordRefs
|
6
6
|
include Support::Actions
|
7
7
|
include Support::Records
|
8
|
+
include Support::Fields
|
8
9
|
include Namespaces::TranInvt
|
9
10
|
|
10
11
|
actions :get, :add, :initialize, :delete, :update, :upsert, :upsert_list,
|
11
12
|
:search
|
12
13
|
|
13
14
|
fields :bin_numbers, :buildable, :created_date, :expiration_date,
|
14
|
-
:last_modified_date, :memo, :quantity, :serial_numbers,
|
15
|
+
:last_modified_date, :memo, :quantity, :serial_numbers,
|
15
16
|
:tran_date, :tran_id
|
16
17
|
|
18
|
+
read_only_fields :total
|
19
|
+
|
17
20
|
record_refs :klass, :created_from, :item, :custom_form,
|
18
21
|
:department, :job, :location, :posting_period, :revision,
|
19
22
|
:subsidiary, :units
|
@@ -5,6 +5,7 @@ module NetSuite
|
|
5
5
|
include Support::RecordRefs
|
6
6
|
include Support::Records
|
7
7
|
include Support::Actions
|
8
|
+
include Support::Fields
|
8
9
|
include Namespaces::TranInvt
|
9
10
|
|
10
11
|
actions :get, :add, :initialize, :delete, :update, :upsert, :upsert_list,
|
@@ -14,6 +15,8 @@ module NetSuite
|
|
14
15
|
:last_modified_date, :memo, :quantity, :serial_numbers, :total,
|
15
16
|
:tran_date, :tran_id
|
16
17
|
|
18
|
+
read_only_fields :total
|
19
|
+
|
17
20
|
field :component_list, AssemblyComponentList
|
18
21
|
field :inventory_detail, InventoryDetail
|
19
22
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class BinNumber
|
4
|
+
include Support::Fields
|
5
|
+
include Support::Records
|
6
|
+
include Support::RecordRefs
|
7
|
+
include Namespaces::ListAcct
|
8
|
+
|
9
|
+
record_ref :bin_number
|
10
|
+
|
11
|
+
fields :preferred_bin, :location
|
12
|
+
|
13
|
+
def initialize(attributes = {})
|
14
|
+
initialize_from_attributes_hash(attributes)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,30 +1,11 @@
|
|
1
1
|
module NetSuite
|
2
2
|
module Records
|
3
|
-
# TODO this is fairly messy: shouldn't mix multiple classes in one file
|
4
|
-
# might be possible to trash the GenericField as well
|
5
|
-
|
6
|
-
class GenericField
|
7
|
-
include Support::Attributes
|
8
|
-
include Support::Fields
|
9
|
-
|
10
|
-
def initialize(attributes = {})
|
11
|
-
self.attributes = attributes
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class BinNumber < GenericField
|
16
|
-
include Support::Records
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
3
|
class BinNumberList < Support::Sublist
|
21
|
-
include Namespaces::
|
22
|
-
# include Namespaces::ListAcct
|
4
|
+
include Namespaces::ListAcct
|
23
5
|
|
24
6
|
sublist :bin_number, BinNumber
|
25
7
|
|
26
8
|
alias :bin_numbers :bin_number
|
27
|
-
|
28
9
|
end
|
29
10
|
end
|
30
11
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class BinTransfer
|
4
|
+
include Support::Fields
|
5
|
+
include Support::RecordRefs
|
6
|
+
include Support::Records
|
7
|
+
include Support::Actions
|
8
|
+
include Namespaces::TranInvt
|
9
|
+
|
10
|
+
actions :get, :get_list, :add, :initialize, :delete, :update, :upsert, :search
|
11
|
+
|
12
|
+
fields :created_date, :last_modified_date, :memo, :subsidiary, :tran_date, :tran_id
|
13
|
+
|
14
|
+
record_refs :location
|
15
|
+
|
16
|
+
field :custom_field_list, CustomFieldList
|
17
|
+
field :inventory_list, BinTransferInventoryList
|
18
|
+
|
19
|
+
attr_reader :internal_id
|
20
|
+
attr_accessor :external_id
|
21
|
+
|
22
|
+
def initialize(attributes = {})
|
23
|
+
@internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
|
24
|
+
@external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
|
25
|
+
initialize_from_attributes_hash(attributes)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.search_class_name
|
29
|
+
"Transaction"
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.search_class_namespace
|
33
|
+
'tranSales'
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class BinTransferInventory
|
4
|
+
include Support::Records
|
5
|
+
include Support::Fields
|
6
|
+
include Support::RecordRefs
|
7
|
+
include Namespaces::TranInvt
|
8
|
+
|
9
|
+
fields :description, :from_bins, :item_units_label, :line, :preferred_bin, :quantity, :to_bins
|
10
|
+
|
11
|
+
field :inventory_detail, InventoryDetail
|
12
|
+
|
13
|
+
record_refs :item
|
14
|
+
|
15
|
+
def initialize(attributes = {})
|
16
|
+
initialize_from_attributes_hash(attributes)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|