class AlteraTriggerDeMovimentacaoDasContasBancarias < ActiveRecord::Migration[5.2]
  def change
    execute "

      CREATE OR REPLACE FUNCTION public.contas_bancarias_por_unidade_orcamentaria_atualiza_saldo()
        RETURNS trigger
        LANGUAGE 'plpgsql'
        COST 100
        VOLATILE NOT LEAKPROOF
      AS $BODY$
        BEGIN
          IF (TG_OP = 'INSERT') THEN
            --RAISE NOTICE 'INSERINDO... %', NEW.conta_bancaria_por_unidade_orcamentaria_id;
            update base_contas_bancarias_por_unidade_orcamentaria as a set saldo_atual = (
              select sum(valor) from contabilidade_movimentacoes_da_conta_bancaria as b
              where b.conta_bancaria_por_unidade_orcamentaria_id = a.id	
            ) where a.id = NEW.conta_bancaria_por_unidade_orcamentaria_id;
            return new;
          END IF;
          IF TG_OP = 'UPDATE' THEN
            --RAISE NOTICE 'ATUALIZANDO... %', OLD.conta_bancaria_por_unidade_orcamentaria_id;
            update base_contas_bancarias_por_unidade_orcamentaria as a set saldo_atual = (
              select sum(valor) from contabilidade_movimentacoes_da_conta_bancaria as b
              where b.conta_bancaria_por_unidade_orcamentaria_id = a.id	
            ) where a.id = OLD.conta_bancaria_por_unidade_orcamentaria_id;
            return old;
          END IF;
          IF TG_OP = 'DELETE' THEN
            --RAISE NOTICE 'DELETANDO... %', OLD.conta_bancaria_por_unidade_orcamentaria_id;
            update base_contas_bancarias_por_unidade_orcamentaria as a set saldo_atual = (
              select sum(valor) from contabilidade_movimentacoes_da_conta_bancaria as b
              where b.conta_bancaria_por_unidade_orcamentaria_id = a.id	
            ) where a.id = OLD.conta_bancaria_por_unidade_orcamentaria_id;
            return old;
          END IF;
        END;
      $BODY$;

    "
  end
end
