VRFS-1691 update RSVP request complete

This commit is contained in:
Brian Smith 2014-05-21 23:36:34 -04:00
parent 25f325d720
commit 176e862338
5 changed files with 67 additions and 21 deletions

View File

@ -157,4 +157,5 @@ notification_scheduled_session.sql
music_notation.sql
music_session_recurring_mode.sql
add_timezone_music_session.sql
scheduled_sessions_2.sql
scheduled_sessions_2.sql
scheduled_sessions_3.sql

View File

@ -0,0 +1 @@
alter table rsvp_requests_rsvp_slots alter column chosen set DEFAULT NULL;

View File

@ -883,7 +883,7 @@ module JamRuby
source_user = creator
notification = Notification.new
notification.description = NotificationTypes::SCHEDULED_SESSION_CANCELLED
notification.description = NotificationTypes::SCHEDULED_SESSION_COMMENT
notification.source_user_id = source_user.id
notification.target_user_id = target_user.id
notification.session_id = music_session.id
@ -894,6 +894,7 @@ module JamRuby
msg = @@message_factory.scheduled_session_comment(
target_user.id,
music_session.id,
target_user.photo_url,
notification_msg,
comment,
music_session.description,

View File

@ -36,7 +36,7 @@ module JamRuby
# verify music session exists
if music_session.nil?
raise JamRuby::JamArgumentError.new("Invalid session.")
raise StateError, "Invalid session."
end
# verify invitation exists for this user and session
@ -48,7 +48,7 @@ module JamRuby
# verify slot IDs exist in request
if params[:rsvp_slots].blank?
raise JamArgumentError, "You must select at least 1 slot."
raise StateError, "You must select at least 1 slot."
end
RsvpRequest.transaction do
@ -61,21 +61,31 @@ module JamRuby
# for each slot requested, do the following:
# (1) verify slot exists in db
# (2) verify slot is not already chosen
# (3) create RsvpRequestRsvpSlot
# (4) create RsvpRequest
# (3) verify user has not already requested this slot
# (4) create RsvpRequestRsvpSlot
# (5) create RsvpRequest
slot_ids.each do |id|
rsvp_slot = RsvpSlot.where(:id => id).first
# verify slot exists in db
if rsvp_slot.nil?
raise JamRuby::JamArgumentError.new("Invalid slot #{id}.")
raise StateError, "Invalid slot #{id}."
end
# verify user has not already submitted RSVP request for this slot
user_slot = RsvpRequest.joins(:rsvp_requests_rsvp_slots)
.where(:user_id => user.id)
.where(rsvp_requests_rsvp_slots: {rsvp_slot_id: id})
if !user_slot.blank?
raise StateError, "You have already submitted an RSVP request for this slot."
end
chosen_slot = rsvp_slot.rsvp_requests_rsvp_slots.where("chosen = true").first
# verify this slot was not already chosen
if !chosen_slot.nil?
raise JamRuby::JamArgumentError.new("The #{rsvp_slot.instrument_id} slot has already been approved by the session organizer.")
raise StateError, "The #{rsvp_slot.instrument_id} slot has already been approved by the session organizer."
else
rsvp_request_rsvp_slot = RsvpRequestRsvpSlot.new
rsvp_request_rsvp_slot.rsvp_request = @rsvp
@ -107,11 +117,11 @@ module JamRuby
rsvp_request_id = params[:id]
music_session = MusicSession.find(params[:session_id])
music_session = MusicSession.find_by_id(params[:session_id])
# verify music session exists
if music_session.nil?
raise JamRuby::JamArgumentError.new("Invalid session.")
raise StateError, "Invalid session."
end
# authorize the user attempting to respond to the RSVP request
@ -119,27 +129,54 @@ module JamRuby
raise PermissionError, "Only the session organizer can accept or decline and RSVP request."
end
RsvpRequest.transaction do
if !params[:rsvp_response].blank?
instruments = []
rsvp_request = RsvpRequest.find_by_id(rsvp_request_id)
responses = params[:rsvp_response]
responses.each do |r|
if r.accept
request_slot = RsvpRequestRsvpSlot.find(r.request_slot_id)
if rsvp_request.nil?
raise StateError, "Invalid RSVP request."
end
RsvpRequest.transaction do
rsvp_responses = params[:rsvp_responses]
if !rsvp_responses.blank?
instruments = []
accepted_slot = false
rsvp_responses.each do |r|
request_slot_id = r[:request_slot_id]
request_slot = RsvpRequestRsvpSlot.find_by_id(request_slot_id)
if request_slot.nil?
raise StateError, "Invalid request slot #{request_slot_id}."
end
rsvp_slot = RsvpSlot.find_by_id(request_slot.rsvp_slot_id)
if rsvp_slot.nil?
raise StateError, "Slot does not exist"
end
if rsvp_slot.chosen
raise StateError, "The #{rsvp_slot.instrument_id} slot has already been approved for another user."
end
if r[:accept]
accepted_slot = true
request_slot.chosen = true
request_slot.save
rsvp_slot = RsvpSlot.find(request_slot.rsvp_slot_id)
instruments << rsvp_slot.instrument_id
else
request_slot.chosen = false
request_slot.save
end
end
Notification.send_scheduled_session_rsvp_approved(music_session, user, instruments)
# send notification if at least 1 slot was approved
if accepted_slot
Notification.send_scheduled_session_rsvp_approved(music_session, user, instruments)
end
else
raise JamRuby::JamArgumentError.new("Invalid request.")
raise StateError, "Invalid request."
end
end
end

View File

@ -18,5 +18,11 @@ module JamRuby
chosen_slots = RsvpRequestRsvpSlot.where("chosen = true AND rsvp_slot_id = ?", self.id)
!chosen_slots.blank?
end
# def has_rsvp_from_user(user)
# user_slot = RsvpRequest.joins(:rsvp_requests_rsvp_slots)
# .where(:rsvp_request_id => )
# .where(:user_id => user.id)
# end
end
end