netsuite 0.8.5 → 0.8.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.ruby-version +1 -1
- data/Gemfile +3 -2
- data/README.md +8 -2
- data/circle.yml +33 -14
- data/lib/netsuite.rb +5 -0
- data/lib/netsuite/configuration.rb +8 -4
- data/lib/netsuite/records/classification.rb +4 -1
- data/lib/netsuite/records/custom_record.rb +1 -1
- data/lib/netsuite/records/customer.rb +2 -1
- 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_payment.rb +1 -0
- data/lib/netsuite/records/employee.rb +1 -1
- 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/invoice.rb +1 -1
- data/lib/netsuite/records/item_fulfillment.rb +1 -1
- data/lib/netsuite/records/non_inventory_resale_item.rb +1 -0
- data/lib/netsuite/records/partner.rb +1 -1
- data/lib/netsuite/records/service_resale_item.rb +1 -1
- data/lib/netsuite/utilities.rb +1 -1
- data/lib/netsuite/version.rb +1 -1
- data/netsuite.gemspec +3 -2
- data/spec/netsuite/configuration_spec.rb +61 -6
- data/spec/netsuite/records/classification_spec.rb +10 -1
- data/spec/netsuite/records/custom_field_list_spec.rb +6 -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_spec.rb +22 -1
- data/spec/netsuite/records/employee_spec.rb +2 -2
- 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/non_inventory_resale_item_spec.rb +165 -0
- data/spec/netsuite/records/partner_spec.rb +141 -0
- data/spec/netsuite/records/service_resale_item_spec.rb +134 -0
- metadata +31 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3c52f30c1f82b68e1ac2e078d81eed79f6c34ec0cc5937dd4251a53cb9a5a5c0
|
4
|
+
data.tar.gz: 4208277a164ec0b92520cef24b19367538788ecce870cd37f683ddb9fb85143e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd8c7a34e1ecced72b398715f17978677bc87021e0bc9581449299f918b51993770d956eb3553775c1631ef16c8e488e6ffe682d9575665d81434106635f7e53
|
7
|
+
data.tar.gz: f40134f2aaf8824e9b51f9dba00a8a4d9b3b1e935df0d0d07f100018becf8180f6b603f63e52331e65877bbeb135de491fed75a9c5af0928e7409eedbc2f62b4
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.6
|
data/Gemfile
CHANGED
@@ -2,6 +2,7 @@ source 'https://rubygems.org'
|
|
2
2
|
gemspec
|
3
3
|
|
4
4
|
gem 'simplecov', :require => false
|
5
|
+
gem 'rspec_junit_formatter'
|
5
6
|
|
6
7
|
gem 'pry-nav'
|
7
8
|
gem 'pry-rescue'
|
@@ -11,5 +12,5 @@ gem 'tzinfo', '1.2.5'
|
|
11
12
|
# gem 'tzinfo', '2.0.0'
|
12
13
|
|
13
14
|
# required for CircleCI to build properly with ruby 1.9.3
|
14
|
-
gem 'json', '~>
|
15
|
-
gem 'rack', '~> 1.
|
15
|
+
gem 'json', '~> 2.3.0'
|
16
|
+
gem 'rack', '~> 2.1.4'
|
data/README.md
CHANGED
@@ -75,8 +75,8 @@ NetSuite.configure do
|
|
75
75
|
password 'password'
|
76
76
|
role 10
|
77
77
|
|
78
|
-
# use `NetSuite::Utilities.
|
79
|
-
# you'll want to do this in a background
|
78
|
+
# use `NetSuite::Utilities.data_center_url('TSTDRV1576318')` to retrieve the URL
|
79
|
+
# you'll want to do this in a background process and strip the protocol out of the return string
|
80
80
|
wsdl_domain 'tstdrv1576318.suitetalk.api.netsuite.com'
|
81
81
|
end
|
82
82
|
```
|
@@ -106,8 +106,14 @@ NetSuite.configure do
|
|
106
106
|
read_timeout 100_000
|
107
107
|
|
108
108
|
# you can specify a file or file descriptor to send the log output to (defaults to STDOUT)
|
109
|
+
# If using within a Rails app, consider setting to `Rails.logger` to leverage existing
|
110
|
+
# application-level log configuration
|
109
111
|
log File.join(Rails.root, 'log/netsuite.log')
|
110
112
|
|
113
|
+
# Defaults to :debug level logging for Savon API calls. Decrease the verbosity
|
114
|
+
# by setting log_level to `:info`, for example
|
115
|
+
# log_level :debug
|
116
|
+
|
111
117
|
# password-based login information
|
112
118
|
email 'email@domain.com'
|
113
119
|
password 'password'
|
data/circle.yml
CHANGED
@@ -1,17 +1,36 @@
|
|
1
|
-
|
1
|
+
version: 2.1
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
orbs:
|
4
|
+
# orbs are basically bundles of pre-written build scripts that work for common cases
|
5
|
+
# https://github.com/CircleCI-Public/ruby-orb
|
6
|
+
ruby: circleci/ruby@1.1
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
jobs:
|
9
|
+
# skipping build step because Gemfile.lock is not included in the source
|
10
|
+
# this makes the bundler caching step a noop
|
11
|
+
test:
|
12
|
+
parameters:
|
13
|
+
ruby-version:
|
14
|
+
type: string
|
15
|
+
docker:
|
16
|
+
- image: cimg/ruby:<< parameters.ruby-version >>
|
17
|
+
steps:
|
18
|
+
- checkout
|
19
|
+
- ruby/install-deps:
|
20
|
+
bundler-version: '1.17.2'
|
21
|
+
with-cache: false
|
22
|
+
- ruby/rspec-test
|
14
23
|
|
15
|
-
|
16
|
-
|
17
|
-
|
24
|
+
# strangely, there seems to be very little documentation about exactly how martix builds work.
|
25
|
+
# By defining a param inside your job definition, Circle CI will automatically spawn a job for
|
26
|
+
# unique param value passed via `matrix`. Neat!
|
27
|
+
# https://circleci.com/blog/circleci-matrix-jobs/
|
28
|
+
workflows:
|
29
|
+
build_and_test:
|
30
|
+
jobs:
|
31
|
+
- test:
|
32
|
+
matrix:
|
33
|
+
parameters:
|
34
|
+
# https://github.com/CircleCI-Public/cimg-ruby
|
35
|
+
# only supports the last three ruby versions
|
36
|
+
ruby-version: ["2.5", "2.6", "2.7"]
|
data/lib/netsuite.rb
CHANGED
@@ -112,6 +112,8 @@ module NetSuite
|
|
112
112
|
autoload :CustomerAddressbook, 'netsuite/records/customer_addressbook'
|
113
113
|
autoload :CustomerAddressbookList, 'netsuite/records/customer_addressbook_list'
|
114
114
|
autoload :CustomerCategory, 'netsuite/records/customer_category'
|
115
|
+
autoload :CustomerCreditCards, 'netsuite/records/customer_credit_cards'
|
116
|
+
autoload :CustomerCreditCardsList, 'netsuite/records/customer_credit_cards_list'
|
115
117
|
autoload :CustomerCurrency, 'netsuite/records/customer_currency'
|
116
118
|
autoload :CustomerCurrencyList, 'netsuite/records/customer_currency_list'
|
117
119
|
autoload :CustomerDeposit, 'netsuite/records/customer_deposit'
|
@@ -156,6 +158,9 @@ module NetSuite
|
|
156
158
|
autoload :Duration, 'netsuite/records/duration'
|
157
159
|
autoload :Employee, 'netsuite/records/employee'
|
158
160
|
autoload :EntityCustomField, 'netsuite/records/entity_custom_field'
|
161
|
+
autoload :Estimate, 'netsuite/records/estimate'
|
162
|
+
autoload :EstimateItem, 'netsuite/records/estimate_item'
|
163
|
+
autoload :EstimateItemList, 'netsuite/records/estimate_item_list'
|
159
164
|
autoload :File, 'netsuite/records/file'
|
160
165
|
autoload :GiftCertificate, 'netsuite/records/gift_certificate'
|
161
166
|
autoload :GiftCertificateItem, 'netsuite/records/gift_certificate_item'
|
@@ -350,7 +350,10 @@ module NetSuite
|
|
350
350
|
|
351
351
|
def logger(value = nil)
|
352
352
|
if value.nil?
|
353
|
-
|
353
|
+
# if passed a IO object (like StringIO) `empty?` won't exist
|
354
|
+
valid_log = log && !(log.respond_to?(:empty?) && log.empty?)
|
355
|
+
|
356
|
+
attributes[:logger] ||= ::Logger.new(valid_log ? log : $stdout)
|
354
357
|
else
|
355
358
|
attributes[:logger] = value
|
356
359
|
end
|
@@ -370,12 +373,13 @@ module NetSuite
|
|
370
373
|
end
|
371
374
|
|
372
375
|
def log_level(value = nil)
|
373
|
-
self.log_level = value
|
374
|
-
|
376
|
+
self.log_level = value if value
|
377
|
+
|
378
|
+
attributes[:log_level] || :debug
|
375
379
|
end
|
376
380
|
|
377
381
|
def log_level=(value)
|
378
|
-
attributes[:log_level]
|
382
|
+
attributes[:log_level] = value
|
379
383
|
end
|
380
384
|
end
|
381
385
|
end
|
@@ -9,9 +9,12 @@ module NetSuite
|
|
9
9
|
|
10
10
|
actions :add, :get, :get_list, :delete, :upsert, :search
|
11
11
|
|
12
|
-
fields :name, :include_children, :is_inactive, :class_translation_list
|
12
|
+
fields :name, :include_children, :is_inactive, :class_translation_list
|
13
13
|
|
14
14
|
field :subsidiary_list, RecordRefList
|
15
|
+
field :custom_field_list, CustomFieldList
|
16
|
+
|
17
|
+
record_refs :parent
|
15
18
|
|
16
19
|
attr_reader :internal_id
|
17
20
|
attr_accessor :external_id
|
@@ -13,7 +13,7 @@ module NetSuite
|
|
13
13
|
|
14
14
|
fields :account_number, :aging, :alt_email, :alt_name, :alt_phone, :bill_pay,
|
15
15
|
:buying_reason, :buying_time_frame, :campaign_category, :click_stream, :comments, :company_name,
|
16
|
-
:consol_aging, :consol_days_overdue, :contrib_pct, :
|
16
|
+
:consol_aging, :consol_days_overdue, :contrib_pct, :credit_hold_override,
|
17
17
|
:credit_limit, :date_created, :days_overdue, :default_address,
|
18
18
|
:download_list, :email, :email_preference, :email_transactions, :end_date, :entity_id,
|
19
19
|
:estimated_budget, :fax, :fax_transactions, :first_name, :first_visit, :give_access, :global_subscription_status,
|
@@ -28,6 +28,7 @@ module NetSuite
|
|
28
28
|
:vat_reg_number, :visits, :web_lead
|
29
29
|
|
30
30
|
field :addressbook_list, CustomerAddressbookList
|
31
|
+
field :credit_cards_list, CustomerCreditCardsList
|
31
32
|
field :custom_field_list, CustomFieldList
|
32
33
|
field :contact_roles_list, ContactAccessRolesList
|
33
34
|
field :currency_list, CustomerCurrencyList
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class CustomerCreditCards
|
4
|
+
include Support::Fields
|
5
|
+
include Support::RecordRefs
|
6
|
+
include Support::Records
|
7
|
+
|
8
|
+
# https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2017_1/schema/other/customercreditcards.html?mode=package
|
9
|
+
|
10
|
+
fields :cc_default, :cc_expire_date, :cc_memo, :cc_name, :cc_number, :debitcard_issue_no, :state_from, :validfrom
|
11
|
+
record_refs :card_state, :payment_method
|
12
|
+
|
13
|
+
attr_reader :internal_id
|
14
|
+
|
15
|
+
def initialize(attributes_or_record = {})
|
16
|
+
case attributes_or_record
|
17
|
+
when self.class
|
18
|
+
initialize_from_record(attributes_or_record)
|
19
|
+
when Hash
|
20
|
+
initialize_from_attributes_hash(attributes_or_record)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize_from_record(obj)
|
25
|
+
self.cc_default = obj.cc_default
|
26
|
+
self.cc_expire_date = obj.cc_expire_date
|
27
|
+
self.cc_memo = obj.cc_memo
|
28
|
+
self.cc_name = obj.cc_name
|
29
|
+
self.cc_number = obj.cc_number
|
30
|
+
self.debitcard_issue_no = obj.debitcard_issue_no
|
31
|
+
self.state_from = obj.state_from
|
32
|
+
self.validfrom = obj.validfrom
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -19,7 +19,7 @@ module NetSuite
|
|
19
19
|
:phonetic_name, :purchase_order_approval_limit, :purchase_order_approver, :purchase_order_limit, :release_date,
|
20
20
|
:resident_status, :salutation, :social_security_number, :visa_exp_date, :visa_type
|
21
21
|
|
22
|
-
record_refs :currency, :department, :location, :subsidiary, :employee_type, :employee_status, :supervisor
|
22
|
+
record_refs :currency, :department, :location, :sales_role, :subsidiary, :employee_type, :employee_status, :supervisor
|
23
23
|
|
24
24
|
field :custom_field_list, CustomFieldList
|
25
25
|
field :roles_list, RoleList
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class Estimate
|
4
|
+
include Support::Fields
|
5
|
+
include Support::RecordRefs
|
6
|
+
include Support::Records
|
7
|
+
include Support::Actions
|
8
|
+
include Namespaces::TranSales
|
9
|
+
|
10
|
+
actions :get, :get_list, :add, :initialize, :delete, :update, :upsert, :search
|
11
|
+
|
12
|
+
fields :alt_handling_cost, :alt_sales_total, :alt_shipping_cost, :balance,
|
13
|
+
:bill_address, :billing_address, :billing_schedule, :bill_is_residential,
|
14
|
+
:created_date, :currency_name, :discount_rate, :email, :end_date,
|
15
|
+
:est_gross_profit, :exchange_rate, :handling_cost, :handling_tax1_rate, :is_taxable,
|
16
|
+
:last_modified_date, :memo, :message, :other_ref_num, :ship_date, :shipping_cost,
|
17
|
+
:shipping_tax1_rate, :source, :start_date, :status, :sync_partner_teams, :sync_sales_teams,
|
18
|
+
:to_be_emailed, :to_be_faxed, :to_be_printed, :total_cost_estimate, :tran_date, :tran_id,
|
19
|
+
:linked_tracking_numbers, :is_multi_ship_to
|
20
|
+
|
21
|
+
field :shipping_address, Address
|
22
|
+
field :billing_address, Address
|
23
|
+
|
24
|
+
field :item_list, EstimateItemList
|
25
|
+
field :custom_field_list, CustomFieldList
|
26
|
+
|
27
|
+
record_refs :bill_address_list, :created_from, :currency, :custom_form, :department, :discount_item, :entity,
|
28
|
+
:handling_tax_code, :job, :klass, :lead_source, :location, :message_sel, :opportunity, :partner,
|
29
|
+
:promo_code, :sales_group, :sales_rep, :ship_method, :shipping_tax_code, :subsidiary, :terms
|
30
|
+
|
31
|
+
attr_reader :internal_id
|
32
|
+
attr_accessor :external_id
|
33
|
+
attr_accessor :search_joins
|
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
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module NetSuite
|
2
|
+
module Records
|
3
|
+
class EstimateItem
|
4
|
+
include Support::Fields
|
5
|
+
include Support::RecordRefs
|
6
|
+
include Support::Records
|
7
|
+
include Namespaces::TranSales
|
8
|
+
|
9
|
+
fields :amount, :cost_estimate,
|
10
|
+
:cost_estimate_type, :defer_rev_rec, :description,
|
11
|
+
:is_taxable, :line, :quantity,
|
12
|
+
:rate, :tax_rate1
|
13
|
+
|
14
|
+
field :custom_field_list, CustomFieldList
|
15
|
+
|
16
|
+
record_refs :item, :job, :price, :tax_code, :units
|
17
|
+
|
18
|
+
def initialize(attributes_or_record = {})
|
19
|
+
case attributes_or_record
|
20
|
+
when Hash
|
21
|
+
initialize_from_attributes_hash(attributes_or_record)
|
22
|
+
when self.class
|
23
|
+
initialize_from_record(attributes_or_record)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize_from_record(record)
|
28
|
+
self.attributes = record.send(:attributes)
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_record
|
32
|
+
rec = super
|
33
|
+
if rec["#{record_namespace}:customFieldList"]
|
34
|
+
rec["#{record_namespace}:customFieldList!"] = rec.delete("#{record_namespace}:customFieldList")
|
35
|
+
end
|
36
|
+
rec
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -39,7 +39,7 @@ module NetSuite
|
|
39
39
|
field :shipping_address, Address
|
40
40
|
field :billing_address, Address
|
41
41
|
|
42
|
-
read_only_fields :sub_total, :discount_total, :total, :recognized_revenue, :amount_remaining, :amount_paid,
|
42
|
+
read_only_fields :sub_total, :discount_total, :total, :recognized_revenue, :amount_remaining, :amount_paid, :amount,
|
43
43
|
:alt_shipping_cost, :gift_cert_applied, :handling_cost, :alt_handling_cost
|
44
44
|
|
45
45
|
record_refs :account, :bill_address_list, :custom_form, :department, :entity, :klass, :partner,
|
@@ -11,7 +11,7 @@ module NetSuite
|
|
11
11
|
|
12
12
|
fields :tran_date, :tran_id, :shipping_cost, :memo, :ship_company, :ship_attention, :ship_addr1,
|
13
13
|
:ship_addr2, :ship_city, :ship_state, :ship_zip, :ship_phone, :ship_is_residential,
|
14
|
-
:ship_status, :last_modified_date, :created_date
|
14
|
+
:ship_status, :last_modified_date, :created_date, :status
|
15
15
|
|
16
16
|
read_only_fields :handling_cost
|
17
17
|
|
@@ -16,7 +16,7 @@ module NetSuite
|
|
16
16
|
:partner_code, :is_person, :company_name, :eligible_for_commission, :entity_id, :last_modified_date,
|
17
17
|
:date_created, :title, :mobile_phone, :comments, :middle_name, :send_email, :password, :password2
|
18
18
|
|
19
|
-
record_refs :klass, :access_role, :department
|
19
|
+
record_refs :klass, :access_role, :department, :subsidiary
|
20
20
|
|
21
21
|
attr_reader :internal_id
|
22
22
|
attr_accessor :external_id
|
@@ -9,7 +9,7 @@ module NetSuite
|
|
9
9
|
|
10
10
|
actions :get, :get_list, :add, :update, :delete, :upsert, :search
|
11
11
|
|
12
|
-
fields :available_to_partners, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :create_job, :created_date,
|
12
|
+
fields :available_to_partners, :cost, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :create_job, :created_date,
|
13
13
|
:display_name, :dont_show_price, :enforce_min_qty_internally, :exclude_from_sitemap, :featured_description,
|
14
14
|
:include_children, :is_donation_item, :is_fulfillable, :is_gco_compliant, :is_inactive, :is_online, :is_taxable,
|
15
15
|
:item_id, :last_modified_date, :matrix_option_list, :matrix_type, :max_donation_amount, :meta_tag_html,
|
data/lib/netsuite/utilities.rb
CHANGED
data/lib/netsuite/version.rb
CHANGED
data/netsuite.gemspec
CHANGED
@@ -2,8 +2,9 @@
|
|
2
2
|
require File.expand_path('../lib/netsuite/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
+
gem.licenses = ['MIT']
|
5
6
|
gem.authors = ['Ryan Moran', 'Michael Bianco']
|
6
|
-
gem.email = ['ryan.moran@gmail.com', 'mike@
|
7
|
+
gem.email = ['ryan.moran@gmail.com', 'mike@mikebian.co']
|
7
8
|
gem.description = %q{NetSuite SuiteTalk API Wrapper}
|
8
9
|
gem.summary = %q{NetSuite SuiteTalk API (SOAP) Wrapper}
|
9
10
|
gem.homepage = 'https://github.com/NetSweet/netsuite'
|
@@ -15,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
15
16
|
gem.require_paths = ['lib']
|
16
17
|
gem.version = NetSuite::VERSION
|
17
18
|
|
18
|
-
gem.add_dependency 'savon', '>= 2.3.0'
|
19
|
+
gem.add_dependency 'savon', '>= 2.3.0', '<= 2.11.1'
|
19
20
|
|
20
21
|
gem.add_development_dependency 'rspec', '~> 3.8.0'
|
21
22
|
end
|