diff --git a/lib/sf/reg_event.rb b/lib/sf/reg_event.rb index 544ea9f..1a274bc 100644 --- a/lib/sf/reg_event.rb +++ b/lib/sf/reg_event.rb @@ -1,110 +1,110 @@ -class Sf::RegEvent - include Sf::Base - attr_accessor :reg_event +# frozen_string_literal: true - FIELDS = ['Id', 'code__c', 'start_date__c', 'end_date__c', 'max_attendees__c', - 'early_rate_deadline__c', 'regular_rate_deadline__c', - 'cancellation_deadline__c', 'status__c', 'title__c'] +module Sf + class RegEvent + include Sf::Base + attr_accessor :reg_event - FIELDS_SELECT_STR = FIELDS.join(', ') - def initialize(reg_event=nil) - @reg_event = reg_event.nil? ? Restforce::SObject.new(sobject_type: 'RegEvent__c') : reg_event - end - - def method_missing(method_name, *args, &block) - @reg_event.send(method_name, *args, &block) - end - - def respond_to_missing?(method_name, include_private = false) - @reg_event.respond_to?(method_name, include_private) || super - end - - def update(attrs = {}) - attrs['Id'] = self.Id - Sf.client.update("RegEvent__c", attrs) - end + FIELDS = %w[Id code__c start_date__c end_date__c max_attendees__c + early_rate_deadline__c regular_rate_deadline__c + cancellation_deadline__c status__c title__c].freeze - def self.find(id) - new Sf.client.find("RegEvent__c", id) - end + FIELDS_SELECT_STR = FIELDS.join(', ') + def initialize(reg_event = nil) + @reg_event = reg_event.nil? ? Restforce::SObject.new(sobject_type: 'RegEvent__c') : reg_event + 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 method_missing(method_name, *args, &block) + @reg_event.send(method_name, *args, &block) + 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 respond_to_missing?(method_name, include_private = false) + @reg_event.respond_to?(method_name, include_private) || super + end - def self.by_codes(codes=[]) - where = codes.map{|code| "code__c = \'#{code}\'"}.join(" or ") - sobjects = Sf.client.query("select #{FIELDS_SELECT_STR} from RegEvent__c where #{where}") - build_collection sobjects unless sobjects.blank? - end + def update(attrs = {}) + attrs['Id'] = self.Id + Sf.client.update('RegEvent__c', attrs) + end - def self.create_from_event(event) - return if event.nil? or event.id.nil? or !event.class.eql?(Event) + def self.find(id) + new Sf.client.find('RegEvent__c', id) + end - # 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 + 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 - 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 + + 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 - attrs = {} - self.event_mapping.each do |event_attr, sf_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? + def self.by_codes(codes = []) + where = codes.map { |code| "code__c = \'#{code}\'" }.join(' or ') + sobjects = Sf.client.query("select #{FIELDS_SELECT_STR} from RegEvent__c where #{where}") + build_collection sobjects unless sobjects.blank? end - 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 - # updating contact id on all reg_items in the reg event - def update_contact_id_in_reg_items - rr = 'reg_registration_id__r' - sf_reg_items = Sf.client.query("select Id, Contact__c, #{rr}.Id, #{rr}.contact_id__c from RegItem__c where #{rr}.event_code__c = \'#{self.code__c}\'") - sf_reg_items.each do |item| - next unless item.Contact__c.nil? - attrs = {'Id' => item.Id, 'Contact__c' => item.reg_registration_id__r.contact_id__c} - Sf.client.update!("RegItem__c", attrs) + def self.create_from_event(event) + return if event.nil? || event.id.nil? || !event.instance_of?(Event) + + # aborts if it is already in SF + if !event.sf_event_id.nil? && (sf_event = find(event.sf_event_id)) + event.errors.add(:base, "RegEvent with ID #{sf_event.Id} already exists.") + return + end + if !event.code.nil? && (sf_event = find_by_code(event.code)) + event.errors.add(:base, "RegEvent with ID #{sf_event.Id} already exists.") + return + end + + attrs = {} + event_mapping.each do |event_attr, sf_event_attr| + reg_event_value = event.send(event_attr) + reg_event_value = reg_event_value.iso8601 if reg_event_value.instance_of?(ActiveSupport::TimeWithZone) + attrs[sf_event_attr] = reg_event_value unless reg_event_value.nil? + end + 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 = find(sf_reg_event_id) + new sf_reg_event end - end + # updating contact id on all reg_items in the reg event + def update_contact_id_in_reg_items + rr = 'reg_registration_id__r' + sf_reg_items = Sf.client.query("select Id, Contact__c, #{rr}.Id, #{rr}.contact_id__c from RegItem__c where #{rr}.event_code__c = \'#{code__c}\'") + sf_reg_items.each do |item| + next unless item.Contact__c.nil? - private - - def self.event_mapping - { - 'code' => 'code__c', - 'start_date' => 'start_date__c', - 'end_date' => 'end_date__c', - 'early_rate_deadline' => 'early_rate_deadline__c', - 'regular_rate_deadline' => 'regular_rate_deadline__c', - 'cancellation_deadline' => 'cancellation_deadline__c', - 'registration_closes_at' => 'registration_closes_at__c', - 'registration_opens_at' => 'registration_opens_at__c', - 'title' => 'title__c', - 'description' => 'description__c', - 'max_attendees' => 'max_attendees__c', - 'event_home_url' => 'event_home_url__c', - 'status' => 'status__c', - 'updated_at' => 'updated_at__c', - 'id' => 'reg_event_id__c' - } - end + attrs = { 'Id' => item.Id, 'Contact__c' => item.reg_registration_id__r.contact_id__c } + Sf.client.update!('RegItem__c', attrs) + end + end + def self.event_mapping + { + 'code' => 'code__c', + 'start_date' => 'start_date__c', + 'end_date' => 'end_date__c', + 'early_rate_deadline' => 'early_rate_deadline__c', + 'regular_rate_deadline' => 'regular_rate_deadline__c', + 'cancellation_deadline' => 'cancellation_deadline__c', + 'registration_closes_at' => 'registration_closes_at__c', + 'registration_opens_at' => 'registration_opens_at__c', + 'title' => 'title__c', + 'description' => 'description__c', + 'max_attendees' => 'max_attendees__c', + 'event_home_url' => 'event_home_url__c', + 'status' => 'status__c', + 'updated_at' => 'updated_at__c', + 'id' => 'reg_event_id__c' + } + end + end end -