diff --git a/lib/sf.rb b/lib/sf.rb index c221ce1..d82d42f 100644 --- a/lib/sf.rb +++ b/lib/sf.rb @@ -5,6 +5,7 @@ require "sf/contact" require "sf/contact_affiliation" require "sf/reg_event" +require "sf/reg_meeting" require "sf/reg_registration" require "sf/reg_item" require "sf/session" diff --git a/lib/sf/reg_event.rb b/lib/sf/reg_event.rb index 99ed57b..1dc812d 100644 --- a/lib/sf/reg_event.rb +++ b/lib/sf/reg_event.rb @@ -17,22 +17,56 @@ def respond_to_missing?(method_name, include_private = false) @reg_event.respond_to?(method_name, include_private) || super end - def create_from_event + def update(attrs = {}) + attrs['Id'] = self.Id + Sf.client.update("RegEvent__c", attrs) + end + + def self.find(id) + new Sf.client.find("RegEvent__c", id) + end + + def self.find_by_code(code) + found_event = where({code__c: code}).first + new Sf.client.find("RegEvent__c", found_event.Id) unless found_event.nil? + end + + def self.where(args = {}) + where = args.map {|k,v| "#{k} = \'#{v}\'"}.join(" and ") + sobjects = Sf.client.query("select #{FIELDS_SELECT_STR} from RegEvent__c where #{where}") + build_collection sobjects unless sobjects.blank? + end + + def self.create_from_event(event) + return if event.nil? or event.id.nil? or !event.class.eql?(Event) + + # aborts if it is already in SF + if !!event.sf_event_id and sf_event = self.find(event.sf_event_id) + event.errors.add(:base, "RegEvent with ID #{sf_event.Id} already exists.") + return + end + if !!event.code and sf_event = self.find_by_code(event.code) + event.errors.add(:base, "RegEvent with ID #{sf_event.Id} already exists.") + return + end + attrs = {} self.event_mapping.each do |event_attr, sf_event_attr| - reg_event_value = self.reg_event.send(event_attr) + reg_event_value = event.send(event_attr) reg_event_value = reg_event_value.iso8601 if reg_event_value.class.eql?(ActiveSupport::TimeWithZone) attrs[sf_event_attr] = reg_event_value unless reg_event_value.nil? end - Sf.client.create("RegEvent__c", attrs) + attrs['Name'] = event.title + sf_reg_event_id = Sf.client.create("RegEvent__c", attrs) + event.sf_event_id = sf_reg_event_id + event.save + sf_reg_event = self.find(sf_reg_event_id) + self.new sf_reg_event end - def update(attrs = {}) - attrs['Id'] = self.Id - Sf.client.update("RegEvent__c", attrs) - end + private - def event_mapping + def self.event_mapping { 'code' => 'code__c', 'start_date' => 'start_date__c', @@ -52,18 +86,5 @@ def event_mapping } end - def self.find(id) - new Sf.client.find("RegEvent__c", id) - end - - def self.find_by_code(code) - where({code__c: code}).first - end - - def self.where(args = {}) - where = args.map {|k,v| "#{k} = \'#{v}\'"}.join(" and ") - sobjects = Sf.client.query("select #{FIELDS_SELECT_STR} from RegEvent__c where #{where}") - build_collection sobjects unless sobjects.blank? - end end diff --git a/lib/sf/reg_meeting.rb b/lib/sf/reg_meeting.rb new file mode 100644 index 0000000..d1c2080 --- /dev/null +++ b/lib/sf/reg_meeting.rb @@ -0,0 +1,45 @@ +class Sf::RegMeeting + include Sf::Base + + def initialize(reg_meeting=nil) + @reg_meeting = reg_meeting.nil? ? Restforce::SObject.new(sobject_type: 'RegMeeting__c') : reg_meeting + end + + def method_missing(method_name, *args, &block) + @reg_meeting.send(method_name, *args, &block) + end + + def respond_to_missing?(method_name, include_private = false) + @reg_meeting.respond_to?(method_name, include_private) || super + end + + def update(attrs = {}) + attrs['Id'] = self.Id + Sf.client.update("RegMeeting__c", attrs) + end + + def self.find(id) + new Sf.client.find("RegMeeting__c", id) + end + + def self.find_by_code(code) + found_meeting = where({code__c: code}).first + new Sf.client.find("RegMeeting__c", found_meeting.Id) unless found_meeting.nil? + end + + def self.find_all_by_event_id(event_id) + found_meetings = where({reg_event_id__c: event_id}) + meetings = found_meetings.map do |meeting| + Sf.client.find("RegMeeting__c", meeting.Id) unless meeting.nil? + end + build_collection meetings + end + + def self.where(args = {}) + where = args.map {|k,v| "#{k} = \'#{v}\'"}.join(" and ") + sobjects = Sf.client.query("select Id, Name from RegMeeting__c where #{where}") + build_collection sobjects unless sobjects.blank? + end + +end +