问卷完成度显示

This commit is contained in:
z9hang 2015-01-16 15:32:09 +08:00
parent d0117e5d03
commit 0a367249ae
3 changed files with 95 additions and 24 deletions

View File

@ -24,6 +24,7 @@ class PollController < ApplicationController
render_403 render_403
else else
@can_edit_poll = (!has_commit_poll?(@poll.id,User.current.id)) || User.current.admin? @can_edit_poll = (!has_commit_poll?(@poll.id,User.current.id)) || User.current.admin?
@percent = get_percent(@poll,User.current)
poll_questions = @poll.poll_questions poll_questions = @poll.poll_questions
@poll_questions = paginateHelper poll_questions,3 #分页 @poll_questions = paginateHelper poll_questions,3 #分页
respond_to do |format| respond_to do |format|
@ -172,7 +173,7 @@ class PollController < ApplicationController
def commit_answer def commit_answer
pq = PollQuestion.find(params[:poll_question_id]) pq = PollQuestion.find(params[:poll_question_id])
if has_commit_poll?(@poll.id,User.current.id) && (!User.current.admin?) if has_commit_poll?(@poll.id,User.current.id) && (!User.current.admin?)
render :text => 'failure' render :json => {:text => "failure"}
return return
end end
if pq.question_type == 1 if pq.question_type == 1
@ -185,9 +186,10 @@ class PollController < ApplicationController
end end
pv.poll_answer_id = params[:poll_answer_id] pv.poll_answer_id = params[:poll_answer_id]
if pv.save if pv.save
render :text => "ok" @percent = get_percent(@poll,User.current)
render :json => {:text => "ok" ,:percent => format("%.2f" ,@percent)}
else else
render :text => "failure" render :json => {:text => "failure"}
end end
elsif pq.question_type == 2 elsif pq.question_type == 2
pv = PollVote.find_by_poll_answer_id_and_user_id(params[:poll_answer_id],User.current.id) pv = PollVote.find_by_poll_answer_id_and_user_id(params[:poll_answer_id],User.current.id)
@ -197,38 +199,64 @@ class PollController < ApplicationController
pv.poll_question_id = params[:poll_question_id] pv.poll_question_id = params[:poll_question_id]
pv.poll_answer_id = params[:poll_answer_id] pv.poll_answer_id = params[:poll_answer_id]
if pv.save if pv.save
render :text => "true" @percent = get_percent(@poll,User.current)
render :json => {:text => "true",:percent => format("%.2f" ,@percent)}
else else
render :text => "failure" render :json => {:text => "failure"}
end end
else else
if pv.delete if pv.delete
render :text => "false" @percent = get_percent(@poll,User.current)
render :json => {:text => "false" ,:percent => format("%.2f" ,@percent)}
else else
render :text => "failure" render :json => {:text => "failure"}
end end
end end
elsif pq.question_type == 3 || pq.question_type == 4 elsif pq.question_type == 3 || pq.question_type == 4
pv = PollVote.find_by_poll_question_id_and_user_id(params[:poll_question_id],User.current.id) pv = PollVote.find_by_poll_question_id_and_user_id(params[:poll_question_id],User.current.id)
if pv.nil? if pv.nil?
if params[:vote_text].nil? || params[:vote_text].blank?
@percent = get_percent(@poll,User.current)
render :json => {:text => pv.vote_text,:percent => format("%.2f" ,@percent)}
else
pv = PollVote.new pv = PollVote.new
pv.user_id = User.current.id pv.user_id = User.current.id
pv.poll_question_id = params[:poll_question_id] pv.poll_question_id = params[:poll_question_id]
end
pv.vote_text = params[:vote_text] pv.vote_text = params[:vote_text]
if pv.save if pv.save
render :text => pv.vote_text @percent = get_percent(@poll,User.current)
render :json => {:text => pv.vote_text,:percent => format("%.2f" ,@percent)}
else else
render :text => "failure" render :json => {:text => "failure"}
end
end end
else else
render :text => "failure" if params[:vote_text].nil? || params[:vote_text].blank?
if pv.delete
@percent = get_percent(@poll,User.current)
render :json => {:text => pv.vote_text,:percent => format("%.2f" ,@percent)}
else
render :json => {:text => "failure"}
end
else
pv.vote_text = params[:vote_text]
if pv.save
@percent = get_percent(@poll,User.current)
render :json => {:text => pv.vote_text,:percent => format("%.2f" ,@percent)}
else
render :json => {:text => "failure"}
end
end
end
else
render :json => {:text => "failure"}
end end
end end
#提交问卷 #提交问卷
def commit_poll def commit_poll
@uncomplete_question = get_uncomplete_question(@poll) @uncomplete_question = get_uncomplete_question(@poll,User.current)
if @uncomplete_question.count < 1 if @uncomplete_question.count < 1
pu = get_poll_user(@poll.id,User.current.id) pu = get_poll_user(@poll.id,User.current.id)
pu.user_id = User.current.id pu.user_id = User.current.id
@ -277,17 +305,41 @@ class PollController < ApplicationController
end end
#获取未完成的题目 #获取未完成的题目
def get_uncomplete_question poll def get_uncomplete_question poll,user
necessary_questions = poll.poll_questions.where("#{PollQuestion.table_name}.is_necessary = 1") necessary_questions = poll.poll_questions.where("#{PollQuestion.table_name}.is_necessary = 1")
uncomplete_question = [] uncomplete_question = []
necessary_questions.each do |question| necessary_questions.each do |question|
if question.poll_votes.nil? || question.poll_votes.count < 1 answers = get_user_answer(question,user)
if answers.nil? || answers.count < 1
uncomplete_question << question uncomplete_question << question
end end
end end
uncomplete_question uncomplete_question
end end
#获取用户对某个问题的答案
def get_user_answer(question,user)
user_answer = question.poll_votes.where("#{PollVote.table_name}.user_id = #{user.id}")
user_answer
end
def get_complete_question(poll,user)
questions = poll.poll_questions
complete_question = []
questions.each do |question|
answers = get_user_answer(question,user)
if !(answers.nil? || answers.count < 1)
complete_question << question
end
end
complete_question
end
def get_percent poll,user
complete_count = get_complete_question(poll,user).count
(complete_count.to_f / poll.poll_questions.count.to_f)*100
end
#PollUser记录用户是否已提交问卷有对应的记录则已提交没有则新建一个 #PollUser记录用户是否已提交问卷有对应的记录则已提交没有则新建一个
def get_poll_user poll_id,user_id def get_poll_user poll_id,user_id
pu = PollUser.find_by_poll_id_and_user_id(poll_id,user_id) pu = PollUser.find_by_poll_id_and_user_id(poll_id,user_id)

View File

@ -3,7 +3,7 @@
<h3 style="font-weight: normal;color: green">提交成功!</h3> <h3 style="font-weight: normal;color: green">提交成功!</h3>
<%= link_to "确定", poll_index_path(:polls_group_id => @course.id,:polls_type => 'Course'),:class => 'commit'%> <%= link_to "确定", poll_index_path(:polls_group_id => @course.id,:polls_type => 'Course'),:class => 'commit'%>
<% elsif status == 1 %> <% elsif status == 1 %>
<h3 style="font-weight: normal;color: red">您还有尚未作答的题目请完成后在提交!</h3> <h3 style="font-weight: normal;color: red">您还有尚未作答的必答题目请完成后再提交!</h3>
<%= link_to "确定", "javascript:void(0)",:onclick => 'hidden_atert_form();',:class => 'commit'%> <%= link_to "确定", "javascript:void(0)",:onclick => 'hidden_atert_form();',:class => 'commit'%>
<% else %> <% else %>
<h3 style="font-weight: normal;color: red">发生未知错误,请检查您的网络。</h3> <h3 style="font-weight: normal;color: red">发生未知错误,请检查您的网络。</h3>

View File

@ -72,7 +72,10 @@
poll_question_id: <%= pq.id %> poll_question_id: <%= pq.id %>
}, },
success: function (data) { success: function (data) {
var dataObj = eval(data);
obj.checked = true; obj.checked = true;
var span = $('#percent');
span.html(dataObj.percent);
} }
}); });
} }
@ -118,7 +121,8 @@
poll_question_id: <%= pq.id %> poll_question_id: <%= pq.id %>
}, },
success: function (data) { success: function (data) {
if(data == "true") var dataObj = eval(data);
if(dataObj.text == "true")
{ {
obj.checked = true; obj.checked = true;
} }
@ -126,6 +130,8 @@
{ {
obj.checked = false; obj.checked = false;
} }
var span = $('#percent');
span.html(dataObj.percent);
} }
}); });
} }
@ -165,6 +171,9 @@
vote_text: obj.value vote_text: obj.value
}, },
success: function (data) { success: function (data) {
var dataObj = eval(data);
var span = $('#percent');
span.html(dataObj.percent);
// obj.value = data; // obj.value = data;
} }
}); });
@ -198,7 +207,17 @@
vote_text: obj.innerHTML vote_text: obj.innerHTML
}, },
success: function (data) { success: function (data) {
// obj.value = data; var dataObj = eval(data);
if(dataObj.text != 'failure')
{
var span = $('#percent');
span.html(dataObj.percent);
}
else
{
alert("error");
}
} }
}); });
} }
@ -222,7 +241,7 @@
<% end %> <% end %>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
<div class="ur_progress_text">答题已完成 <strong class="ur_progress_number">0%</strong> </div> <div class="ur_progress_text">答题已完成 <strong class="ur_progress_number"><span id="percent"><%= format "%.2f" ,@percent %></span>%</strong> </div>
</div> </div>