diff --git a/Pearlception/app/assets/javascripts/statistics.js b/Pearlception/app/assets/javascripts/statistics.js index 5647c58..1911156 100644 --- a/Pearlception/app/assets/javascripts/statistics.js +++ b/Pearlception/app/assets/javascripts/statistics.js @@ -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; } \ No newline at end of file diff --git a/Pearlception/app/controllers/statistics_controller.rb b/Pearlception/app/controllers/statistics_controller.rb index d03658b..10b2ce4 100644 --- a/Pearlception/app/controllers/statistics_controller.rb +++ b/Pearlception/app/controllers/statistics_controller.rb @@ -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 diff --git a/Pearlception/app/views/statistics/index.html.erb b/Pearlception/app/views/statistics/index.html.erb index d908968..3e4c4ed 100644 --- a/Pearlception/app/views/statistics/index.html.erb +++ b/Pearlception/app/views/statistics/index.html.erb @@ -48,8 +48,6 @@
-
- <%= csrf_meta_tag %>

From:

@@ -58,10 +56,9 @@

To:

- +
-
diff --git a/migrations/createDummyData.rb b/migrations/createDummyData.rb new file mode 100644 index 0000000..b932fba --- /dev/null +++ b/migrations/createDummyData.rb @@ -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 diff --git a/migrations/grade.rb b/migrations/grade.rb new file mode 100644 index 0000000..60fb844 --- /dev/null +++ b/migrations/grade.rb @@ -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 diff --git a/migrate.rb b/migrations/migrate.rb similarity index 100% rename from migrate.rb rename to migrations/migrate.rb