mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-13 19:54:02 +00:00
136 lines
4.7 KiB
Ruby
136 lines
4.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class RemoveSocialEventsTable < ActiveRecord::Migration
|
|
class TempConference < ActiveRecord::Base
|
|
self.table_name = 'conferences'
|
|
|
|
has_many :temp_social_events
|
|
end
|
|
|
|
class TempSocialEvent < ActiveRecord::Base
|
|
self.table_name = 'social_events'
|
|
|
|
belongs_to :temp_conference
|
|
has_and_belongs_to_many :temp_registrations
|
|
end
|
|
|
|
class TempRegistration < ActiveRecord::Base
|
|
self.table_name = 'registrations'
|
|
|
|
belongs_to :temp_conference
|
|
has_and_belongs_to_many :temp_social_events
|
|
has_and_belongs_to_many :temp_qanswers
|
|
end
|
|
|
|
class TempRegistrationsSocialEvent < ActiveRecord::Base
|
|
self.table_name = 'registrations_social_events'
|
|
|
|
belongs_to :temp_registrations
|
|
belongs_to :temp_social_events
|
|
end
|
|
|
|
class TempQuestionType < ActiveRecord::Base
|
|
self.table_name = 'question_types'
|
|
|
|
has_many :temp_questions
|
|
end
|
|
|
|
class TempQuestion < ActiveRecord::Base
|
|
self.table_name = 'questions'
|
|
|
|
has_many :temp_qanswers
|
|
has_many :temp_answers, through: :temp_qanswers
|
|
belongs_to :temp_question_type
|
|
has_and_belongs_to_many :temp_conferences
|
|
end
|
|
|
|
class TempAnswer < ActiveRecord::Base
|
|
self.table_name = 'answers'
|
|
|
|
has_many :temp_qanswers
|
|
has_many :temp_questions, through: :temp_qanswers
|
|
end
|
|
|
|
class TempQanswer < ActiveRecord::Base
|
|
self.table_name = 'qanswers'
|
|
|
|
belongs_to :temp_question
|
|
belongs_to :temp_answer
|
|
has_and_belongs_to_many :temp_registrations
|
|
end
|
|
|
|
class TempConferencesQuestions < ActiveRecord::Base
|
|
self.table_name = 'conferences_questions'
|
|
end
|
|
|
|
class TempQanswerRegistration < ActiveRecord::Base
|
|
self.table_name = 'qanswers_registrations'
|
|
end
|
|
|
|
def up
|
|
# Create Question of 'Multiple Choice' type
|
|
qtype = TempQuestionType.find_or_create_by!(title: 'Multiple Choice')
|
|
|
|
TempConference.all.each do |conference|
|
|
if TempSocialEvent.where(conference_id: conference.id).any?
|
|
# Find existing question or initialize it
|
|
question = TempQuestion.find_or_initialize_by(title: 'Which of the following social events are you going to attend?',
|
|
conference_id: conference.id,
|
|
question_type_id: qtype.id)
|
|
question.save!
|
|
# Enable the question for the conference
|
|
TempConferencesQuestions.find_or_create_by!(conference_id: conference.id,
|
|
question_id: question.id)
|
|
end
|
|
|
|
TempSocialEvent.where(conference_id: conference.id).each do |social_event|
|
|
answer = TempAnswer.find_or_create_by!(title: social_event.title)
|
|
# Associate answer with the question
|
|
qa = TempQanswer.find_or_initialize_by(question_id: question.id,
|
|
answer_id: answer.id)
|
|
qa.save!
|
|
|
|
# Associate appropriate answer with registration
|
|
TempRegistrationsSocialEvent.where(social_event_id: social_event.id).each do |registration_social_event|
|
|
registration = TempRegistration.find(registration_social_event.registration_id)
|
|
TempQanswerRegistration.find_or_create_by!(registration_id: registration.id,
|
|
qanswer_id: qa.id)
|
|
end
|
|
end
|
|
end
|
|
|
|
drop_table :social_events
|
|
drop_table :registrations_social_events
|
|
end
|
|
|
|
def down
|
|
create_table :social_events do |t|
|
|
t.references :conference
|
|
t.string :title
|
|
t.text :description
|
|
t.date :date
|
|
end
|
|
|
|
create_table :registrations_social_events, id: false do |t|
|
|
t.references :registration, :social_event
|
|
end
|
|
|
|
qtype = TempQuestionType.find_by(title: 'Multiple Choice')
|
|
|
|
TempConference.all.each do |conference|
|
|
if qtype && (question = TempQuestion.find_by(title: 'Which of the following social events are you going to attend?',
|
|
conference_id: conference.id, question_type_id: qtype.id))
|
|
TempQanswer.where(question_id: question.id).each do |qa|
|
|
TempQanswerRegistration.where(qanswer_id: qa.id).each do |qa_registration|
|
|
answer = TempAnswer.find(qa.answer_id)
|
|
registration = TempRegistration.find(qa_registration.registration_id)
|
|
social_event = TempSocialEvent.find_or_create_by!(title: answer.title,
|
|
conference_id: conference.id)
|
|
TempRegistrationsSocialEvent.find_or_create_by!(registration_id: registration.id,
|
|
social_event_id: social_event.id)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|