class AddQuantidadePositivaToContabilidadeItensDoEmpenho < ActiveRecord::Migration[5.2]
  def change
    add_column :contabilidade_itens_do_empenho, :quantidade_positiva, :boolean

    add_index :contabilidade_itens_do_empenho, :quantidade_positiva

    reversible do |dir|
      dir.up do
        execute <<-SQL
          CREATE OR REPLACE FUNCTION update_quantidade_positiva()
          RETURNS TRIGGER AS $$
          BEGIN
            NEW.quantidade_positiva = NEW.quantidade > 0;
            RETURN NEW;
          END;
          $$ LANGUAGE plpgsql;

          CREATE TRIGGER trigger_update_quantidade_positiva
          BEFORE INSERT OR UPDATE ON contabilidade_itens_do_empenho
          FOR EACH ROW
          EXECUTE FUNCTION update_quantidade_positiva();

          update contabilidade_itens_do_empenho set quantidade = quantidade;
        SQL
      end

      dir.down do
        execute <<-SQL
          DROP TRIGGER IF EXISTS trigger_update_quantidade_positiva ON contabilidade_itens_do_empenho;
          DROP FUNCTION IF EXISTS update_quantidade_positiva();
        SQL
      end
    end
  end
end
