netsuite 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,6 +11,7 @@ require 'netsuite/namespaces/platform_common'
11
11
  require 'netsuite/namespaces/list_acct'
12
12
  require 'netsuite/namespaces/list_rel'
13
13
  require 'netsuite/namespaces/tran_sales'
14
+ require 'netsuite/namespaces/setup_custom'
14
15
 
15
16
  # SUPPORT
16
17
  require 'netsuite/support/attributes'
@@ -40,6 +41,9 @@ require 'netsuite/records/invoice_item'
40
41
  require 'netsuite/records/invoice_item_list'
41
42
  require 'netsuite/records/classification'
42
43
  require 'netsuite/records/custom_record'
44
+ require 'netsuite/records/custom_record_type'
45
+ require 'netsuite/records/custom_record_ref'
46
+ require 'netsuite/records/job'
43
47
 
44
48
  module NetSuite
45
49
 
@@ -17,6 +17,7 @@ module NetSuite
17
17
  soap.namespaces['xmlns:tranSales'] = 'urn:sales_2011_2.transactions.webservices.netsuite.com'
18
18
  soap.namespaces['xmlns:platformCommon'] = 'urn:common_2011_2.platform.webservices.netsuite.com'
19
19
  soap.namespaces['xmlns:listAcct'] = 'urn:accounting_2011_2.lists.webservices.netsuite.com'
20
+ soap.namespaces['xmlns:setupCustom'] = 'urn:customization_2011_2.setup.webservices.netsuite.com'
20
21
  soap.header = auth_header
21
22
  soap.body = request_body
22
23
  end
@@ -31,21 +32,20 @@ module NetSuite
31
32
  # </platformMsgs:add>
32
33
  # </soap:Body>
33
34
  def request_body
34
- hash = {
35
+ body = {
35
36
  'platformMsgs:record' => @obj.to_record,
36
37
  :attributes! => {
37
- 'platformMsgs:record' => {
38
- 'xsi:type' => @obj.record_type
39
- }
38
+ 'platformMsgs:record' => {}
40
39
  }
41
40
  }
42
- if @obj.respond_to?(:internal_id) && @obj.internal_id
43
- hash[:attributes!]['platformMsgs:record']['platformMsgs:internalId'] = @obj.internal_id
44
- end
45
- if @obj.respond_to?(:external_id) && @obj.external_id
46
- hash[:attributes!]['platformMsgs:record']['platformMsgs:externalId'] = @obj.external_id
47
- end
48
- hash
41
+ body[:attributes!]['platformMsgs:record']['externalId'] = @obj.external_id if @obj.respond_to?(:external_id) && @obj.external_id
42
+ body[:attributes!]['platformMsgs:record']['internalId'] = @obj.internal_id if @obj.respond_to?(:internal_id) && @obj.internal_id
43
+ body[:attributes!]['platformMsgs:record']['xsi:type'] = @obj.kind_of?(NetSuite::Records::CustomRecord) ? @obj.record_type : soap_type
44
+ body
45
+ end
46
+
47
+ def soap_type
48
+ @obj.class.to_s.split('::').last.lower_camelcase
49
49
  end
50
50
 
51
51
  def success?
@@ -31,11 +31,19 @@ module NetSuite
31
31
  'platformMsgs:passport' => {
32
32
  'platformCore:email' => email,
33
33
  'platformCore:password' => password,
34
- 'platformCore:account' => account.to_s
34
+ 'platformCore:account' => account.to_s,
35
+ 'platformCore:role' => role.to_record,
36
+ :attributes! => {
37
+ 'platformCore:role' => role.attributes!
38
+ }
35
39
  }
36
40
  }
37
41
  end
38
42
 
43
+ def role
44
+ attributes[:role] ||= NetSuite::Records::RecordRef.new(:internal_id => '3', :type => 'role')
45
+ end
46
+
39
47
  def email=(email)
40
48
  attributes[:email] = email
41
49
  end
@@ -0,0 +1,11 @@
1
+ module NetSuite
2
+ module Namespaces
3
+ module SetupCustom
4
+
5
+ def record_namespace
6
+ 'setupCustom'
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -8,7 +8,7 @@ module NetSuite
8
8
  when Hash
9
9
  custom_fields << CustomField.new(attributes[:custom_field])
10
10
  when Array
11
- attributes[:custom_field].each { |custom_field| custom_fields << CustomField.new(addressbook) }
11
+ attributes[:custom_field].each { |custom_field| custom_fields << CustomField.new(custom_field) }
12
12
  end
13
13
  end
14
14
 
@@ -2,18 +2,36 @@ module NetSuite
2
2
  module Records
3
3
  class CustomRecord
4
4
  include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Namespaces::SetupCustom
5
8
 
6
9
  fields :allow_attachments, :allow_inline_editing, :allow_numbering_override, :allow_quick_search, :created,
7
- :custom_record_id, :description, :disclaimer, :enabl_email_merge, :enable_numbering, :include_name,
8
- :is_available_offline, :is_inactive, :is_numbering_updateable, :is_ordered, :last_modified, :name,
10
+ :custom_field_list, :custom_record_id, :description, :disclaimer, :enabl_email_merge, :enable_numbering,
11
+ :include_name, :is_available_offline, :is_inactive, :is_numbering_updateable, :is_ordered, :last_modified, :name,
9
12
  :numbering_current_number, :numbering_init, :numbering_min_digits, :numbering_prefix, :numbering_suffix,
10
13
  :record_name, :script_id, :show_creation_date, :show_creation_date_on_list, :show_id, :show_last_modified_on_list,
11
14
  :show_last_modified, :show_notes, :show_owner, :show_owner_allow_change, :show_owner_on_list, :use_permissions
12
15
 
16
+ record_refs :custom_form, :owner, :rec_type
17
+
18
+ attr_reader :internal_id
19
+ attr_accessor :external_id
20
+
13
21
  def initialize(attributes = {})
22
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
23
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
14
24
  initialize_from_attributes_hash(attributes)
15
25
  end
16
26
 
27
+ def custom_field_list
28
+ attributes[:custom_field_list] ||= CustomFieldList.new
29
+ end
30
+
31
+ def custom_field_list=(attrs)
32
+ attributes[:custom_field_list] = attrs.kind_of?(CustomFieldList) ? attrs : CustomFieldList.new(attrs)
33
+ end
34
+
17
35
  def self.get(options = {})
18
36
  options.merge!(:type_id => type_id) unless options[:type_id]
19
37
  response = Actions::Get.call(self, options.merge!(:custom => true))
@@ -24,6 +42,11 @@ module NetSuite
24
42
  end
25
43
  end
26
44
 
45
+ def add
46
+ response = Actions::Add.call(self)
47
+ response.success?
48
+ end
49
+
27
50
  def self.type_id(id = nil)
28
51
  if id
29
52
  @type_id = id
@@ -32,6 +55,10 @@ module NetSuite
32
55
  end
33
56
  end
34
57
 
58
+ def record_type
59
+ "#{record_namespace}:CustomRecord"
60
+ end
61
+
35
62
  end
36
63
  end
37
64
  end
@@ -0,0 +1,38 @@
1
+ module NetSuite
2
+ module Records
3
+ class CustomRecordRef
4
+ include Support::Fields
5
+ include Support::Records
6
+ include Namespaces::PlatformCore
7
+
8
+ attr_reader :internal_id
9
+ attr_accessor :external_id, :type_id
10
+
11
+ def initialize(attributes_or_record = {})
12
+ case attributes_or_record
13
+ when Hash
14
+ attributes = attributes_or_record
15
+ attributes.delete(:"@xmlns:platform_core")
16
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
17
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
18
+ @type_id = attributes.delete(:type_id) || attributes.delete(:@type_id)
19
+ initialize_from_attributes_hash(attributes)
20
+ else
21
+ record = attributes_or_record
22
+ @internal_id = record.internal_id if record.respond_to?(:internal_id)
23
+ @external_id = record.external_id if record.respond_to?(:external_id)
24
+ @type_id = record.class.type_id if record.respond_to?(:type_id) && record.class.type_id
25
+ end
26
+ end
27
+
28
+ def method_missing(m, *args, &block)
29
+ if attributes.keys.map(&:to_sym).include?(m.to_sym)
30
+ attributes[m.to_sym]
31
+ else
32
+ super
33
+ end
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,28 @@
1
+ module NetSuite
2
+ module Records
3
+ class CustomRecordType
4
+ include Support::Fields
5
+
6
+ fields :allow_attachments, :allow_inline_editing, :allow_numbering_override, :allow_quick_search, :description, :disclaimer, :enable_mail_merge, :enable_numbering, :include_name, :is_available_offline, :is_inactive, :is_numbering_updateable, :is_ordered, :numbering_current_number, :numbering_init, :numbering_min_digits, :numbering_prefix, :numbering_suffix, :record_name, :script_id, :show_creation_date, :show_creation_date_on_list, :show_id, :show_last_modified, :show_last_modified_on_list, :show_notes, :show_owner, :show_owner_allow_change, :show_owner_on_list, :use_permissions
7
+
8
+ attr_reader :internal_id
9
+ attr_accessor :external_id
10
+
11
+ def initialize(attributes = {})
12
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
13
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
14
+ initialize_from_attributes_hash(attributes)
15
+ end
16
+
17
+ def self.get(options = {})
18
+ response = Actions::Get.call(self, options)
19
+ if response.success?
20
+ new(response.body)
21
+ else
22
+ raise RecordNotFound, "#{self} with OPTIONS=#{options.inspect} could not be found"
23
+ end
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -15,7 +15,7 @@ module NetSuite
15
15
  :exp_cost_tax_rate_2, :fax, :fob, :gift_cert_applied, :gift_cert_redemption_list, :handling_cost, :handling_tax_1_rate,
16
16
  :handling_tax_2_rate, :handling_tax_code, :is_taxable, :item_cost_disc_amount, :item_cost_disc_print,
17
17
  :item_cost_disc_rate, :item_cost_disc_tax_1_amt, :item_cost_disc_taxable, :item_cost_discount, :item_cost_list,
18
- :item_cost_tax_code, :item_cost_tax_rate_1, :item_cost_tax_rate_2, :job, :last_modified_date,
18
+ :item_cost_tax_code, :item_cost_tax_rate_1, :item_cost_tax_rate_2, :item_list, :job, :last_modified_date,
19
19
  :lead_source, :linked_tracking_numbers, :location, :memo, :message, :message_sel, :on_credit_hold, :opportunity,
20
20
  :other_ref_name, :partner, :partners_list, :promo_code, :rev_rec_end_date,
21
21
  :rev_rec_on_rev_commitment, :rev_rec_schedule, :rev_rec_start_date, :revenue_status, :sales_effective_date,
@@ -60,6 +60,10 @@ module NetSuite
60
60
  attributes[:item_list] ||= InvoiceItemList.new
61
61
  end
62
62
 
63
+ def item_list=(attrs)
64
+ attributes[:item_list] = InvoiceItemList.new(attrs)
65
+ end
66
+
63
67
  def custom_field_list
64
68
  attributes[:custom_field_list] ||= CustomFieldList.new
65
69
  end
@@ -1,8 +1,24 @@
1
1
  module NetSuite
2
2
  module Records
3
3
  class InvoiceItemList
4
+ include Support::Fields
4
5
  include Namespaces::TranSales
5
6
 
7
+ fields :item
8
+
9
+ def initialize(attributes = {})
10
+ initialize_from_attributes_hash(attributes)
11
+ end
12
+
13
+ def item=(items)
14
+ case items
15
+ when Hash
16
+ self.items << InvoiceItem.new(items)
17
+ when Array
18
+ items.each { |item| self.items << InvoiceItem.new(item) }
19
+ end
20
+ end
21
+
6
22
  def items
7
23
  @items ||= []
8
24
  end
@@ -0,0 +1,22 @@
1
+ module NetSuite
2
+ module Records
3
+ class Job
4
+ include Support::Fields
5
+
6
+ fields :account_number, :allocate_payroll_expenses, :allow_all_resources_for_tasks, :allow_expenses, :allow_time,
7
+ :alt_name, :alt_phone, :bill_pay, :calculated_end_date, :calculated_end_date_baseline, :comments, :company_name,
8
+ :date_created, :default_address, :email, :end_date, :entity_id, :estimated_cost, :estimated_gross_profit,
9
+ :estimated_gross_profit_percent, :estimated_labor_cost, :estimated_labor_cost_baseline, :estimated_labor_revenue,
10
+ :estimated_revenue, :estimated_time, :fax, :fx_rate, :include_crm_tasks_in_totals, :is_exempt_time, :is_inactive,
11
+ :is_productive_time, :is_utilized_time, :job_price, :last_baseline_date, :last_modified_date, :limit_time_to_assignees,
12
+ :materialize_time, :opening_balance, :opening_balance_account, :opening_balance_date, :percent_complete,
13
+ :percent_time_complete, :phone, :phonetic_name, :projected_end_date, :projected_end_date_baseline, :start_date,
14
+ :start_date_baseline
15
+
16
+ def initialize(attributes = {})
17
+ initialize_from_attributes_hash(attributes)
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -11,15 +11,17 @@ module NetSuite
11
11
  def initialize(attributes_or_record = {})
12
12
  case attributes_or_record
13
13
  when Hash
14
- attributes_or_record.delete(:"@xmlns:platform_core")
15
- @internal_id = attributes_or_record.delete(:internal_id) || attributes_or_record.delete(:@internal_id)
16
- @external_id = attributes_or_record.delete(:external_id) || attributes_or_record.delete(:@external_id)
17
- @type = attributes_or_record.delete(:type) || attributes_or_record.delete(:@type)
18
- @attributes = attributes_or_record
14
+ attributes = attributes_or_record
15
+ attributes.delete(:"@xmlns:platform_core")
16
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
17
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
18
+ @type = attributes.delete(:type) || attributes.delete(:@type)
19
+ @attributes = attributes
19
20
  else
20
- @internal_id = attributes_or_record.internal_id if attributes_or_record.respond_to?(:internal_id)
21
- @external_id = attributes_or_record.external_id if attributes_or_record.respond_to?(:external_id)
22
- @type = attributes_or_record.class.to_s.split('::').last.lower_camelcase
21
+ record = attributes_or_record
22
+ @internal_id = record.internal_id if record.respond_to?(:internal_id)
23
+ @external_id = record.external_id if record.respond_to?(:external_id)
24
+ @type = record.class.to_s.split('::').last.lower_camelcase
23
25
  end
24
26
  end
25
27
 
@@ -31,6 +33,14 @@ module NetSuite
31
33
  end
32
34
  end
33
35
 
36
+ def attributes!
37
+ hash = {}
38
+ hash[:internalId] = @internal_id if @internal_id
39
+ hash[:externalId] = @external_id if @external_id
40
+ hash[:type] = @type if @type
41
+ hash
42
+ end
43
+
34
44
  end
35
45
  end
36
46
  end
@@ -1,3 +1,3 @@
1
1
  module Netsuite
2
- VERSION = '0.0.17'
2
+ VERSION = '0.0.18'
3
3
  end
@@ -52,7 +52,14 @@ describe NetSuite::Configuration do
52
52
  'platformMsgs:passport' => {
53
53
  'platformCore:email' => 'user@example.com',
54
54
  'platformCore:password' => 'myPassword',
55
- 'platformCore:account' => '1234'
55
+ 'platformCore:account' => '1234',
56
+ 'platformCore:role' => {},
57
+ :attributes! => {
58
+ 'platformCore:role' => {
59
+ :internalId => '3',
60
+ :type => 'role'
61
+ }
62
+ }
56
63
  }
57
64
  })
58
65
  end
@@ -8,10 +8,28 @@ describe NetSuite::Records::CustomFieldList do
8
8
  end
9
9
 
10
10
  describe '#to_record' do
11
+ before do
12
+ list.custom_fields << NetSuite::Records::CustomField.new(
13
+ :internal_id => '3',
14
+ :type => 'BooleanCustomFieldRef',
15
+ :value => false
16
+ )
17
+ end
18
+
11
19
  it 'can represent itself as a SOAP record' do
12
- record = {
13
- 'platformCore:customField' => []
14
- }
20
+ record = [
21
+ {
22
+ 'platformCore:customField' => {
23
+ 'platformCore:value' => false
24
+ },
25
+ :attributes! => {
26
+ 'platformCore:customField' => {
27
+ 'internalId' => '3',
28
+ 'xsi:type' => 'BooleanCustomFieldRef'
29
+ }
30
+ }
31
+ }
32
+ ]
15
33
  list.to_record.should eql(record)
16
34
  end
17
35
  end
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CustomRecordRef do
4
+ #<attribute name="internalId" type="xsd:string"/>
5
+ #<attribute name="externalId" type="xsd:string"/>
6
+ #<attribute name="typeId" type="xsd:string" use="required"/>
7
+ pending
8
+ end
@@ -2,10 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe NetSuite::Records::CustomRecord do
4
4
  let(:record) { NetSuite::Records::CustomRecord.new }
5
- #<element name="customForm" type="platformCore:RecordRef" minOccurs="0"/>
6
- #<element name="owner" type="platformCore:RecordRef" minOccurs="0"/>
7
- #<element name="recType" type="platformCore:RecordRef" minOccurs="0"/>
8
- #<element name="customFieldList" type="platformCore:CustomFieldList" minOccurs="0"/>
9
5
 
10
6
  it 'has all the right fields' do
11
7
  [
@@ -20,6 +16,18 @@ describe NetSuite::Records::CustomRecord do
20
16
  end
21
17
  end
22
18
 
19
+ it 'has all the right record_refs' do
20
+ [
21
+ :custom_form, :owner
22
+ ].each do |record_ref|
23
+ record.should have_record_ref(record_ref)
24
+ end
25
+ end
26
+
27
+ it 'has a custom_field_list' do
28
+ record.custom_field_list.should be_kind_of(NetSuite::Records::CustomFieldList)
29
+ end
30
+
23
31
  describe '.get' do
24
32
  context 'when the response is successful' do
25
33
  let(:response) { NetSuite::Response.new(:success => true, :body => { :allow_quick_search => true }) }
@@ -49,4 +57,28 @@ describe NetSuite::Records::CustomRecord do
49
57
  end
50
58
  end
51
59
 
60
+ describe '#add' do
61
+ context 'when the response is successful' do
62
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
63
+
64
+ it 'returns true' do
65
+ NetSuite::Actions::Add.should_receive(:call).
66
+ with(record).
67
+ and_return(response)
68
+ record.add
69
+ end
70
+ end
71
+
72
+ context 'when the response is unsuccessful' do
73
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
74
+
75
+ it 'returns false' do
76
+ NetSuite::Actions::Add.should_receive(:call).
77
+ with(record).
78
+ and_return(response)
79
+ record.add.should be_false
80
+ end
81
+ end
82
+ end
83
+
52
84
  end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::CustomRecordType do
4
+ let(:record_type) { NetSuite::Records::CustomRecordType.new }
5
+
6
+ # <element name="owner" type="platformCore:RecordRef" minOccurs="0"/>
7
+
8
+ # <element name="fieldList" type="setupCustom:CustomRecordTypeFieldList" minOccurs="0"/>
9
+ # <element name="tabsList" type="setupCustom:CustomRecordTypeTabsList" minOccurs="0"/>
10
+ # <element name="sublistsList" type="setupCustom:CustomRecordTypeSublistsList" minOccurs="0"/>
11
+ # <element name="formsList" type="setupCustom:CustomRecordTypeFormsList" minOccurs="0"/>
12
+ # <element name="onlineFormsList" type="setupCustom:CustomRecordTypeOnlineFormsList" minOccurs="0"/>
13
+ # <element name="permissionsList" type="setupCustom:CustomRecordTypePermissionsList" minOccurs="0"/>
14
+ # <element name="linksList" type="setupCustom:CustomRecordTypeLinksList" minOccurs="0"/>
15
+ # <element name="managersList" type="setupCustom:CustomRecordTypeManagersList" minOccurs="0"/>
16
+ # <element name="childrenList" type="setupCustom:CustomRecordTypeChildrenList" minOccurs="0"/>
17
+ # <element name="parentsList" type="setupCustom:CustomRecordTypeParentsList" minOccurs="0"/>
18
+ # <element name="translationsList" type="setupCustom:CustomRecordTypeTranslationsList" minOccurs="0"/>
19
+ it 'has all the right fields' do
20
+ [
21
+ :allow_attachments, :allow_inline_editing, :allow_numbering_override, :allow_quick_search, :description, :disclaimer,
22
+ :enable_mail_merge, :enable_numbering, :include_name, :is_available_offline, :is_inactive, :is_numbering_updateable,
23
+ :is_ordered, :numbering_current_number, :numbering_init, :numbering_min_digits, :numbering_prefix, :numbering_suffix,
24
+ :record_name, :script_id, :show_creation_date, :show_creation_date_on_list, :show_id, :show_last_modified,
25
+ :show_last_modified_on_list, :show_notes, :show_owner, :show_owner_allow_change, :show_owner_on_list, :use_permissions
26
+ ].each do |field|
27
+ record_type.should have_field(field)
28
+ end
29
+ end
30
+
31
+ describe '.get' do
32
+ context 'when the response is successful' do
33
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :allow_attachments => true }) }
34
+
35
+ it 'returns a Customer instance populated with the data from the response object' do
36
+ NetSuite::Actions::Get.should_receive(:call).
37
+ with(NetSuite::Records::CustomRecordType, :external_id => 1).
38
+ and_return(response)
39
+ record_type = NetSuite::Records::CustomRecordType.get(:external_id => 1)
40
+ record_type.should be_kind_of(NetSuite::Records::CustomRecordType)
41
+ record_type.allow_attachments.should be_true
42
+ end
43
+ end
44
+
45
+ context 'when the response is unsuccessful' do
46
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
47
+
48
+ it 'raises a RecordNotFound exception' do
49
+ NetSuite::Actions::Get.should_receive(:call).
50
+ with(NetSuite::Records::CustomRecordType, :external_id => 1).
51
+ and_return(response)
52
+ lambda {
53
+ NetSuite::Records::CustomRecordType.get(:external_id => 1)
54
+ }.should raise_error(NetSuite::RecordNotFound,
55
+ /NetSuite::Records::CustomRecordType with OPTIONS=(.*) could not be found/)
56
+ end
57
+ end
58
+ end
59
+
60
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::Job do
4
+ let(:job) { NetSuite::Records::Job.new }
5
+
6
+ #<element name="customForm" type="platformCore:RecordRef" minOccurs="0"/>
7
+ #<element name="entityStatus" type="platformCore:RecordRef" minOccurs="0"/>
8
+ #<element name="parent" type="platformCore:RecordRef" minOccurs="0"/>
9
+ #<element name="category" type="platformCore:RecordRef" minOccurs="0"/>
10
+ #<element name="workplace" type="platformCore:RecordRef" minOccurs="0"/>
11
+ #<element name="language" type="platformCore:RecordRef" minOccurs="0"/>
12
+ #<element name="currency" type="platformCore:RecordRef" minOccurs="0"/>
13
+ #<element name="jobType" type="platformCore:RecordRef" minOccurs="0"/>
14
+ #<element name="estimatedTimeOverride" type="platformCore:Duration" minOccurs="0"/>
15
+ #<element name="emailPreference" type="listRelTyp:EmailPreference" minOccurs="0"/>
16
+ #<element name="subsidiary" type="platformCore:RecordRef" minOccurs="0"/>
17
+ #<element name="jobBillingType" type="listRelTyp:JobBillingType" minOccurs="0"/>
18
+ #<element name="billingSchedule" type="platformCore:RecordRef" minOccurs="0"/>
19
+ #<element name="jobItem" type="platformCore:RecordRef" minOccurs="0"/>
20
+ #<element name="actualTime" type="platformCore:Duration" minOccurs="0"/>
21
+ #<element name="timeRemaining" type="platformCore:Duration" minOccurs="0"/>
22
+ #<element name="estimateRevRecTemplate" type="platformCore:RecordRef" minOccurs="0"/>
23
+ #<element name="globalSubscriptionStatus" type="platformCommonTyp:GlobalSubscriptionStatus" minOccurs="0"/>
24
+ #<element name="jobResourcesList" type="listRel:JobResourcesList" minOccurs="0"/>
25
+ #<element name="addressbookList" type="listRel:JobAddressbookList" minOccurs="0"/>
26
+ #<element name="milestonesList" type="listRel:JobMilestonesList" minOccurs="0"/>
27
+ #<element name="creditCardsList" type="listRel:JobCreditCardsList" minOccurs="0"/>
28
+ #<element name="customFieldList" type="platformCore:CustomFieldList" minOccurs="0"/>
29
+
30
+ it 'has all the right fields' do
31
+ [
32
+ :account_number, :allocate_payroll_expenses, :allow_all_resources_for_tasks, :allow_expenses, :allow_time, :alt_name,
33
+ :alt_phone, :bill_pay, :calculated_end_date, :calculated_end_date_baseline, :comments, :company_name, :date_created,
34
+ :default_address, :email, :end_date, :entity_id, :estimated_cost, :estimated_gross_profit, :estimated_gross_profit_percent,
35
+ :estimated_labor_cost, :estimated_labor_cost_baseline, :estimated_labor_revenue, :estimated_revenue, :estimated_time, :fax,
36
+ :fx_rate, :include_crm_tasks_in_totals, :is_exempt_time, :is_inactive, :is_productive_time, :is_utilized_time, :job_price,
37
+ :last_baseline_date, :last_modified_date, :limit_time_to_assignees, :materialize_time, :opening_balance,
38
+ :opening_balance_account, :opening_balance_date, :percent_complete, :percent_time_complete, :phone, :phonetic_name,
39
+ :projected_end_date, :projected_end_date_baseline, :start_date, :start_date_baseline
40
+ ].each do |field|
41
+ job.should have_field(field)
42
+ end
43
+ end
44
+
45
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netsuite
3
3
  version: !ruby/object:Gem::Version
4
- hash: 61
4
+ hash: 59
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 17
10
- version: 0.0.17
9
+ - 18
10
+ version: 0.0.18
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Moran
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-14 00:00:00 Z
18
+ date: 2012-01-18 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: savon
@@ -110,18 +110,22 @@ files:
110
110
  - lib/netsuite/namespaces/list_rel.rb
111
111
  - lib/netsuite/namespaces/platform_common.rb
112
112
  - lib/netsuite/namespaces/platform_core.rb
113
+ - lib/netsuite/namespaces/setup_custom.rb
113
114
  - lib/netsuite/namespaces/tran_sales.rb
114
115
  - lib/netsuite/records/bill_address.rb
115
116
  - lib/netsuite/records/classification.rb
116
117
  - lib/netsuite/records/custom_field.rb
117
118
  - lib/netsuite/records/custom_field_list.rb
118
119
  - lib/netsuite/records/custom_record.rb
120
+ - lib/netsuite/records/custom_record_ref.rb
121
+ - lib/netsuite/records/custom_record_type.rb
119
122
  - lib/netsuite/records/customer.rb
120
123
  - lib/netsuite/records/customer_addressbook.rb
121
124
  - lib/netsuite/records/customer_addressbook_list.rb
122
125
  - lib/netsuite/records/invoice.rb
123
126
  - lib/netsuite/records/invoice_item.rb
124
127
  - lib/netsuite/records/invoice_item_list.rb
128
+ - lib/netsuite/records/job.rb
125
129
  - lib/netsuite/records/non_inventory_sale_item.rb
126
130
  - lib/netsuite/records/record_ref.rb
127
131
  - lib/netsuite/records/ship_address.rb
@@ -142,13 +146,16 @@ files:
142
146
  - spec/netsuite/records/classification_spec.rb
143
147
  - spec/netsuite/records/custom_field_list_spec.rb
144
148
  - spec/netsuite/records/custom_field_spec.rb
149
+ - spec/netsuite/records/custom_record_ref_spec.rb
145
150
  - spec/netsuite/records/custom_record_spec.rb
151
+ - spec/netsuite/records/custom_record_type_spec.rb
146
152
  - spec/netsuite/records/customer_addressbook_list_spec.rb
147
153
  - spec/netsuite/records/customer_addressbook_spec.rb
148
154
  - spec/netsuite/records/customer_spec.rb
149
155
  - spec/netsuite/records/invoice_item_list_spec.rb
150
156
  - spec/netsuite/records/invoice_item_spec.rb
151
157
  - spec/netsuite/records/invoice_spec.rb
158
+ - spec/netsuite/records/job_spec.rb
152
159
  - spec/netsuite/records/non_inventory_sale_item_spec.rb
153
160
  - spec/netsuite/records/record_ref_spec.rb
154
161
  - spec/netsuite/records/ship_address_spec.rb
@@ -216,13 +223,16 @@ test_files:
216
223
  - spec/netsuite/records/classification_spec.rb
217
224
  - spec/netsuite/records/custom_field_list_spec.rb
218
225
  - spec/netsuite/records/custom_field_spec.rb
226
+ - spec/netsuite/records/custom_record_ref_spec.rb
219
227
  - spec/netsuite/records/custom_record_spec.rb
228
+ - spec/netsuite/records/custom_record_type_spec.rb
220
229
  - spec/netsuite/records/customer_addressbook_list_spec.rb
221
230
  - spec/netsuite/records/customer_addressbook_spec.rb
222
231
  - spec/netsuite/records/customer_spec.rb
223
232
  - spec/netsuite/records/invoice_item_list_spec.rb
224
233
  - spec/netsuite/records/invoice_item_spec.rb
225
234
  - spec/netsuite/records/invoice_spec.rb
235
+ - spec/netsuite/records/job_spec.rb
226
236
  - spec/netsuite/records/non_inventory_sale_item_spec.rb
227
237
  - spec/netsuite/records/record_ref_spec.rb
228
238
  - spec/netsuite/records/ship_address_spec.rb