gantt-pro_redmine/easy_baseline/app/controllers/easy_baselines_controller.rb
2026-01-05 12:28:46 +09:00

80 lines
2.5 KiB
Ruby

class EasyBaselinesController < ApplicationController
accept_api_auth :index, :create, :destroy
before_action :find_project_by_project_id
before_action :authorize
before_action :authorize_baseline_source
include Redmine::I18n
include SortHelper
def index
@baselines = Project.where(easy_baseline_for: @project)
end
def new
prepare_baseline
end
def create
prepare_baseline
Mailer.with_deliveries(false) do
if @baseline.save(validate: false) && @baseline.copy(@project, only: ['versions', 'issues'], with_time_entries: false)
# Easyredmine copies time on {copy_issues}
@baseline.time_entries.destroy_all
respond_to do |format|
format.html {
flash[:notice] = l(:notice_easy_baseline_created, project_name: @project.name)
redirect_back_or_default project_easy_baselines_path(@project)
}
format.api { render_api_ok }
end
else
respond_to do |format|
format.html { render :new }
format.api { render_validation_errors(@baseline) }
end
end
end
end
def destroy
@baseline = Project.find(params[:id])
@baseline.destroy
respond_to do |format|
format.html {
flash[:notice] = l(:notice_successful_delete)
redirect_back_or_default project_easy_baselines_path(@project)
}
format.api { head :no_content }
end
end
private
def prepare_baseline(options={})
options[:name] = params[:easy_baseline][:name] if params[:easy_baseline]
@baseline = Project.copy_from(@project)
@baseline.status = Project::STATUS_ARCHIVED
# Without this hack it disables a modules on original project see http://www.redmine.org/issues/20512 for details
@baseline.enabled_modules = []
@baseline.enabled_module_names = @project.enabled_module_names
@baseline.name = options[:name] || (format_time(Time.now) + ' ' + @project.name)
@baseline.identifier = options[:name].present? ? options[:name].parameterize : @project.identifier + '_' + Time.now.strftime('%Y%m%d%H%M%S')
@baseline.easy_baseline_for_id = @project.id
@baseline.parent = EasyBaseline.baseline_root_project
# Project.copy_from change customized so CV are not copyied but moved
# Already done in easyredmine
@baseline.custom_values = @project.custom_values.map{|v| cloned_v = v.dup; cloned_v.customized = @baseline; cloned_v}
end
def authorize_baseline_source
render_404 unless @project.easy_baseline_for.nil?
end
end