Created
March 28, 2014 20:43
-
-
Save bhfailor/9842576 to your computer and use it in GitHub Desktop.
rake tasks for season pass events and teams
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace :event do | |
desc "Add bib #s to event registrations" | |
task :add_bib => :environment do | |
event = Event.find(ENV['EVENT']) | |
resource_file_name = File.join(Rails.root, "lib", "tasks", "event_files", "#{ENV['EVENT']}.csv") | |
if event.nil? | |
puts "Unable to find event with id: #{ENV['EVENT']}" | |
return | |
elsif !File.exists?(resource_file_name) | |
puts "Unable to locate csv file" | |
return | |
else | |
puts "*** Adding bib numbers to event registrations for #{event.name}." | |
CSV.foreach(resource_file_name, :headers => true) do |row| | |
reg_id = row['Reg. ID'] | |
bib = row['Bib'] | |
if reg_id.blank? or bib.blank? | |
next | |
end | |
begin | |
reg = EventRegistration.find(reg_id) | |
rescue Exception => ex | |
puts "Cannot find registration with id = #{reg_id}, skipping." | |
next | |
end | |
# skip entry if the first or last name is missing, must be manually reviewed | |
if reg.first_name.blank? or reg.last_name.blank? or row['First Name'].blank? or row['Last Name'].blank? | |
puts "*REVIEW* - Missing first or last name, please manually verify reg_id = #{reg_id}." | |
next | |
end | |
if reg.first_name.downcase.strip != row['First Name'].downcase.strip | |
puts "*REVIEW* - First name mismatch for reg_id = #{reg_id}" | |
next | |
elsif reg.last_name.downcase.strip != row['Last Name'].downcase.strip | |
puts "*REVIEW* - Last name mistmach for reg_id = #{reg_id}" | |
next | |
end | |
reg.bib_number = bib | |
if reg.save(:validate => false) | |
puts "Successfully updated #{reg.first_name} #{reg.last_name} (#{reg_id}) with bib ##{bib}" | |
else | |
puts "*REVIEW* - Unable to save registration for #{reg.first_name} #{reg.last_name} (#{reg_id}) with bib ##{bib}" | |
end | |
end | |
puts "Finished updating bib numbers for #{event.name}." | |
end | |
end | |
desc "Get email addresses from previous RACE events." | |
task :get_email => :environment do | |
email_hash = {} | |
csv_data = '' | |
[9765, 10362, 10363, 10364, 10365, 12106, 13772, 13770, 13944].each do |id| | |
event = Event.find(id) | |
event.event_registrations.each do |reg| | |
begin | |
user = RmUser.find(reg.rm_user_id) | |
email = user.default_email || reg.email | |
email = email.try(:downcase) | |
email_hash[reg.rm_user_id] = email | |
rescue Exception => ex | |
puts "Unable to find RM user with id #{reg.rm_user_id}" | |
end | |
end | |
end | |
csv_data = CSV.generate do |csv| | |
csv << ["id", "First Name", "Last Name", "Email", "Link"] | |
email_hash.each do |k,v| | |
begin | |
user = RmUser.find(k) | |
email_link = "https://www.racemenu.com/register/registration_type?event=13991-Super-Sunday&invite=#{k}" | |
csv << [k, user.first_name, user.last_name, v, email_link] | |
rescue Exception => ex | |
puts "Unable to find RM user with id #{k}" | |
end | |
end | |
end | |
RNotifier.monthly_registration_data_email("November", csv_data).deliver | |
end | |
desc "Custom report for 2012 registrations" | |
task :all_regs => :environment do | |
registration_data = InternalDataGenerator.export_reg(1) | |
RNotifier.monthly_registration_data_email("2012", registration_data).deliver | |
end | |
desc "adjust times for events affected by time zone change (12/4/12 through 1/24/13)" | |
task :fix_event_times => :environment do | |
(14601..21011).step(10).each do |eid| | |
# skip all manually updated events created after 12/4/12 | |
next if [17821,17831,17841,17851,14721,14681,17181,17191,17881,17891,19061,19161,21021,12154,21031,21081,21201,21211,21221,21231,21241,21251,19271].include?(eid) | |
begin | |
event = Event.find(eid) | |
# determine whether or not daylight savings is in place and set dst variable appropriately | |
date = event.event_date | |
if date < Date.new(2013,3,11) | |
dst = 5 | |
elsif date < Date.new(2013,11,3) | |
dst = 4 | |
elsif date < Date.new(2014,3,9) | |
dst = 5 | |
else | |
dst = 4 | |
end | |
begin | |
event.event_date = event.event_date - dst.hours | |
rescue | |
puts "event #{eid} does not have a start time." | |
end | |
begin | |
event.end_time = event.end_time - dst.hours | |
rescue | |
event.end_time = event.event_date | |
puts "event #{eid} does not have an end time using start time." | |
end | |
# save event | |
event.save(:validate => false) | |
#update sub-events for the event | |
event.races.each do |race| | |
race.start_time = race.start_time - dst.hours | |
race.save(:validate => false) | |
end | |
puts "updated event #{eid} successfully." | |
rescue Exception => ex | |
puts "Unable to find event with event id = #{eid}." | |
puts ex.message | |
puts ex.backtrace.join("\n") | |
end | |
end | |
end | |
desc "Set end_time for events that do not currently have them (prevents crash on event detail page)" | |
task :set_end_time => :environment do | |
Event.find(:all, conditions: 'end_time IS NULL').map do |event| | |
event.update_attribute(:end_time, event.event_date) | |
end | |
end | |
desc "Convert old team captains to new team captain structure" | |
task :convert_captains => :environment do | |
Team.find(:all).each do |team| | |
EventRegistration.find(:all, conditions: ['rm_user_id = ? AND event_id = ?', team.race_director_id, team.event_id]).each do |reg| | |
begin | |
if reg.race.supports_team_creation? | |
team.update_attribute(:captain_registration_id, reg.id) | |
break | |
end | |
rescue Exception => ex | |
puts "*** unable to find race for registration #{reg.id} ***" | |
end | |
end | |
end | |
end | |
desc "Update team_id's for season pass events" | |
# the team_id for event registrations was (and is still) not being properly saved for season pass registrations. team captains | |
# have a team_id of nil and team members have a team_id which corresponds to the team for the first event in the season pass group | |
# the task below will update all event registrations so the team_id matches the team associated with the team_entry since it's correct | |
# | |
# Summer Series - rake event:update_teams FIRST_EVENT=21201 ADDITIONAL_EVENTS=21211,21221,21231,21241,21251 | |
# C5K - rake event:update_teams FIRST_EVENT=17821 ADDITIONAL_EVENTS=17831,17841,17851 | |
task :update_teams => :environment do | |
initial_event_id = ENV['FIRST_EVENT'] | |
event_array = ENV['ADDITIONAL_EVENTS'].split(',') | |
if initial_event_id.blank? || event_array.blank? | |
puts "*** expecting FIRST_EVENT (single event id) and ADDITIONAL_EVENTS (comma separated list) ***" | |
return | |
end | |
init_event = Event.find(initial_event_id) | |
init_event.teams.each do |team| | |
team_name = team.name | |
event_array.each do |additional_event_id| | |
additional_team = Team.find_by_name_and_event_id(team.name,additional_event_id) | |
if additional_team.present? | |
additional_team.team_entries.map do |entry| | |
reg = entry.event_registration | |
if reg.team_id.present? | |
old_team = "#{reg.team.name} (#{reg.team_id}) for event #{reg.team.event.name} (#{reg.team.event.id})" | |
else | |
old_team = 'nil' | |
end | |
puts "Reg Event: #{reg.event_id}, Reg: #{reg.id} | Old team: #{old_team} | New team: #{entry.team_id}" | |
reg.team_id = entry.team_id | |
reg.save(validate: false) | |
end | |
end | |
end | |
end | |
end | |
desc "Create missing team_entries for season pass events" | |
# some registrations are missing a team_entry and it must be manually created | |
# | |
# Summer Series - rake event:create_team_entries EVENTS=21201,21211,21221,21231,21241,21251 | |
# C5K - rake event:create_team_entries EVENTS=17821,17831,17841,17851 | |
task :create_team_entries => :environment do | |
event_array = ENV['EVENTS'].split(',') | |
if event_array.blank? | |
puts "*** expecting EVENTS (comma separated list) ***" | |
return | |
end | |
puts "\n" | |
event_array.map do |eid| | |
event = Event.find(eid) | |
event.event_registrations.map do |reg| | |
if reg.team_entry.present? || !reg.processed? | |
next | |
elsif reg.team_id.blank? | |
puts "Unable to find team entry or team_id for registration #{reg.id} - #{reg.club_team}" | |
puts "---------------------------------------------" | |
else | |
team = Team.find_by_name_and_event_id(reg.team.name, reg.event_id) | |
if team.present? | |
reg_name = "#{reg.first_name} #{reg.last_name}" | |
puts "#{reg_name}: #{reg.id} - #{reg.event_id} has no team entry." | |
puts "Club/Team: #{reg.club_team}, Team: #{reg.team.name} #{reg.team_id} for #{reg.team.event_id}" | |
puts "Found team #{team.name} #{team.id} for #{team.event_id}" | |
puts "---------------------------------------------" | |
# if the team for this registration belongs to another event update to the correct team_id | |
if reg.team.event_id != reg.event_id | |
reg.team_id = team.id | |
reg.save(validate: false) | |
end | |
# create the team entry | |
TeamEntry.create(team_id: team.id, event_registration_id: reg.id) | |
else | |
puts "Team #{reg.team.name} does not exist for #{reg.event.name} - #{reg.event_id}" | |
puts "---------------------------------------------" | |
end | |
end | |
end | |
end | |
end | |
desc 'load event registrations from an external source (ie: RD switching to RaceMenu from another registration site)' | |
task :load_external_registrations => :environment do | |
event = Event.find(ENV['EVENT']) | |
resource_file_name = File.join(Rails.root, "lib", "tasks", "event_files", "#{ENV['EVENT']}_reg.csv") | |
if event.nil? | |
puts "Unable to find event with id: #{ENV['EVENT']}" | |
return | |
elsif !File.exists?(resource_file_name) | |
puts "Unable to locate csv file" | |
return | |
else | |
puts "*** Creating manual registrations for #{event.name}." | |
CSV.foreach(resource_file_name, :headers => true) do |row| | |
manual_race = Race.find(row['Race']) | |
begin | |
birthday = row['Birthday'].to_date | |
rescue | |
birthday = nil | |
end | |
@reg = EventRegistration.new(event_id: event.id, | |
race_id: manual_race.id, | |
first_name: row['First Name'], | |
last_name: row['Last Name'], | |
birthday: birthday, | |
age: row['Age'], | |
sex: row['Gender'], | |
email: row['Email'], | |
phone: row['Phone'], | |
address: row['Address'], | |
city: row['City'], | |
state: row['State'], | |
zip: row['Zip']) | |
@reg.is_manual = true | |
# set team if present | |
if row['team_name'].present? | |
if row['team_name'].blank? | |
team = Team.find(ENV['DEFAULT_TEAM']) | |
else | |
team = Team.find_by_event_id_and_name(event.id, row['team_name']) | |
end | |
else | |
team = Team.find(ENV['DEFAULT_TEAM']) if ENV['DEFAULT_TEAM'].present? | |
end | |
@reg.team_id = team.id if team.present? | |
@reg.cost = if row['race_cost'].present? | |
row['race_cost'].to_f | |
else | |
manual_race.current_fee(Time.now) | |
end | |
if event.is_contact_mandatory | |
@reg.em_con_name = row['em_con_name'] || "N/A" | |
@reg.em_con_phone = row['em_con_phone'] || "N/A" | |
@reg.em_con_relationship = row['em_con_relationship'] || "N/A" | |
end | |
@reg.processed = true | |
if @reg.save | |
# create team entry and update processed member count | |
if @reg.team_id.present? | |
team_entry = TeamEntry.new(team_id: @reg.team_id, team_order: nil, approved: false, event_registration_id: @reg.id) | |
if team_entry.save | |
team_entry.team.update_processed_members_counter! | |
end | |
end | |
if ENV['SHIRT_Q'].present? | |
question = Question.find(ENV['SHIRT_Q']) | |
response = question.question_options.find_by_title(row['Shirt']) | |
if response.present? | |
Answer.create(question_id: question.id, question_option_id: response.id, event_registration_id: @reg.id, extra_info: nil) | |
end | |
end | |
if ENV['HEAT_Q'].present? | |
question = Question.find(ENV['HEAT_Q']) | |
response = question.question_options.find_by_title(row['heat']) | |
if response.present? | |
Answer.create(question_id: question.id, question_option_id: response.id, event_registration_id: @reg.id, extra_info: nil) | |
end | |
end | |
if ENV['MAKEUP_Q'].present? | |
question = Question.find(ENV['MAKEUP_Q']) | |
response = question.question_options.find_by_title(row['makeup']) | |
if response.present? | |
Answer.create(question_id: question.id, question_option_id: response.id, event_registration_id: @reg.id, extra_info: nil) | |
end | |
end | |
if ENV['HEAR_ABOUT_Q'].present? | |
question = Question.find(ENV['HEAR_ABOUT_Q']) | |
if question.present? | |
Answer.create(question_id: question.id, question_option_id: nil, event_registration_id: @reg.id, extra_info: row['hear_about']) | |
end | |
end | |
if ENV['AGE_CONFIRM_Q'].present? | |
question = Question.find(ENV['AGE_CONFIRM_Q']) | |
response = question.question_options.first | |
if response.present? | |
Answer.create(question_id: question.id, question_option_id: response.id, event_registration_id: @reg.id, extra_info: nil) | |
end | |
end | |
if ENV['MORE_INFO_Q'].present? | |
question = Question.find(ENV['MORE_INFO_Q']) | |
response = question.question_options.find_by_title(row['more_info']) | |
if response.present? | |
Answer.create(question_id: question.id, question_option_id: response.id, event_registration_id: @reg.id, extra_info: nil) | |
end | |
end | |
else | |
puts "Error saving reg #{@reg.to_label}: #{@reg.errors.full_messages}" | |
end # saved registration | |
end # reading CSV | |
end # creating manual registrations | |
end # load_external_registrations | |
desc 'Convert Fee Structures to new Display Fee implementation' | |
task :convert_fee_structures => :environment do | |
fee_structures = FeeStructure.find(:all, conditions: 'include_service_fee = true') | |
fee_structures.map do |fee_structure| | |
event = fee_structure.event | |
#if event && event.event_date > Date.today | |
if event.present? | |
puts "Updating #{event.id} - #{event.name}" | |
event.update_attribute(:display_fees, false) | |
# Update sub-events | |
event.races.map do |sub_event| | |
if sub_event.initial_fee && sub_event.initial_fee > 0 | |
existing_svc_fee = FeeCalculator.service_fee(sub_event.initial_fee, true) | |
new_fee = sub_event.initial_fee - existing_svc_fee | |
sub_event.initial_fee = new_fee | |
sub_event.save(validate: false) | |
end | |
sub_event.race_fee_changes.map do |fee_change| | |
existing_svc_fee = FeeCalculator.service_fee(fee_change.fee, true) | |
new_fee = fee_change.fee - existing_svc_fee | |
fee_change.update_attribute(:fee, new_fee) | |
end | |
end | |
else | |
puts "Skipping fee structure #{fee_structure.id} which does not have an event." | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
173 and 212 are the beginning lines for tasks that are concerned with season passes. There must be something more in the application itself.