1 changed files with 53 additions and 0 deletions
@ -0,0 +1,53 @@
|
||||
desc "Find and output each group of duplicate rent periods with a total count" |
||||
task find_redundant_rent_periods: :environment do |
||||
duplicate_groups = OrganisationRentPeriod |
||||
.select('organisation_id, rent_period') |
||||
.group('organisation_id, rent_period') |
||||
.having('COUNT(*) > 1') |
||||
|
||||
duplicate_records = OrganisationRentPeriod |
||||
.where(organisation_id: duplicate_groups.map(&:organisation_id), rent_period: duplicate_groups.map(&:rent_period)) |
||||
|
||||
duplicate_groups.each do |group| |
||||
group_records = duplicate_records.where(organisation_id: group.organisation_id, rent_period: group.rent_period) |
||||
group_records.each do |record| |
||||
puts "ID: #{record.id}, Organisation ID: #{record.organisation_id}, Rent Period: #{record.rent_period}" |
||||
end |
||||
puts "----------------------" |
||||
end |
||||
|
||||
ids_to_keep = OrganisationRentPeriod |
||||
.select('MIN(id) as id') |
||||
.group('organisation_id, rent_period') |
||||
.having('COUNT(*) > 1') |
||||
.map(&:id) |
||||
|
||||
redundant_ids = duplicate_records.pluck(:id) - ids_to_keep |
||||
|
||||
puts "Number of duplicate records: #{redundant_ids.size}" |
||||
puts "Number of records to keep: #{ids_to_keep.size}" |
||||
end |
||||
|
||||
desc "Delete redundant rent periods" |
||||
task delete_duplicate_rent_periods: :environment do |
||||
duplicate_groups = OrganisationRentPeriod |
||||
.select('organisation_id, rent_period') |
||||
.group('organisation_id, rent_period') |
||||
.having('COUNT(*) > 1') |
||||
|
||||
duplicate_ids = OrganisationRentPeriod |
||||
.where(organisation_id: duplicate_groups.map(&:organisation_id), rent_period: duplicate_groups.map(&:rent_period)) |
||||
.pluck(:id) |
||||
|
||||
ids_to_keep = OrganisationRentPeriod |
||||
.select('MIN(id) as id') |
||||
.group('organisation_id, rent_period') |
||||
.having('COUNT(*) > 1') |
||||
.map(&:id) |
||||
|
||||
redundant_ids = duplicate_ids - ids_to_keep |
||||
|
||||
OrganisationRentPeriod.where(id: redundant_ids).delete_all |
||||
|
||||
puts "Number of deleted duplicate records: #{redundant_ids.size}" |
||||
end |
||||
Loading…
Reference in new issue