class AjustaTriggerLancamentosOrcamentarios < ActiveRecord::Migration[5.2]
  def change
    execute "
      CREATE OR REPLACE FUNCTION public.atualizar_valor_empenhado()
          RETURNS trigger
          LANGUAGE 'plpgsql'
          COST 100
          VOLATILE NOT LEAKPROOF
      AS $BODY$

        BEGIN
          IF TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN
            IF OLD.modulo_type = 'Contabilidade::Empenho' OR OLD.modulo_type = 'Contabilidade::AnulacaoDoEmpenho' THEN
            UPDATE loa_orcamentos_da_despesa
            SET valor_empenhado = (
              SELECT SUM(valor)
              FROM contabilidade_lancamentos_do_orcamento_da_despesa
              WHERE orcamento_da_despesa_id = OLD.orcamento_da_despesa_id
            )
            WHERE id = OLD.orcamento_da_despesa_id;
            END IF;
          END IF;

          IF TG_OP = 'INSERT' THEN
            IF NEW.modulo_type = 'Contabilidade::Empenho' OR NEW.modulo_type = 'Contabilidade::AnulacaoDoEmpenho' THEN
            UPDATE loa_orcamentos_da_despesa
            SET valor_empenhado = (
              SELECT SUM(valor)
              FROM contabilidade_lancamentos_do_orcamento_da_despesa
              WHERE orcamento_da_despesa_id = NEW.orcamento_da_despesa_id
            )
            WHERE id = NEW.orcamento_da_despesa_id;
            END IF;
          END IF;

          RETURN NEW;
        END;
      $BODY$;
    "
  end
end
  
