git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8026 e93f8b46-1217-0410-a6f0-8f06a7374b81
83 lines
2.7 KiB
Ruby
83 lines
2.7 KiB
Ruby
class TimeEntryReportsController < ApplicationController
|
|
menu_item :issues
|
|
before_filter :find_optional_project
|
|
|
|
helper :sort
|
|
include SortHelper
|
|
helper :issues
|
|
helper :timelog
|
|
include TimelogHelper
|
|
helper :custom_fields
|
|
include CustomFieldsHelper
|
|
|
|
def report
|
|
retrieve_date_range
|
|
@report = Redmine::Helpers::TimeReport.new(@project, @issue, params[:criteria], params[:columns], @from, @to)
|
|
|
|
respond_to do |format|
|
|
format.html { render :layout => !request.xhr? }
|
|
format.csv { send_data(report_to_csv(@report), :type => 'text/csv; header=present', :filename => 'timelog.csv') }
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
# TODO: duplicated in TimelogController
|
|
def find_optional_project
|
|
if !params[:issue_id].blank?
|
|
@issue = Issue.find(params[:issue_id])
|
|
@project = @issue.project
|
|
elsif !params[:project_id].blank?
|
|
@project = Project.find(params[:project_id])
|
|
end
|
|
deny_access unless User.current.allowed_to?(:view_time_entries, @project, :global => true)
|
|
end
|
|
|
|
# Retrieves the date range based on predefined ranges or specific from/to param dates
|
|
# TODO: duplicated in TimelogController
|
|
def retrieve_date_range
|
|
@free_period = false
|
|
@from, @to = nil, nil
|
|
|
|
if params[:period_type] == '1' || (params[:period_type].nil? && !params[:period].nil?)
|
|
case params[:period].to_s
|
|
when 'today'
|
|
@from = @to = Date.today
|
|
when 'yesterday'
|
|
@from = @to = Date.today - 1
|
|
when 'current_week'
|
|
@from = Date.today - (Date.today.cwday - 1)%7
|
|
@to = @from + 6
|
|
when 'last_week'
|
|
@from = Date.today - 7 - (Date.today.cwday - 1)%7
|
|
@to = @from + 6
|
|
when '7_days'
|
|
@from = Date.today - 7
|
|
@to = Date.today
|
|
when 'current_month'
|
|
@from = Date.civil(Date.today.year, Date.today.month, 1)
|
|
@to = (@from >> 1) - 1
|
|
when 'last_month'
|
|
@from = Date.civil(Date.today.year, Date.today.month, 1) << 1
|
|
@to = (@from >> 1) - 1
|
|
when '30_days'
|
|
@from = Date.today - 30
|
|
@to = Date.today
|
|
when 'current_year'
|
|
@from = Date.civil(Date.today.year, 1, 1)
|
|
@to = Date.civil(Date.today.year, 12, 31)
|
|
end
|
|
elsif params[:period_type] == '2' || (params[:period_type].nil? && (!params[:from].nil? || !params[:to].nil?))
|
|
begin; @from = params[:from].to_s.to_date unless params[:from].blank?; rescue; end
|
|
begin; @to = params[:to].to_s.to_date unless params[:to].blank?; rescue; end
|
|
@free_period = true
|
|
else
|
|
# default
|
|
end
|
|
|
|
@from, @to = @to, @from if @from && @to && @from > @to
|
|
@from ||= (TimeEntry.earilest_date_for_project(@project) || Date.today)
|
|
@to ||= (TimeEntry.latest_date_for_project(@project) || Date.today)
|
|
end
|
|
end
|