Newer
Older
dmpopidor / lib / data_cleanup / rules / phase / fix_duplicate_number.rb
# frozen_string_literal: true
module DataCleanup
  module Rules
    # Fix duplicate number on Phase
    module Phase
      class FixDuplicateNumber < Rules::Base

        def description
          "Fix duplicate number on Phase"
        end

        def call
          data = ::Phase.group(:number, :template_id)
                        .count
                        .select { |k,v| v > 1 }
          data.each do |values, count|
            number, template_id = *values
            ids = ::Phase.where(template_id: template_id)
                         .order("number ASC, created_at ASC")
                         .pluck(:id)
            template = ::Template.find(template_id)
            ::Phase.update_numbers!(*ids, parent: template)
          end
        end
      end
    end
  end
end