# frozen_string_literal: true module DataCleanup module Rules # Fix duplicate number on Section module Section class FixDuplicateNumber < Rules::Base def description "Fix duplicate number on Section" end def call # A set of unique phase_ids that contain Sections with duplicate numbers phase_ids = ::Section.group(:number, :phase_id) .count .select { |k,v| v > 1 } .collect { |values, count| values.last } .uniq phase_ids.each do |phase_id| log("Re-setting number order for Sections in Phase##{phase_id}") phase = ::Phase.find(phase_id) sorted_sections = SectionSorter.new(*phase.sections).sort! ::Section.update_numbers!(*sorted_sections.map(&:id), parent: phase) end end end end end end