diff --git a/db/migrate/20250103124802_drop_zero_amount_fees.rb b/db/migrate/20250103124802_drop_zero_amount_fees.rb new file mode 100644 index 00000000000..1464b2f070c --- /dev/null +++ b/db/migrate/20250103124802_drop_zero_amount_fees.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +class DropZeroAmountFees < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + class FeesTax < ApplicationRecord; end + + class Fee < ApplicationRecord; end + + def change + sql = <<~SQL + SELECT fees.id FROM fees + INNER JOIN invoices ON fees.invoice_id = invoices.id + WHERE + invoices.status IN (1, 2, 6) -- finalized, voided and closed + AND fees.fee_type = 0 -- charge + AND fees.amount_cents = 0 + AND fees.units = 0 + AND fees.pay_in_advance = false + AND fees.true_up_parent_fee_id IS NULL + AND fees.id NOT IN ( + SELECT f.true_up_parent_fee_id + FROM fees f + WHERE f.true_up_parent_fee_id IS NOT NULL + ) + AND fees.id NOT IN ( + SELECT fee_id + FROM adjusted_fees + WHERE adjusted_fees.fee_id IS NOT NULL + ) + LIMIT 1000 + SQL + + while (ids = ActiveRecord::Base.connection.select_all(sql).rows.map(&:first)).any? + FeesTax.where(fee_id: ids).delete_all + Fee.where(id: ids).delete_all + + puts "Deleted #{ids.size} fees - #{Time.current.iso8601}" # rubocop:disable Rails/Output + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 2529996bee4..f22f908bc93 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_12_27_161927) do +ActiveRecord::Schema[7.1].define(version: 2025_01_03_124802) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql"