netsuite 0.2.2 → 0.2.3
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 +4 -4
- data/lib/netsuite.rb +1 -0
- data/lib/netsuite/records/account.rb +2 -1
- data/lib/netsuite/records/contact.rb +1 -1
- data/lib/netsuite/records/customer_deposit.rb +1 -1
- data/lib/netsuite/records/matrix_option_list.rb +33 -4
- data/lib/netsuite/records/sales_order_item.rb +4 -2
- data/lib/netsuite/records/service_sale_item.rb +45 -0
- data/lib/netsuite/version.rb +1 -1
- data/netsuite.gemspec +2 -2
- data/spec/netsuite/records/matrix_option_list_spec.rb +25 -0
- data/spec/netsuite/records/sales_order_spec.rb +11 -0
- data/spec/netsuite/records/service_sale_item_spec.rb +134 -0
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c137a01aff81975a25856d832bc61d90b37468c5
|
4
|
+
data.tar.gz: afbbaf1726823511a72bef89702f09011c87ceb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec904bf4c128f98da10e50688e3b2ffbfc81fe933c96001fce48f9e9788c1d2df5067206ce19a129296930447b8560de4204776f3c8da4489676c4d57a88be68
|
7
|
+
data.tar.gz: 8b1d944d17d8af49ce0fee65a965166766e50645ee1c3c759c8178fcfbb094f22e5d83f83cb1e1a8b15a3c614a84630cd5ab15acff64574d77fb5094264ba62f
|
data/lib/netsuite.rb
CHANGED
@@ -105,6 +105,7 @@ module NetSuite
|
|
105
105
|
autoload :SalesOrder, 'netsuite/records/sales_order'
|
106
106
|
autoload :SalesOrderItem, 'netsuite/records/sales_order_item'
|
107
107
|
autoload :SalesOrderItemList, 'netsuite/records/sales_order_item_list'
|
108
|
+
autoload :ServiceSaleItem, 'netsuite/records/service_sale_item'
|
108
109
|
autoload :ShipAddress, 'netsuite/records/ship_address'
|
109
110
|
autoload :SupportCase, 'netsuite/records/support_case'
|
110
111
|
autoload :Task, 'netsuite/records/task'
|
@@ -5,8 +5,9 @@ module NetSuite
|
|
5
5
|
include Support::RecordRefs
|
6
6
|
include Support::Records
|
7
7
|
include Support::Actions
|
8
|
+
include Namespaces::ListAcct
|
8
9
|
|
9
|
-
actions :get, :add, :delete
|
10
|
+
actions :get, :add, :delete, :search
|
10
11
|
|
11
12
|
fields :acct_name, :acct_number, :acct_type, :cash_flow_rate, :cur_doc_num, :description, :eliminate, :exchange_rate,
|
12
13
|
:general_rate, :include_children, :inventory, :is_inactive, :opening_balance, :revalue, :tran_date
|
@@ -7,7 +7,7 @@ module NetSuite
|
|
7
7
|
include Support::Actions
|
8
8
|
include Namespaces::ListRel
|
9
9
|
|
10
|
-
actions :get, :add, :delete, :search
|
10
|
+
actions :get, :add, :delete, :search, :update
|
11
11
|
|
12
12
|
fields :salutation, :first_name, :middle_name, :last_name, :title, :phone, :fax, :email, :default_address,
|
13
13
|
:entity_id, :phonetic_name, :alt_email, :office_phone, :home_phone, :mobile_phone, :supervisor_phone,
|
@@ -1,13 +1,42 @@
|
|
1
1
|
module NetSuite
|
2
2
|
module Records
|
3
3
|
class MatrixOptionList
|
4
|
+
# Deals with both hash and arrays of attributes[:matrix_option_list]
|
5
|
+
#
|
6
|
+
# Hash:
|
7
|
+
#
|
8
|
+
# <listAcct:matrixOptionList>
|
9
|
+
# <listAcct:matrixOption internalId="47" scriptId="custitem15">
|
10
|
+
# <platformCore:value internalId="2" typeId="36"/>
|
11
|
+
# </listAcct:matrixOption>
|
12
|
+
# </listAcct:matrixOptionList>
|
13
|
+
#
|
14
|
+
# Array:
|
15
|
+
#
|
16
|
+
# <listAcct:matrixOptionList>
|
17
|
+
# <listAcct:matrixOption internalId="45" scriptId="custitem13">
|
18
|
+
# <platformCore:value internalId="4" typeId="28"/>
|
19
|
+
# </listAcct:matrixOption>
|
20
|
+
# <listAcct:matrixOption internalId="46" scriptId="custitem14">
|
21
|
+
# <platformCore:value internalId="1" typeId="29"/>
|
22
|
+
# </listAcct:matrixOption>
|
23
|
+
# </listAcct:matrixOptionList>
|
24
|
+
#
|
4
25
|
def initialize(attributes = {})
|
5
|
-
attributes[:matrix_option]
|
26
|
+
case attributes[:matrix_option]
|
27
|
+
when Hash
|
6
28
|
options << OpenStruct.new(
|
7
|
-
type_id:
|
8
|
-
value_id:
|
29
|
+
type_id: attributes[:matrix_option][:value][:'@type_id'],
|
30
|
+
value_id: attributes[:matrix_option][:value][:'@internal_id']
|
9
31
|
)
|
10
|
-
|
32
|
+
when Array
|
33
|
+
attributes[:matrix_option].each do |option|
|
34
|
+
options << OpenStruct.new(
|
35
|
+
type_id: option[:value][:'@type_id'],
|
36
|
+
value_id: option[:value][:'@internal_id']
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
11
40
|
end
|
12
41
|
|
13
42
|
def options
|
@@ -1,5 +1,8 @@
|
|
1
1
|
module NetSuite
|
2
2
|
module Records
|
3
|
+
# Beaware of possible gotcha when closing sales order. You need to set the
|
4
|
+
# SalesOrder#custom_form to "Basic Sales Order Form" otherwise you might get
|
5
|
+
# errors when trying to close it
|
3
6
|
class SalesOrderItem
|
4
7
|
include Support::Fields
|
5
8
|
include Support::RecordRefs
|
@@ -10,7 +13,7 @@ module NetSuite
|
|
10
13
|
:gift_cert_message, :gift_cert_number, :gift_cert_recipient_email, :gift_cert_recipient_name, :gross_amt, :is_taxable,
|
11
14
|
:line, :order_line, :quantity, :rate, :rev_rec_end_date, :rev_rec_start_date, :rev_rec_term_in_months, :serial_numbers,
|
12
15
|
:shipping_cost, :tax1_amt, :tax_rate1, :tax_rate2, :vsoe_allocation, :vsoe_amount, :vsoe_deferral, :vsoe_delivered,
|
13
|
-
:vsoe_permit_discount, :vsoe_price
|
16
|
+
:vsoe_permit_discount, :vsoe_price, :is_closed
|
14
17
|
|
15
18
|
field :custom_field_list, CustomFieldList
|
16
19
|
|
@@ -36,7 +39,6 @@ module NetSuite
|
|
36
39
|
end
|
37
40
|
rec
|
38
41
|
end
|
39
|
-
|
40
42
|
end
|
41
43
|
end
|
42
44
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class ServiceSaleItem
|
4
|
+
include Support::Fields
|
5
|
+
include Support::RecordRefs
|
6
|
+
include Support::Records
|
7
|
+
include Support::Actions
|
8
|
+
include Namespaces::ListAcct
|
9
|
+
|
10
|
+
actions :get, :add, :delete
|
11
|
+
|
12
|
+
fields :available_to_partners, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :create_job, :created_date,
|
13
|
+
:display_name, :dont_show_price, :enforce_min_qty_internally, :exclude_from_sitemap, :featured_description,
|
14
|
+
:include_children, :is_donation_item, :is_fulfillable, :is_gco_compliant, :is_inactive, :is_online, :is_taxable,
|
15
|
+
:item_id, :last_modified_date, :matrix_option_list, :matrix_type, :max_donation_amount, :meta_tag_html,
|
16
|
+
:minimum_quantity, :minimum_quantity_units, :no_price_message, :offer_support, :on_special, :out_of_stock_behavior,
|
17
|
+
:out_of_stock_message, :overall_quantity_pricing_type, :page_title, :presentation_item_list, :prices_include_tax,
|
18
|
+
:pricing_matrix, :rate, :related_items_description, :sales_description, :search_keywords,
|
19
|
+
:show_default_donation_amount, :site_category_list, :sitemap_priority, :soft_descriptor, :specials_description,
|
20
|
+
:store_description, :store_detailed_description, :store_display_name, :translations_list, :upc_code, :url_component,
|
21
|
+
:use_marginal_rates, :vsoe_deferral, :vsoe_delivered, :vsoe_permit_discount, :vsoe_price, :vsoe_sop_group
|
22
|
+
|
23
|
+
# item_task_templates_list
|
24
|
+
# billing_rates_matrix -- RecordRef, via listAcct::ItemOptionsList
|
25
|
+
|
26
|
+
record_refs :billing_schedule, :cost_category, :custom_form, :deferred_revenue_account, :department, :income_account,
|
27
|
+
:issue_product, :item_options_list, :klass, :location, :parent, :pricing_group, :purchase_tax_code,
|
28
|
+
:quantity_pricing_schedule, :rev_rec_schedule, :sale_unit, :sales_tax_code, :store_display_image,
|
29
|
+
:store_display_thumbnail, :store_item_template, :subsidiary_list, :tax_schedule, :units_type
|
30
|
+
|
31
|
+
field :pricing_matrix, PricingMatrix
|
32
|
+
field :custom_field_list, CustomFieldList
|
33
|
+
|
34
|
+
attr_reader :internal_id
|
35
|
+
attr_accessor :external_id
|
36
|
+
|
37
|
+
def initialize(attributes = {})
|
38
|
+
@internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
|
39
|
+
@external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
|
40
|
+
initialize_from_attributes_hash(attributes)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/netsuite/version.rb
CHANGED
data/netsuite.gemspec
CHANGED
@@ -3,9 +3,9 @@ require File.expand_path('../lib/netsuite/version', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ['Ryan Moran', 'Michael Bianco']
|
6
|
-
gem.email = ['ryan.moran@gmail.com', '
|
6
|
+
gem.email = ['ryan.moran@gmail.com', 'mike@cliffsidemedia.com']
|
7
7
|
gem.description = %q{NetSuite SuiteTalk API Wrapper}
|
8
|
-
gem.summary = %q{NetSuite SuiteTalk API Wrapper}
|
8
|
+
gem.summary = %q{NetSuite SuiteTalk API (SOAP) Wrapper}
|
9
9
|
gem.homepage = 'https://github.com/RevolutionPrep/netsuite'
|
10
10
|
|
11
11
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module NetSuite
|
5
|
+
module Records
|
6
|
+
describe MatrixOptionList do
|
7
|
+
it "deals with hash properly" do
|
8
|
+
hash = {:value=>{:@internal_id=>"1", :@type_id=>"36"}}
|
9
|
+
|
10
|
+
list = described_class.new({ matrix_option: hash })
|
11
|
+
expect(list.options.first.value_id).to eq "1"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "deals with arrays properly" do
|
15
|
+
array = [
|
16
|
+
{:value=>{:@internal_id=>"2", :@type_id=>"28"}},
|
17
|
+
{:value=>{:@internal_id=>"1", :@type_id=>"29"}}
|
18
|
+
]
|
19
|
+
|
20
|
+
list = described_class.new({ matrix_option: array })
|
21
|
+
expect(list.options.first.value_id).to eq "2"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -203,4 +203,15 @@ describe NetSuite::Records::SalesOrder do
|
|
203
203
|
end
|
204
204
|
end
|
205
205
|
|
206
|
+
pending "closing a sales order" do
|
207
|
+
it "closes each line to close the sales order" do
|
208
|
+
attributes = sales_order.attributes
|
209
|
+
attributes[:item_list].items.each do |item|
|
210
|
+
item.is_closed = true
|
211
|
+
item.attributes = item.attributes.slice(:line, :is_closed)
|
212
|
+
end
|
213
|
+
|
214
|
+
sales_order.update({ item_list: attributes[:item_list] })
|
215
|
+
end
|
216
|
+
end
|
206
217
|
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NetSuite::Records::ServiceSaleItem do
|
4
|
+
let(:item) { NetSuite::Records::ServiceSaleItem.new }
|
5
|
+
|
6
|
+
it 'has the right fields' do
|
7
|
+
[
|
8
|
+
:available_to_partners, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :create_job, :created_date,
|
9
|
+
:display_name, :dont_show_price, :enforce_min_qty_internally, :exclude_from_sitemap, :featured_description,
|
10
|
+
:include_children, :is_donation_item, :is_fulfillable, :is_gco_compliant, :is_inactive, :is_online, :is_taxable,
|
11
|
+
:item_id, :last_modified_date, :matrix_option_list, :matrix_type, :max_donation_amount, :meta_tag_html,
|
12
|
+
:minimum_quantity, :minimum_quantity_units, :no_price_message, :offer_support, :on_special, :out_of_stock_behavior,
|
13
|
+
:out_of_stock_message, :overall_quantity_pricing_type, :page_title, :presentation_item_list, :prices_include_tax,
|
14
|
+
:rate, :related_items_description, :sales_description, :search_keywords,
|
15
|
+
:show_default_donation_amount, :site_category_list, :sitemap_priority, :soft_descriptor, :specials_description,
|
16
|
+
:store_description, :store_detailed_description, :store_display_name, :translations_list, :upc_code, :url_component,
|
17
|
+
:use_marginal_rates, :vsoe_deferral, :vsoe_delivered, :vsoe_permit_discount, :vsoe_price, :vsoe_sop_group
|
18
|
+
].each do |field|
|
19
|
+
item.should have_field(field)
|
20
|
+
end
|
21
|
+
|
22
|
+
# TODO there is a probably a more robust way to test this
|
23
|
+
item.custom_field_list.class.should == NetSuite::Records::CustomFieldList
|
24
|
+
item.pricing_matrix.class.should == NetSuite::Records::PricingMatrix
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'has the right record_refs' do
|
28
|
+
[
|
29
|
+
:billing_schedule, :cost_category, :custom_form, :deferred_revenue_account, :department, :income_account,
|
30
|
+
:issue_product, :item_options_list, :klass, :location, :parent, :pricing_group, :purchase_tax_code,
|
31
|
+
:quantity_pricing_schedule, :rev_rec_schedule, :sale_unit, :sales_tax_code, :store_display_image,
|
32
|
+
:store_display_thumbnail, :store_item_template, :subsidiary_list, :tax_schedule, :units_type
|
33
|
+
].each do |record_ref|
|
34
|
+
item.should have_record_ref(record_ref)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '.get' do
|
39
|
+
context 'when the response is successful' do
|
40
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :item_id => 'penguins' }) }
|
41
|
+
|
42
|
+
it 'returns a ServiceSaleItem instance populated with the data from the response object' do
|
43
|
+
NetSuite::Actions::Get.should_receive(:call).with(NetSuite::Records::ServiceSaleItem, :external_id => 20).and_return(response)
|
44
|
+
customer = NetSuite::Records::ServiceSaleItem.get(:external_id => 20)
|
45
|
+
customer.should be_kind_of(NetSuite::Records::ServiceSaleItem)
|
46
|
+
customer.item_id.should eql('penguins')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'when the response is unsuccessful' do
|
51
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
52
|
+
|
53
|
+
it 'raises a RecordNotFound exception' do
|
54
|
+
NetSuite::Actions::Get.should_receive(:call).with(NetSuite::Records::ServiceSaleItem, :external_id => 20).and_return(response)
|
55
|
+
lambda {
|
56
|
+
NetSuite::Records::ServiceSaleItem.get(:external_id => 20)
|
57
|
+
}.should raise_error(NetSuite::RecordNotFound,
|
58
|
+
/NetSuite::Records::ServiceSaleItem with OPTIONS=(.*) could not be found/)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#add' do
|
64
|
+
# let(:item) { NetSuite::Records::ServiceSaleItem.new(:cost => 100, :is_inactive => false) }
|
65
|
+
|
66
|
+
context 'when the response is successful' do
|
67
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
|
68
|
+
|
69
|
+
it 'returns true' do
|
70
|
+
NetSuite::Actions::Add.should_receive(:call).
|
71
|
+
with(item).
|
72
|
+
and_return(response)
|
73
|
+
item.add.should be_true
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'when the response is unsuccessful' do
|
78
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
79
|
+
|
80
|
+
it 'returns false' do
|
81
|
+
NetSuite::Actions::Add.should_receive(:call).
|
82
|
+
with(item).
|
83
|
+
and_return(response)
|
84
|
+
item.add.should be_false
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#delete' do
|
90
|
+
context 'when the response is successful' do
|
91
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
|
92
|
+
|
93
|
+
it 'returns true' do
|
94
|
+
NetSuite::Actions::Delete.should_receive(:call).
|
95
|
+
with(item).
|
96
|
+
and_return(response)
|
97
|
+
item.delete.should be_true
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'when the response is unsuccessful' do
|
102
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
103
|
+
|
104
|
+
it 'returns false' do
|
105
|
+
NetSuite::Actions::Delete.should_receive(:call).
|
106
|
+
with(item).
|
107
|
+
and_return(response)
|
108
|
+
item.delete.should be_false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#to_record' do
|
114
|
+
before do
|
115
|
+
item.item_id = 'penguins'
|
116
|
+
item.is_online = true
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'can represent itself as a SOAP record' do
|
120
|
+
record = {
|
121
|
+
'listAcct:itemId' => 'penguins',
|
122
|
+
'listAcct:isOnline' => true
|
123
|
+
}
|
124
|
+
item.to_record.should eql(record)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe '#record_type' do
|
129
|
+
it 'returns a string of the SOAP type' do
|
130
|
+
item.record_type.should eql('listAcct:ServiceSaleItem')
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netsuite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Moran
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-04-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: savon
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
description: NetSuite SuiteTalk API Wrapper
|
43
43
|
email:
|
44
44
|
- ryan.moran@gmail.com
|
45
|
-
-
|
45
|
+
- mike@cliffsidemedia.com
|
46
46
|
executables: []
|
47
47
|
extensions: []
|
48
48
|
extra_rdoc_files: []
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- lib/netsuite/records/sales_order.rb
|
137
137
|
- lib/netsuite/records/sales_order_item.rb
|
138
138
|
- lib/netsuite/records/sales_order_item_list.rb
|
139
|
+
- lib/netsuite/records/service_sale_item.rb
|
139
140
|
- lib/netsuite/records/ship_address.rb
|
140
141
|
- lib/netsuite/records/support_case.rb
|
141
142
|
- lib/netsuite/records/task.rb
|
@@ -192,6 +193,7 @@ files:
|
|
192
193
|
- spec/netsuite/records/journal_entry_line_spec.rb
|
193
194
|
- spec/netsuite/records/journal_entry_spec.rb
|
194
195
|
- spec/netsuite/records/location_spec.rb
|
196
|
+
- spec/netsuite/records/matrix_option_list_spec.rb
|
195
197
|
- spec/netsuite/records/non_inventory_sale_item_spec.rb
|
196
198
|
- spec/netsuite/records/payment_method_spec.rb
|
197
199
|
- spec/netsuite/records/phone_call_spec.rb
|
@@ -200,6 +202,7 @@ files:
|
|
200
202
|
- spec/netsuite/records/sales_order_item_list_spec.rb
|
201
203
|
- spec/netsuite/records/sales_order_item_spec.rb
|
202
204
|
- spec/netsuite/records/sales_order_spec.rb
|
205
|
+
- spec/netsuite/records/service_sale_item_spec.rb
|
203
206
|
- spec/netsuite/records/ship_address_spec.rb
|
204
207
|
- spec/netsuite/records/support_case_spec.rb
|
205
208
|
- spec/netsuite/records/term_spec.rb
|
@@ -253,7 +256,7 @@ rubyforge_project:
|
|
253
256
|
rubygems_version: 2.2.0
|
254
257
|
signing_key:
|
255
258
|
specification_version: 4
|
256
|
-
summary: NetSuite SuiteTalk API Wrapper
|
259
|
+
summary: NetSuite SuiteTalk API (SOAP) Wrapper
|
257
260
|
test_files:
|
258
261
|
- spec/netsuite/actions/add_spec.rb
|
259
262
|
- spec/netsuite/actions/delete_spec.rb
|
@@ -296,6 +299,7 @@ test_files:
|
|
296
299
|
- spec/netsuite/records/journal_entry_line_spec.rb
|
297
300
|
- spec/netsuite/records/journal_entry_spec.rb
|
298
301
|
- spec/netsuite/records/location_spec.rb
|
302
|
+
- spec/netsuite/records/matrix_option_list_spec.rb
|
299
303
|
- spec/netsuite/records/non_inventory_sale_item_spec.rb
|
300
304
|
- spec/netsuite/records/payment_method_spec.rb
|
301
305
|
- spec/netsuite/records/phone_call_spec.rb
|
@@ -304,6 +308,7 @@ test_files:
|
|
304
308
|
- spec/netsuite/records/sales_order_item_list_spec.rb
|
305
309
|
- spec/netsuite/records/sales_order_item_spec.rb
|
306
310
|
- spec/netsuite/records/sales_order_spec.rb
|
311
|
+
- spec/netsuite/records/service_sale_item_spec.rb
|
307
312
|
- spec/netsuite/records/ship_address_spec.rb
|
308
313
|
- spec/netsuite/records/support_case_spec.rb
|
309
314
|
- spec/netsuite/records/term_spec.rb
|