Skip to content

Instantly share code, notes, and snippets.

@AndyDaSilva52
Last active November 16, 2020 18:47
Show Gist options
  • Save AndyDaSilva52/202d8a1e6c2283147353d4b83db59642 to your computer and use it in GitHub Desktop.
Save AndyDaSilva52/202d8a1e6c2283147353d4b83db59642 to your computer and use it in GitHub Desktop.
#MegaERP - Trigger para não permitir lançar Nota Fiscal que está Cancelada ou que teve Manifesto de Operação Não Realizada no Gerenciamento de NFe #Mega
create or replace TRIGGER T_CLI_EST_RECEB_NFE_CANCELADA
BEFORE INSERT OR UPDATE ON MGADM.EST_RECEBIMENTO
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
WHEN (NEW.RCB_ST_CHAVEACESSO IS NOT NULL AND SUBSTR(NEW.RCB_ST_CHAVEACESSO,21,2) IN ('55', '65'))
DECLARE
vORIGEM VARCHAR2(200) := '[MGCLI.T_CLI_EST_RECEB_NFE_CANCELADA]';
--N;Nenhuma Operação Realizada
cStatManCienciaOp constant char(1) := 'I'; -- I;Ciência da Operação
cStatManConfirmaOp constant char(1) := 'C'; -- C;Confirmação da Operação
cStatManOpNaoRealizada constant char(1) := 'R'; -- R;Operação não Realizada
cStatManDesconhecimentoOp constant char(1) := 'D'; -- D;Desconhecimento da Operação
TYPE TAB_DescManifesto IS TABLE OF VARCHAR2(50)
INDEX BY VARCHAR2(1);
aDescMan TAB_DescManifesto;
BEGIN
aDescMan(cStatManCienciaOp) := 'Ciência da Operação';
aDescMan(cStatManConfirmaOp) := 'Confirmação da Operação';
aDescMan(cStatManOpNaoRealizada) := 'Operação não Realizada';
aDescMan(cStatManDesconhecimentoOp) := 'Desconhecimento da Operação';
FOR cR IN (
SELECT
CASE
WHEN NVL((SELECT 'S' FROM MGADM.EST_OCORRECEBNFE E
WHERE r.RCNF_IN_SEQUENCIAL = e.RCNF_IN_SEQUENCIAL
AND (UPPER(e.ORNF_ST_DESCRICAO) LIKE '%[650]%' OR
UPPER(e.ORNF_ST_DESCRICAO) LIKE '%[653]%' OR
UPPER(e.ORNF_ST_DESCRICAO) LIKE '%[654]%' OR
UPPER(e.ORNF_ST_DESCRICAO) LIKE '%CANCELAMENTO DE NF-E HOMOLOGADO%')
AND ROWNUM = 1), 'N') = 'S'
/** Status do Documento na Sefaz N;Não Autorizada A;Autorizada C;Cancelada I;Inutilizada D;Denegada */
OR NVL(R.RCNF_CH_STATUSSEFAZ,'A') IN ('C', 'D', 'I')
THEN 'S' ELSE 'N'
END RCNF_BO_CANCELADA
, R.RCNF_CH_STATUSSEFAZ
, R.RCNF_ST_STATUSMANIFESTACAO
, R.RCNF_IN_SEQUENCIAL
, R.RCNF_ST_CHAVEXML RCB_ST_CHAVEACESSO
FROM MGADM.EST_RECEBIMENTONFE R
WHERE R.RCNF_ST_CHAVEXML = :NEW.RCB_ST_CHAVEACESSO
) LOOP
IF (cR.RCNF_BO_CANCELADA = 'S') THEN
RAISE_APPLICATION_ERROR(-20101,
vORIGEM ||CHR(13) || CHR(13)
|| 'Nota Fiscal com Chave'
|| CHR(13)
|| '[' || cR.RCB_ST_CHAVEACESSO ||']'
|| CHR(13)
||' está Cancelada no Gerenciamento de NFe. Favor confirmar com Fiscal e em caso de dúvida entre em contato com o Suporte.');
END IF;
IF (cR.RCNF_ST_STATUSMANIFESTACAO = 'R' OR cR.RCNF_ST_STATUSMANIFESTACAO = 'D') THEN
RAISE_APPLICATION_ERROR(-20101,
vORIGEM ||CHR(13) || CHR(13)
|| 'Nota Fiscal com Chave '
|| CHR(13)
|| '['|| cR.RCB_ST_CHAVEACESSO ||'] '
|| CHR(13)
|| 'tem Status Manifestação [' || aDescMan(cR.RCNF_ST_STATUSMANIFESTACAO)
|| '] no Gerenciamento de NFe. Favor confirmar com Fiscal e em caso de dúvida entre em contato com o Suporte.');
END IF;
END LOOP;
END;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment