[#4558] Allow overriding the Contract account executive and Deliverable manager when converting
This commit is contained in:
1 parent
1350a47593
commit
cd382fd784
3 files changed
+58
-3
No files matched your search
@@ -29,8 +29,25 @@ module RedmineContracts
|
|||||||
end
|
end
|
||||||
|
|
||||||
# * old_data - YAML string of deliverables to migrate
|
# * old_data - YAML string of deliverables to migrate
|
||||||
|
#
|
||||||
|
# @param [Hash] options the options to migrate with
|
||||||
|
# @option options [String] :contract_rate the contract rate to use. Defaults to 150.0
|
||||||
|
# @option options [String] :account_executive the id or login of the user
|
||||||
|
# to use for the contract account executive
|
||||||
|
# Defaults to the first user on the project.
|
||||||
|
# @option options [String] :deliverable_manager the id or login of the user
|
||||||
|
# to use for the deliverables manager
|
||||||
|
# Defaults to the first user on the project.
|
||||||
def self.migrate(old_data, options={})
|
def self.migrate(old_data, options={})
|
||||||
@contract_rate = options[:contract_rate] ? options[:contract_rate].to_f : 150.0
|
@contract_rate = options[:contract_rate] ? options[:contract_rate].to_f : 150.0
|
||||||
|
@account_executive = if options[:account_executive].present?
|
||||||
|
user = User.find_by_login(options[:account_executive])
|
||||||
|
user ||= User.find_by_id(options[:account_executive])
|
||||||
|
end
|
||||||
|
@deliverable_manager = if options[:deliverable_manager].present?
|
||||||
|
user = User.find_by_login(options[:deliverable_manager])
|
||||||
|
user ||= User.find_by_id(options[:deliverable_manager])
|
||||||
|
end
|
||||||
|
|
||||||
@@data = YAML.load(old_data)
|
@@data = YAML.load(old_data)
|
||||||
|
|
||||||
@@ -52,7 +69,7 @@ module RedmineContracts
|
|||||||
contract ||= create_new_contract(old_deliverable)
|
contract ||= create_new_contract(old_deliverable)
|
||||||
|
|
||||||
deliverable.contract = contract
|
deliverable.contract = contract
|
||||||
deliverable.manager = project.users.first
|
deliverable.manager = @deliverable_manager || project.users.first
|
||||||
deliverable.total = old_deliverable['budget']
|
deliverable.total = old_deliverable['budget']
|
||||||
|
|
||||||
case old_deliverable['type']
|
case old_deliverable['type']
|
||||||
@@ -109,7 +126,7 @@ module RedmineContracts
|
|||||||
:start_date => old_deliverable['due'],
|
:start_date => old_deliverable['due'],
|
||||||
:end_date => old_deliverable['due']) do |c|
|
:end_date => old_deliverable['due']) do |c|
|
||||||
c.project = project
|
c.project = project
|
||||||
c.account_executive = project.users.first
|
c.account_executive = @account_executive || project.users.first
|
||||||
c.start_date ||= Date.today
|
c.start_date ||= Date.today
|
||||||
c.end_date ||= Date.today
|
c.end_date ||= Date.today
|
||||||
c.billable_rate = @contract_rate
|
c.billable_rate = @contract_rate
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ namespace :redmine_contracts do
|
|||||||
task :budget_migration => :environment do
|
task :budget_migration => :environment do
|
||||||
options = {}
|
options = {}
|
||||||
options[:contract_rate] = ENV['contract_rate']
|
options[:contract_rate] = ENV['contract_rate']
|
||||||
|
options[:account_executive] = ENV['account_executive']
|
||||||
|
options[:deliverable_manager] = ENV['deliverable_manager']
|
||||||
|
|
||||||
RedmineContracts::BudgetPluginMigration.check_for_installed_budget_plugin
|
RedmineContracts::BudgetPluginMigration.check_for_installed_budget_plugin
|
||||||
data = RedmineContracts::BudgetPluginMigration.export_data
|
data = RedmineContracts::BudgetPluginMigration.export_data
|
||||||
|
|||||||
@@ -19,10 +19,13 @@ class BudgetPluginMigrationTest < ActionController::IntegrationTest
|
|||||||
Project.stubs(:find_by_id).with(1).returns(@project_one)
|
Project.stubs(:find_by_id).with(1).returns(@project_one)
|
||||||
Project.stubs(:find_by_id).with(2).returns(@project_one)
|
Project.stubs(:find_by_id).with(2).returns(@project_one)
|
||||||
|
|
||||||
@manager = User.generate!
|
|
||||||
@role = Role.generate!
|
@role = Role.generate!
|
||||||
|
@manager = User.generate!
|
||||||
User.add_to_project(@manager, @project_one, @role)
|
User.add_to_project(@manager, @project_one, @role)
|
||||||
User.add_to_project(@manager, @project_two, @role)
|
User.add_to_project(@manager, @project_two, @role)
|
||||||
|
@other_user = User.generate!
|
||||||
|
User.add_to_project(@other_user, @project_one, @role)
|
||||||
|
User.add_to_project(@other_user, @project_two, @role)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -67,6 +70,27 @@ class BudgetPluginMigrationTest < ActionController::IntegrationTest
|
|||||||
assert_equal 100.5, @project_one.reload.contracts.first.billable_rate
|
assert_equal 100.5, @project_one.reload.contracts.first.billable_rate
|
||||||
assert_equal 100.5, @project_two.reload.contracts.first.billable_rate
|
assert_equal 100.5, @project_two.reload.contracts.first.billable_rate
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "pick the first project member as the account executive" do
|
||||||
|
RedmineContracts::BudgetPluginMigration.migrate(@data)
|
||||||
|
|
||||||
|
assert_equal @manager, @project_one.reload.contracts.first.account_executive
|
||||||
|
assert_equal @manager, @project_two.reload.contracts.first.account_executive
|
||||||
|
end
|
||||||
|
|
||||||
|
should "allow overriding the account executive by login" do
|
||||||
|
RedmineContracts::BudgetPluginMigration.migrate(@data, :account_executive => @other_user.login)
|
||||||
|
|
||||||
|
assert_equal @other_user, @project_one.reload.contracts.first.account_executive
|
||||||
|
assert_equal @other_user, @project_two.reload.contracts.first.account_executive
|
||||||
|
end
|
||||||
|
|
||||||
|
should "allow overriding the account executive by id" do
|
||||||
|
RedmineContracts::BudgetPluginMigration.migrate(@data, :account_executive => @other_user.id)
|
||||||
|
|
||||||
|
assert_equal @other_user, @project_one.reload.contracts.first.account_executive
|
||||||
|
assert_equal @other_user, @project_two.reload.contracts.first.account_executive
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
should "enable the contracts plugin for each project with a contract" do
|
should "enable the contracts plugin for each project with a contract" do
|
||||||
@@ -84,6 +108,18 @@ class BudgetPluginMigrationTest < ActionController::IntegrationTest
|
|||||||
assert_equal [@manager, @manager, @manager], Deliverable.all.collect(&:manager)
|
assert_equal [@manager, @manager, @manager], Deliverable.all.collect(&:manager)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "allow overriding the deliverable manager by login" do
|
||||||
|
RedmineContracts::BudgetPluginMigration.migrate(@data, :deliverable_manager => @other_user.login)
|
||||||
|
|
||||||
|
assert_equal [@other_user, @other_user, @other_user], Deliverable.all.collect(&:manager)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "allow overriding the deliverable manager by id" do
|
||||||
|
RedmineContracts::BudgetPluginMigration.migrate(@data, :deliverable_manager => @other_user.id)
|
||||||
|
|
||||||
|
assert_equal [@other_user, @other_user, @other_user], Deliverable.all.collect(&:manager)
|
||||||
|
end
|
||||||
|
|
||||||
should "create a new Overhead Budget record for any overhead" do
|
should "create a new Overhead Budget record for any overhead" do
|
||||||
assert_difference("OverheadBudget.count", 3) do
|
assert_difference("OverheadBudget.count", 3) do
|
||||||
RedmineContracts::BudgetPluginMigration.migrate(@data)
|
RedmineContracts::BudgetPluginMigration.migrate(@data)
|
||||||
|
|||||||
Reference in new issue
Block a user