netsuite 0.2.6 → 0.3.0

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.
Files changed (152) hide show
  1. data/.travis.yml +3 -0
  2. data/Gemfile +2 -0
  3. data/README.md +132 -54
  4. data/lib/netsuite.rb +123 -76
  5. data/lib/netsuite/actions/add.rb +1 -0
  6. data/lib/netsuite/actions/delete.rb +1 -0
  7. data/lib/netsuite/actions/get.rb +1 -0
  8. data/lib/netsuite/actions/get_all.rb +67 -0
  9. data/lib/netsuite/actions/get_list.rb +2 -1
  10. data/lib/netsuite/actions/get_select_value.rb +1 -0
  11. data/lib/netsuite/actions/initialize.rb +1 -0
  12. data/lib/netsuite/actions/login.rb +2 -0
  13. data/lib/netsuite/actions/search.rb +3 -2
  14. data/lib/netsuite/actions/update.rb +18 -0
  15. data/lib/netsuite/actions/upsert.rb +1 -0
  16. data/lib/netsuite/actions/upsert_list.rb +114 -0
  17. data/lib/netsuite/configuration.rb +5 -0
  18. data/lib/netsuite/namespaces/file_cabinet.rb +11 -0
  19. data/lib/netsuite/namespaces/list_emp.rb +12 -0
  20. data/lib/netsuite/namespaces/list_mkt.rb +12 -0
  21. data/lib/netsuite/namespaces/list_website.rb +11 -0
  22. data/lib/netsuite/namespaces/tran_invt.rb +11 -0
  23. data/lib/netsuite/records/accounting_period.rb +1 -1
  24. data/lib/netsuite/records/assembly_item.rb +10 -4
  25. data/lib/netsuite/records/billing_schedule.rb +33 -0
  26. data/lib/netsuite/records/billing_schedule_milestone.rb +28 -0
  27. data/lib/netsuite/records/billing_schedule_milestone_list.rb +33 -0
  28. data/lib/netsuite/records/billing_schedule_recurrence.rb +28 -0
  29. data/lib/netsuite/records/billing_schedule_recurrence_list.rb +33 -0
  30. data/lib/netsuite/records/bin.rb +22 -0
  31. data/lib/netsuite/records/campaign.rb +28 -0
  32. data/lib/netsuite/records/cash_refund.rb +1 -1
  33. data/lib/netsuite/records/classification.rb +1 -1
  34. data/lib/netsuite/records/contact.rb +1 -1
  35. data/lib/netsuite/records/contact_access_roles.rb +14 -0
  36. data/lib/netsuite/records/contact_access_roles_list.rb +9 -0
  37. data/lib/netsuite/records/custom_field.rb +2 -1
  38. data/lib/netsuite/records/custom_field_list.rb +23 -4
  39. data/lib/netsuite/records/custom_list.rb +27 -0
  40. data/lib/netsuite/records/custom_list_custom_value.rb +14 -0
  41. data/lib/netsuite/records/custom_list_custom_value_list.rb +13 -0
  42. data/lib/netsuite/records/custom_record.rb +1 -1
  43. data/lib/netsuite/records/custom_record_type.rb +1 -1
  44. data/lib/netsuite/records/customer.rb +4 -4
  45. data/lib/netsuite/records/customer_addressbook.rb +8 -5
  46. data/lib/netsuite/records/customer_addressbook_list.rb +13 -1
  47. data/lib/netsuite/records/customer_deposit.rb +3 -2
  48. data/lib/netsuite/records/customer_payment.rb +1 -1
  49. data/lib/netsuite/records/customer_refund.rb +1 -1
  50. data/lib/netsuite/records/department.rb +4 -2
  51. data/lib/netsuite/records/deposit.rb +1 -1
  52. data/lib/netsuite/records/deposit_cash_back.rb +2 -2
  53. data/lib/netsuite/records/deposit_other.rb +2 -2
  54. data/lib/netsuite/records/discount_item.rb +32 -0
  55. data/lib/netsuite/records/employee.rb +20 -0
  56. data/lib/netsuite/records/file.rb +28 -0
  57. data/lib/netsuite/records/inventory_assignment.rb +24 -0
  58. data/lib/netsuite/records/inventory_assignment_list.rb +32 -0
  59. data/lib/netsuite/records/inventory_detail.rb +18 -0
  60. data/lib/netsuite/records/inventory_transfer.rb +29 -0
  61. data/lib/netsuite/records/inventory_transfer_inventory.rb +21 -0
  62. data/lib/netsuite/records/inventory_transfer_inventory_list.rb +33 -0
  63. data/lib/netsuite/records/item_fulfillment.rb +1 -1
  64. data/lib/netsuite/records/item_fulfillment_item_list.rb +3 -21
  65. data/lib/netsuite/records/item_member.rb +21 -0
  66. data/lib/netsuite/records/journal_entry.rb +1 -1
  67. data/lib/netsuite/records/kit_item.rb +1 -1
  68. data/lib/netsuite/records/location.rb +3 -1
  69. data/lib/netsuite/records/member_list.rb +32 -0
  70. data/lib/netsuite/records/non_inventory_sale_item.rb +4 -1
  71. data/lib/netsuite/records/partner.rb +21 -0
  72. data/lib/netsuite/records/promotion_code.rb +38 -0
  73. data/lib/netsuite/records/record_ref_list.rb +40 -0
  74. data/lib/netsuite/records/role_list.rb +25 -0
  75. data/lib/netsuite/records/sales_order.rb +6 -2
  76. data/lib/netsuite/records/sales_tax_item.rb +32 -0
  77. data/lib/netsuite/records/site_category.rb +33 -0
  78. data/lib/netsuite/records/subsidiary.rb +38 -0
  79. data/lib/netsuite/records/tax_type.rb +22 -0
  80. data/lib/netsuite/records/term.rb +1 -1
  81. data/lib/netsuite/records/units_type.rb +25 -0
  82. data/lib/netsuite/records/units_type_uom.rb +20 -0
  83. data/lib/netsuite/records/units_type_uom_list.rb +33 -0
  84. data/lib/netsuite/records/work_order.rb +38 -0
  85. data/lib/netsuite/records/work_order_item.rb +31 -0
  86. data/lib/netsuite/records/work_order_item_list.rb +31 -0
  87. data/lib/netsuite/support/actions.rb +4 -0
  88. data/lib/netsuite/support/base.rb +21 -0
  89. data/lib/netsuite/support/country.rb +273 -0
  90. data/lib/netsuite/support/search_result.rb +4 -0
  91. data/lib/netsuite/support/sublist.rb +54 -0
  92. data/lib/netsuite/version.rb +1 -1
  93. data/spec/netsuite/actions/search_spec.rb +1 -1
  94. data/spec/netsuite/actions/update_spec.rb +62 -31
  95. data/spec/netsuite/actions/upsert_list_spec.rb +112 -0
  96. data/spec/netsuite/records/account_spec.rb +4 -4
  97. data/spec/netsuite/records/accounting_period_spec.rb +4 -4
  98. data/spec/netsuite/records/assembly_item_spec.rb +38 -0
  99. data/spec/netsuite/records/billing_schedule_milestone_list_spec.rb +24 -0
  100. data/spec/netsuite/records/billing_schedule_milestone_spec.rb +51 -0
  101. data/spec/netsuite/records/billing_schedule_recurrence_list_spec.rb +24 -0
  102. data/spec/netsuite/records/billing_schedule_recurrence_spec.rb +49 -0
  103. data/spec/netsuite/records/billing_schedule_spec.rb +164 -0
  104. data/spec/netsuite/records/campaign_spec.rb +43 -0
  105. data/spec/netsuite/records/cash_refund_spec.rb +1 -1
  106. data/spec/netsuite/records/classification_spec.rb +2 -2
  107. data/spec/netsuite/records/credit_memo_spec.rb +4 -4
  108. data/spec/netsuite/records/custom_field_list_spec.rb +10 -0
  109. data/spec/netsuite/records/custom_list_spec.rb +21 -0
  110. data/spec/netsuite/records/custom_record_spec.rb +5 -5
  111. data/spec/netsuite/records/custom_record_type_spec.rb +5 -5
  112. data/spec/netsuite/records/customer_addressbook_list_spec.rb +19 -1
  113. data/spec/netsuite/records/customer_addressbook_spec.rb +42 -13
  114. data/spec/netsuite/records/customer_payment_spec.rb +4 -4
  115. data/spec/netsuite/records/customer_refund_spec.rb +4 -4
  116. data/spec/netsuite/records/customer_spec.rb +80 -6
  117. data/spec/netsuite/records/department_spec.rb +4 -4
  118. data/spec/netsuite/records/deposit_spec.rb +22 -4
  119. data/spec/netsuite/records/discount_item_spec.rb +124 -0
  120. data/spec/netsuite/records/inventory_item_spec.rb +4 -4
  121. data/spec/netsuite/records/inventory_transfer_spec.rb +58 -0
  122. data/spec/netsuite/records/invoice_spec.rb +4 -4
  123. data/spec/netsuite/records/job_spec.rb +7 -7
  124. data/spec/netsuite/records/journal_entry_spec.rb +5 -5
  125. data/spec/netsuite/records/non_inventory_sale_item_spec.rb +4 -4
  126. data/spec/netsuite/records/payment_method_spec.rb +1 -1
  127. data/spec/netsuite/records/pomo_code_spec.rb +40 -0
  128. data/spec/netsuite/records/sales_order_spec.rb +18 -18
  129. data/spec/netsuite/records/sales_tax_item_spec.rb +30 -0
  130. data/spec/netsuite/records/service_sale_item_spec.rb +4 -4
  131. data/spec/netsuite/records/site_category_spec.rb +51 -0
  132. data/spec/netsuite/records/subsidiary_spec.rb +25 -0
  133. data/spec/netsuite/records/support_case_spec.rb +8 -8
  134. data/spec/netsuite/records/tax_type_spec.rb +11 -0
  135. data/spec/netsuite/records/term_spec.rb +4 -4
  136. data/spec/netsuite/records/units_type_spec.rb +33 -0
  137. data/spec/netsuite/records/units_type_uom_list_spec.rb +23 -0
  138. data/spec/netsuite/records/units_type_uom_spec.rb +14 -0
  139. data/spec/netsuite/records/work_order_item_list_spec.rb +26 -0
  140. data/spec/netsuite/records/work_order_item_spec.rb +45 -0
  141. data/spec/netsuite/records/work_order_spec.rb +92 -0
  142. data/spec/netsuite/support/record_refs_spec.rb +1 -1
  143. data/spec/netsuite/support/sublist_spec.rb +36 -0
  144. data/spec/spec_helper.rb +1 -0
  145. data/spec/support/fixtures/update/update_customer_error.xml +21 -0
  146. data/spec/support/fixtures/update/update_customer_multiple_errors.xml +25 -0
  147. data/spec/support/fixtures/upsert_list/upsert_list_customers.xml +21 -0
  148. data/spec/support/fixtures/upsert_list/upsert_list_one_customer.xml +17 -0
  149. data/spec/support/fixtures/upsert_list/upsert_list_with_errors.xml +32 -0
  150. data/spec/support/read_only_field_matcher.rb +1 -1
  151. metadata +115 -5
  152. checksums.yaml +0 -15
@@ -1,7 +1,7 @@
1
1
  module NetSuite
2
2
  module Records
3
3
  class KitItem < InventoryItem
4
-
4
+ field :member_list, MemberList
5
5
  end
6
6
  end
7
7
  end
@@ -4,8 +4,10 @@ module NetSuite
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
6
  include Support::Actions
7
+ include Namespaces::ListAcct
7
8
 
8
- actions :get
9
+ actions :add, :delete, :get, :get_list, :get_select_value, :search,
10
+ :update, :upsert
9
11
 
10
12
  fields :addr1, :addr2, :addr3, :addr_phone, :addr_text, :addressee, :attention, :city, :country, :include_children,
11
13
  :is_inactive, :make_inventory_available, :make_inventory_available_store, :name, :override, :state, :tran_prefix, :zip
@@ -0,0 +1,32 @@
1
+ module NetSuite
2
+ module Records
3
+ class MemberList
4
+ include Support::Fields
5
+ include Support::Records
6
+ include Namespaces::ListAcct
7
+
8
+ fields :replace_all, :item_member
9
+
10
+ def initialize(attrs = {})
11
+ initialize_from_attributes_hash(attrs)
12
+ end
13
+
14
+ def item_member=(items)
15
+ case items
16
+ when Hash
17
+ self.item_member << ItemMember.new(items)
18
+ when Array
19
+ items.each { |ref| self.item_member << ItemMember.new(ref) }
20
+ end
21
+ end
22
+
23
+ def item_member
24
+ @item_member ||= []
25
+ end
26
+
27
+ def to_record
28
+ { "#{record_namespace}:itemMember" => item_member.map(&:to_record) }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -7,7 +7,7 @@ module NetSuite
7
7
  include Support::Actions
8
8
  include Namespaces::ListAcct
9
9
 
10
- actions :get, :add, :delete
10
+ actions :get, :add, :delete, :search, :upsert
11
11
 
12
12
  fields :available_to_partners, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :country_of_manufacture,
13
13
  :created_date, :display_name, :dont_show_price, :enforce_min_qty_internally, :exclude_from_sitemap,
@@ -43,6 +43,9 @@ module NetSuite
43
43
  initialize_from_attributes_hash(attributes)
44
44
  end
45
45
 
46
+ def self.search_class_name
47
+ "Item"
48
+ end
46
49
  end
47
50
  end
48
51
  end
@@ -0,0 +1,21 @@
1
+ module NetSuite
2
+ module Records
3
+
4
+ class Partner < Support::Base
5
+ include Support::Actions
6
+ include Support::RecordRefs
7
+ include Namespaces::ListRel
8
+
9
+ # https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2014_1/schema/record/partner.html
10
+
11
+ actions :get, :get_list, :add, :update, :upsert, :upsert_list, :delete, :search
12
+
13
+ fields :phone, :first_name, :last_name, :is_inactive, :email
14
+
15
+ record_refs :klass
16
+
17
+ attr_reader :internal_id
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,38 @@
1
+ # https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2014_1/schema/record/promotioncode.html
2
+
3
+ module NetSuite
4
+ module Records
5
+ class PromotionCode
6
+ include Support::Fields
7
+ include Support::RecordRefs
8
+ include Support::Records
9
+ include Support::Actions
10
+ include Namespaces::ListMkt
11
+
12
+ actions :get, :add, :search, :delete, :update
13
+
14
+ fields :code, :code_pattern, :description, :discount_type, :display_line_discounts, :end_date,
15
+ :exclude_items, :is_inactive, :is_public, :minimum_order_amount, :name, :number_to_generate,
16
+ :rate, :start_date
17
+
18
+ record_refs :free_ship_method, :implementation, :custom_form
19
+
20
+ # TODO custom records need to be implemented
21
+ # field :currency_list, PromotionCodeCurrencyList
22
+ # field :apply_discount_to, PromotionCodeApplyDiscountTo
23
+ # field :items_list, PromotionCodeItemsList
24
+ # field :partners_list, PromotionCodePartnersList
25
+ # field :use_type, PromotionCodeUseType
26
+
27
+ attr_reader :internal_id
28
+ attr_accessor :external_id
29
+
30
+ def initialize(attributes = {})
31
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
32
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
33
+ initialize_from_attributes_hash(attributes)
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,40 @@
1
+ module NetSuite
2
+ module Records
3
+ class RecordRefList
4
+ include Support::Fields
5
+ include Support::Records
6
+ include Namespaces::PlatformCore
7
+
8
+ fields :record_ref
9
+
10
+ def initialize(attrs = {})
11
+ initialize_from_attributes_hash(attrs)
12
+ end
13
+
14
+ def record_ref=(items)
15
+ case items
16
+ when Hash
17
+ self.record_ref << RecordRef.new(items)
18
+ when Array
19
+ items.each { |ref| self.record_ref << RecordRef.new(ref) }
20
+ end
21
+ end
22
+
23
+ def record_ref
24
+ @record_ref ||= []
25
+ end
26
+
27
+ def to_record
28
+ {
29
+ "#{record_namespace}:recordRef" => record_ref.map do |rr|
30
+ rec = rr.to_record
31
+ rec[:@internalId] = rr.internal_id if rr.internal_id
32
+ rec[:@externalId] = rr.external_id if rr.external_id
33
+ rec[:@type] = rr.type if rr.type
34
+ rec
35
+ end
36
+ }
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ module NetSuite
2
+ module Records
3
+ class RoleList < Support::Sublist
4
+ include Namespaces::PlatformCommon
5
+
6
+ sublist :roles, RecordRef
7
+
8
+ # role list is undocumented and has pretty funky XML:
9
+
10
+ # <listEmp:rolesList>
11
+ # <listEmp:roles>
12
+ # <listEmp:selectedRole xmlns:platformCore="urn:core_2013_1.platform.webservices.netsuite.com" internalId="1001">
13
+ # <platformCore:name>Customer Service Rep</platformCore:name>
14
+ # </listEmp:selectedRole>
15
+ # </listEmp:roles>
16
+ # <listEmp:roles>
17
+ # <listEmp:selectedRole xmlns:platformCore="urn:core_2013_1.platform.webservices.netsuite.com" internalId="1002">
18
+ # <platformCore:name>Customer Service Rep Mgr</platformCore:name>
19
+ # </listEmp:selectedRole>
20
+ # </listEmp:roles>
21
+ # </listEmp:rolesList>
22
+
23
+ end
24
+ end
25
+ end
@@ -10,11 +10,11 @@ module NetSuite
10
10
  actions :get, :add, :initialize, :delete, :update, :upsert, :search
11
11
 
12
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,
13
+ :bill_address, :cc_approved, :contrib_pct, :created_date, :currency_name, :deferred_revenue, :discount_rate, :email, :end_date,
14
14
  :est_gross_profit, :est_gross_profit_percent, :exchange_rate, :exclude_commission, :fax, :gift_cert_applied,
15
15
  :gift_cert_available, :gift_cert_total, :handling_cost, :handling_tax1_rate, :handling_tax2_rate, :is_taxable,
16
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,
17
+ :rev_rec_on_rev_commitment, :sales_effective_date, :ship_date, :shipping_cost, :shipping_tax1_rate, :shipping_tax2_rate, :source,
18
18
  :start_date, :status, :sync_partner_teams, :sync_sales_teams, :tax2_total, :tax_rate, :to_be_emailed, :to_be_faxed,
19
19
  :to_be_printed, :total_cost_estimate, :tran_date, :tran_id, :tran_is_vsoe_bundle, :vat_reg_num,
20
20
  :vsoe_auto_calc
@@ -40,6 +40,10 @@ module NetSuite
40
40
  initialize_from_attributes_hash(attributes)
41
41
  end
42
42
 
43
+ def self.search_class_name
44
+ "Transaction"
45
+ end
46
+
43
47
  end
44
48
  end
45
49
  end
@@ -0,0 +1,32 @@
1
+ module NetSuite
2
+ module Records
3
+ class SalesTaxItem
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, :get_all, :get_select_value, :add, :delete,
11
+ :update, :upsert
12
+
13
+ fields :item_id, :display_name, :description, :rate, :is_inactive,
14
+ :effective_from, :valid_until, :include_children, :eccode,
15
+ :reverse_charge, :service, :exempt, :is_default,
16
+ :exclude_from_tax_reports, :available, :export, :county, :city, :state,
17
+ :zip
18
+
19
+ record_refs :tax_type, :tax_agency, :tax_account, :purchase_account,
20
+ :sale_account, :parent, :nexus_country
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
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ module NetSuite
2
+ module Records
3
+ class SiteCategory
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Support::Actions
8
+ include Namespaces::ListWebsite
9
+
10
+ # https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2014_1/schema/record/sitecategory.html
11
+
12
+ actions :get, :add, :delete, :update, :upsert, :search
13
+
14
+ fields :description, :exclude_from_site_map, :is_inactive, :is_online,
15
+ :item_id, :meta_tag_html, :page_title, :presentation_item_list,
16
+ :search_keywords, :sitemap_priority, :store_detailed_description,
17
+ :translations_list, :url_component
18
+
19
+ record_refs :category_list_layout, :correlated_items_list_layout, :item_list_layout, :parent_category,
20
+ :related_items_list_layout, :store_display_image, :store_display_thumbnail, :website
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
+ end
32
+ end
33
+ end
@@ -0,0 +1,38 @@
1
+ module NetSuite
2
+ module Records
3
+ class Subsidiary
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Support::Actions
8
+ include Namespaces::ListAcct
9
+
10
+ actions :add, :delete, :get, :get_list, :get_select_value, :search,
11
+ :update, :upsert
12
+
13
+ fields :name, :is_inactive, :show_subsidiary_name, :url, :tran_prefix,
14
+ :attention, :addressee, :addr_phone, :addr1, :addr2, :addr3, :city,
15
+ :state, :zip, :country, :addr_text, :override, :ship_addr,
16
+ :return_addr, :return_address1, :return_address2, :return_city,
17
+ :return_state, :return_country, :return_zip, :legal_name,
18
+ :is_elimination, :allow_payroll, :email, :fax, :edition,
19
+ :federal_id_number, :addr_language, :non_consol, :consol,
20
+ :ship_address1, :ship_address2, :ship_city, :ship_state, :ship_country,
21
+ :ship_zip, :state1_tax_number, :ssn_or_tin, :inbound_email
22
+
23
+ field :custom_field_list, CustomFieldList
24
+
25
+ record_refs :check_layout, :inter_co_account, :parent, :logo,
26
+ :page_logo, :fiscal_calendar, :tax_fiscal_calendar, :currency
27
+
28
+ attr_reader :internal_id
29
+ attr_accessor :external_id
30
+
31
+ def initialize(attributes = {})
32
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
33
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
34
+ initialize_from_attributes_hash(attributes)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,22 @@
1
+ module NetSuite
2
+ module Records
3
+ class TaxType
4
+ include Support::Fields
5
+ include Support::Actions
6
+ include Namespaces::ListAcct
7
+
8
+ actions :get, :get_list, :add, :update, :upsert, :delete, :search
9
+
10
+ fields :description, :name
11
+
12
+ attr_reader :internal_id
13
+ attr_accessor :external_id
14
+
15
+ def initialize(attributes = {})
16
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
17
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
18
+ initialize_from_attributes_hash(attributes)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -5,7 +5,7 @@ module NetSuite
5
5
  include Support::RecordRefs
6
6
  include Support::Actions
7
7
 
8
- actions :get, :add, :delete
8
+ actions :get, :add, :delete, :upsert
9
9
 
10
10
  fields :due_next_month_if_within_days, :name, :date_driven, :days_until_expiry, :days_until_next_due,
11
11
  :day_discount_expires, :day_of_month_net_due, :discount_percent, :discount_percent_date_driven, :is_inactive,
@@ -0,0 +1,25 @@
1
+ module NetSuite
2
+ module Records
3
+ class UnitsType
4
+ include Support::Fields
5
+ include Support::Records
6
+ include Support::Actions
7
+ include Namespaces::ListAcct
8
+
9
+ actions :get, :get_list, :add, :update, :upsert, :delete, :search
10
+
11
+ fields :is_inactive, :name
12
+
13
+ field :uom_list, UnitsTypeUomList
14
+
15
+ attr_reader :internal_id
16
+ attr_accessor :external_id
17
+
18
+ def initialize(attributes = {})
19
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
20
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
21
+ initialize_from_attributes_hash(attributes)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ module NetSuite
2
+ module Records
3
+ class UnitsTypeUom
4
+ include Support::Fields
5
+ include Support::Records
6
+ include Namespaces::ListAcct
7
+
8
+ fields :abbreviation, :base_unit, :conversion_rate, :plural_abbreviation,
9
+ :plural_name, :unit_name
10
+
11
+ attr_reader :internal_id
12
+
13
+ def initialize(attributes = {})
14
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
15
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
16
+ initialize_from_attributes_hash(attributes)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,33 @@
1
+ module NetSuite
2
+ module Records
3
+ class UnitsTypeUomList
4
+ include Support::Fields
5
+ include Namespaces::ListAcct
6
+
7
+ fields :uom
8
+
9
+ def initialize(attributes = {})
10
+ initialize_from_attributes_hash(attributes)
11
+ end
12
+
13
+ def uom=(items)
14
+ case items
15
+ when Hash
16
+ self.uom << UnitsTypeUom.new(items)
17
+ when Array
18
+ items.each { |item| self.uom << UnitsTypeUom.new(item) }
19
+ end
20
+ end
21
+
22
+ def uom
23
+ @uom ||= []
24
+ end
25
+
26
+ def to_record
27
+ { "#{record_namespace}:uom" => uom.map(&:to_record) }
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+