Merge pull request #611 from shayonj/dashboard-status-minutes-fix

Fixing functions for minutes to hours conversion for dashboard
This commit is contained in:
Christian Bruckmayer 2015-03-16 12:20:51 +01:00
commit ff124632ef
3 changed files with 44 additions and 20 deletions

View file

@ -391,25 +391,43 @@ class Conference < ActiveRecord::Base
end end
## ##
# Calculates the overall programm hours # Calculates the overall program minutes
# #
# ====Returns # ====Returns
# * +hash+ -> Fixnum hours # * +hash+ -> Fixnum minutes
def current_program_hours def current_program_minutes
events_grouped = events.group(:event_type_id) events_grouped = events.group(:event_type_id)
events_counted = events_grouped.count events_counted = events_grouped.count
calculate_program_hours(events_grouped, events_counted) calculate_program_minutes(events_grouped, events_counted)
end end
## ##
# Calculates the overall programm hours since date # Calculates the overall program hours
# #
# ====Returns # ====Returns
# * +hash+ -> Fixnum hours # * +Fixnum+ -> Fixnum hours. Example: 1.5 gets rounded to 2. 1.3 gets rounded 1.
def new_program_hours(date) def current_program_hours
(current_program_minutes / 60.to_f).round
end
##
# Calculates the overall program minutes since date
#
# ====Returns
# * +hash+ -> Fixnum minutes
def new_program_minutes(date)
events_grouped = events.where('created_at > ?', date).group(:event_type_id) events_grouped = events.where('created_at > ?', date).group(:event_type_id)
events_counted = events_grouped.count events_counted = events_grouped.count
calculate_program_hours(events_grouped, events_counted) calculate_program_minutes(events_grouped, events_counted)
end
##
# Calculates the overall program hours since date
#
# ====Returns
# * +Fixnum+ -> Fixnum hours
def new_program_hours(date)
(new_program_minutes(date) / 60.to_f).round
end end
## ##
@ -816,11 +834,11 @@ class Conference < ActiveRecord::Base
end end
## ##
# Helper method to calculate the program hours. # Helper method to calculate the program minutes.
# #
# ====Returns # ====Returns
# * +Fixnums+ summed programm hours # * +Fixnums+ summed program minutes
def calculate_program_hours(events_grouped, events_counted) def calculate_program_minutes(events_grouped, events_counted)
result = 0 result = 0
events_grouped.each do |event| events_grouped.each do |event|
result += events_counted[event.event_type_id] * event.event_type.length result += events_counted[event.event_type_id] * event.event_type.length

View file

@ -34,7 +34,7 @@ class Target < ActiveRecord::Base
elsif unit == Target.units[:registrations] elsif unit == Target.units[:registrations]
numerator = conference.registrations.where('created_at < ?', due_date).count numerator = conference.registrations.where('created_at < ?', due_date).count
elsif unit == Target.units[:program_minutes] elsif unit == Target.units[:program_minutes]
numerator = conference.current_program_hours numerator = conference.current_program_minutes
end end
(numerator / target_count.to_f * 100).round(0).to_s (numerator / target_count.to_f * 100).round(0).to_s
end end
@ -51,7 +51,7 @@ class Target < ActiveRecord::Base
elsif unit == Target.units[:registrations] elsif unit == Target.units[:registrations]
numerator = campaign.registrations_count numerator = campaign.registrations_count
elsif unit == Target.units[:program_minutes] elsif unit == Target.units[:program_minutes]
numerator = conference.current_program_hours numerator = conference.current_program_minutes
end end
progress = (numerator / target_count.to_f * 100).round(0).to_s progress = (numerator / target_count.to_f * 100).round(0).to_s

20
spec/models/conference_spec.rb Normal file → Executable file
View file

@ -364,41 +364,47 @@ describe Conference do
end end
end end
describe 'program hours' do describe 'program hours and minutes' do
before(:each) do before(:each) do
@long = create(:event_type, length: 100) @long = create(:event_type, length: 100)
@short = create(:event_type, length: 10) @short = create(:event_type, length: 10)
end end
describe '#actual_program_hours' do describe '#actual_program_minutes' do
it 'calculates correct values with events' do it 'calculates correct values with events' do
create(:event, conference: subject, event_type: @long) create(:event, conference: subject, event_type: @long)
create(:event, conference: subject, event_type: @long) create(:event, conference: subject, event_type: @long)
create(:event, conference: subject, event_type: @short) create(:event, conference: subject, event_type: @short)
create(:event, conference: subject, event_type: @short) create(:event, conference: subject, event_type: @short)
result = 220 result_in_hours = 4
expect(subject.current_program_hours).to eq(result) result_in_minutes = 220
expect(subject.current_program_hours).to eq(result_in_hours)
expect(subject.current_program_minutes).to eq(result_in_minutes)
end end
it 'calculates correct values without events' do it 'calculates correct values without events' do
result = 0 result = 0
expect(subject.current_program_minutes).to eq(result)
expect(subject.current_program_hours).to eq(result) expect(subject.current_program_hours).to eq(result)
end end
end end
describe '#new_program_hours' do describe '#new_program_minutes' do
it 'calculates correct values with events' do it 'calculates correct values with events' do
create(:event, conference: subject, event_type: @long, created_at: Time.now - 3.days) create(:event, conference: subject, event_type: @long, created_at: Time.now - 3.days)
create(:event, conference: subject, event_type: @long) create(:event, conference: subject, event_type: @long)
create(:event, conference: subject, event_type: @short, created_at: Time.now - 3.days) create(:event, conference: subject, event_type: @short, created_at: Time.now - 3.days)
create(:event, conference: subject, event_type: @short) create(:event, conference: subject, event_type: @short)
result = 110 result_in_hours = 2
expect(subject.new_program_hours(Time.now - 5.minutes)).to eq(result) result_in_minutes = 110
expect(subject.new_program_hours(Time.now - 5.minutes)).to eq(result_in_hours)
expect(subject.new_program_minutes(Time.now - 5.minutes)).to eq(result_in_minutes)
end end
it 'calculates correct values without events' do it 'calculates correct values without events' do
result = 0 result = 0
expect(subject.new_program_minutes(Time.now - 5.minutes)).to eq(result)
expect(subject.new_program_hours(Time.now - 5.minutes)).to eq(result) expect(subject.new_program_hours(Time.now - 5.minutes)).to eq(result)
end end
end end