netsuite 0.0.48 → 0.0.49
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.
- data/README.md +19 -4
- data/lib/netsuite.rb +3 -0
- data/lib/netsuite/actions/add.rb +5 -2
- data/lib/netsuite/actions/get.rb +2 -0
- data/lib/netsuite/records/invoice.rb +8 -6
- data/lib/netsuite/records/invoice_item.rb +1 -1
- data/lib/netsuite/records/sales_order.rb +43 -0
- data/lib/netsuite/records/sales_order_item.rb +42 -0
- data/lib/netsuite/records/sales_order_item_list.rb +32 -0
- data/lib/netsuite/version.rb +1 -1
- data/spec/netsuite/records/invoice_item_spec.rb +3 -2
- data/spec/netsuite/records/invoice_spec.rb +7 -6
- data/spec/netsuite/records/sales_order_item_list_spec.rb +26 -0
- data/spec/netsuite/records/sales_order_item_spec.rb +41 -0
- data/spec/netsuite/records/sales_order_spec.rb +201 -0
- metadata +39 -30
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
#
|
1
|
+
# NetSuite Ruby SuiteTalk Gem
|
2
2
|
|
3
3
|
* This gem will act as a wrapper around the NetSuite SuiteTalk WebServices API. Wow, that is a mouthful.
|
4
4
|
* The gem does not cover the entire API, only the subset that we have found useful to cover so far.
|
5
|
-
*
|
5
|
+
* Extending the wrapper is pretty simple. See below for an example.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -19,6 +19,16 @@ Or install it yourself as:
|
|
19
19
|
$ gem install netsuite
|
20
20
|
|
21
21
|
This gem is built for ruby 1.9.x, checkout the [1-8-stable](https://github.com/RevolutionPrep/netsuite/tree/1-8-stable) branch for ruby 1.8.x support.
|
22
|
+
|
23
|
+
## Testing
|
24
|
+
Before contributing a patch make sure all existing tests pass.
|
25
|
+
|
26
|
+
```
|
27
|
+
git clone git://github.com/iloveitaly/netsuite.git
|
28
|
+
cd netsuite
|
29
|
+
bundle
|
30
|
+
bundle exec rspec
|
31
|
+
```
|
22
32
|
## Usage
|
23
33
|
|
24
34
|
### Configuration
|
@@ -48,8 +58,13 @@ end
|
|
48
58
|
* Retrieves the customer by internalId.
|
49
59
|
|
50
60
|
```Ruby
|
51
|
-
customer = NetSuite::Records::Customer.get(:internal_id => 4)
|
52
|
-
|
61
|
+
customer = NetSuite::Records::Customer.get(:internal_id => 4)
|
62
|
+
# => #<NetSuite::Records::Customer:0x1042f59b8>
|
63
|
+
customer.is_person
|
64
|
+
# => true
|
65
|
+
|
66
|
+
# or
|
67
|
+
NetSuite::Records::Customer.get(4).is_person
|
53
68
|
```
|
54
69
|
|
55
70
|
## Additions
|
data/lib/netsuite.rb
CHANGED
@@ -79,6 +79,9 @@ module NetSuite
|
|
79
79
|
autoload :PricingMatrix, 'netsuite/records/pricing_matrix'
|
80
80
|
autoload :RecordRef, 'netsuite/records/record_ref'
|
81
81
|
autoload :RevRecTemplate, 'netsuite/records/rev_rec_template'
|
82
|
+
autoload :SalesOrder, 'netsuite/records/sales_order'
|
83
|
+
autoload :SalesOrderItem, 'netsuite/records/sales_order_item'
|
84
|
+
autoload :SalesOrderItemList, 'netsuite/records/sales_order_item_list'
|
82
85
|
autoload :ShipAddress, 'netsuite/records/ship_address'
|
83
86
|
autoload :Term, 'netsuite/records/term'
|
84
87
|
end
|
data/lib/netsuite/actions/add.rb
CHANGED
@@ -11,7 +11,7 @@ module NetSuite
|
|
11
11
|
|
12
12
|
def request
|
13
13
|
connection.request :platformMsgs, :add do
|
14
|
-
soap.namespaces['xmlns:platformMsgs'] = "urn:
|
14
|
+
soap.namespaces['xmlns:platformMsgs'] = "urn:core_#{NetSuite::Configuration.api_version}.platform.webservices.netsuite.com"
|
15
15
|
soap.namespaces['xmlns:platformCore'] = "urn:core_#{NetSuite::Configuration.api_version}.platform.webservices.netsuite.com"
|
16
16
|
soap.namespaces['xmlns:listRel'] = "urn:relationships_#{NetSuite::Configuration.api_version}.lists.webservices.netsuite.com"
|
17
17
|
soap.namespaces['xmlns:tranSales'] = "urn:sales_#{NetSuite::Configuration.api_version}.transactions.webservices.netsuite.com"
|
@@ -66,7 +66,10 @@ module NetSuite
|
|
66
66
|
module Support
|
67
67
|
def add
|
68
68
|
response = NetSuite::Actions::Add.call(self)
|
69
|
-
response.success?
|
69
|
+
if response.success?
|
70
|
+
@internal_id = response.body[:@internal_id]
|
71
|
+
true
|
72
|
+
end
|
70
73
|
end
|
71
74
|
end
|
72
75
|
|
data/lib/netsuite/actions/get.rb
CHANGED
@@ -10,7 +10,7 @@ module NetSuite
|
|
10
10
|
actions :get, :initialize, :add, :delete
|
11
11
|
|
12
12
|
fields :alt_handling_cost, :alt_shipping_cost, :balance, :bill_address,
|
13
|
-
:billing_schedule, :contrib_pct, :created_date, :
|
13
|
+
:billing_schedule, :contrib_pct, :created_date, :currency_name, :custom_field_list,
|
14
14
|
:deferred_revenue, :discount_amount, :discount_date, :discount_item, :discount_rate,
|
15
15
|
:due_date, :email, :end_date, :est_gross_profit, :est_gross_profit_percent, :exchange_rate,
|
16
16
|
:exclude_commission, :exp_cost_disc_amount, :exp_cost_disc_print, :exp_cost_disc_rate, :exp_cost_disc_tax_1_amt,
|
@@ -19,12 +19,12 @@ module NetSuite
|
|
19
19
|
:handling_tax_2_rate, :handling_tax_code, :is_taxable, :item_cost_disc_amount, :item_cost_disc_print,
|
20
20
|
:item_cost_disc_rate, :item_cost_disc_tax_1_amt, :item_cost_disc_taxable, :item_cost_discount, :item_cost_list,
|
21
21
|
:item_cost_tax_code, :item_cost_tax_rate_1, :item_cost_tax_rate_2, :item_list, :job, :last_modified_date,
|
22
|
-
:lead_source, :linked_tracking_numbers, :
|
22
|
+
:lead_source, :linked_tracking_numbers, :memo, :message, :message_sel, :on_credit_hold, :opportunity,
|
23
23
|
:other_ref_name, :partner, :partners_list, :promo_code, :rev_rec_end_date,
|
24
24
|
:rev_rec_on_rev_commitment, :rev_rec_schedule, :rev_rec_start_date, :revenue_status, :sales_effective_date,
|
25
|
-
:sales_group, :
|
26
|
-
:
|
27
|
-
:status, :subsidiary, :sync_partner_teams, :sync_sales_teams, :tax_2_total, :
|
25
|
+
:sales_group, :sales_team_list, :ship_address, :ship_date, :ship_group_list,
|
26
|
+
:shipping_cost, :shipping_tax_1_rate, :shipping_tax_2_rate, :shipping_tax_code, :source, :start_date,
|
27
|
+
:status, :subsidiary, :sync_partner_teams, :sync_sales_teams, :tax_2_total, :tax_rate,
|
28
28
|
:tax_total, :time_disc_amount, :time_disc_print, :time_disc_rate, :time_disc_tax_1_amt, :time_disc_taxable,
|
29
29
|
:time_discount, :time_list, :time_tax_code, :time_tax_rate_1, :time_tax_rate_2, :to_be_emailed, :to_be_faxed,
|
30
30
|
:to_be_printed, :total_cost_estimate, :tracking_numbers, :tran_date, :tran_id, :tran_is_vsoe_bundle,
|
@@ -37,7 +37,9 @@ module NetSuite
|
|
37
37
|
|
38
38
|
read_only_fields :sub_total, :discount_total, :total, :recognized_revenue, :amount_remaining, :amount_paid
|
39
39
|
|
40
|
-
record_refs :account, :bill_address_list, :custom_form, :department, :entity, :klass,
|
40
|
+
record_refs :account, :bill_address_list, :custom_form, :department, :entity, :klass,
|
41
|
+
:posting_period, :ship_address_list, :terms, :location, :sales_rep, :tax_item, :created_from,
|
42
|
+
:ship_method
|
41
43
|
|
42
44
|
attr_reader :internal_id
|
43
45
|
attr_accessor :external_id
|
@@ -16,7 +16,7 @@ module NetSuite
|
|
16
16
|
|
17
17
|
field :custom_field_list, CustomFieldList
|
18
18
|
|
19
|
-
record_refs :department, :item, :job, :location, :price, :rev_rec_schedule, :ship_address, :ship_method, :tax_code, :units
|
19
|
+
record_refs :department, :item, :job, :location, :price, :rev_rec_schedule, :ship_address, :ship_method, :tax_code, :units, :klass
|
20
20
|
|
21
21
|
def initialize(attributes_or_record = {})
|
22
22
|
case attributes_or_record
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class SalesOrder
|
4
|
+
include Support::Fields
|
5
|
+
include Support::RecordRefs
|
6
|
+
include Support::Records
|
7
|
+
include Support::Actions
|
8
|
+
include Namespaces::TranSales
|
9
|
+
|
10
|
+
actions :get, :add, :initialize, :delete, :update
|
11
|
+
|
12
|
+
fields :alt_handling_cost, :alt_shipping_cost, :amount_paid, :amount_remaining, :auto_apply, :balance,
|
13
|
+
:bill_address, :contrib_pct, :created_date, :currency_name, :deferred_revenue, :discount_rate, :email, :end_date,
|
14
|
+
:est_gross_profit, :est_gross_profit_percent, :exchange_rate, :exclude_commission, :fax, :gift_cert_applied,
|
15
|
+
:gift_cert_available, :gift_cert_total, :handling_cost, :handling_tax1_rate, :handling_tax2_rate, :is_taxable,
|
16
|
+
:last_modified_date, :memo, :message, :on_credit_hold, :order_status, :other_ref_num, :recognized_revenue,
|
17
|
+
:rev_rec_on_rev_commitment, :sales_effective_date, :shipping_cost, :shipping_tax1_rate, :shipping_tax2_rate, :source,
|
18
|
+
:start_date, :status, :sync_partner_teams, :sync_sales_teams, :tax2_total, :tax_rate, :to_be_emailed, :to_be_faxed,
|
19
|
+
:to_be_printed, :total_cost_estimate, :tran_date, :tran_id, :tran_is_vsoe_bundle, :vat_reg_num,
|
20
|
+
:vsoe_auto_calc
|
21
|
+
|
22
|
+
field :transaction_bill_address, BillAddress
|
23
|
+
field :item_list, SalesOrderItemList
|
24
|
+
field :custom_field_list, CustomFieldList
|
25
|
+
|
26
|
+
read_only_fields :applied, :discount_total, :sub_total, :tax_total, :total, :unapplied
|
27
|
+
|
28
|
+
record_refs :account, :bill_address_list, :created_from, :currency, :custom_form, :department, :discount_item, :entity, :gift_cert,
|
29
|
+
:handling_tax_code, :job, :klass, :lead_source, :location, :message_sel, :opportunity, :partner, :posting_period, :promo_code,
|
30
|
+
:sales_group, :sales_rep, :ship_method, :shipping_tax_code, :subsidiary, :tax_item
|
31
|
+
|
32
|
+
attr_reader :internal_id
|
33
|
+
attr_accessor :external_id
|
34
|
+
|
35
|
+
def initialize(attributes = {})
|
36
|
+
@internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
|
37
|
+
@external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
|
38
|
+
initialize_from_attributes_hash(attributes)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class SalesOrderItem
|
4
|
+
include Support::Fields
|
5
|
+
include Support::RecordRefs
|
6
|
+
include Support::Records
|
7
|
+
include Namespaces::TranSales
|
8
|
+
|
9
|
+
fields :amount, :bin_numbers, :cost_estimate, :cost_estimate_type, :defer_rev_rec, :description, :gift_cert_from,
|
10
|
+
:gift_cert_message, :gift_cert_number, :gift_cert_recipient_email, :gift_cert_recipient_name, :gross_amt, :is_taxable,
|
11
|
+
:line, :order_line, :quantity, :rate, :rev_rec_end_date, :rev_rec_start_date, :rev_rec_term_in_months, :serial_numbers,
|
12
|
+
:tax1_amt, :tax_rate1, :tax_rate2, :vsoe_allocation, :vsoe_amount, :vsoe_deferral, :vsoe_delivered,
|
13
|
+
:vsoe_permit_discount, :vsoe_price
|
14
|
+
|
15
|
+
field :custom_field_list, CustomFieldList
|
16
|
+
|
17
|
+
record_refs :department, :item, :job, :klass, :location, :price, :rev_rec_schedule, :tax_code, :units
|
18
|
+
|
19
|
+
def initialize(attributes_or_record = {})
|
20
|
+
case attributes_or_record
|
21
|
+
when Hash
|
22
|
+
initialize_from_attributes_hash(attributes_or_record)
|
23
|
+
when self.class
|
24
|
+
initialize_from_record(attributes_or_record)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize_from_record(record)
|
29
|
+
self.attributes = record.send(:attributes)
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_record
|
33
|
+
rec = super
|
34
|
+
if rec["#{record_namespace}:customFieldList"]
|
35
|
+
rec["#{record_namespace}:customFieldList!"] = rec.delete("#{record_namespace}:customFieldList")
|
36
|
+
end
|
37
|
+
rec
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class SalesOrderItemList
|
4
|
+
include Support::Fields
|
5
|
+
include Namespaces::TranSales
|
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 << SalesOrderItem.new(items)
|
17
|
+
when Array
|
18
|
+
items.each { |item| self.items << SalesOrderItem.new(item) }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def items
|
23
|
+
@items ||= []
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_record
|
27
|
+
{ "#{record_namespace}:item" => items.map(&:to_record) }
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/netsuite/version.rb
CHANGED
@@ -7,7 +7,7 @@ describe NetSuite::Records::InvoiceItem do
|
|
7
7
|
[
|
8
8
|
:amount, :amount_ordered, :bin_numbers, :cost_estimate, :cost_estimate_type, :current_percent, :defer_rev_rec,
|
9
9
|
:description, :gift_cert_from, :gift_cert_message, :gift_cert_number, :gift_cert_recipient_email,
|
10
|
-
:gift_cert_recipient_name, :gross_amt, :inventory_detail, :is_taxable, :item_is_fulfilled, :license_code, :line,
|
10
|
+
:gift_cert_recipient_name, :gross_amt, :inventory_detail, :is_taxable, :item_is_fulfilled, :license_code, :line,
|
11
11
|
:options, :order_line, :percent_complete, :quantity, :quantity_available, :quantity_fulfilled, :quantity_on_hand,
|
12
12
|
:quantity_ordered, :quantity_remaining, :rate, :rev_rec_end_date, :rev_rec_start_date, :serial_numbers, :ship_group,
|
13
13
|
:tax1_amt, :tax_rate1, :tax_rate2, :vsoe_allocation, :vsoe_amount, :vsoe_deferral, :vsoe_delivered, :vsoe_permit_discount,
|
@@ -19,7 +19,8 @@ describe NetSuite::Records::InvoiceItem do
|
|
19
19
|
|
20
20
|
it 'has the right record_refs' do
|
21
21
|
[
|
22
|
-
:department, :item, :job, :location, :price, :rev_rec_schedule, :ship_address, :ship_method, :tax_code, :units
|
22
|
+
:department, :item, :job, :location, :price, :rev_rec_schedule, :ship_address, :ship_method, :tax_code, :units,
|
23
|
+
:klass
|
23
24
|
].each do |record_ref|
|
24
25
|
item.should have_record_ref(record_ref)
|
25
26
|
end
|
@@ -8,7 +8,7 @@ describe NetSuite::Records::Invoice do
|
|
8
8
|
it 'has all the right fields' do
|
9
9
|
[
|
10
10
|
:alt_handling_cost, :alt_shipping_cost, :amount_paid, :amount_remaining, :balance, :bill_address,
|
11
|
-
:billing_schedule, :contrib_pct, :created_date, :
|
11
|
+
:billing_schedule, :contrib_pct, :created_date, :currency_name,
|
12
12
|
:deferred_revenue, :discount_amount, :discount_date, :discount_item, :discount_rate,
|
13
13
|
:due_date, :email, :end_date, :est_gross_profit, :est_gross_profit_percent, :exchange_rate,
|
14
14
|
:exclude_commission, :exp_cost_disc_amount, :exp_cost_disc_print, :exp_cost_disc_rate, :exp_cost_disc_tax_1_amt,
|
@@ -17,12 +17,12 @@ describe NetSuite::Records::Invoice do
|
|
17
17
|
:handling_tax_2_rate, :handling_tax_code, :is_taxable, :item_cost_disc_amount, :item_cost_disc_print,
|
18
18
|
:item_cost_disc_rate, :item_cost_disc_tax_1_amt, :item_cost_disc_taxable, :item_cost_discount, :item_cost_list,
|
19
19
|
:item_cost_tax_code, :item_cost_tax_rate_1, :item_cost_tax_rate_2, :job, :last_modified_date,
|
20
|
-
:lead_source, :linked_tracking_numbers, :
|
20
|
+
:lead_source, :linked_tracking_numbers, :memo, :message, :message_sel, :on_credit_hold, :opportunity,
|
21
21
|
:other_ref_name, :partner, :partners_list, :promo_code, :recognized_revenue, :rev_rec_end_date,
|
22
22
|
:rev_rec_on_rev_commitment, :rev_rec_schedule, :rev_rec_start_date, :revenue_status, :sales_effective_date,
|
23
|
-
:sales_group, :
|
24
|
-
:
|
25
|
-
:status, :subsidiary, :sync_partner_teams, :sync_sales_teams, :tax_2_total, :
|
23
|
+
:sales_group, :sales_team_list, :ship_address, :ship_date, :ship_group_list,
|
24
|
+
:shipping_cost, :shipping_tax_1_rate, :shipping_tax_2_rate, :shipping_tax_code, :source, :start_date,
|
25
|
+
:status, :subsidiary, :sync_partner_teams, :sync_sales_teams, :tax_2_total, :tax_rate,
|
26
26
|
:tax_total, :time_disc_amount, :time_disc_print, :time_disc_rate, :time_disc_tax_1_amt, :time_disc_taxable,
|
27
27
|
:time_discount, :time_list, :time_tax_code, :time_tax_rate_1, :time_tax_rate_2, :to_be_emailed, :to_be_faxed,
|
28
28
|
:to_be_printed, :total_cost_estimate, :tracking_numbers, :tran_date, :tran_id, :tran_is_vsoe_bundle,
|
@@ -42,7 +42,8 @@ describe NetSuite::Records::Invoice do
|
|
42
42
|
|
43
43
|
it 'has the right record_refs' do
|
44
44
|
[
|
45
|
-
:account, :bill_address_list, :custom_form, :department, :entity, :klass, :posting_period, :ship_address_list, :terms
|
45
|
+
:account, :bill_address_list, :custom_form, :department, :entity, :klass, :posting_period, :ship_address_list, :terms,
|
46
|
+
:created_from, :location, :sales_rep, :ship_method, :tax_item
|
46
47
|
].each do |record_ref|
|
47
48
|
invoice.should have_record_ref(record_ref)
|
48
49
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NetSuite::Records::SalesOrderItemList do
|
4
|
+
let(:list) { NetSuite::Records::SalesOrderItemList.new }
|
5
|
+
|
6
|
+
it 'has a items attribute' do
|
7
|
+
list.items.should be_kind_of(Array)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#to_record' do
|
11
|
+
before do
|
12
|
+
list.items << NetSuite::Records::SalesOrderItem.new(
|
13
|
+
:rate => 10
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'can represent itself as a SOAP record' do
|
18
|
+
record = {
|
19
|
+
'tranSales:item' => [{
|
20
|
+
'tranSales:rate' => 10
|
21
|
+
}]
|
22
|
+
}
|
23
|
+
list.to_record.should eql(record)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NetSuite::Records::SalesOrderItem do
|
4
|
+
let(:item) { NetSuite::Records::SalesOrderItem.new }
|
5
|
+
|
6
|
+
it 'has all the right fields' do
|
7
|
+
[
|
8
|
+
:amount, :bin_numbers, :cost_estimate, :cost_estimate_type, :defer_rev_rec, :description, :gift_cert_from,
|
9
|
+
:gift_cert_message, :gift_cert_number, :gift_cert_recipient_email, :gift_cert_recipient_name, :gross_amt, :is_taxable,
|
10
|
+
:line, :order_line, :quantity, :rate, :rev_rec_end_date, :rev_rec_start_date, :rev_rec_term_in_months, :serial_numbers,
|
11
|
+
:tax1_amt, :tax_rate1, :tax_rate2, :vsoe_allocation, :vsoe_amount, :vsoe_deferral, :vsoe_delivered, :vsoe_permit_discount,
|
12
|
+
:vsoe_price
|
13
|
+
].each do |field|
|
14
|
+
item.should have_field(field)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'has all the right record refs' do
|
19
|
+
[
|
20
|
+
:department, :item, :job, :klass, :location, :price, :rev_rec_schedule, :tax_code, :units
|
21
|
+
].each do |record_ref|
|
22
|
+
item.should have_record_ref(record_ref)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#options' do
|
27
|
+
it 'can be set from attributes'
|
28
|
+
it 'can be set from a CustomFieldList object'
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#inventory_detail' do
|
32
|
+
it 'can be set from attributes'
|
33
|
+
it 'can be set from an InventoryDetail object'
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#custom_field_list' do
|
37
|
+
it 'can be set from attributes'
|
38
|
+
it 'can be set from a CustomFieldList object'
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,201 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NetSuite::Records::SalesOrder do
|
4
|
+
let(:salesorder) { NetSuite::Records::SalesOrder.new }
|
5
|
+
let(:customer) { NetSuite::Records::Customer.new }
|
6
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
|
7
|
+
|
8
|
+
it 'has all the right fields' do
|
9
|
+
[
|
10
|
+
:alt_handling_cost, :alt_shipping_cost, :amount_paid, :amount_remaining, :applied, :auto_apply,
|
11
|
+
:balance, :bill_address, :contrib_pct, :created_date, :currency_name, :deferred_revenue,
|
12
|
+
:discount_rate, :discount_total, :email, :end_date, :est_gross_profit, :est_gross_profit_percent,
|
13
|
+
:exchange_rate, :exclude_commission, :fax, :gift_cert_applied, :gift_cert_available,
|
14
|
+
:gift_cert_total, :handling_cost, :handling_tax1_rate, :handling_tax2_rate, :is_taxable,
|
15
|
+
:last_modified_date, :memo, :message, :on_credit_hold, :other_ref_num, :recognized_revenue,
|
16
|
+
:rev_rec_on_rev_commitment, :sales_effective_date, :shipping_cost, :shipping_tax1_rate,
|
17
|
+
:shipping_tax2_rate, :source, :start_date, :status, :sub_total, :sync_partner_teams,
|
18
|
+
:sync_sales_teams, :tax2_total, :tax_rate, :tax_total, :to_be_emailed, :to_be_faxed, :to_be_printed,
|
19
|
+
:total, :total_cost_estimate, :tran_date, :tran_id, :tran_is_vsoe_bundle, :unapplied, :vat_reg_num,
|
20
|
+
:vsoe_auto_calc
|
21
|
+
].each do |field|
|
22
|
+
salesorder.should have_field(field)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'has all the right record refs' do
|
27
|
+
[
|
28
|
+
:account, :bill_address_list, :created_from, :currency, :custom_form, :department, :discount_item,
|
29
|
+
:entity, :gift_cert, :handling_tax_code, :job, :klass, :lead_source, :location, :message_sel,
|
30
|
+
:opportunity, :partner, :posting_period, :promo_code, :sales_group, :sales_rep,
|
31
|
+
:ship_method, :shipping_tax_code, :subsidiary, :tax_item
|
32
|
+
].each do |record_ref|
|
33
|
+
salesorder.should have_record_ref(record_ref)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#order_status' do
|
38
|
+
it 'can be set from attributes'
|
39
|
+
it 'can be set from a SalesOrderOrderStatus object'
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#item_list' do
|
43
|
+
it 'can be set from attributes' do
|
44
|
+
attributes = {
|
45
|
+
:item => {
|
46
|
+
:amount => 10
|
47
|
+
}
|
48
|
+
}
|
49
|
+
salesorder.item_list = attributes
|
50
|
+
salesorder.item_list.should be_kind_of(NetSuite::Records::SalesOrderItemList)
|
51
|
+
salesorder.item_list.items.length.should eql(1)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'can be set from a SalesOrderItemList object' do
|
55
|
+
item_list = NetSuite::Records::SalesOrderItemList.new
|
56
|
+
salesorder.item_list = item_list
|
57
|
+
salesorder.item_list.should eql(item_list)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#transaction_bill_address' do
|
62
|
+
it 'can be set from attributes'
|
63
|
+
it 'can be set from a BillAddress object'
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#revenue_status' do
|
67
|
+
it 'can be set from attributes'
|
68
|
+
it 'can be set from a RevenueStatus object'
|
69
|
+
end
|
70
|
+
|
71
|
+
describe '#sales_team_list' do
|
72
|
+
it 'can be set from attributes'
|
73
|
+
it 'can be set from a SalesOrderSalesTeamList object'
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#partners_list' do
|
77
|
+
it 'can be set from attributes'
|
78
|
+
it 'can be set from a SalesOrderPartnersList object'
|
79
|
+
end
|
80
|
+
|
81
|
+
describe '#custom_field_list' do
|
82
|
+
it 'can be set from attributes'
|
83
|
+
it 'can be set from a CustomFieldList object'
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '.get' do
|
87
|
+
context 'when the response is successful' do
|
88
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :alt_shipping_cost => 100 }) }
|
89
|
+
|
90
|
+
it 'returns a SalesOrder instance populated with the data from the response object' do
|
91
|
+
NetSuite::Actions::Get.should_receive(:call).with(NetSuite::Records::SalesOrder, :external_id => 1).and_return(response)
|
92
|
+
salesorder = NetSuite::Records::SalesOrder.get(:external_id => 1)
|
93
|
+
salesorder.should be_kind_of(NetSuite::Records::SalesOrder)
|
94
|
+
salesorder.alt_shipping_cost.should eql(100)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'when the response is unsuccessful' do
|
99
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
100
|
+
|
101
|
+
it 'raises a RecordNotFound exception' do
|
102
|
+
NetSuite::Actions::Get.should_receive(:call).with(NetSuite::Records::SalesOrder, :external_id => 1).and_return(response)
|
103
|
+
lambda {
|
104
|
+
NetSuite::Records::SalesOrder.get(:external_id => 1)
|
105
|
+
}.should raise_error(NetSuite::RecordNotFound,
|
106
|
+
/NetSuite::Records::SalesOrder with OPTIONS=(.*) could not be found/)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '.initialize' do
|
112
|
+
context 'when the request is successful' do
|
113
|
+
it 'returns an initialized sales order from the customer entity' do
|
114
|
+
NetSuite::Actions::Initialize.should_receive(:call).with(NetSuite::Records::SalesOrder, customer).and_return(response)
|
115
|
+
salesorder = NetSuite::Records::SalesOrder.initialize(customer)
|
116
|
+
salesorder.should be_kind_of(NetSuite::Records::SalesOrder)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'when the response is unsuccessful' do
|
121
|
+
pending
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe '#add' do
|
126
|
+
let(:test_data) { { :email => 'test@example.com', :fax => '1234567890' } }
|
127
|
+
|
128
|
+
context 'when the response is successful' do
|
129
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
|
130
|
+
|
131
|
+
it 'returns true' do
|
132
|
+
salesorder = NetSuite::Records::SalesOrder.new(test_data)
|
133
|
+
NetSuite::Actions::Add.should_receive(:call).
|
134
|
+
with(salesorder).
|
135
|
+
and_return(response)
|
136
|
+
salesorder.add.should be_true
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context 'when the response is unsuccessful' do
|
141
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
142
|
+
|
143
|
+
it 'returns false' do
|
144
|
+
salesorder = NetSuite::Records::SalesOrder.new(test_data)
|
145
|
+
NetSuite::Actions::Add.should_receive(:call).
|
146
|
+
with(salesorder).
|
147
|
+
and_return(response)
|
148
|
+
salesorder.add.should be_false
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe '#delete' do
|
154
|
+
let(:test_data) { { :internal_id => '1' } }
|
155
|
+
|
156
|
+
context 'when the response is successful' do
|
157
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
|
158
|
+
|
159
|
+
it 'returns true' do
|
160
|
+
salesorder = NetSuite::Records::SalesOrder.new(test_data)
|
161
|
+
NetSuite::Actions::Delete.should_receive(:call).
|
162
|
+
with(salesorder).
|
163
|
+
and_return(response)
|
164
|
+
salesorder.delete.should be_true
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
context 'when the response is unsuccessful' do
|
169
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
170
|
+
|
171
|
+
it 'returns false' do
|
172
|
+
salesorder = NetSuite::Records::SalesOrder.new(test_data)
|
173
|
+
NetSuite::Actions::Delete.should_receive(:call).
|
174
|
+
with(salesorder).
|
175
|
+
and_return(response)
|
176
|
+
salesorder.delete.should be_false
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
describe '#to_record' do
|
182
|
+
before do
|
183
|
+
salesorder.email = 'something@example.com'
|
184
|
+
salesorder.tran_id = '4'
|
185
|
+
end
|
186
|
+
it 'can represent itself as a SOAP record' do
|
187
|
+
record = {
|
188
|
+
'tranSales:email' => 'something@example.com',
|
189
|
+
'tranSales:tranId' => '4'
|
190
|
+
}
|
191
|
+
salesorder.to_record.should eql(record)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
describe '#record_type' do
|
196
|
+
it 'returns a string representation of the SOAP type' do
|
197
|
+
salesorder.record_type.should eql('tranSales:SalesOrder')
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netsuite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.48
|
5
4
|
prerelease:
|
5
|
+
version: 0.0.49
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ryan Moran
|
@@ -10,88 +10,88 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-02-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
17
|
requirements:
|
20
18
|
- - ~>
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: 1.2.0
|
21
|
+
none: false
|
22
|
+
name: savon
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
|
26
|
-
none: false
|
25
|
+
requirement: !ruby/object:Gem::Requirement
|
27
26
|
requirements:
|
28
27
|
- - ~>
|
29
28
|
- !ruby/object:Gem::Version
|
30
29
|
version: 1.2.0
|
31
|
-
- !ruby/object:Gem::Dependency
|
32
|
-
name: nokogiri
|
33
|
-
requirement: !ruby/object:Gem::Requirement
|
34
30
|
none: false
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
35
33
|
requirements:
|
36
34
|
- - ~>
|
37
35
|
- !ruby/object:Gem::Version
|
38
36
|
version: 1.5.0
|
37
|
+
none: false
|
38
|
+
name: nokogiri
|
39
39
|
type: :runtime
|
40
40
|
prerelease: false
|
41
|
-
|
42
|
-
none: false
|
41
|
+
requirement: !ruby/object:Gem::Requirement
|
43
42
|
requirements:
|
44
43
|
- - ~>
|
45
44
|
- !ruby/object:Gem::Version
|
46
45
|
version: 1.5.0
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: rspec
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
46
|
none: false
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
49
|
requirements:
|
52
50
|
- - ~>
|
53
51
|
- !ruby/object:Gem::Version
|
54
52
|
version: '2.10'
|
53
|
+
none: false
|
54
|
+
name: rspec
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
|
58
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
59
58
|
requirements:
|
60
59
|
- - ~>
|
61
60
|
- !ruby/object:Gem::Version
|
62
61
|
version: '2.10'
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: savon_spec
|
65
|
-
requirement: !ruby/object:Gem::Requirement
|
66
62
|
none: false
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
65
|
requirements:
|
68
66
|
- - ~>
|
69
67
|
- !ruby/object:Gem::Version
|
70
68
|
version: 1.3.0
|
69
|
+
none: false
|
70
|
+
name: savon_spec
|
71
71
|
type: :development
|
72
72
|
prerelease: false
|
73
|
-
|
74
|
-
none: false
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
75
74
|
requirements:
|
76
75
|
- - ~>
|
77
76
|
- !ruby/object:Gem::Version
|
78
77
|
version: 1.3.0
|
79
|
-
- !ruby/object:Gem::Dependency
|
80
|
-
name: autotest-standalone
|
81
|
-
requirement: !ruby/object:Gem::Requirement
|
82
78
|
none: false
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
81
|
requirements:
|
84
82
|
- - ~>
|
85
83
|
- !ruby/object:Gem::Version
|
86
84
|
version: '4.5'
|
85
|
+
none: false
|
86
|
+
name: autotest-standalone
|
87
87
|
type: :development
|
88
88
|
prerelease: false
|
89
|
-
|
90
|
-
none: false
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
91
90
|
requirements:
|
92
91
|
- - ~>
|
93
92
|
- !ruby/object:Gem::Version
|
94
93
|
version: '4.5'
|
94
|
+
none: false
|
95
95
|
description: NetSuite SuiteTalk API Wrapper
|
96
96
|
email:
|
97
97
|
- ryan.moran@gmail.com
|
@@ -164,6 +164,9 @@ files:
|
|
164
164
|
- lib/netsuite/records/pricing_matrix.rb
|
165
165
|
- lib/netsuite/records/record_ref.rb
|
166
166
|
- lib/netsuite/records/rev_rec_template.rb
|
167
|
+
- lib/netsuite/records/sales_order.rb
|
168
|
+
- lib/netsuite/records/sales_order_item.rb
|
169
|
+
- lib/netsuite/records/sales_order_item_list.rb
|
167
170
|
- lib/netsuite/records/ship_address.rb
|
168
171
|
- lib/netsuite/records/term.rb
|
169
172
|
- lib/netsuite/response.rb
|
@@ -220,6 +223,9 @@ files:
|
|
220
223
|
- spec/netsuite/records/payment_method_spec.rb
|
221
224
|
- spec/netsuite/records/record_ref_spec.rb
|
222
225
|
- spec/netsuite/records/rev_rec_template_spec.rb
|
226
|
+
- spec/netsuite/records/sales_order_item_list_spec.rb
|
227
|
+
- spec/netsuite/records/sales_order_item_spec.rb
|
228
|
+
- spec/netsuite/records/sales_order_spec.rb
|
223
229
|
- spec/netsuite/records/ship_address_spec.rb
|
224
230
|
- spec/netsuite/records/term_spec.rb
|
225
231
|
- spec/netsuite/response_spec.rb
|
@@ -253,20 +259,20 @@ rdoc_options: []
|
|
253
259
|
require_paths:
|
254
260
|
- lib
|
255
261
|
required_ruby_version: !ruby/object:Gem::Requirement
|
256
|
-
none: false
|
257
262
|
requirements:
|
258
263
|
- - ! '>='
|
259
264
|
- !ruby/object:Gem::Version
|
260
265
|
version: '0'
|
261
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
262
266
|
none: false
|
267
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
263
268
|
requirements:
|
264
269
|
- - ! '>='
|
265
270
|
- !ruby/object:Gem::Version
|
266
271
|
version: '0'
|
272
|
+
none: false
|
267
273
|
requirements: []
|
268
274
|
rubyforge_project:
|
269
|
-
rubygems_version: 1.8.
|
275
|
+
rubygems_version: 1.8.23
|
270
276
|
signing_key:
|
271
277
|
specification_version: 3
|
272
278
|
summary: NetSuite SuiteTalk API Wrapper
|
@@ -315,6 +321,9 @@ test_files:
|
|
315
321
|
- spec/netsuite/records/payment_method_spec.rb
|
316
322
|
- spec/netsuite/records/record_ref_spec.rb
|
317
323
|
- spec/netsuite/records/rev_rec_template_spec.rb
|
324
|
+
- spec/netsuite/records/sales_order_item_list_spec.rb
|
325
|
+
- spec/netsuite/records/sales_order_item_spec.rb
|
326
|
+
- spec/netsuite/records/sales_order_spec.rb
|
318
327
|
- spec/netsuite/records/ship_address_spec.rb
|
319
328
|
- spec/netsuite/records/term_spec.rb
|
320
329
|
- spec/netsuite/response_spec.rb
|