OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/lib/open_project/costs/patches/issues_controller_patch.rb

74 lines
2.6 KiB

require_dependency 'issues_controller'
module OpenProject::Costs::Patches::IssuesControllerPatch
def self.included(base) # :nodoc:
base.send(:include, InstanceMethods)
base.class_eval do
alias_method_chain :show, :entries
alias_method_chain :destroy, :entries
helper :issues
end
end
module InstanceMethods
# Authorize the user for the requested action
def show_with_entries
@cost_entries = @issue.cost_entries.visible(User.current, @issue.project)
cost_entries_with_rate = @cost_entries.select{|c| c.costs_visible_by?(User.current)}
@material_costs = cost_entries_with_rate.blank? ? nil : cost_entries_with_rate.collect(&:real_costs).sum
@time_entries = @issue.time_entries.visible(User.current, @issue.project)
time_entries_with_rate = @time_entries.select{|c| c.costs_visible_by?(User.current)}
@labor_costs = time_entries_with_rate.blank? ? nil : time_entries_with_rate.collect(&:real_costs).sum
unless @material_costs.nil? && @labor_costs.nil?
@overall_costs = 0
@overall_costs += @material_costs unless @material_costs.nil?
@overall_costs += @labor_costs unless @labor_costs.nil?
else
@overall_costs = nil
end
show_without_entries
end
def destroy_with_entries
@entries = CostEntry.all(:conditions => ['issue_id IN (?)', @issues])
@hours = TimeEntry.sum(:hours, :conditions => ['issue_id IN (?)', @issues]).to_f
unless @entries.blank? && @hours == 0
case params[:todo]
when 'destroy'
# nothing to do
when 'nullify'
TimeEntry.update_all('issue_id = NULL', ['issue_id IN (?)', @issues])
CostEntry.update_all('issue_id = NULL', ['issue_id IN (?)', @issues])
when 'reassign'
reassign_to = @project.issues.find_by_id(params[:reassign_to_id])
if reassign_to.nil?
flash.now[:error] = l(:error_issue_not_found_in_project)
return
else
TimeEntry.update_all("issue_id = #{reassign_to.id}", ['issue_id IN (?)', @issues])
CostEntry.update_all("issue_id = #{reassign_to.id}", ['issue_id IN (?)', @issues])
end
else
unless params[:format] == 'xml'
# display the destroy form if it's a user request
return
end
end
end
@issues.each(&:destroy)
respond_to do |format|
format.html { redirect_to :action => 'index', :project_id => @project }
format.xml { head :ok }
end
end
end
end
IssuesController.send(:include, OpenProject::Costs::Patches::IssuesControllerPatch)