class AddTriggerMovimentacoesPatrimoniais < ActiveRecord::Migration[5.2]
  def change
    execute "
    
      CREATE OR REPLACE FUNCTION public.atualizar_valor_atualizado_do_bem()
        RETURNS trigger
        LANGUAGE 'plpgsql'
        COST 100
        VOLATILE NOT LEAKPROOF
      AS $BODY$
      BEGIN
        IF TG_OP = 'UPDATE' THEN
          UPDATE patrimonio_bens_patrimoniais
          SET valor_atualizado_do_bem = (
            SELECT SUM(valor_da_operacao)
            FROM patrimonio_movimentacoes_financeiras_dos_bens
            WHERE bem_patrimonial_id = OLD.bem_patrimonial_id
          )
          WHERE id = OLD.bem_patrimonial_id;
        END IF;

        IF TG_OP = 'INSERT' THEN
          UPDATE patrimonio_bens_patrimoniais
          SET valor_atualizado_do_bem = (
            SELECT SUM(valor_da_operacao)
            FROM patrimonio_movimentacoes_financeiras_dos_bens
            WHERE bem_patrimonial_id = NEW.bem_patrimonial_id
          )
          WHERE id = NEW.bem_patrimonial_id;
        END IF;

        RETURN NEW;
      END;
      $BODY$;

      CREATE TRIGGER atualiza_valor_atualizado_do_bem_trigger
        AFTER INSERT OR UPDATE
        ON public.patrimonio_movimentacoes_financeiras_dos_bens
        FOR EACH ROW
        EXECUTE PROCEDURE public.atualizar_valor_atualizado_do_bem();

    "
  end
end
