mdarby (owner)

Revisions

gist: 136072 Download_button fork
public
Public Clone URL: git://gist.github.com/136072.git
Embed All Files: show embed
Ruby #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
      @future_hours = groups.inject([]) do |group_stack, emp_group|
        conditions = []
        conditions << "employee_group_id = #{emp_group.id}"
        conditions << "activity_type IN #{activities.to_sql}" unless activities.blank?
 
        job_pool = Job.all(:conditions => "#{conditions.join(' and ')}", :include => [:hours_estimates, :phases])
        
        group_data = disciplines.inject([]) do |discipline_stack, discipline|
          available_hours = emp_group.employees_in_discipline(discipline).size * 160
          
          discipline_data = (0..@months).inject([]) do |monthly_stack, i|
            curr_date = @start_date + i.months
            
            estimated_hours = job_pool.inject(0.0) do |est_hours, job|
              estimates = job.hours_estimates.select{|he| he.discipline == discipline}
              percentage = job.percentage_elapsed_between_dates(curr_date, curr_date + 1.month)
 
              estimate = estimates.inject(0.0){|s,e| s += (e.hours * percentage);s}
              estimate = 0.0 if (estimate.nan? || estimate.infinite?)
 
              est_hours += estimate
            end
            
            monthly_stack << {:estimated_hours => estimated_hours, :available_hours => available_hours}
          end
          
          discipline_stack << {:discipline => discipline, :discipline_data => discipline_data}
        end
        
        group_stack << {:name => emp_group.name, :group_data => group_data}
      end
      
    end