* VRFS-1879 - handle case of no instruments selected for others; VRFS-1894 - canceled RSVPs that have not been dealt with are not shown

This commit is contained in:
Seth Call 2014-07-08 16:52:25 -05:00
parent e9cd2e14f9
commit 71737f3f5e
10 changed files with 100 additions and 81 deletions

View File

@ -34,9 +34,9 @@ module JamRuby
)
if options[:status] == 'approved'
query = query.where("rrrs.chosen = true")
query = query.where("rrrs.chosen = true AND canceled != TRUE")
elsif options[:status] == 'pending'
query = query.where("rrrs.chosen is null")
query = query.where("rrrs.chosen is null AND canceled != TRUE")
end
query = query.where("rsvp_requests.user_id = ?", user.id) unless user.nil?

View File

@ -7,6 +7,7 @@
context.JK.AccountSessionDetail = function (app) {
var logger = context.JK.logger;
var rest = context.JK.Rest();
var sessionUtils = context.JK.SessionUtils;
var sessionId = null;
var sessionData = null;
var rsvpData = null;
@ -14,9 +15,11 @@
var $cancelRsvpBtn = null;
var $inviteOthersBtn = null;
var $sessionDetail = null;
var $templateOpenSlots = null;
var instrument_logo_map = context.JK.getInstrumentIconMap24();
var invitationDialog = null;
var LATENCY = {
GOOD : {description: "GOOD", style: "latency-green", min: 0.0, max: 20.0},
MEDIUM : {description: "MEDIUM", style: "latency-yellow", min: 20.0, max: 40.0},
@ -195,7 +198,6 @@
else {
var latency = user.latency;
console.log("latency = %o", latency);
if (!latency || latency === 1000) {
// 1000 is a magical number returned by new scoring API to indicate one or more people in the session have an unknown score
@ -232,12 +234,11 @@
$.each(sessionData.pending_rsvp_requests, function(index, request) {
if (request.user_id != context.JK.currentUserId) {
if ("instrument_list" in request && request.instrument_list != null) {
console.log(request.instrument_list)
$.each(request.instrument_list, function (index, instrument) {
var inst = '/assets/content/icon_instrument_default24.png';
if (instrument.id in instrument_logo_map) {
inst = instrument_logo_map[instrument.id].asset;
}
instrumentLogoHtml += '<img data-instrument-id="' + instrument.id + '" src="' + inst + '" width="24" height="24" />&nbsp;';
var instrumentId = instrument == null ? null : instrument.id;
var inst = context.JK.getInstrumentIcon24(instrumentId);
instrumentLogoHtml += '<img data-instrument-id="' + instrumentId + '" src="' + inst + '" width="24" height="24" />&nbsp;';
})
}
@ -273,10 +274,8 @@
$.each(sessionData.approved_rsvps, function(index, request) {
if ("instrument_list" in request) {
$.each(request.instrument_list, function(index, instrument) {
var inst = '/assets/content/icon_instrument_default24.png';
if (instrument.id in instrument_logo_map) {
inst = instrument_logo_map[instrument.id].asset;
}
var instrumentId = instrument == null ? null : instrument.id;
var inst = context.JK.getInstrumentIcon24(instrumentId);
instrumentLogoHtml += '<img src="' + inst + '" width="24" height="24" />&nbsp;';
});
}
@ -323,21 +322,12 @@
function generateSessionNeeded() {
var resultHtml = "";
var slotHtml = "";
if(sessionData['is_unstructured_rsvp?']) {
resultHtml += sessionUtils.createOpenSlot($templateOpenSlots, {description: 'Any Instrument'});
}
$.each(sessionData.open_slots, function(index, slot) {
var inst = '/assets/content/icon_instrument_default24.png';
if ("instrument_id" in slot) {
inst = instrument_logo_map[slot.instrument_id].asset;
}
slotHtml = context._.template(
$("#template-account-open-slot").html(),
{instrument_url: inst, instrument: slot.description,
proficiency: slot.proficiency_desc},
{variable: 'data'}
);
resultHtml += slotHtml;
resultHtml += sessionUtils.createOpenSlot($templateOpenSlots, slot);
});
return resultHtml;
@ -384,6 +374,7 @@
$inviteOthersBtn.hide(); $cancelRsvpBtn.hide();
$sessionDetail = $screen.find("#account-session-detail-div");
invitationDialog = invitationDlg;
$templateOpenSlots = $('#template-open-slots');
}
this.initialize = initialize;

View File

@ -302,7 +302,12 @@
$('#session-instruments-me-disp').html(instruments_me.join(', '));
var instruments_rsvp = [];
$.each(instrumentRSVP.getSelectedInstruments(), function(index, instrument) {
var otherInstruments = instrumentRSVP.getSelectedInstruments();
var isUnstructuredRsvp = otherInstruments.length == 0 && userSelectedSlots(createSessionSettings.createType);
if(isUnstructuredRsvp) {
instruments_rsvp.push('Any Instrument Allowed');
}
$.each(otherInstruments, function(index, instrument) {
instruments_rsvp.push(instrument.name + ' (' + instrument.count + ') (' + proficiencyDescriptionMap[instrument.level] + ')');
});
$('#session-instruments-rsvp-disp').html(instruments_rsvp.join(', '));
@ -528,6 +533,11 @@
}
}
// did the user have to pick the RSVP slots explicitely?
function userSelectedSlots(createType) {
return createType == "immediately" || createType == "schedule-future" || createType == "rsvp";
}
function startSession() {
var data = {};
@ -595,7 +605,7 @@
});
var otherInstruments = instrumentRSVP.getSelectedInstruments();
data.isUnstructuredRsvp = otherInstruments.length == 0;
data.isUnstructuredRsvp = otherInstruments.length == 0 && userSelectedSlots(createSessionSettings.createType);
$.each(instrumentRSVP.getSelectedInstruments(), function(index, instrument) {
for (var i = 0; i < instrument.count; i++) {
var slot = {};

View File

@ -8,6 +8,7 @@
var logger = context.JK.logger;
var rest = context.JK.Rest();
var ui = new context.JK.UIHelper(app);
var sessionUtils = context.JK.SessionUtils;
var $activeSessionTemplate = $('#template-active-session-row');
var $inactiveSessionTemplate = $('#template-inactive-session-row');
var $notationFileTemplate = $('#template-notation-files');
@ -72,13 +73,13 @@
// render if anyone interested
if(session['is_unstructured_rsvp?']) {
openSlotsHtml += createOpenSlot({description: 'Any Instrument'})
openSlotsHtml += sessionUtils.createOpenSlot($openSlotsTemplate, {description: 'Any Instrument'})
}
// render open slots
if (session.open_slots) {
for (i=0; i < session.open_slots.length; i++) {
openSlotsHtml += createOpenSlot(session.open_slots[i]);
openSlotsHtml += sessionUtils.createOpenSlot($openSlotsTemplate, session.open_slots[i]);
}
}
@ -157,14 +158,14 @@
if(session['is_unstructured_rsvp?']) {
openSlots = true;
openSlotsHtml += createOpenSlot({description: 'Any Instrument'})
openSlotsHtml += sessionUtils.createOpenSlot($openSlotsTemplate, {description: 'Any Instrument'})
}
// render open slots
if (session.open_slots) {
for (i=0; i < session.open_slots.length; i++) {
openSlots = true;
openSlotsHtml += createOpenSlot(session.open_slots[i]);
openSlotsHtml += sessionUtils.createOpenSlot($openSlotsTemplate, session.open_slots[i]);
}
}
@ -333,27 +334,6 @@
};
}
function createOpenSlot(slot) {
var inst = context.JK.getInstrumentIcon24(slot.instrument_id);
var proficiency_desc = slot.proficiency_desc;
if(!proficiency_desc) {
// this is to allow unstructured RSVPs to not specify proficiency_desc
proficiency_desc = "Any Skill Level";
}
if(!slot.proficiency_desc) {
proficiency_desc
}
var slot = {
instrument_url: inst,
instrument: slot.description,
proficiency: proficiency_desc
};
return context.JK.fillTemplate($openSlotsTemplate.html(), slot);
}
function createNotationFile(notation) {
var notationVals = {
file_url: notation.file_url,

View File

@ -0,0 +1,35 @@
/**
* Common utility functions.
*/
(function (context, $) {
"use strict";
context.JK = context.JK || {};
var sessionUtils = {};
var rest = new context.JK.Rest();
context.JK.SessionUtils = sessionUtils;
var logger = context.JK.logger;
sessionUtils.createOpenSlot = function($openSlotsTemplate, slot) {
var inst = context.JK.getInstrumentIcon24(slot.instrument_id);
var proficiency_desc = slot.proficiency_desc;
if(!proficiency_desc) {
// this is to allow unstructured RSVPs to not specify proficiency_desc
proficiency_desc = "Any Skill Level";
}
if(!slot.proficiency_desc) {
proficiency_desc
}
var slot = {
instrument_url: inst,
instrument: slot.description,
proficiency: proficiency_desc
};
return context.JK.fillTemplate($openSlotsTemplate.html(), slot);
}
})(window, jQuery);

View File

@ -14,8 +14,8 @@
.left.sessions-caption
%h2 session details:
.right
%a.button-orange{href: "#", id: 'cancel-rsvp'} Cancel RSVP
%a.button-orange{href: "#", id: 'invite-others'} Invite Others
%a.button-orange{href: "#", id: 'cancel-rsvp'} CANCEL RSVP
%a.button-orange{href: "#", id: 'invite-others'} INVITE OTHERS
.clearall
#account-session-detail-div
@ -148,13 +148,6 @@
{{data.legal_policy}}
.clearall
%script{type: 'text/template', id: 'template-account-open-slot'}
%tr
%td{width: 24}
%img{src: "{{data.instrument_url}}"}
%td
%div{class: 'nowrap'}
{{data.instrument}} ({{data.proficiency}})
%script{type: 'text/template', id: 'template-account-invited'}
%td

View File

@ -80,7 +80,7 @@
- if @approved_rsvps.blank?
None
- @approved_rsvps.each_with_index do |rsvp, index|
.clearall.left.w100.h20.ib.mb10.rsvp-details
.clearall.left.w100.h20.ib.mb10.rsvp-details{'data-user-id' => rsvp.id}
.avatar-tiny{'hoveraction' => "musician", 'user-id' => rsvp.id}
- if rsvp.photo_url.nil?
= image_tag 'shared/avatar_generic.png', :alt => ""

View File

@ -190,22 +190,24 @@ describe "Create Session Flow", :js => true, :type => :feature, :capybara_featur
find('div#divSessionPolicy ins').trigger(:click)
find('.btn-next').trigger(:click)
end
end
it "initial status" do
find('.session-step-title', text: 'Review & Confirm?')
find('em#session-name-disp', text: 'Test (Rock)')
find('div#session-description-disp', text: 'Test Description')
find('div#session-language-disp', text: 'English')
find('div#session-invited-disp', text: 'Any interested JamKazam musicians that I approve')
find('div#session-instruments-me-disp', text: 'Electric Guitar')
find('div#session-musician-access-disp', text: 'Musicians: Musicians may join by approval')
find('div#session-fans-access-disp', text: 'Fans: Fans may listen, chat with each other')
find('div#session-policy-disp', text: 'Standard')
page.should have_css(".btn-back")
page.should have_css(".btn-next")
page.should have_css(".btn-help")
end
it "initial status" do
find('.session-step-title', text: 'Review & Confirm')
find('em#session-name-disp', text: 'Test Name (Rock)')
find('div#session-description-disp', text: 'Test Description')
find('div#session-language-disp', text: 'English')
find('div#session-invited-disp', text: 'Any interested JamKazam musicians that I approve')
find('div#session-instruments-me-disp', text: 'Other')
find('div#session-instruments-rsvp-disp', text: 'Any Instrument Allowed')
find('div#session-musician-access-disp', text: 'Musicians: Musicians may join by approval')
find('div#session-fans-access-disp', text: 'Fans: Fans may listen, chat with each other')
find('div#session-policy-disp', text: 'Standard')
page.should have_css(".btn-back")
page.should have_css(".btn-next")
page.should have_css(".btn-help")
end
end
end

View File

@ -88,16 +88,24 @@ describe "Find Session", :js => true, :type => :feature, :capybara_feature => tr
it "handles is_unstructured_rsvp sessions correctly" do
# create an unstructured session
music_session = FactoryGirl.create(:music_session, creator: user, is_unstructured_rsvp: true)
fast_signin(finder, Nav.find_session)
# verify it says the right thing in the 'Still Needed' section
find("#sessions-scheduled tr.found-session div.instruments", text: 'Any Instrument (Any Skill Level)')
# bring up the RSVP dialog
find('.rsvp-link').trigger(:click)
# bring up the RSVP dialog
# select the only option (Any Instrument)
find('.rsvp-instruments input[value="unstructured"]').trigger(:click)
# submit the RSVP
find('#btnSubmitRsvp').trigger(:click)
# TODO: verify that the UI works - after VRFS-1892
end
end
end

View File

@ -93,9 +93,9 @@ describe "Session Info", :js => true, :type => :feature, :capybara_feature => tr
find('div.legal_policy', text: @music_session.legal_policy.capitalize)
# right sidebar - RSVPs
find('div.rsvp-details .avatar-tiny')
find('div.rsvp-details .rsvp-name', text: @rsvp_approved_user.name)
find('div.rsvp-details img.instrument-icon')
find("div.rsvp-details[data-user-id=\"#{@rsvp_approved_user.id}\"] .avatar-tiny")
find("div.rsvp-details[data-user-id=\"#{@rsvp_approved_user.id}\"] .rsvp-name", text: @rsvp_approved_user.name)
find("div.rsvp-details[data-user-id=\"#{@rsvp_approved_user.id}\"] img.instrument-icon")
# right sidebar - Still Needed
find('div.still-needed', text: @slot2.instrument.id.capitalize)