module NetSuiteRails::RecordSync::InstanceMethods
Attributes
netsuite_manual_fields[W]
Public Instance Methods
netsuite_async_jobs?()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 139 def netsuite_async_jobs? self.netsuite_sync_options[:sync_mode] == :async || (self.netsuite_sync_options[:sync_mode].blank? && NetSuiteRails::Configuration.netsuite_sync_mode == :async) end
netsuite_custom_record?()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 239 def netsuite_custom_record? self.netsuite_record_class == NetSuite::Records::CustomRecord end
netsuite_execute_callbacks(list, record)
click to toggle source
TODO this should be protected; it needs to be pushed down to the Push/Pull manager level
# File lib/netsuite_rails/record_sync.rb, line 245 def netsuite_execute_callbacks(list, record) list.each do |callback| if callback.is_a?(Symbol) self.send(callback, record) else instance_exec(record, &callback) end end end
netsuite_extract_from_record(netsuite_record)
click to toggle source
TODO move this login into separate service object
# File lib/netsuite_rails/record_sync.rb, line 171 def netsuite_extract_from_record(netsuite_record) Rails.logger.info "NetSuite: Pull #{netsuite_record.class} #{netsuite_record.internal_id}" @netsuite_pulling = true field_hints = self.netsuite_field_hints custom_field_list = self.netsuite_field_map[:custom_field_list] || {} all_field_list = self.netsuite_field_map.except(:custom_field_list) || {} all_field_list.merge!(custom_field_list) # TODO should have a helper module for common push/pull methods reflection_attributes = NetSuiteRails::RecordSync::PushManager.relationship_attributes_list(self) # handle non-collection associations association_keys = reflection_attributes.values.reject(&:collection?).map(&:name) all_field_list.each do |local_field, netsuite_field| is_custom_field = custom_field_list.keys.include?(local_field) if netsuite_field.is_a?(Proc) netsuite_field.call(self, netsuite_record, :pull) next end field_value = if is_custom_field netsuite_record.custom_field_list.send(netsuite_field).value rescue "" else netsuite_record.send(netsuite_field) end if field_value.nil? # TODO possibly nil out the local value? next end if association_keys.include?(local_field) field_value = reflection_attributes[local_field]. klass. where(netsuite_id: field_value.internal_id). first_or_initialize elsif is_custom_field field_value = NetSuiteRails::RecordSync::PullManager.extract_custom_field_value(field_value) else # then it's not a custom field end # TODO should we just check for nil? vs present? if field_hints.has_key?(local_field) && !field_value.nil? field_value = NetSuiteRails::Transformations.transform(field_hints[local_field], field_value, :pull) end self.send(:"#{local_field}=", field_value) end netsuite_execute_callbacks(self.class.after_netsuite_pull, netsuite_record) @netsuite_pulling = false @netsuite_pulled = true end
netsuite_field_hints()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 125 def netsuite_field_hints self.class.netsuite_field_hints end
netsuite_field_map()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 121 def netsuite_field_map self.class.netsuite_field_map end
netsuite_manual_fields()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 103 def netsuite_manual_fields @netsuite_manual_fields ||= [] end
netsuite_pull(opts = {})
click to toggle source
TODO need to support the opts hash
# File lib/netsuite_rails/record_sync.rb, line 144 def netsuite_pull(opts = {}) netsuite_extract_from_record(netsuite_pull_record) if self.netsuite_async_jobs? # without callbacks? self.save end end
netsuite_pull_record()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 153 def netsuite_pull_record # TODO support use_external_id / netsuite_external_id if netsuite_custom_record? NetSuite::Records::CustomRecord.get( internal_id: self.netsuite_id, type_id: self.class.netsuite_custom_record_type_id ) else self.netsuite_record_class.get(self.netsuite_id) end end
netsuite_pulled?()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 135 def netsuite_pulled? @netsuite_pulled ||= false end
netsuite_pulling?()
click to toggle source
assumes netsuite_id field on activerecord
# File lib/netsuite_rails/record_sync.rb, line 131 def netsuite_pulling? @netsuite_pulling ||= false end
netsuite_push(opts = {})
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 166 def netsuite_push(opts = {}) NetSuiteRails::RecordSync::PushManager.push(self, opts) end
netsuite_record_class()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 117 def netsuite_record_class self.class.netsuite_record_class end
netsuite_sync()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 113 def netsuite_sync self.class.netsuite_sync end
netsuite_sync_options()
click to toggle source
these methods are here for easy model override
# File lib/netsuite_rails/record_sync.rb, line 109 def netsuite_sync_options self.class.netsuite_sync_options end
new_netsuite_record?()
click to toggle source
# File lib/netsuite_rails/record_sync.rb, line 235 def new_netsuite_record? self.netsuite_id.blank? end