CREATE OR ALTER TRIGGER TTBNFS_PARCELAMENTO_B01U FOR TBNFS_PARCELAMENTO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE CHEQUE VARCHAR(500);
DECLARE VARIABLE CHEQUE_ITEM INTEGER;
DECLARE VARIABLE COLABORADOR_ID INTEGER;
DECLARE VARIABLE COLABORADOR_CREDITO_ID INTEGER;
DECLARE VARIABLE VALOR_SALDO_AUX NUMERIC(10,5);
BEGIN
    
    CHEQUE = COALESCE((SELECT FIRST 1 B.NUMERO_CHEQUE FROM TBCHEQUE_ITEM A INNER JOIN TBCHEQUE B ON B.ID = A.CHEQUE_ID WHERE A.DOCUMENTO_ID = OLD.CONTROLE AND B.TIPO = 'D'), '');
    CHEQUE_ITEM = COALESCE((SELECT FIRST 1 A.ID FROM TBCHEQUE_ITEM A WHERE A.DOCUMENTO_ID = OLD.CONTROLE), 0);

    IF((OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO) OR (OLD.EMPRESA_CODIGO <> NEW.EMPRESA_CODIGO) OR (OLD.NUMERO_NOTAFISCAL <> NEW.NUMERO_NOTAFISCAL) OR (OLD.SERIE <> NEW.SERIE) OR (OLD.PAGAMENTO_FORMA <> NEW.PAGAMENTO_FORMA) OR (OLD.NFS_CONTROLE <> NEW.NFS_CONTROLE))THEN
    BEGIN
        IF(CHEQUE <> '')THEN
        BEGIN
            EXCEPTION "..." 'PARCELA: '||NEW.PARCELA||', DOC '||NEW.NUMERO_NOTAFISCAL||', SERIE '||NEW.SERIE||' VINCULADA AO CHEQUE Nº'||CHEQUE||' ALTERAÇÃO NÃO AUTORIZADA!';
        END
    END

    IF(CHAR_LENGTH(COALESCE(NEW.REMESSA_ARQUIVO,'')) > 0 OR CHAR_LENGTH(COALESCE(NEW.REMESSA_NUMERO_BANCO,'')) > 0)THEN
    BEGIN
       IF(NEW.CONTA_RECEBER_BANCO <> OLD.CONTA_RECEBER_BANCO)THEN
       BEGIN
          EXCEPTION "..." 'PARCELA: '||NEW.PARCELA||', DOC '||NEW.NUMERO_NOTAFISCAL||', SERIE '||NEW.SERIE||'. JA POSSUI NUMERO DE REMESSA DO BANCO VINCULADO TROCA DE CAIXA/BANCO NAO PERMITIDA.';
       END
    END

    IF(NEW.VALOR_SALDO < 0)THEN
    BEGIN
       EXCEPTION "..." 'PARCELA '||NEW.PARCELA||', DOC '||NEW.NUMERO_NOTAFISCAL||', SERIE '||NEW.SERIE||' COM SALDO NEGATIVO, OPERAÇÃO CANCELADA!';
    END ELSE
    BEGIN


        IF(NEW.VALOR_SALDO <> OLD.VALOR_SALDO AND NEW.PDV_CFE_FORMA_PAGAMENTO_ID > 0) THEN
        BEGIN
            IF(NEW.VALOR_SALDO < OLD.VALOR_SALDO) THEN
            BEGIN
                :VALOR_SALDO_AUX = (OLD.VALOR_SALDO - NEW.VALOR_SALDO);
            END ELSE
            BEGIN
                :VALOR_SALDO_AUX = (NEW.VALOR_SALDO - OLD.VALOR_SALDO) * -1.00;

            END

            FOR SELECT FIRST 1
                C.COLABORADOR_ID,
                CC.ID
            FROM TBPDV_CFE C, TBPDV_CFE_FORMA_PAGAMENTO P, TBPAGAMENTO_FORMA PF, TBCOLABORADOR_CREDITO CC
            WHERE C.ID = P.PDV_CFE_ID
            AND P.PAGAMENTO_FORMA_ID = PF.CODIGO
            AND PF.PDV_TIPO = 6
            AND P.ID = NEW.PDV_CFE_FORMA_PAGAMENTO_ID
            AND CC.COLABORADOR_ID = C.COLABORADOR_ID
          INTO :COLABORADOR_ID, :COLABORADOR_CREDITO_ID
          DO BEGIN
                IF(:COLABORADOR_ID > 0 AND :COLABORADOR_CREDITO_ID > 0) THEN
                BEGIN
                    UPDATE TBCOLABORADOR_CREDITO SET SALDO = SALDO + (:VALOR_SALDO_AUX)
                        WHERE COLABORADOR_ID = :COLABORADOR_ID;

                    EXECUTE PROCEDURE SPI_INTEGRACAO('TBCOLABORADOR_CREDITO', :COLABORADOR_CREDITO_ID, 2);

                END
          END
            

        END

    END
END;

CREATE OR ALTER TRIGGER TTBNFS_PARCELAMENTO_B05I FOR TBNFS_PARCELAMENTO
ACTIVE BEFORE INSERT POSITION 4
AS
DECLARE VARIABLE PDV_CFE_ID                INTEGER;
DECLARE VARIABLE PDV_CAIXA_ID              INTEGER;
DECLARE VARIABLE INCLUIR_PARCELA_SEM_SALDO VARCHAR(1);
DECLARE VARIABLE VALOR_SALDO NUMERIC(10,4);
BEGIN
   :INCLUIR_PARCELA_SEM_SALDO = 0;
   IF (NEW.GC_WEB = 1) THEN
       BEGIN
            :INCLUIR_PARCELA_SEM_SALDO = COALESCE((SELECT FIRST 1 A.PARCELAS_SEM_SALDO FROM TBPAGAMENTO_FORMA A WHERE A.CODIGO = NEW.PAGAMENTO_FORMA),'0');
            IF(:INCLUIR_PARCELA_SEM_SALDO = '1')THEN
            BEGIN
               NEW.VALOR_SALDO = 0;
            END

            IF(NEW.NF_NATUREZA = 2) 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, 1);

            END
            ELSE
            BEGIN
              IF(NEW.NF_SITUACAO = 2) 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, 1);

              END
              ELSE
              BEGIN
                  IF(NEW.PDV_CFE_FORMA_PAGAMENTO_ID > 0)THEN
                  BEGIN
                    FOR SELECT FIRST 1 B.ID, (SELECT FIRST 1 T.PDV_CAIXA_ID FROM TBPDV_MOVIMENTO_CAIXA T WHERE T.ID = B.PDV_MOVIMENTO_CAIXA_ID) AS PDV_CAIXA_ID
                         FROM TBPDV_CFE_FORMA_PAGAMENTO A, TBPDV_CFE B
                          WHERE A.ID = NEW.PDV_CFE_FORMA_PAGAMENTO_ID
                          AND A.PDV_CFE_ID = B.ID
                          AND A.ID IS NOT NULL INTO :PDV_CFE_ID,:PDV_CAIXA_ID DO
                          BEGIN
                              EXECUTE PROCEDURE SP_CFE_LANCAMENTO_PARCELA('CFE', NEW.CONTROLE, NEW.PDV_CFE_FORMA_PAGAMENTO_ID,
                                 NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_RECEBER_OPERACAO, NEW.CONTA_RECEBER_BANCO,
                                 NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_EMISSAO, NEW.VALOR_SALDO, NEW.VALOR, 'D', NEW.SERIE, NEW.AVULSO, 1);

                          END
                  END
              END
            END
       END

END;