netsuite 0.6.7 → 0.6.8

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.
@@ -167,6 +167,7 @@ module NetSuite
167
167
  autoload :OpportunityItem, 'netsuite/records/opportunity_item'
168
168
  autoload :OpportunityItemList, 'netsuite/records/opportunity_item_list'
169
169
  autoload :Partner, 'netsuite/records/partner'
170
+ autoload :PaymentItem, 'netsuite/records/payment_item'
170
171
  autoload :PaymentMethod, 'netsuite/records/payment_method'
171
172
  autoload :PayrollItem, 'netsuite/records/payroll_item'
172
173
  autoload :PhoneCall, 'netsuite/records/phone_call'
@@ -22,6 +22,7 @@ module NetSuite
22
22
  field :estimated_time_override, Duration
23
23
  field :actual_time, Duration
24
24
  field :time_remaining, Duration
25
+ field :custom_field_list, CustomFieldList
25
26
 
26
27
  record_refs :billing_schedule, :category, :currency, :custom_form, :entity_status, :estimate_rev_rec_template, :job_item,
27
28
  :job_type, :language, :parent, :subsidiary, :workplace
@@ -0,0 +1,36 @@
1
+ module NetSuite
2
+ module Records
3
+ class PaymentItem
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Support::Actions
8
+ include Namespaces::ListAcct
9
+
10
+ actions :get, :get_list, :add, :delete, :search, :update, :upsert
11
+
12
+ fields :available_to_partners, :created_date, :description, :display_name, :include_children, :is_inactive, :item_id, :last_modified_date, :undep_funds
13
+
14
+ record_refs :account, :custom_form, :department, :issue_product, :klass, :location, :payment_method
15
+
16
+ field :custom_field_list, CustomFieldList
17
+ field :subsidiary_list, RecordRefList
18
+
19
+ # TODO custom records need to be implemented
20
+ # field :translations_list, TranslationList
21
+
22
+ attr_reader :internal_id
23
+ attr_accessor :external_id
24
+
25
+ def initialize(attributes = {})
26
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
27
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
28
+ initialize_from_attributes_hash(attributes)
29
+ end
30
+
31
+ def self.search_class_name
32
+ "Item"
33
+ end
34
+ end
35
+ end
36
+ end
@@ -4,6 +4,8 @@ module NetSuite
4
4
  include Namespaces::PlatformCore
5
5
 
6
6
  def initialize(attributes = {})
7
+ attributes[:pricing] = [attributes[:pricing]] unless
8
+ attributes[:pricing].is_a? Array
7
9
  attributes[:pricing].each do |pricing|
8
10
  prices << RecordRef.new(pricing)
9
11
  end if attributes[:pricing]
@@ -1,31 +1,12 @@
1
1
  module NetSuite
2
2
  module Records
3
- class VendorBillExpenseList
4
- include Support::Fields
3
+ class VendorBillExpenseList < Support::Sublist
5
4
  include Namespaces::TranPurch
6
5
 
7
- fields :expense
6
+ sublist :expense, VendorBillExpense
8
7
 
9
- def initialize(attributes = {})
10
- initialize_from_attributes_hash(attributes)
11
- end
12
-
13
- def expense=(expenses)
14
- case expenses
15
- when Hash
16
- self.expenses << VendorBillExpense.new(expenses)
17
- when Array
18
- expenses.each { |expense| self.expenses << VendorBillExpense.new(expense) }
19
- end
20
- end
21
-
22
- def expenses
23
- @expenses ||= []
24
- end
25
-
26
- def to_record
27
- { "#{record_namespace}:expense" => expenses.map(&:to_record) }
28
- end
8
+ # legacy support
9
+ alias :expenses :expense
29
10
 
30
11
  end
31
12
  end
@@ -1,3 +1,3 @@
1
1
  module Netsuite
2
- VERSION = '0.6.7'
2
+ VERSION = '0.6.8'
3
3
  end
@@ -12,6 +12,7 @@ describe 'basic records' do
12
12
  NetSuite::Records::PayrollItem,
13
13
  NetSuite::Records::Opportunity,
14
14
  NetSuite::Records::VendorCategory,
15
+ NetSuite::Records::VendorBill,
15
16
  NetSuite::Records::Deposit,
16
17
  NetSuite::Records::RevRecTemplate,
17
18
  NetSuite::Records::RevRecSchedule,
@@ -31,6 +32,7 @@ describe 'basic records' do
31
32
  NetSuite::Records::ItemReceipt,
32
33
  NetSuite::Records::GiftCertificate,
33
34
  NetSuite::Records::ContactRole,
35
+ NetSuite::Records::PaymentItem,
34
36
  ]
35
37
  }
36
38
 
@@ -0,0 +1,117 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::PaymentItem do
4
+ let(:item) { NetSuite::Records::PaymentItem.new }
5
+
6
+ it 'has all the right fields' do
7
+ [
8
+ :available_to_partners, :created_date, :description, :display_name, :include_children, :is_inactive, :item_id, :last_modified_date, :undep_funds
9
+ ].each do |field|
10
+ expect(item).to have_field(field)
11
+ end
12
+ end
13
+
14
+ it 'has all the right record refs' do
15
+ [
16
+ :account, :custom_form, :department, :issue_product, :klass, :location, :payment_method
17
+ ].each do |record_ref|
18
+ expect(item).to have_record_ref(record_ref)
19
+ end
20
+ end
21
+
22
+ describe '.get' do
23
+ context 'when the response is successful' do
24
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :item_id => "Item100" }) }
25
+
26
+ it 'returns a PaymentItem instance populated with the data from the response object' do
27
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::PaymentItem, {:external_id => 1}], {}).and_return(response)
28
+ item = NetSuite::Records::PaymentItem.get(:external_id => 1)
29
+ expect(item).to be_kind_of(NetSuite::Records::PaymentItem)
30
+ expect(item.item_id).to eql("Item100")
31
+ end
32
+ end
33
+
34
+ context 'when the response is unsuccessful' do
35
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
36
+
37
+ it 'raises a RecordNotFound exception' do
38
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::PaymentItem, {:external_id => 1}], {}).and_return(response)
39
+ expect {
40
+ NetSuite::Records::PaymentItem.get(:external_id => 1)
41
+ }.to raise_error(NetSuite::RecordNotFound,
42
+ /NetSuite::Records::PaymentItem with OPTIONS=(.*) could not be found/)
43
+ end
44
+ end
45
+ end
46
+
47
+ describe '#add' do
48
+ let(:item) { NetSuite::Records::PaymentItem.new(:item_id => "Item100", :is_inactive => false) }
49
+
50
+ context 'when the response is successful' do
51
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
52
+
53
+ it 'returns true' do
54
+ expect(NetSuite::Actions::Add).to receive(:call).
55
+ with([item], {}).
56
+ and_return(response)
57
+ expect(item.add).to be_truthy
58
+ end
59
+ end
60
+
61
+ context 'when the response is unsuccessful' do
62
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
63
+
64
+ it 'returns false' do
65
+ expect(NetSuite::Actions::Add).to receive(:call).
66
+ with([item], {}).
67
+ and_return(response)
68
+ expect(item.add).to be_falsey
69
+ end
70
+ end
71
+ end
72
+
73
+ describe '#delete' do
74
+ context 'when the response is successful' do
75
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
76
+
77
+ it 'returns true' do
78
+ expect(NetSuite::Actions::Delete).to receive(:call).
79
+ with([item], {}).
80
+ and_return(response)
81
+ expect(item.delete).to be_truthy
82
+ end
83
+ end
84
+
85
+ context 'when the response is unsuccessful' do
86
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
87
+
88
+ it 'returns false' do
89
+ expect(NetSuite::Actions::Delete).to receive(:call).
90
+ with([item], {}).
91
+ and_return(response)
92
+ expect(item.delete).to be_falsey
93
+ end
94
+ end
95
+ end
96
+
97
+ describe '#to_record' do
98
+ before do
99
+ item.item_id = "Item100"
100
+ item.is_inactive = false
101
+ end
102
+ it 'can represent itself as a SOAP record' do
103
+ record = {
104
+ 'listAcct:itemId' => "Item100",
105
+ 'listAcct:isInactive' => false
106
+ }
107
+ expect(item.to_record).to eql(record)
108
+ end
109
+ end
110
+
111
+ describe '#record_type' do
112
+ it 'returns a string representation of the SOAP type' do
113
+ expect(item.record_type).to eql('listAcct:PaymentItem')
114
+ end
115
+ end
116
+
117
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::PricingMatrix do
4
+ describe "#initialize" do
5
+ it "behaves appropriately if it gets a hash as attributes[:pricing]" do
6
+ # this is what savon returns if there is only one pricing strategy matrix
7
+ # for the item:
8
+ matrix = {
9
+ :pricing=> {
10
+ :currency=>"US Dollar",
11
+ :priceLevel=>"Base Price",
12
+ :priceList=>[
13
+ {:price=>{:value=>12.0, :quantity=>0.0}},
14
+ {:price=>{:value=>10.0, :quantity=>10.0}},
15
+ {:price=>{:value=>9.0, :quantity=>100.0}},
16
+ {:price=>{:value=>7.0, :quantity=>5000.0}}
17
+ ]
18
+ }
19
+ }
20
+
21
+ subject = NetSuite::Records::PricingMatrix.new({pricing: matrix})
22
+ expect(subject.prices[0].pricing).to eq(matrix[:pricing])
23
+ end
24
+ end
25
+ 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.6.7
4
+ version: 0.6.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-06-25 00:00:00.000000000 Z
13
+ date: 2016-07-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: savon
@@ -205,6 +205,7 @@ files:
205
205
  - lib/netsuite/records/opportunity_item.rb
206
206
  - lib/netsuite/records/opportunity_item_list.rb
207
207
  - lib/netsuite/records/partner.rb
208
+ - lib/netsuite/records/payment_item.rb
208
209
  - lib/netsuite/records/payment_method.rb
209
210
  - lib/netsuite/records/payroll_item.rb
210
211
  - lib/netsuite/records/phone_call.rb
@@ -345,9 +346,11 @@ files:
345
346
  - spec/netsuite/records/location_spec.rb
346
347
  - spec/netsuite/records/matrix_option_list_spec.rb
347
348
  - spec/netsuite/records/non_inventory_sale_item_spec.rb
349
+ - spec/netsuite/records/payment_item_spec.rb
348
350
  - spec/netsuite/records/payment_method_spec.rb
349
351
  - spec/netsuite/records/phone_call_spec.rb
350
352
  - spec/netsuite/records/pomo_code_spec.rb
353
+ - spec/netsuite/records/pricing_matrix_spec.rb
351
354
  - spec/netsuite/records/record_ref_spec.rb
352
355
  - spec/netsuite/records/rev_rec_template_spec.rb
353
356
  - spec/netsuite/records/sales_order_item_list_spec.rb
@@ -523,9 +526,11 @@ test_files:
523
526
  - spec/netsuite/records/location_spec.rb
524
527
  - spec/netsuite/records/matrix_option_list_spec.rb
525
528
  - spec/netsuite/records/non_inventory_sale_item_spec.rb
529
+ - spec/netsuite/records/payment_item_spec.rb
526
530
  - spec/netsuite/records/payment_method_spec.rb
527
531
  - spec/netsuite/records/phone_call_spec.rb
528
532
  - spec/netsuite/records/pomo_code_spec.rb
533
+ - spec/netsuite/records/pricing_matrix_spec.rb
529
534
  - spec/netsuite/records/record_ref_spec.rb
530
535
  - spec/netsuite/records/rev_rec_template_spec.rb
531
536
  - spec/netsuite/records/sales_order_item_list_spec.rb