remove job no longer referenced

This commit is contained in:
ulferts
2025-07-02 15:56:04 +02:00
parent beac8baf63
commit 7b2fde2eb1
@@ -1,177 +0,0 @@
# frozen_string_literal: true
#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See COPYRIGHT and LICENSE files for more details.
#++
class WorkPackages::Progress::MigrateValuesJob < WorkPackages::Progress::Job
include WorkPackages::Progress::SqlCommandsForMigration
attr_reader :current_mode, :previous_mode
def perform(current_mode:, previous_mode:)
@current_mode = current_mode
@previous_mode = previous_mode
journal_cause = { type: "system_update", feature: system_update_explanation }
with_temporary_progress_table do
adjust_progress_values
update_totals
unset_total_p_complete
copy_progress_values_to_work_packages_and_update_journals(journal_cause)
end
end
private
def adjust_progress_values
case current_mode
when "field"
adjust_progress_values_for_work_based_mode
when "status"
adjust_progress_values_for_status_based_mode
else
raise "Unknown progress calculation mode: #{current_mode}, aborting."
end
end
def adjust_progress_values_for_work_based_mode
unset_all_percent_complete_values if previous_mode == "disabled"
fix_remaining_work_set_with_100_percent_complete
fix_remaining_work_exceeding_work
fix_only_work_being_set
fix_only_remaining_work_being_set
derive_unset_work_from_remaining_work_and_percent_complete
derive_unset_percent_complete_from_work_and_remaining_work
fix_percent_complete_and_remaining_work_when_work_is_0h
derive_remaining_work_from_work_and_percent_complete
end
def adjust_progress_values_for_status_based_mode
set_percent_complete_from_status
fix_remaining_work_set_with_100_percent_complete
derive_unset_work_from_remaining_work_and_percent_complete
derive_remaining_work_from_work_and_percent_complete
end
def unset_all_percent_complete_values
execute(<<~SQL.squish)
UPDATE temp_wp_progress_values
SET done_ratio = NULL
WHERE done_ratio IS NOT NULL
SQL
end
def fix_remaining_work_exceeding_work
execute(<<~SQL.squish)
UPDATE temp_wp_progress_values
SET remaining_hours = CASE
WHEN done_ratio IS NULL THEN estimated_hours
ELSE ROUND((estimated_hours - (estimated_hours * done_ratio / 100.0))::numeric, 2)
END
WHERE remaining_hours > estimated_hours
SQL
end
def fix_only_work_being_set
execute(<<~SQL.squish)
UPDATE temp_wp_progress_values
SET remaining_hours = estimated_hours
WHERE estimated_hours IS NOT NULL
AND remaining_hours IS NULL
AND done_ratio IS NULL
SQL
end
def fix_percent_complete_and_remaining_work_when_work_is_0h
execute(<<~SQL.squish)
UPDATE temp_wp_progress_values
SET remaining_hours = 0,
done_ratio = NULL
WHERE estimated_hours = 0
SQL
end
def fix_only_remaining_work_being_set
execute(<<~SQL.squish)
UPDATE temp_wp_progress_values
SET estimated_hours = remaining_hours
WHERE estimated_hours IS NULL
AND remaining_hours IS NOT NULL
AND done_ratio IS NULL
SQL
end
def derive_unset_percent_complete_from_work_and_remaining_work
execute(<<~SQL.squish)
UPDATE temp_wp_progress_values
SET done_ratio = CASE
WHEN estimated_hours = 0 THEN NULL
ELSE (estimated_hours - remaining_hours) * 100 / estimated_hours
END
WHERE estimated_hours >= 0
AND remaining_hours >= 0
AND done_ratio IS NULL
SQL
end
# The value for derived_done_ratio had been calculated wrong in the past. So prior to executing the job
# values in the work_packages and work_package_journals table sometimes contained wrong data.
# The whole job/migration is now treating the derived_done_ratio as a value newly introduced even if it, under
# the hood has existed before. But it was not shown in the activites before so the user would not have seen it.
#
# Because of this, all values, in the work_packages and work_package_journals table, for derived_done_ratio are
# reset to null.
#
# This results in two cases:
# * The value before has been something (most of the time 0) and is now null. This will hopefully be the
# majority of the cases as it would save a lot of journal creation, the slowest part of the job.
# For that case, the derived_done_ratio will be treated as not having changed by the job since with the rewrite
# the value looks to have been null before and is now null again.
# * The value before has been something and is now something. It could have been the same value as before. But
# since the job resets the value to null, it will in every case be treated as having changed (set for the first time)
def unset_total_p_complete
execute(<<~SQL.squish)
UPDATE work_packages
SET derived_done_ratio = NULL
SQL
execute(<<~SQL.squish)
UPDATE work_package_journals
SET derived_done_ratio = NULL
SQL
end
def system_update_explanation
if previous_mode == "disabled"
"progress_calculation_adjusted_from_disabled_mode"
else
"progress_calculation_adjusted"
end
end
end