164 lines
5.3 KiB
Ruby
164 lines
5.3 KiB
Ruby
namespace :rate_plugin do
|
|
desc "Export both the Budget and Billing plugin data to a file"
|
|
task :pre_install_export => ['budget:pre_install_export', 'billing:pre_install_export']
|
|
|
|
desc "Check the export against the migrated Rate data"
|
|
task :post_install_check => ['budget:post_install_check', 'billing:post_install_check']
|
|
|
|
namespace :budget do
|
|
desc "Export the values of the Budget plugin to a file before installing the rate plugin"
|
|
task :pre_install_export => :environment do
|
|
|
|
unless Redmine::Plugin.registered_plugins[:budget_plugin].version == "0.1.0"
|
|
puts "ERROR: This task is only needed when upgrading Budget from version 0.1.0 to version 0.2.0"
|
|
return false
|
|
end
|
|
|
|
rates = ''
|
|
# Rate for members
|
|
Member.find(:all, :conditions => ['rate IS NOT NULL']).each do |member|
|
|
|
|
rates << {
|
|
:user_id => member.user_id,
|
|
:project_id => member.project_id,
|
|
:rate => member.rate
|
|
}.to_yaml
|
|
|
|
end
|
|
|
|
File.open(RateConversion::MemberRateDataFile, 'w') do |file|
|
|
file.puts rates
|
|
end
|
|
|
|
# HourlyDeliverable.spent and FixedDeliverable.spent
|
|
deliverables = ''
|
|
Deliverable.find(:all).each do |deliverable|
|
|
deliverables << {
|
|
:id => deliverable.id,
|
|
:spent => deliverable.spent
|
|
}.to_yaml
|
|
end
|
|
|
|
File.open(RateConversion::DeliverableDataFile, 'w') do |file|
|
|
file.puts deliverables
|
|
end
|
|
end
|
|
|
|
desc "Check the values of the export"
|
|
task :post_install_check => :environment do
|
|
|
|
unless Redmine::Plugin.registered_plugins[:budget_plugin].version == "0.2.0"
|
|
puts "ERROR: Please upgrade the budget_plugin to 0.2.0 now"
|
|
return false
|
|
end
|
|
|
|
counter = 0
|
|
# Member Rates
|
|
File.open(RateConversion::MemberRateDataFile) do |file|
|
|
YAML::load_documents(file) { |member_export|
|
|
user_id = member_export[:user_id]
|
|
project_id = member_export[:project_id]
|
|
rate = Rate.find_by_user_id_and_project_id(user_id, project_id)
|
|
|
|
if rate.nil?
|
|
puts "ERROR: No Rate found for User: #{user_id}, Project: #{project_id}"
|
|
counter += 1
|
|
else
|
|
counter += 1 unless RateConversion.compare_values(member_export[:rate], rate.amount, "Rate #{rate.id}'s amount is off")
|
|
end
|
|
}
|
|
end
|
|
|
|
# Deliverables
|
|
File.open(RateConversion::DeliverableDataFile) do |file|
|
|
YAML::load_documents(file) { |deliverable_export|
|
|
id = deliverable_export[:id]
|
|
spent = deliverable_export[:spent]
|
|
deliverable = Deliverable.find(id)
|
|
|
|
counter += 1 unless RateConversion.compare_values(spent, deliverable.spent, "Deliverable #{id}'s spent is off")
|
|
}
|
|
end
|
|
|
|
if counter > 0
|
|
puts "#{counter} errors found."
|
|
else
|
|
puts "No Budget conversation errors found, congrats."
|
|
end
|
|
end
|
|
end
|
|
|
|
namespace :billing do
|
|
desc "Export the values of the Billing plugin to a file before installing the rate plugin"
|
|
task :pre_install_export => :environment do
|
|
|
|
unless Redmine::Plugin.registered_plugins[:redmine_billing].version == "0.0.1"
|
|
puts "ERROR: This task is only needed when upgrading Billing from version 0.0.1 to version 0.3.0"
|
|
return false
|
|
end
|
|
|
|
invoices = ''
|
|
|
|
FixedVendorInvoice.find(:all).each do |invoice|
|
|
invoices << {
|
|
:id => invoice.id,
|
|
:number => invoice.number,
|
|
:amount => invoice.amount,
|
|
:project_id => invoice.project_id,
|
|
:type => 'FixedVendorInvoice'
|
|
}.to_yaml
|
|
end
|
|
|
|
HourlyVendorInvoice.find(:all).each do |invoice|
|
|
invoices << {
|
|
:id => invoice.id,
|
|
:number => invoice.number,
|
|
:amount => invoice.amount_for_user,
|
|
:project_id => invoice.project_id,
|
|
:type => 'HourlyVendorInvoice'
|
|
}.to_yaml
|
|
end
|
|
|
|
File.open(RateConversion::VendorInvoiceDataFile, 'w') do |file|
|
|
file.puts invoices
|
|
end
|
|
end
|
|
|
|
desc "Check the values of the export"
|
|
task :post_install_check => :environment do
|
|
|
|
unless Redmine::Plugin.registered_plugins[:redmine_billing].version == "0.3.0"
|
|
puts "ERROR: Please upgrade the billing_plugin to 0.3.0 now"
|
|
return false
|
|
end
|
|
|
|
counter = 0
|
|
|
|
File.open(RateConversion::VendorInvoiceDataFile) do |file|
|
|
YAML::load_documents(file) { |invoice_export|
|
|
invoice = VendorInvoice.find_by_id(invoice_export[:id])
|
|
|
|
if invoice.nil?
|
|
puts "ERROR: No VendorInvoice found with the ID of #{invoice_export[:id]}"
|
|
counter += 1
|
|
else
|
|
if invoice.type.to_s == "FixedVendorInvoice"
|
|
counter += 1 unless RateConversion.compare_values(invoice_export[:amount], invoice.amount, "VendorInvoice #{invoice.id}'s amount is off")
|
|
else
|
|
counter += 1 unless RateConversion.compare_values(invoice_export[:amount], invoice.amount_for_user, "VendorInvoice #{invoice.id}'s amount is off")
|
|
end
|
|
|
|
end
|
|
}
|
|
end
|
|
|
|
if counter > 0
|
|
puts "#{counter} errors found."
|
|
else
|
|
puts "No Billing conversation errors found, congrats."
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|