SET TERM ^ ;

ALTER TABLE TBNFS_PARCELAMENTO ADD SITUACAO_NF INTEGER^

ALTER TABLE TBNFE_PARCELAMENTO ADD SITUACAO_NF INTEGER^

COMMENT ON COLUMN TBNFS_PARCELAMENTO.SITUACAO_NF IS
'SITUACAO SEMELHANTE A TBPDV_CFE PARA GERACAO DE SPED FISCAL E RELATORIOS DE APURACAO
1 - ATIVO;
2 - AUTORIZADO;
3 - CANCELADO/DENEGADO;'^

COMMENT ON COLUMN TBNFE_PARCELAMENTO.SITUACAO_NF IS
'SITUACAO SEMELHANTE A TBPDV_CFE PARA GERACAO DE SPED FISCAL E RELATORIOS DE APURACAO
1 - ATIVO;
2 - AUTORIZADO;
3 - CANCELADO/DENEGADO;'^

CREATE OR ALTER TRIGGER TTBNFS_PARCELAMENTO00IU FOR TBNFS_PARCELAMENTO
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE CLASSIFICACAO_NF VARCHAR(20);
BEGIN

    SELECT FIRST 1
        T.CLASSIFICACAO
    FROM TBNFS T
    WHERE T.CONTROLE = NEW.NFS_CONTROLE
    INTO :CLASSIFICACAO_NF;

    IF(CHAR_LENGTH(:CLASSIFICACAO_NF) > 0)THEN
    BEGIN
        NEW.CLASSIFICACAO = TRIM(:CLASSIFICACAO_NF);
    END

    IF(NEW.DATA_VENCIMENTO_ORIGINAL IS NULL)THEN
    BEGIN
       NEW.DATA_VENCIMENTO_ORIGINAL = NEW.DATA_VENCIMENTO;
    END

    IF(NEW.AVULSO = 1 AND NEW.NF_NATUREZA IS NULL)THEN
    BEGIN
       NEW.NF_NATUREZA = 2;
    END

    IF(NEW.AVULSO = 1 OR NEW.NF_NATUREZA = 2) THEN
    BEGIN
       NEW.SITUACAO_NF = 2;
    END

    IF(COALESCE(NEW.AVULSO,0) <> 1 AND NEW.SITUACAO_NF IS NULL AND NEW.PDV_CFE_ID > 0)THEN
    BEGIN
       NEW.SITUACAO_NF = (SELECT FIRST 1 CFE.SITUACAO FROM TBPDV_CFE CFE WHERE CFE.ID = NEW.PDV_CFE_ID);
    END

    IF(COALESCE(NEW.AVULSO,0) <> 1 AND NEW.SITUACAO_NF IS NULL AND NEW.NFS_CONTROLE > 0)THEN
    BEGIN
       NEW.SITUACAO_NF = (SELECT FIRST 1 NFS.SITUACAO_NF FROM TBNFS NFS WHERE NFS.CONTROLE = NEW.NFS_CONTROLE);
    END
END^

CREATE OR ALTER TRIGGER TTBNFE_PARCELAMENTO00IU FOR TBNFE_PARCELAMENTO
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE CLASSIFICACAO_NF VARCHAR(20);
BEGIN

    SELECT FIRST 1
        T.CLASSIFICACAO
    FROM TBNFE T
    WHERE T.CONTROLE = NEW.NFE_CONTROLE
    INTO :CLASSIFICACAO_NF;

    IF(CHAR_LENGTH(:CLASSIFICACAO_NF) > 0)THEN
    BEGIN
        NEW.CLASSIFICACAO = TRIM(:CLASSIFICACAO_NF);
    END

    IF (INSERTING) THEN
        BEGIN
        IF (EXTRACT(WEEKDAY FROM NEW.DATA_VENCIMENTO) IN (6, 0)) THEN
            BEGIN
            IF (FN_PARAMETRO('SISTEMA.PRORROGA_VENCIMENTO_NFE')='1') THEN
                BEGIN
                IF (EXTRACT(WEEKDAY FROM NEW.DATA_VENCIMENTO) = 0) THEN -- DOMINGO
                    NEW.DATA_VENCIMENTO = NEW.DATA_VENCIMENTO + 1;
                IF (EXTRACT(WEEKDAY FROM NEW.DATA_VENCIMENTO) = 6) THEN -- SABADO
                    NEW.DATA_VENCIMENTO = NEW.DATA_VENCIMENTO + 2;
                END
            END
        END

    IF(NEW.DATA_VENCIMENTO_ORIGINAL IS NULL)THEN
    BEGIN
       NEW.DATA_VENCIMENTO_ORIGINAL = NEW.DATA_VENCIMENTO;
    END

    IF(NEW.AVULSO = 1 OR NEW.NF_NATUREZA = 2) THEN
    BEGIN
       NEW.SITUACAO_NF = 2;
    END

    IF(COALESCE(NEW.AVULSO,0) <> 1 AND NEW.SITUACAO_NF IS NULL AND NEW.NFE_CONTROLE > 0)THEN
    BEGIN
       NEW.SITUACAO_NF = (SELECT FIRST 1 NFE.SITUACAO FROM TBNFE NFE WHERE NFE.CONTROLE = NEW.NFE_CONTROLE);
    END

END^

CREATE OR ALTER TRIGGER TTBNFE_B07U FOR TBNFE
ACTIVE BEFORE UPDATE POSITION 7
AS
DECLARE VARIABLE ROMANEIO_ID INTEGER;
BEGIN

    IF( NEW.NUMERO_NOTAFISCAL > 0 AND NEW.EMPRESA_CODIGO > 0)THEN
    BEGIN
        
        ROMANEIO_ID = COALESCE((SELECT FIRST 1 R.ID FROM TBROMANEIO R WHERE R.EMPRESA_ID = NEW.EMPRESA_CODIGO AND R.NUMERO_NOTAFISCAL = NEW.NUMERO_NOTAFISCAL AND R.STATUS > 1),0);

        IF(ROMANEIO_ID > 0)THEN
        BEGIN
            EXECUTE PROCEDURE SP_NOTIFICAR_ROMANEIO_PEND(:ROMANEIO_ID);
        END

    END

END^

CREATE OR ALTER TRIGGER TTBNFE_B11U FOR TBNFE
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN

    /* MUDANCA DE SITUACAO AUTORIZADA PARA ATIVO */
    IF(OLD.SITUACAO = 2 AND NEW.SITUACAO = 1) THEN
    BEGIN
        NEW.SITUACAO_NF = 1;
    END

    /* MUDANCA DE NATUREZA LANCAMENTO PARA EMISSAO */
    IF(OLD.NATUREZA = 2 AND NEW.NATUREZA = 1) THEN
    BEGIN
        NEW.SITUACAO_NF = 1;
    END

    /* MUDANCA DE NATUREZA EMISSAO PARA LANCAMENTO */
    IF(OLD.NATUREZA = 1 AND NEW.NATUREZA = 2) THEN
    BEGIN
        NEW.SITUACAO_NF = 2;
    END  

    IF(NEW.SITUACAO_NF IS DISTINCT FROM OLD.SITUACAO_NF)THEN
    BEGIN
       UPDATE TBNFE_PARCELAMENTO NFE SET NFE.SITUACAO_NF = NEW.SITUACAO_NF WHERE NFE.NFE_CONTROLE = NEW.CONTROLE;
    END
END^

CREATE OR ALTER TRIGGER TTBNFS_B7U_01 FOR TBNFS
ACTIVE BEFORE UPDATE POSITION 7
AS
DECLARE VARIABLE GRUPO_ID INTEGER;
DECLARE VARIABLE CLIENTE_ID INTEGER;
DECLARE VARIABLE CHECKLIST_ID INTEGER;
DECLARE VARIABLE USUARIO_NOME VARCHAR(100);
DECLARE VARIABLE USUARIO_ID INTEGER;

BEGIN

 IF (OLD.SITUACAO <> NEW.SITUACAO) THEN
     BEGIN

        FOR
        SELECT DISTINCT P.GRUPO_ID, PC.CLIENTE_ID, PC.CHECKLIST_ID
          FROM TBNFS_ITEM I, TBPEDIDO P, TBPEDIDO_CHECKLIST PC, TBCLIENTE_CHECKLIST CC
         WHERE I.NFS_CONTROLE = OLD.CONTROLE
           AND I.PEDIDO = P.PEDIDO
           AND P.GRUPO_ID = PC.PEDIDO
           AND P.CLIENTE_CODIGO = PC.CLIENTE_ID
           AND PC.CLIENTE_ID = CC.CLIENTE_ID
           AND PC.CHECKLIST_ID = CC.ID
           AND CC.BAIXAR_VIA_NF = '1'
        
        INTO :GRUPO_ID, :CLIENTE_ID, :CHECKLIST_ID
        DO
        BEGIN

        IF (:GRUPO_ID > 0) THEN
            BEGIN

            IF (NEW.SITUACAO = '2') THEN
                BEGIN

                USUARIO_NOME = (SELECT MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION);
                USUARIO_ID = COALESCE((SELECT FIRST 1 U.CODIGO FROM TBUSUARIO U WHERE U.USUARIO = :USUARIO_NOME AND U.STATUS = '1'),0);

                UPDATE TBPEDIDO_CHECKLIST SET
                DATAHORA_CONCLUSAO = CURRENT_TIMESTAMP,
                USUARIO_ID  = :USUARIO_ID,
                OBSERVACAO  = 'DOCUMENTO FATURADO '||NEW.NUMERO_NOTAFISCAL
                WHERE PEDIDO = :GRUPO_ID
                  AND CHECKLIST_ID = :CHECKLIST_ID
                  AND CLIENTE_ID   = :CLIENTE_ID;
                END ELSE
            IF (NEW.SITUACAO = '1') THEN
                BEGIN
                UPDATE TBPEDIDO_CHECKLIST SET
                DATAHORA_CONCLUSAO = NULL,
                USUARIO_ID  = 0,
                OBSERVACAO  = 'DOCUMENTO DESCONCLUÃDO '||NEW.NUMERO_NOTAFISCAL
                WHERE PEDIDO = :GRUPO_ID
                  AND CHECKLIST_ID = :CHECKLIST_ID
                  AND CLIENTE_ID   = :CLIENTE_ID;
                END ELSE
            IF (NEW.SITUACAO = '3') THEN
                BEGIN
                UPDATE TBPEDIDO_CHECKLIST SET
                DATAHORA_CONCLUSAO = NULL,
                USUARIO_ID  = 0,
                OBSERVACAO  = 'DOCUMENTO CANCELADO '||NEW.NUMERO_NOTAFISCAL
                WHERE PEDIDO = :GRUPO_ID
                  AND CHECKLIST_ID = :CHECKLIST_ID
                  AND CLIENTE_ID   = :CLIENTE_ID;
                END

            END
        END

    END

END^

CREATE OR ALTER TRIGGER TTBNFS_B11U FOR TBNFS
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN

    /* MUDANCA DE SITUACAO AUTORIZADA PARA ATIVO */
    IF(OLD.SITUACAO = 2 AND NEW.SITUACAO = 1) THEN
    BEGIN
        NEW.SITUACAO_NF = 1;
    END

    /* MUDANCA DE NATUREZA LANCAMENTO PARA EMISSAO */
    IF(OLD.NATUREZA = 2 AND NEW.NATUREZA = 1) THEN
    BEGIN
        NEW.SITUACAO_NF = 1;
    END

    /* MUDANCA DE NATUREZA EMISSAO PARA LANCAMENTO */
    IF(OLD.NATUREZA = 1 AND NEW.NATUREZA = 2) THEN
    BEGIN
        NEW.SITUACAO_NF = 2;
    END      

    IF(NEW.SITUACAO_NF IS DISTINCT FROM OLD.SITUACAO_NF)THEN
    BEGIN
       UPDATE TBNFS_PARCELAMENTO NFS SET NFS.SITUACAO_NF = NEW.SITUACAO_NF WHERE NFS.NFS_CONTROLE = NEW.CONTROLE;
    END
END^

ALTER TRIGGER TTBNFS_PARCELAMENTO_B01U INACTIVE^

UPDATE TBNFS_PARCELAMENTO NFS SET NFS.SITUACAO_NF = (SELECT FIRST 1 NFS1.SITUACAO_NF FROM TBNFS NFS1 WHERE NFS.NFS_CONTROLE = NFS1.CONTROLE)
WHERE NFS.AVULSO IS DISTINCT FROM '1'
AND NFS.NFS_CONTROLE > 0^

UPDATE TBNFS_PARCELAMENTO NFS SET NFS.SITUACAO_NF = (SELECT FIRST 1 CFE.SITUACAO FROM TBPDV_CFE CFE WHERE NFS.PDV_CFE_ID = CFE.ID)
WHERE NFS.AVULSO IS DISTINCT FROM '1'
AND NFS.PDV_CFE_ID > 0^

UPDATE TBNFS_PARCELAMENTO NFS SET NFS.SITUACAO_NF = 2
WHERE NFS.AVULSO = '1'^

ALTER TRIGGER TTBNFS_PARCELAMENTO_B01U ACTIVE^

ALTER TRIGGER TTBNFE_PARCELAMENTO_B10U INACTIVE^

UPDATE TBNFE_PARCELAMENTO NFE SET NFE.SITUACAO_NF = (SELECT FIRST 1 NFE1.SITUACAO_NF FROM TBNFE NFE1 WHERE NFE.NFE_CONTROLE = NFE1.CONTROLE)
WHERE NFE.AVULSO IS DISTINCT FROM '1'
AND NFE.NFE_CONTROLE > 0^

UPDATE TBNFE_PARCELAMENTO NFE SET NFE.SITUACAO_NF = 2
WHERE NFE.AVULSO = '1'^

ALTER TRIGGER TTBNFE_PARCELAMENTO_B10U ACTIVE^

^ SET TERM ; ^