diff --git a/app/controllers/admin/events_controller.rb b/app/controllers/admin/events_controller.rb index a9f3de5c..5c486b50 100644 --- a/app/controllers/admin/events_controller.rb +++ b/app/controllers/admin/events_controller.rb @@ -11,8 +11,51 @@ class Admin::EventsController < ApplicationController def index @events = @conference.events @tracks = @conference.tracks - @event_states = @events.state_machine.states.map + @machine_states = @events.state_machine.states.map @event_types = @conference.event_types + + @mystates = [] + @mytypes = [] + @eventstats = Hash.new + statelength = 0 + @totallength = 0 + + @machine_states.each do |mystate| + length = 0 + events_mystate= @events.where("state" => mystate.name) + if events_mystate.count > 0 + @mystates << mystate + events_mystate.each do |myevent| + length += myevent.event_type.length + end + @eventstats["#{mystate.name}"] = {"count" => events_mystate.count, "length" => length} + end + end + + @event_types.each do |mytype| + events_mytype = @events.where("event_type_id" => mytype.id) + if events_mytype.count > 0 + @mytypes << mytype + end + end + @mytypes.each do |mytype| + @mystates.each do |mystate| + events_mytype = @events.where("event_type_id" => mytype.id) + events_mytype_mystate= events_mytype.where("state" => mystate.name) + typelength = 0 + if events_mytype_mystate.count > 0 + events_mytype_mystate.each do |myevent| + typelength += myevent.event_type.length + @totallength += myevent.event_type.length + end + @eventstats[mytype.title] = {"count" => events_mytype.count, "length" => events_mytype.count * mytype.length} if @eventstats[mytype.title] == nil + tmp = {"#{mystate.name}" => {"type_state_count" => events_mytype_mystate.count, "type_state_length" => typelength}} + @eventstats[mytype.title].merge!(tmp) + end + end + end + @eventstats["totallength"] = @totallength + respond_to do |format| format.html # Explicity call #to_json to avoid the use of EventSerializer @@ -77,7 +120,7 @@ class Admin::EventsController < ApplicationController expire_page :controller => '/schedule', :action => :index redirect_to(admin_conference_events_path(:conference_id => @conference.short_title), :notice => "Updated state") end - + def vote event = Event.find(params[:id]) diff --git a/app/views/admin/events/_events_stats.html.haml b/app/views/admin/events/_events_stats.html.haml new file mode 100644 index 00000000..84a0979f --- /dev/null +++ b/app/views/admin/events/_events_stats.html.haml @@ -0,0 +1,51 @@ +.row-fluid + .row + .span12 + %h5{:style=>"text-align: right"} + = link_to "Events Stats", "#", :id => "events-stats-link", :class => "btn btn-success" + + #events-stats + .span12 + %table.table.table-bordered.table-striped + %thead + %th + - @mystates.each do |state| + %th{:colspan => 2, :style => "text-align:center"} + State "#{state.name}" + %th{:colspan => 2, :style => "text-align:center"} + Total + %br + No & Time + + %tr + %td + %b Total + - @mystates.each do |mystate| + %td + %b + = @eventstats["#{mystate.name}"]["count"] + %td + %b + #{@eventstats["#{mystate.name}"]["length"] / 60} h #{@eventstats["#{mystate.name}"]["length"] - @eventstats["#{mystate.name}"]["length"] / 60 * 60} m + %td + %b= @events.count + %td + %b= show_time(@eventstats["totallength"]) + + - @mytypes.each do |mytype| + %tr + %td= "#{mytype.title} (#{show_time(mytype.length)})" + - @mystates.each do |mystate| + %td= @eventstats["#{mytype.title}"]["#{mystate.name}"]["type_state_count"] unless @eventstats["#{mytype.title}"]["#{mystate.name}"] == nil + %td= show_time(@eventstats["#{mytype.title}"]["#{mystate.name}"]["type_state_length"]) unless @eventstats["#{mytype.title}"]["#{mystate.name}"] == nil + %td= @eventstats["#{mytype.title}"]["count"] + %td= show_time(@eventstats["#{mytype.title}"]["length"]) + + +:javascript + $(document).ready( function() { + $("#events-stats").hide(); + $("#events-stats-link").click(function() { + $("#events-stats").toggle(); + }); + }); \ No newline at end of file diff --git a/app/views/admin/events/index.html.haml b/app/views/admin/events/index.html.haml index c37d3906..58ec1b5f 100644 --- a/app/views/admin/events/index.html.haml +++ b/app/views/admin/events/index.html.haml @@ -1,90 +1,4 @@ -.row-fluid - .span - .row - %h5{:style=>"text-align: right"} - = link_to "Events Stats", "#", :id => "events-stats-link", :class => "btn btn-success" - #events-stats - %table.table.table-bordered.table-striped - - %thead - %th - - @event_states.each do |state| - - totalstate = @events.where("state = ?", state.name).count - - if totalstate > 0 - %th{:colspan => 2, :style => "text-align:center"} - Type "#{state.name}" - %th{:colspan => 2, :style => "text-align:center"} - Total - %br - No & Time - - %tr - %td - %b Total - - @event_states.each do |state| - - totalstate = @events.where("state = ?", state.name).count - - if totalstate > 0 - %td - %b= totalstate - %td - - length = 0 - - @events.where("state = ?", state.name).each do |event| - - length += event.event_type.length - - length_hour = length / 60 - %b - #{length_hour} h #{length-(length_hour*60)} m - %td - %b= @events.count - %td - - length = 0 - - @events.each do |event| - - length += event.event_type.length - - length_hour = length / 60 - %b - = length_hour - h - %b - = length-(length_hour*60) - m - - - @conference.event_types.each do |type| - %tr - %td - %b= type.title - - @event_states.each do |state| - - totalstate = @events.where("state = ?", state.name).count - - if totalstate > 0 - %td - - var = @events.where("event_type_id = ? AND state = ?", type.id, state.name) - - if var.count == 0 - - - - else - = var.count - - length = 0 - %td - - var.each do |e| - - length += e.event_type.length - - hour = length / 60 - - min = length-(hour*60) - - - if hour == 0 && min == 0 - - - - else - = hour - h - = min - m - %td - = @events.where("event_type_id = ?", type.id).count - %td - - length = 0 - - @events.where("event_type_id = ?", type.id).each do |event| - - length += event.event_type.length - - length_hour = length / 60 - = length_hour - h - = length-(length_hour*60) - m += render :partial => "events_stats" .row-fluid .span12 @@ -211,10 +125,3 @@ "bPaginate": false } ); } ); - - $(document).ready( function() { - $("#events-stats").hide(); - $("#events-stats-link").click(function() { - $("#events-stats").toggle(); - }); - });