Add criteria color setting.(points' color in plot)
This commit is contained in:
parent
4be6dc74f9
commit
dedbe340ac
|
|
@ -84,7 +84,7 @@ class Admin::SurveysController < OrbitAdminController
|
||||||
total = 0
|
total = 0
|
||||||
@survey.survey_questions.each do |ques|
|
@survey.survey_questions.each do |ques|
|
||||||
ques.survey_question_options.each do |opt|
|
ques.survey_question_options.each do |opt|
|
||||||
p = (opt.points == nil ? 0 : opt.points) rescue 0
|
p = (opt.points == nil ? 0 : opt.points) * ques.weight rescue 0
|
||||||
total = total + p
|
total = total + p
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -118,15 +118,20 @@ class Admin::SurveysController < OrbitAdminController
|
||||||
total = 0
|
total = 0
|
||||||
@survey.survey_questions.each do |ques|
|
@survey.survey_questions.each do |ques|
|
||||||
ques.survey_question_options.each do |opt|
|
ques.survey_question_options.each do |opt|
|
||||||
p = (opt.points == nil ? 0 : opt.points) rescue 0
|
p = (opt.points == nil ? 0 : opt.points) * ques.weight rescue 0
|
||||||
total = total + p
|
total = total + p
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@survey.total_points = total
|
@survey.total_points = total
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if @survey.update_attributes(survey_params)
|
if @survey.update_attributes(survey_params)
|
||||||
|
Thread.new do
|
||||||
@survey.update_answer_score
|
@survey.update_answer_score
|
||||||
@survey.update_total_weight
|
@survey.update_total_weight
|
||||||
|
if @survey.need_assign_color && @survey.need_update_color
|
||||||
|
@survey.update_answers_color
|
||||||
|
end
|
||||||
|
end
|
||||||
if params[:et] == "result"
|
if params[:et] == "result"
|
||||||
format.html { redirect_to(set_answers_admin_survey_path(@survey.id)) }
|
format.html { redirect_to(set_answers_admin_survey_path(@survey.id)) }
|
||||||
else
|
else
|
||||||
|
|
@ -262,7 +267,6 @@ class Admin::SurveysController < OrbitAdminController
|
||||||
format.xml { render :xml => @survey, :status => :created, :location => @new_survey }
|
format.xml { render :xml => @survey, :status => :created, :location => @new_survey }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_survey
|
def set_survey
|
||||||
|
|
|
||||||
|
|
@ -257,6 +257,48 @@ class SurveysController < ApplicationController
|
||||||
@answer_model.scored_points = total
|
@answer_model.scored_points = total
|
||||||
@answer_model.individual_total = individual_total
|
@answer_model.individual_total = individual_total
|
||||||
@answer_model.consent_used = answer[:consent_used]
|
@answer_model.consent_used = answer[:consent_used]
|
||||||
|
if @survey.need_assign_color
|
||||||
|
tmp_result_criteria = @survey.result_criteria.map{|c| {"q"=>c["questions"].map{|q| q.to_i},"r"=>c["range"].map{|r| r.to_i},"c"=>c["color"].blank? ? '#ffffff' : c["color"],"t"=>c["type"].to_i}}
|
||||||
|
survey_questions_count = @survey.survey_questions.count
|
||||||
|
weight_relations = @survey.survey_questions.map{|q| [q.id.to_s,(q.weight.nil? ? 1 : q.weight)]}.to_h
|
||||||
|
if tmp_result_criteria.select{|criteria| (criteria["q"][0] != 1 || criteria["q"][1] != survey_questions_count rescue true)}.count != 0
|
||||||
|
answer_model_attrs = answer
|
||||||
|
tmp_result_criteria.each do |c|
|
||||||
|
total_weight = 0
|
||||||
|
range = (c["r"].count != 2 ? [0,100] : c["r"])
|
||||||
|
questions = c["q"].map{|q| (q == 0 ? 0 : q - 1)}
|
||||||
|
total = 0
|
||||||
|
questions.each do |x|
|
||||||
|
if c["t"] == 1
|
||||||
|
k = weight_relations.keys[x]
|
||||||
|
if k && answer_model_attrs.has_key?(k)
|
||||||
|
total_weight += weight_relations[k]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
total += a.individual_total[x].to_i
|
||||||
|
end
|
||||||
|
if c["t"] == 0
|
||||||
|
if (range[0]..range[1]).cover?(total)
|
||||||
|
@answer_model.color = c["color"]
|
||||||
|
break
|
||||||
|
end
|
||||||
|
else
|
||||||
|
avg = (total / total_weight rescue 0)
|
||||||
|
if (range[0]..range[1]).cover?(avg)
|
||||||
|
@answer_model.color = c["color"]
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
tmp_result_criteria.each do |c|
|
||||||
|
if (c["r"][0]..c["r"][1]).cover?(@answer_model.scored_points)
|
||||||
|
@answer_model.color = c["color"]
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@answer_model.save!
|
@answer_model.save!
|
||||||
params[:url] = params[:show_page_url]
|
params[:url] = params[:show_page_url]
|
||||||
OrbitHelper.set_params(params,current_user)
|
OrbitHelper.set_params(params,current_user)
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ class QuestionnaireSurvey
|
||||||
include OrbitCategory::Categorizable
|
include OrbitCategory::Categorizable
|
||||||
|
|
||||||
scope :can_display, ->{where(is_hidden: false)}
|
scope :can_display, ->{where(is_hidden: false)}
|
||||||
|
field :need_assign_color, :type => Boolean, :default => false
|
||||||
|
field :need_update_color, :type => Boolean, :default => false
|
||||||
field :enable_consent_feature, :type => Boolean, :default => false
|
field :enable_consent_feature, :type => Boolean, :default => false
|
||||||
field :consent_contents, :type => String, :default => "", :localize => true
|
field :consent_contents, :type => String, :default => "", :localize => true
|
||||||
field :already_fix_data, :type => Boolean, :default => false
|
field :already_fix_data, :type => Boolean, :default => false
|
||||||
|
|
@ -51,7 +53,7 @@ class QuestionnaireSurvey
|
||||||
|
|
||||||
accepts_nested_attributes_for :survey_questions, :allow_destroy => true
|
accepts_nested_attributes_for :survey_questions, :allow_destroy => true
|
||||||
|
|
||||||
before_save :check_deadline#, :update_avliable_language
|
before_save :check_deadline, :check_need_update #, :update_avliable_language
|
||||||
|
|
||||||
has_many :survey_paginations, :autosave => true, :dependent => :destroy
|
has_many :survey_paginations, :autosave => true, :dependent => :destroy
|
||||||
accepts_nested_attributes_for :survey_paginations, :allow_destroy => true
|
accepts_nested_attributes_for :survey_paginations, :allow_destroy => true
|
||||||
|
|
@ -63,6 +65,71 @@ class QuestionnaireSurvey
|
||||||
self.updated_at = DateTime.now
|
self.updated_at = DateTime.now
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
def check_need_update
|
||||||
|
if self.result_criteria_changed?
|
||||||
|
old_colors = self.result_criteria_was.map{|c| c["color"].blank? ? '#ffffff' : c["color"]}
|
||||||
|
new_colors = self.result_criteria.map{|c| c["color"].blank? ? '#ffffff' : c["color"]}
|
||||||
|
new_colors_uniq_count = new_colors.uniq.count
|
||||||
|
self.need_assign_color = (new_colors_uniq_count > 1)
|
||||||
|
if old_colors != new_colors
|
||||||
|
self.need_update_color = true
|
||||||
|
elsif new_colors_uniq_count > 1
|
||||||
|
old_questions = self.result_criteria_was.map{|c| c["questions"]}
|
||||||
|
old_range = self.result_criteria_was.map{|c| c["range"]}
|
||||||
|
new_questions = self.result_criteria.map{|c| c["questions"]}
|
||||||
|
new_range = self.result_criteria.map{|c| c["range"]}
|
||||||
|
if old_questions != new_questions || old_range != new_range
|
||||||
|
self.need_update_color = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
def update_answers_color
|
||||||
|
puts "Updating answer's color"
|
||||||
|
tmp_result_criteria = self.result_criteria.map{|c| {"q"=>c["questions"].map{|q| q.to_i},"r"=>c["range"].map{|r| r.to_i},"c"=>c["color"].blank? ? '#ffffff' : c["color"],"t"=>c["type"].to_i}}
|
||||||
|
survey_questions_count = self.survey_questions.count
|
||||||
|
weight_relations = self.survey_questions.map{|q| [q.id.to_s,(q.weight.nil? ? 1 : q.weight)]}.to_h
|
||||||
|
if tmp_result_criteria.select{|criteria| (criteria["q"][0] != 1 || criteria["q"][1] != survey_questions_count rescue true)}.count != 0
|
||||||
|
self.survey_answers.each do |a|
|
||||||
|
answer_model_attrs = a.attributes
|
||||||
|
tmp_result_criteria.each do |c|
|
||||||
|
total_weight = 0
|
||||||
|
range = (c["r"].count != 2 ? [0,100] : c["r"])
|
||||||
|
questions = c["q"].map{|q| (q == 0 ? 0 : q - 1)}
|
||||||
|
total = 0
|
||||||
|
questions.each do |x|
|
||||||
|
if c["t"] == 1
|
||||||
|
k = weight_relations.keys[x]
|
||||||
|
if k && answer_model_attrs.has_key?(k)
|
||||||
|
total_weight += weight_relations[k]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
total += a.individual_total[x].to_i
|
||||||
|
end
|
||||||
|
if c["t"] == 0
|
||||||
|
if (range[0]..range[1]).cover?(total)
|
||||||
|
a.color = c["color"]
|
||||||
|
a.save
|
||||||
|
break
|
||||||
|
end
|
||||||
|
else
|
||||||
|
avg = (total / total_weight rescue 0)
|
||||||
|
if (range[0]..range[1]).cover?(avg)
|
||||||
|
a.color = c["color"]
|
||||||
|
a.save
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
tmp_result_criteria.each do |c|
|
||||||
|
range = (c["r"].count != 2 ? [0,100] : c["r"])
|
||||||
|
self.survey_answers.where(:scored_points.gte=>c["r"][0]).and(:scored_points.lte=>c["r"][1]).update_all(:color=>c["c"])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.update(:need_update_color=>false)
|
||||||
|
end
|
||||||
def get_answer_repeat
|
def get_answer_repeat
|
||||||
self.needs_login && self.answer_repeat
|
self.needs_login && self.answer_repeat
|
||||||
end
|
end
|
||||||
|
|
@ -120,7 +187,7 @@ class QuestionnaireSurvey
|
||||||
answers =(0...survey_answers.count).map{{}}
|
answers =(0...survey_answers.count).map{{}}
|
||||||
survey_answers.each_with_index do |answer,i|
|
survey_answers.each_with_index do |answer,i|
|
||||||
answers[i]["name"] = User.find(answer.user).member_name rescue ""
|
answers[i]["name"] = User.find(answer.user).member_name rescue ""
|
||||||
answers[i]["agree"] = I18n.t("survey.#{answer.consent_used}")
|
answers[i]["agree"] = I18n.t("self.#{answer.consent_used}")
|
||||||
end
|
end
|
||||||
SurveysHelper.set_locale(I18n.locale)
|
SurveysHelper.set_locale(I18n.locale)
|
||||||
survey_questions.each do |question|
|
survey_questions.each do |question|
|
||||||
|
|
@ -378,6 +445,7 @@ class QuestionnaireSurvey
|
||||||
end
|
end
|
||||||
def update_answer_score
|
def update_answer_score
|
||||||
if self.survey_questions.where(:need_update_score => true).count != 0
|
if self.survey_questions.where(:need_update_score => true).count != 0
|
||||||
|
self.update(:need_update_color=>true)
|
||||||
puts "Updating answer's scores"
|
puts "Updating answer's scores"
|
||||||
tmp_weights = []
|
tmp_weights = []
|
||||||
tmp_score_data = self.survey_questions.map do |question|
|
tmp_score_data = self.survey_questions.map do |question|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ class SurveyAnswer
|
||||||
field :avg_points, type: Integer
|
field :avg_points, type: Integer
|
||||||
field :individual_total, type: Array, :default => []
|
field :individual_total, type: Array, :default => []
|
||||||
field :select_question, type: Array, :default => []
|
field :select_question, type: Array, :default => []
|
||||||
|
field :color, type: String
|
||||||
belongs_to :questionnaire_survey
|
belongs_to :questionnaire_survey
|
||||||
after_create do
|
after_create do
|
||||||
if self.questionnaire_survey
|
if self.questionnaire_survey
|
||||||
|
|
|
||||||
|
|
@ -93,11 +93,21 @@
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
|
<% if @survey.need_assign_color %>
|
||||||
|
<% data = @survey_answers.order_by(:updated_at=>1).group_by(&:color).map{|k,sas| [k, sas.map{|sa| [sa.updated_at.to_i * 1000 , sa.scored_points ]} ] }.to_h %>
|
||||||
|
var min_time = <%= data.map{|k,d| d[0][0] rescue 0}.min %>;
|
||||||
|
var max_time = <%= data.map{|k,d| d[-1][0] rescue 0}.max %>;
|
||||||
|
<% all_data = data.values.flatten(1) %>
|
||||||
|
<% y_data = all_data.map{|v| v[1]} %>
|
||||||
|
var min_y = <%= y_data.min.to_i %>;
|
||||||
|
var max_y = <%= y_data.max.to_i %>;
|
||||||
|
<% else %>
|
||||||
<% data = @survey_answers.order_by(:updated_at=>1).map{|sa| [sa.updated_at.to_i * 1000 , sa.scored_points ]} %>
|
<% data = @survey_answers.order_by(:updated_at=>1).map{|sa| [sa.updated_at.to_i * 1000 , sa.scored_points ]} %>
|
||||||
var min_time = <%= data[0][0] rescue 0 %>;
|
var min_time = <%= data[0][0] rescue 0 %>;
|
||||||
var max_time = <%= data[-1][0] rescue 0 %>;
|
var max_time = <%= data[-1][0] rescue 0 %>;
|
||||||
var min_y = <%= data.map{|a| a[1]}.min.to_i %>;
|
var min_y = <%= data.map{|a| a[1]}.min.to_i %>;
|
||||||
var max_y = <%= data.map{|a| a[1]}.max.to_i %>;
|
var max_y = <%= data.map{|a| a[1]}.max.to_i %>;
|
||||||
|
<% end %>
|
||||||
var xaxes = [{
|
var xaxes = [{
|
||||||
mode: "time",
|
mode: "time",
|
||||||
axisLabelUseCanvas: false,
|
axisLabelUseCanvas: false,
|
||||||
|
|
@ -138,7 +148,8 @@
|
||||||
},
|
},
|
||||||
points: {
|
points: {
|
||||||
radius: 5,
|
radius: 5,
|
||||||
show: true
|
show: true,
|
||||||
|
fillColor: '#ffffff'
|
||||||
},
|
},
|
||||||
downsample: {
|
downsample: {
|
||||||
threshold: 0
|
threshold: 0
|
||||||
|
|
@ -158,8 +169,8 @@
|
||||||
interactive: true,
|
interactive: true,
|
||||||
enableTouch: true
|
enableTouch: true
|
||||||
},
|
},
|
||||||
colors: ["#708fff","#ffc107","#96478c","#1e7e34"],
|
colors: ["#708fff"], //["#708fff","#ffc107","#96478c","#1e7e34"],
|
||||||
polycolors: ["#3f66f4","#ffc107","#dc3545","#1e7e34"],
|
polycolors: ["#3f66f4"],//["#3f66f4","#ffc107","#dc3545","#1e7e34"],
|
||||||
// legend: {
|
// legend: {
|
||||||
// show: true,
|
// show: true,
|
||||||
// noColumns: 1
|
// noColumns: 1
|
||||||
|
|
@ -168,8 +179,33 @@
|
||||||
zero: false
|
zero: false
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
<% all_colors = @survey.result_criteria.map{|c| c["color"]}.select{|c| c.present?}.uniq %>
|
||||||
|
var points_fillColor = "#ffffff";
|
||||||
|
var need_split_data = false;
|
||||||
|
<% if all_colors.count == 1 %>
|
||||||
|
points_fillColor = "<%=all_colors[0]%>";
|
||||||
|
<% end %>
|
||||||
// options['legend']['container'] = $('.legend-container')[0];
|
// options['legend']['container'] = $('.legend-container')[0];
|
||||||
var chart_data = [{"label": "<%=@user.member_name rescue "NA" %>", "data": <%= data.to_json.html_safe %>}];
|
<% if @survey.need_assign_color %>
|
||||||
|
options["series"]["lines"]["show"] = false;
|
||||||
|
<% label_name = @user.member_name rescue "NA" %>
|
||||||
|
var chart_data = <%= ([{"label"=> label_name, "data"=> all_data,
|
||||||
|
"color"=> "#708fff",
|
||||||
|
"lines"=> {
|
||||||
|
"show"=> true,
|
||||||
|
"lineWidth"=> 2,
|
||||||
|
"steps"=> false ,
|
||||||
|
"is_sort"=> true
|
||||||
|
}}] + data.map{|color,d| tmp_color=(color.blank? ? "#ffffff" : color);{"label"=>label_name, "data"=>d, "color"=> (tmp_color == "#ffffff" ? "#708fff" : tmp_color), "points"=>{
|
||||||
|
"show"=> true,
|
||||||
|
"fillColor"=> tmp_color
|
||||||
|
}}}).to_json.html_safe %>;
|
||||||
|
<% else %>
|
||||||
|
var chart_data = [{"label": "<%=@user.member_name rescue "NA" %>", "data": <%= data.to_json.html_safe %>,"points": {
|
||||||
|
show: true,
|
||||||
|
fillColor: points_fillColor
|
||||||
|
}}];
|
||||||
|
<% end %>
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
var chart_height = $(window).outerWidth(true)*0.2;
|
var chart_height = $(window).outerWidth(true)*0.2;
|
||||||
$("#resultchart-container").height(chart_height).plot(chart_data,options);
|
$("#resultchart-container").height(chart_height).plot(chart_data,options);
|
||||||
|
|
@ -255,7 +291,7 @@
|
||||||
<% types << type %>
|
<% types << type %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<% if (criteria["range"][0].to_i..criteria["range"][1].to_i).cover?(total_criteria_score / total_weight) %>
|
<% if ((criteria["range"][0].to_i..criteria["range"][1].to_i).cover?(total_criteria_score / total_weight) rescue false) %>
|
||||||
<% tmp_msgs << criteria["msg"] %>
|
<% tmp_msgs << criteria["msg"] %>
|
||||||
<% types << type %>
|
<% types << type %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
||||||
|
|
@ -77,8 +77,8 @@
|
||||||
<% if @survey.result_criteria.blank? %>
|
<% if @survey.result_criteria.blank? %>
|
||||||
<div class="criteria-block">
|
<div class="criteria-block">
|
||||||
<div class="criteria" style="margin-left:0px;display:block;">
|
<div class="criteria" style="margin-left:0px;display:block;">
|
||||||
<label style="padding-left:0px;" for="" class="radio inline"> Question from : <input name="questionnaire_survey[result_criteria][0][questions][]" class="span1" max="<%= @surveysurvey_questionscount %>" type="number" min="1"></label>
|
<label style="padding-left:0px;" for="" class="radio inline"> Question from : <input name="questionnaire_survey[result_criteria][0][questions][]" class="span1" max="<%= @surveysurvey_questionscount %>" type="number" min="1" value="1"></label>
|
||||||
<label for="" class="radio inline"> Question to : <input name="questionnaire_survey[result_criteria][0][questions][]" class="span1" min="1" max="<%= @survey.survey_questions.count %>" type="number"></label>
|
<label for="" class="radio inline"> Question to : <input name="questionnaire_survey[result_criteria][0][questions][]" class="span1" min="1" max="<%= @survey.survey_questions.count %>" value="<%= @survey.survey_questions.count %>" type="number"></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="criteria" style="margin-left:0px;display:block;">
|
<div class="criteria" style="margin-left:0px;display:block;">
|
||||||
<label style="padding-left:0px;" for="" class="radio inline"> Type : <select name="questionnaire_survey[result_criteria][0][type]">
|
<label style="padding-left:0px;" for="" class="radio inline"> Type : <select name="questionnaire_survey[result_criteria][0][type]">
|
||||||
|
|
@ -107,13 +107,16 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
</select></label>
|
</select></label>
|
||||||
</div>
|
</div>
|
||||||
<div class="criteria" style="margin-left:0px;display:block;margin-bottom:50px;">
|
<div class="criteria" style="margin-left:0px;display:block;">
|
||||||
<label style="padding-left:0px;" for="" class="radio inline"> From : <input name="questionnaire_survey[result_criteria][<%= idx %>][range][]" class="span1" max="<%= @survey.total_points %>" type="number" value="<%= criteria["range"][0] rescue "" %>"></label>
|
<label style="padding-left:0px;" for="" class="radio inline"> From : <input name="questionnaire_survey[result_criteria][<%= idx %>][range][]" class="span1" max="<%= @survey.total_points %>" type="number" value="<%= criteria["range"][0] rescue "" %>"></label>
|
||||||
<label for="" class="radio inline"> To : <input name="questionnaire_survey[result_criteria][<%= idx %>][range][]" class="span1" max="<%= @survey.total_points %>" type="number" value="<%= criteria["range"][1] rescue "" %>"></label>
|
<label for="" class="radio inline"> To : <input name="questionnaire_survey[result_criteria][<%= idx %>][range][]" class="span1" max="<%= @survey.total_points %>" type="number" value="<%= criteria["range"][1] rescue "" %>"></label>
|
||||||
<% if idx != 0 %>
|
<% if idx != 0 %>
|
||||||
<a href="" style="margin-left:5px;" class="btn btn-danger delete-critera"><i class="icon icon-trash"></i></a>
|
<a href="" style="margin-left:5px;" class="btn btn-danger delete-critera"><i class="icon icon-trash"></i></a>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="criteria" style="margin-left:0px;display:block;margin-bottom:50px;">
|
||||||
|
<label style="padding-left:0px;" for="" class="radio inline"> Color : <input type="color" name="questionnaire_survey[result_criteria][<%= idx %>][color]" value="<%=criteria["color"].blank? ? "#ffffff" : criteria["color"] %>"></label>
|
||||||
|
</div>
|
||||||
<div class="criteria">
|
<div class="criteria">
|
||||||
<label for="" class="radio inline">
|
<label for="" class="radio inline">
|
||||||
<textarea class="ckeditor" id="questionnaire_survey_result_criteria_<%= idx %>_msg" name="questionnaire_survey[result_criteria][<%= idx %>][msg]"><%= criteria["msg"] rescue "" %></textarea>
|
<textarea class="ckeditor" id="questionnaire_survey_result_criteria_<%= idx %>_msg" name="questionnaire_survey[result_criteria][<%= idx %>][msg]"><%= criteria["msg"] rescue "" %></textarea>
|
||||||
|
|
@ -144,11 +147,11 @@
|
||||||
$(".selectable[data-type=" + selectedOption.value + "]").removeClass("hide");
|
$(".selectable[data-type=" + selectedOption.value + "]").removeClass("hide");
|
||||||
}
|
}
|
||||||
var index = <%= @survey.result_criteria.count == 0 ? 1 : @survey.result_criteria.count + 1 %>,
|
var index = <%= @survey.result_criteria.count == 0 ? 1 : @survey.result_criteria.count + 1 %>,
|
||||||
html = '<div class="criteria-block"><div><label style="padding-left:0px;" for="" class="radio inline"> Questions from : <input name="questionnaire_survey[result_criteria][{index}][questions][]" class="span1" min="1" max="<%= @survey.survey_questions.count %>" type="number"></label><label for="" class="radio inline"> Questions to : <input name="questionnaire_survey[result_criteria][{index}][questions][]" class="span1" min="1" max="<%= @survey.survey_questions.count %>" type="number"></label></div><div data-critera-number="criteria_{index}" class="criteria" style="margin-left:0px;display:block;"><label style="padding-left:0px;" for="" class="radio inline"> Type : <select name="questionnaire_survey[result_criteria][{index}][type]">'
|
html = '<div class="criteria-block"><div><label style="padding-left:0px;" for="" class="radio inline"> Questions from : <input name="questionnaire_survey[result_criteria][{index}][questions][]" class="span1" min="1" max="<%= @survey.survey_questions.count %>" type="number" value="1"></label><label for="" class="radio inline"> Questions to : <input name="questionnaire_survey[result_criteria][{index}][questions][]" class="span1" min="1" max="<%= @survey.survey_questions.count %>" type="number" value="<%= @survey.survey_questions.count %>"></label></div><div data-critera-number="criteria_{index}" class="criteria" style="margin-left:0px;display:block;"><label style="padding-left:0px;" for="" class="radio inline"> Type : <select name="questionnaire_survey[result_criteria][{index}][type]">'
|
||||||
<% [0,1].each do |i| %>
|
<% [0,1].each do |i| %>
|
||||||
html += '<option value="<%=i%>"><%=t("survey.type.#{i}")%></option>'
|
html += '<option value="<%=i%>"><%=t("survey.type.#{i}")%></option>'
|
||||||
<% end %>
|
<% end %>
|
||||||
html += '</select></label></div><div data-critera-number="criteria_{index}" class="criteria" style="width:800px;"><label style="padding-left:0px;" for="" class="radio inline"> From : <input name="questionnaire_survey[result_criteria][{index}][range][]" class="span1" max="<%= @survey.total_points %>" type="number"></label><label for="" class="radio inline"> To : <input name="questionnaire_survey[result_criteria][{index}][range][]" class="span1" max="<%= @survey.total_points %>" type="number"></label><a href="" style="margin-left:5px;" class="btn btn-primary delete-critera"><i class="icon icon-trash"></i></a><span class="radio inline">Save to add text</span></div></div>';
|
html += '</select></label></div><div data-critera-number="criteria_{index}" class="criteria" style="width:800px;"><label style="padding-left:0px;" for="" class="radio inline"> From : <input name="questionnaire_survey[result_criteria][{index}][range][]" class="span1" max="<%= @survey.total_points %>" type="number"></label><label for="" class="radio inline"> To : <input name="questionnaire_survey[result_criteria][{index}][range][]" class="span1" max="<%= @survey.total_points %>" type="number"></label><a href="" style="margin-left:5px;" class="btn btn-primary delete-critera"><i class="icon icon-trash"></i></a><span class="radio inline">Save to add text</span></div><div class="criteria" style="margin-left:0px;display:block;"><label style="padding-left:0px;" for="" class="radio inline"> Color : <input type="color" name="questionnaire_survey[result_criteria][{index}][color]" value="#ffffff"></label></div></div>';
|
||||||
|
|
||||||
$("#add-criteria").on("click",function(){
|
$("#add-criteria").on("click",function(){
|
||||||
var newhtml = html.replace(/{index}/g,index);
|
var newhtml = html.replace(/{index}/g,index);
|
||||||
|
|
|
||||||
|
|
@ -76,11 +76,21 @@
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
|
<% if @survey.need_assign_color %>
|
||||||
|
<% data = @survey_answers.order_by(:updated_at=>1).group_by(&:color).map{|k,sas| [k, sas.map{|sa| [sa.updated_at.to_i * 1000 , sa.scored_points ]} ] }.to_h %>
|
||||||
|
var min_time = <%= data.map{|k,d| d[0][0] rescue 0}.min %>;
|
||||||
|
var max_time = <%= data.map{|k,d| d[-1][0] rescue 0}.max %>;
|
||||||
|
<% all_data = data.values.flatten(1) %>
|
||||||
|
<% y_data = all_data.map{|v| v[1]} %>
|
||||||
|
var min_y = <%= y_data.min.to_i %>;
|
||||||
|
var max_y = <%= y_data.max.to_i %>;
|
||||||
|
<% else %>
|
||||||
<% data = @survey_answers.order_by(:updated_at=>1).map{|sa| [sa.updated_at.to_i * 1000 , sa.scored_points ]} %>
|
<% data = @survey_answers.order_by(:updated_at=>1).map{|sa| [sa.updated_at.to_i * 1000 , sa.scored_points ]} %>
|
||||||
var min_time = <%= data[0][0] rescue 0 %>;
|
var min_time = <%= data[0][0] rescue 0 %>;
|
||||||
var max_time = <%= data[-1][0] rescue 0 %>;
|
var max_time = <%= data[-1][0] rescue 0 %>;
|
||||||
var min_y = <%= data.map{|a| a[1]}.min.to_i %>;
|
var min_y = <%= data.map{|a| a[1]}.min.to_i %>;
|
||||||
var max_y = <%= data.map{|a| a[1]}.max.to_i %>;
|
var max_y = <%= data.map{|a| a[1]}.max.to_i %>;
|
||||||
|
<% end %>
|
||||||
var xaxes = [{
|
var xaxes = [{
|
||||||
mode: "time",
|
mode: "time",
|
||||||
axisLabelUseCanvas: false,
|
axisLabelUseCanvas: false,
|
||||||
|
|
@ -121,7 +131,8 @@
|
||||||
},
|
},
|
||||||
points: {
|
points: {
|
||||||
radius: 5,
|
radius: 5,
|
||||||
show: true
|
show: true,
|
||||||
|
fillColor: '#ffffff'
|
||||||
},
|
},
|
||||||
downsample: {
|
downsample: {
|
||||||
threshold: 0
|
threshold: 0
|
||||||
|
|
@ -141,8 +152,8 @@
|
||||||
interactive: true,
|
interactive: true,
|
||||||
enableTouch: true
|
enableTouch: true
|
||||||
},
|
},
|
||||||
colors: ["#708fff","#ffc107","#96478c","#1e7e34"],
|
colors: ["#708fff"], //["#708fff","#ffc107","#96478c","#1e7e34"],
|
||||||
polycolors: ["#3f66f4","#ffc107","#dc3545","#1e7e34"],
|
polycolors: ["#3f66f4"],//["#3f66f4","#ffc107","#dc3545","#1e7e34"],
|
||||||
// legend: {
|
// legend: {
|
||||||
// show: true,
|
// show: true,
|
||||||
// noColumns: 1
|
// noColumns: 1
|
||||||
|
|
@ -151,8 +162,33 @@
|
||||||
zero: false
|
zero: false
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
<% all_colors = @survey.result_criteria.map{|c| c["color"]}.select{|c| c.present?}.uniq %>
|
||||||
|
var points_fillColor = "#ffffff";
|
||||||
|
var need_split_data = false;
|
||||||
|
<% if all_colors.count == 1 %>
|
||||||
|
points_fillColor = "<%=all_colors[0]%>";
|
||||||
|
<% end %>
|
||||||
// options['legend']['container'] = $('.legend-container')[0];
|
// options['legend']['container'] = $('.legend-container')[0];
|
||||||
var chart_data = [{"label": "<%=@user.member_name rescue "NA" %>", "data": <%= data.to_json.html_safe %>}];
|
<% if @survey.need_assign_color %>
|
||||||
|
options["series"]["lines"]["show"] = false;
|
||||||
|
<% label_name = @user.member_name rescue "NA" %>
|
||||||
|
var chart_data = <%= ([{"label"=> label_name, "data"=> all_data,
|
||||||
|
"color"=> "#708fff",
|
||||||
|
"lines"=> {
|
||||||
|
"show"=> true,
|
||||||
|
"lineWidth"=> 2,
|
||||||
|
"steps"=> false ,
|
||||||
|
"is_sort"=> true
|
||||||
|
}}] + data.map{|color,d| tmp_color=(color.blank? ? "#ffffff" : color);{"label"=>label_name, "data"=>d, "color"=> (tmp_color == "#ffffff" ? "#708fff" : tmp_color), "points"=>{
|
||||||
|
"show"=> true,
|
||||||
|
"fillColor"=> tmp_color
|
||||||
|
}}}).to_json.html_safe %>;
|
||||||
|
<% else %>
|
||||||
|
var chart_data = [{"label": "<%=@user.member_name rescue "NA" %>", "data": <%= data.to_json.html_safe %>,"points": {
|
||||||
|
show: true,
|
||||||
|
fillColor: points_fillColor
|
||||||
|
}}];
|
||||||
|
<% end %>
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
var chart_height = $(window).outerWidth(true)*0.2;
|
var chart_height = $(window).outerWidth(true)*0.2;
|
||||||
$("#resultchart-container").height(chart_height).plot(chart_data,options);
|
$("#resultchart-container").height(chart_height).plot(chart_data,options);
|
||||||
|
|
@ -239,7 +275,7 @@
|
||||||
<% types << type %>
|
<% types << type %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<% if (criteria["range"][0].to_i..criteria["range"][1].to_i).cover?(total_criteria_score / total_weight) %>
|
<% if ((criteria["range"][0].to_i..criteria["range"][1].to_i).cover?(total_criteria_score / total_weight) rescue false) %>
|
||||||
<% tmp_msgs << criteria["msg"] %>
|
<% tmp_msgs << criteria["msg"] %>
|
||||||
<% types << type %>
|
<% types << type %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue