CREATE OR ALTER trigger ttbnfs_parcelamento_b08u for tbnfs_parcelamento
active before update position 4
AS
DECLARE VARIABLE VREGISTROS INTEGER;
BEGIN

   IF (NEW.GC_WEB = 1) THEN
       BEGIN

            IF((OLD.NF_NATUREZA = 1 AND NEW.NF_NATUREZA = 2) OR (OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 1) ) THEN
            BEGIN
                -- DELETAR LANÇAMENTO DE PARCELA
                EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_RECEBER_OPERACAO,
                NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_EMISSAO, NEW.VALOR_SALDO, NEW.VALOR, 'D', NEW.SERIE, NEW.AVULSO, 2);
    
                IF(COALESCE(OLD.PDV_DEVOLUCAO_TROCA_ID, 0) > 0 AND (OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 1)) THEN
                BEGIN
                    /* DESFAZER BAIXA DE DEVOLUCAO */
                    EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(OLD.PDV_DEVOLUCAO_TROCA_ID, OLD.VALOR, 1);
                END
    
                IF(NEW.NF_NATUREZA = 2) THEN
                BEGIN
                    -- INCLUIR LANÇAMENTO DE PARCELA
                    EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_RECEBER_OPERACAO,
                    NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_EMISSAO, NEW.VALOR_SALDO, NEW.VALOR, 'D', NEW.SERIE, NEW.AVULSO, 1);

                    IF(COALESCE(OLD.PDV_DEVOLUCAO_TROCA_ID, 0) > 0) THEN
                    BEGIN
                        /* REALIZAR BAIXA DE DEVOLUCAO */
                        EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(NEW.PDV_DEVOLUCAO_TROCA_ID, NEW.VALOR, 2);
                    END
                END
    
           END ELSE
           IF(OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 2) THEN
           BEGIN
             -- VREGISTROS = (SELECT COUNT(CONTROLE) FROM TBCAIXABANCO_LANCAMENTO_REG WHERE NFS_CONTROLE = OLD.NFS_CONTROLE AND NFS_PARCELAMENTO_CONTROLE = OLD.CONTROLE);
                IF(NEW.ESTABELECIMENTO_CODIGO   <> OLD.ESTABELECIMENTO_CODIGO OR
                   NEW.EMPRESA_CODIGO           <> OLD.EMPRESA_CODIGO OR
                   NEW.VALOR                    <> OLD.VALOR) THEN
                   BEGIN
                    IF (OLD.VALOR_SALDO <> OLD.VALOR) THEN
                        EXCEPTION "..." 'PARCELAMENTO COM LANCAMENTOS VINCULADOS, ALTERACAO CANCELADA!';
    
                    VREGISTROS = (SELECT COUNT(CONTROLE) FROM TBCAIXABANCO_LANCAMENTO_REG WHERE NFS_CONTROLE = OLD.NFS_CONTROLE AND NFS_PARCELAMENTO_CONTROLE = OLD.CONTROLE);
                    IF (VREGISTROS > 1) THEN
                        EXCEPTION "..." 'PARCELAMENTO COM LANCAMENTOS VINCULADOS, ALTERACAO CANCELADA!';
                   END
    
                -- ATUALIZAR LANÇAMENTO DE PARCELA

                IF(OLD.ESTABELECIMENTO_CODIGO  <> NEW.ESTABELECIMENTO_CODIGO
                OR OLD.EMPRESA_CODIGO          <> NEW.EMPRESA_CODIGO
                OR OLD.NUMERO_NOTAFISCAL       <> NEW.NUMERO_NOTAFISCAL
                OR OLD.PARCELA                 <> NEW.PARCELA
                OR OLD.DATA_EMISSAO            <> NEW.DATA_EMISSAO
                OR OLD.SERIE                   <> NEW.SERIE
                OR OLD.REPRESENTANTE_ID        <> NEW.REPRESENTANTE_ID
                OR OLD.VENDEDOR_ID             <> NEW.VENDEDOR_ID
                OR OLD.REPRESENTANTE_COMISSAO  <> NEW.REPRESENTANTE_COMISSAO
                OR OLD.VENDEDOR_COMISSAO       <> NEW.VENDEDOR_COMISSAO )THEN
                BEGIN
                 EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_RECEBER_OPERACAO,
                 NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_EMISSAO, NEW.VALOR_SALDO, NEW.VALOR, 'D', NEW.SERIE, NEW.AVULSO, 3);
                END

                IF((COALESCE(OLD.PDV_DEVOLUCAO_TROCA_ID, 0) <> COALESCE(NEW.PDV_DEVOLUCAO_TROCA_ID, 0)) OR (NEW.VALOR <> OLD.VALOR)) THEN
                BEGIN
                    IF(COALESCE(OLD.PDV_DEVOLUCAO_TROCA_ID, 0) > 0) THEN
                    BEGIN
                        /* DESFAZER BAIXA DE DEVOLUCAO */
                        EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(OLD.PDV_DEVOLUCAO_TROCA_ID, OLD.VALOR, 1);

                         /* REALIZAR BAIXA DE DEVOLUCAO */
                        EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(NEW.PDV_DEVOLUCAO_TROCA_ID, NEW.VALOR, 2);
                    END
                END

           END ELSE
           IF(OLD.NF_NATUREZA = 1 AND NEW.NF_NATUREZA = 1) THEN
           BEGIN
                IF(OLD.NF_SITUACAO = 1 AND NEW.NF_SITUACAO = 2) THEN
                BEGIN
                    
                    IF(COALESCE(OLD.PDV_DEVOLUCAO_TROCA_ID, 0) > 0) THEN
                    BEGIN
                        /* REALIZAR BAIXA DE DEVOLUCAO */
                        EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(NEW.PDV_DEVOLUCAO_TROCA_ID, NEW.VALOR, 2);
                    END

                    -- INCLUIR LANÇAMENTO DE PARCELA
                    EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_RECEBER_OPERACAO,
                    NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_EMISSAO, NEW.VALOR_SALDO, NEW.VALOR, 'D', NEW.SERIE, NEW.AVULSO, 1);
    
                END ELSE
                IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 1) THEN
                BEGIN

                    IF(COALESCE(OLD.PDV_DEVOLUCAO_TROCA_ID, 0) > 0) THEN
                    BEGIN
                        /* DESFAZER BAIXA DE DEVOLUCAO */
                        EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(OLD.PDV_DEVOLUCAO_TROCA_ID, OLD.VALOR, 1);
                    END

                    -- DELETAR LANÇAMENTO DE PARCELA
                    EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_RECEBER_OPERACAO,
                    NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_EMISSAO, NEW.VALOR_SALDO, NEW.VALOR, 'D', NEW.SERIE, NEW.AVULSO, 2);
    
                END ELSE
                IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 3) THEN
                BEGIN
                    
                    IF(COALESCE(OLD.PDV_DEVOLUCAO_TROCA_ID, 0) > 0) THEN
                    BEGIN
                        /* DESFAZER BAIXA DE DEVOLUCAO */
                        EXECUTE PROCEDURE SPUI_DEVOLUCAO_TROCA_NF(OLD.PDV_DEVOLUCAO_TROCA_ID, OLD.VALOR, 1);
                    END

                    -- DELETAR LANÇAMENTO DE PARCELA
                    EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_RECEBER_OPERACAO,
                    NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_EMISSAO, NEW.VALOR_SALDO, NEW.VALOR, 'D', NEW.SERIE, NEW.AVULSO, 2);
    
                END
           END

       END

END;