class AjustaTriggerLiquidacoes < ActiveRecord::Migration[5.2]
  def change
    execute "
      CREATE OR REPLACE FUNCTION public.contabilidade_liquidacoes_atualiza_valor_pago()
        RETURNS trigger
        LANGUAGE 'plpgsql'
        COST 100
        VOLATILE NOT LEAKPROOF
      AS $BODY$
      BEGIN
        IF TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN
          UPDATE contabilidade_liquidacoes
          SET valor_pago = (
            SELECT SUM(valor)
            FROM contabilidade_pagamentos
            WHERE liquidacao_id = OLD.liquidacao_id
          )
          WHERE id = OLD.liquidacao_id;
        END IF;

        IF TG_OP = 'INSERT' THEN
          UPDATE contabilidade_liquidacoes
          SET valor_pago = (
            SELECT SUM(valor)
            FROM contabilidade_pagamentos
            WHERE liquidacao_id = NEW.liquidacao_id
          )
          WHERE id = NEW.liquidacao_id;
        END IF;

        RETURN NEW;
      END;
      $BODY$;

      CREATE TRIGGER atualiza_valor_pago_da_liquidacao_trigger
        AFTER INSERT OR DELETE OR UPDATE
        ON public.contabilidade_pagamentos
        FOR EACH ROW
        EXECUTE PROCEDURE public.contabilidade_liquidacoes_atualiza_valor_pago();

      update contabilidade_pagamentos set orcamento_id = orcamento_id;

    "
  end
end
