got date filtering js functionality working

This commit is contained in:
cole m alban 2017-04-05 18:18:24 -04:00
parent 13b4fdb59b
commit 099bd6b8c1
6 changed files with 109 additions and 17 deletions

View File

@ -4,23 +4,40 @@ Set up both the datepicker tabs with this
$('#from_datepicker').datepicker()
$('#to_datepicker').datepicker()
$('#dateFilterButton').on('click',function(){
var fromDate = $('#from_datepicker')[0].value;
var toDate = $('#to_datepicker')[0].value;
var queryString = "";
if(fromDate != "" && toDate != ""){
queryString = "statistics.json/?from_date="+encodeURI(fromDate)+"&to_date="+encodeURI(toDate);
}
else{
queryString = "statistics.json"
}
$.get(queryString, function(gradeData){
constructGradesGraph(gradeData);
})
});
$(document).ready(
$.get("statistics.json", function(gradeData){
constructGradesGraph(gradeData);
})
);
)
function constructGradesGraph(gradeData){
console.log(gradeData)
var labels = generateLabels(gradeData);
var colors = generateColors(gradeData);
var gradeCounts = getGradeCounts(labels, gradeData);
var ctx = document.getElementById("gradesChart");
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: generateLabels(gradeData),
labels: labels,
datasets: [{
label: 'Count for each grade',
data: getGradeCount(gradeData),
data: gradeCounts,
backgroundColor: colors,
borderColor: colors,
borderWidth: 1
@ -38,6 +55,25 @@ function constructGradesGraph(gradeData){
});
}
function getGradeCounts(labels, gradeData){
var counts = initCountArray(labels);
var oysters = gradeData.allOysters;
for(var i = 0; i < oysters.length; i++){
var grade = oysters[i].grade;
counts[labels.indexOf(grade)]++;
}
console.log(counts);
return counts;
}
function initCountArray(labels){
counts = [];
for(var i = 0; i < labels.length; i++){
counts.push(0)
}
return counts;
}
function generateLabels(gradeData){
let grades = gradeData.grades;
labels = [];
@ -63,12 +99,4 @@ function generateColors(gradeData){
colors.push(color);
}
return colors;
}
function getGradeCount(gradeData){
counts = [];
for(var i = 0; i < gradeData.grades.length; i++){
counts.push(Math.random() * 100);
}
return counts;
}

View File

@ -1,7 +1,6 @@
class StatisticsController < ApplicationController
def index
puts Grade.all
if params[:from_date] != nil && params[:to_date] != nil
from_date = Date.strptime(params[:from_date], '%m/%d/%Y')
to_date = Date.strptime(params[:to_date], '%m/%d/%Y')
@ -9,9 +8,18 @@ class StatisticsController < ApplicationController
else
runs = Run.all
end
puts runs.inspect
oysterData = []
all_oysters = []
runs.each do |run|
oysters = Oyster.where(run_id: run.id).to_a
data = {"run": run, "oysters": oysters}
oysterData.push(data)
all_oysters.concat(oysters)
end
respond_to do |f|
f.html
f.json {render :json => {grades:Grade.all,runData:runs}}
f.json {render :json => {grades:Grade.all,oysterData:oysterData,allOysters:all_oysters}}
end
end
end

View File

@ -48,8 +48,6 @@
</div>
</div>
<div class="row">
<form action="/statistics?name=cole">
<%= csrf_meta_tag %>
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<div class="col-md-2">
<p>From: <input type="text" id="from_datepicker" name="from_date"></p>
@ -58,10 +56,9 @@
<p>To: <input type="text" id="to_datepicker" name="to_date"></p>
</div>
<div class="col-md-2">
<button class="btn btn-primary" type="submit">Filter</button>
<button class="btn btn-primary" id="dateFilterButton">Filter</button>
</div>
</div>
</form>
</div>
<div class="row">
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">

View File

@ -0,0 +1,35 @@
require 'mysql2'
require 'active_record'
ActiveRecord::Base.establish_connection(
adapter: 'mysql2',
host: 'localhost',
database: 'development_HoopersIsland',
username: 'bmv',
password: '1156244terps!'
)
class Grade < ActiveRecord::Base
end
class Oyster < ActiveRecord::Base
end
class Run < ActiveRecord::Base
end
runs = Run.all
grades = Grade.all.to_a
runs.each do |run|
20.times do
len = rand(0..10)
width = rand(0..10)
height = rand(0..10)
vol = len * width * height
oyster = Oyster.new(run_id: run.id, grade: grades[rand(0...grades.length)].Full_name,volume:vol, length:len, width:width, height:height)
oyster.save
end
end

24
migrations/grade.rb Normal file
View File

@ -0,0 +1,24 @@
#A class to represent a grade
class Grade
def initialize(params)
@id = params["grade_id"]
@full_name = params["Full_Name"] || "NULL"
@short_name = params["Short_Name"] || "NULL"
@volume_max = params["Volume_max"] || 0
@volume_min = params["Volume_min"] || 0
@length_max = params["Length_max"] || 0
@length_min = params["Length_min"] || 0
@width_max = params["Width_max"] || 0
@width_min = params["Width_min"] || 0
@height_max = params["Height_max"] || 0
@height_min = params["Height_min"] || 0
end
def to_insert_query
"INSERT into grades (id, Full_Name, Short_Name, Volume_max, Volume_min, Length_max, Length_min, Width_max, Width_min, Height_max, Height_min,created_at,updated_at) VALUES
(#{@id},\"#{@full_name}\",\"#{@short_name}\",#{@volume_max},#{@volume_min},#{@length_max},#{@length_min},#{@width_max},#{@width_min},#{@height_max},#{@height_min},NOW(),NOW());"
end
end