Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AndyDaSilva52/195b1b9eeb06be449fef1f6a06978579 to your computer and use it in GitHub Desktop.
Save AndyDaSilva52/195b1b9eeb06be449fef1f6a06978579 to your computer and use it in GitHub Desktop.
#MegaERP - Trigger para não permitir inserir movimento financeiro em Conta Financeira quando Data do Movimento menor que Maior Data de Movimento Conciliado #Mega #MegaERP
create or replace trigger T_CUS_FIN_BLOQ_MOVTO
for insert or update on MGFIN.FIN_MOVIMENTO
compound trigger
TYPE TYP_CUS_RC_FINMOV IS RECORD(
ORG_TAB_IN_CODIGO MGFIN.FIN_MOVIMENTO.ORG_TAB_IN_CODIGO%TYPE,
ORG_PAD_IN_CODIGO MGFIN.FIN_MOVIMENTO.ORG_PAD_IN_CODIGO%TYPE,
ORG_IN_CODIGO MGFIN.FIN_MOVIMENTO.ORG_IN_CODIGO%TYPE,
ORG_TAU_ST_CODIGO MGFIN.FIN_MOVIMENTO.ORG_TAU_ST_CODIGO%TYPE,
agn_tab_in_codigo MGFIN.FIN_MOVIMENTO.agn_tab_in_codigo%TYPE,
agn_pad_in_codigo MGFIN.FIN_MOVIMENTO.agn_pad_in_codigo%TYPE,
agn_in_codigo MGFIN.FIN_MOVIMENTO.agn_in_codigo%TYPE,
agn_tau_st_codigo MGFIN.FIN_MOVIMENTO.agn_tau_st_codigo%TYPE,
mov_dt_datadocto MGFIN.FIN_MOVIMENTO.mov_dt_datadocto%TYPE
);
TYPE TYP_CUS_TB_FINMOV IS TABLE OF TYP_CUS_RC_FINMOV
INDEX BY BINARY_INTEGER;
rROW TYP_CUS_TB_FINMOV;
-- Executed before each row change- :NEW, :OLD are available
BEFORE EACH ROW IS
i INTEGER := 0;
BEGIN
NULL;
i := rROW.COUNT + 1;
rROW(i).ORG_TAB_IN_CODIGO := :NEW.ORG_TAB_IN_CODIGO;
rROW(i).ORG_PAD_IN_CODIGO := :NEW.ORG_PAD_IN_CODIGO;
rROW(i).ORG_IN_CODIGO := :NEW.ORG_IN_CODIGO;
rROW(i).ORG_TAU_ST_CODIGO := :NEW.ORG_TAU_ST_CODIGO;
rROW(i).agn_tab_in_codigo := :NEW.agn_tab_in_codigo;
rROW(i).agn_pad_in_codigo := :NEW.agn_pad_in_codigo;
rROW(i).agn_in_codigo := :NEW.agn_in_codigo;
rROW(i).agn_tau_st_codigo := :NEW.agn_tau_st_codigo;
rROW(i).mov_dt_datadocto := :NEW.mov_dt_datadocto;
END BEFORE EACH ROW;
--Executed after DML statement
AFTER STATEMENT IS
-- local variables here
v_Ultimadata mgfin.fin_movimento.mov_dt_datadocto%Type;
BEGIN
IF INSERTING THEN
FOR i IN NVL(rROW.FIRST, 1) .. NVL(rROW.LAST,0)
LOOP
FOR cROW IN (
select a.agn_in_codigo, TRUNC(max(b.mov_dt_datadocto)) max_mov_dt_datadocto
from mgfin.fin_conciliamovimento a,
mgfin.fin_movimento b
Where a.org_tab_in_codigo = rROW(i).org_tab_in_codigo and
a.org_pad_in_codigo = rROW(i).org_pad_in_codigo and
a.org_in_codigo = rROW(i).org_in_codigo and
a.org_tau_st_codigo = rROW(i).org_tau_st_codigo and
a.agn_tab_in_codigo = rROW(i).agn_tab_in_codigo and
a.agn_pad_in_codigo = rROW(i).agn_pad_in_codigo and
a.agn_in_codigo = rROW(i).agn_in_codigo and
a.agn_tau_st_codigo = rROW(i).agn_tau_st_codigo and
rROW(i).agn_tau_st_codigo = 'N' and
a.con_in_sequencial = b.con_in_sequencial
group by
a.agn_in_codigo
) LOOP
If trunc(rROW(i).mov_dt_datadocto) <= cROW.max_mov_dt_datadocto Then
raise_application_error(-20001, 'Não é permitido lançamento no Agente Conta Financeira ['|| cROW.AGN_IN_CODIGO ||'] no período já conciliado, considerando sua última data em ['|| TO_CHAR(cROW.max_mov_dt_datadocto,'DD/MM/YYYY') ||']! [MGCUSTOM.T_CUS_BLOQ_LANC_FIN]');
End If;
END LOOP cROW;
END LOOP i;
END IF;
END AFTER STATEMENT;
end T_CUS_FIN_BLOQ_MOVTO;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment