-- TBNFE_PARCELAMENTO

-- PARAMETROS GC_WEB

ALTER TABLE TBNFE_PARCELAMENTO
ADD GC_WEB INTEGER
DEFAULT 0;

-- NOVO CAMPO DE SITUAÇÃO
ALTER TABLE TBNFE_PARCELAMENTO
ADD NF_SITUACAO INTEGER;

-- NOVO CAMPO DE NATUREZA
ALTER TABLE TBNFE_PARCELAMENTO
ADD NF_NATUREZA INTEGER;

-- TRIGGERS

-- ########### INSERT ###########

-- TTBNFE_PARCELAMENTO_B05I
CREATE OR ALTER TRIGGER TTBNFE_PARCELAMENTO_B05I FOR TBNFE_PARCELAMENTO
ACTIVE BEFORE INSERT POSITION 4
AS
BEGIN

   IF (NEW.GC_WEB = '1') THEN
       BEGIN
            IF(NEW.NF_NATUREZA = 2) THEN
            BEGIN
               EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE,
                 NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_PAGAR_OPERACAO,
                 NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_ENTRADA, NEW.VALOR_SALDO, NEW.VALOR, 'C', NEW.SERIE, NEW.AVULSO, 1);
            END

       END

END;

COMMENT ON TRIGGER TTBNFS_ITEM_B1D_01 IS 'GERAÇÃO DO LANÇAMENTO NO FINANCEIRO (TBCAIXABANCO_LANCAMENTO_REG) PARA NATUREZA LANÇAMENTO';


-- ########### UPDATE ###########

-- TTBNFE_PARCELAMENTO_B06U
CREATE OR ALTER TRIGGER TTBNFE_PARCELAMENTO_B06U FOR TBNFE_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('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_PAGAR_OPERACAO,
                NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_ENTRADA, NEW.VALOR_SALDO, NEW.VALOR, 'C', NEW.SERIE, NEW.AVULSO, 2);
    
    
                IF(NEW.NF_NATUREZA = 2) THEN
                BEGIN
                    -- INCLUIR LANÇAMENTO DE PARCELA
                    EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_PAGAR_OPERACAO,
                    NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_ENTRADA, NEW.VALOR_SALDO, NEW.VALOR, 'C', NEW.SERIE, NEW.AVULSO, 1);
                END
    
           END ELSE
           IF(OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 2) THEN
           BEGIN
    
                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 NFE_CONTROLE = OLD.NFE_CONTROLE AND NFE_PARCELAMENTO_CONTROLE = OLD.CONTROLE);
    
                        IF (VREGISTROS > 1) THEN
                            EXCEPTION "..." 'PARCELAMENTO COM LANCAMENTOS VINCULADOS, ALTERACAO CANCELADA!';
                END
    
                -- ATUALIZAR LANÇAMENTO DE PARCELA
               IF(OLD.VALOR_SALDO = OLD.VALOR AND NEW.VALOR_SALDO = NEW.VALOR) THEN
                BEGIN
                IF(OLD.ESTABELECIMENTO_CODIGO <>            NEW.ESTABELECIMENTO_CODIGO
                OR OLD.EMPRESA_CODIGO         <>            NEW.EMPRESA_CODIGO
                OR OLD.CONTA_PAGAR_OPERACAO   <>            NEW.CONTA_PAGAR_OPERACAO
                OR OLD.NUMERO_NOTAFISCAL      <>            NEW.NUMERO_NOTAFISCAL
                OR OLD.PARCELA                <>            NEW.PARCELA
                OR OLD.DATA_ENTRADA           <>            NEW.DATA_ENTRADA
                OR OLD.VALOR                  <>            NEW.VALOR
                OR OLD.SERIE                  <>            NEW.SERIE)THEN
                   BEGIN
                      EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_PAGAR_OPERACAO,
                      NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_ENTRADA, NEW.VALOR_SALDO, NEW.VALOR, 'C', NEW.SERIE, NEW.AVULSO, 3);
                   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
                    -- INCLUIR LANÇAMENTO DE PARCELA
                    EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_PAGAR_OPERACAO,
                    NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_ENTRADA, NEW.VALOR_SALDO, NEW.VALOR, 'C', NEW.SERIE, NEW.AVULSO, 1);
    
                END ELSE
                IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 1) THEN
                BEGIN
                    -- DELETAR LANÇAMENTO DE PARCELA
                    EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_PAGAR_OPERACAO,
                    NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_ENTRADA, NEW.VALOR_SALDO, NEW.VALOR, 'C', NEW.SERIE, NEW.AVULSO, 2);
    
                END ELSE
                IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 3) THEN
                BEGIN

                    UPDATE TBNFE_PARCELAMENTO T SET T.SITUACAO = 3 WHERE T.CONTROLE = NEW.CONTROLE;

                    -- DELETAR LANÇAMENTO DE PARCELA
                    EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, NEW.ESTABELECIMENTO_CODIGO, NEW.EMPRESA_CODIGO, NEW.CONTA_PAGAR_OPERACAO,
                    NEW.NUMERO_NOTAFISCAL, NEW.PARCELA, NEW.DATA_ENTRADA, NEW.VALOR_SALDO, NEW.VALOR, 'C', NEW.SERIE, NEW.AVULSO, 2);
    
                END
           END



       END

END;

COMMENT ON TRIGGER TTBNFE_PARCELAMENTO_B06U IS 'GERAÇÃO DO LANÇAMENTO NO FINANCEIRO (TBCAIXABANCO_LANCAMENTO_REG) PARA NATUREZA LANÇAMENTO';


-- ########### DELETE ###########

-- TTBNFE_PARCELAMENTO_B01D
CREATE OR ALTER TRIGGER TTBNFE_PARCELAMENTO_B01D FOR TBNFE_PARCELAMENTO
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE VREGISTROS INTEGER;
BEGIN
        EXECUTE PROCEDURE SP_NF_LANCAMENTO_PARCELA('NFE', OLD.CONTROLE, OLD.NFE_CONTROLE,
         OLD.ESTABELECIMENTO_CODIGO, OLD.EMPRESA_CODIGO, OLD.CONTA_PAGAR_OPERACAO,
         OLD.NUMERO_NOTAFISCAL, OLD.PARCELA, OLD.DATA_ENTRADA, OLD.VALOR_SALDO, OLD.VALOR, 'C', OLD.SERIE, OLD.AVULSO, 2);

END;

COMMENT ON TRIGGER TTBNFE_PARCELAMENTO_B01D IS 'EXCLUSÃO DO LANÇAMENTO NO FINANCEIRO (TBCAIXABANCO_LANCAMENTO_REG) PARA NATUREZA LANÇAMENTO';



-- PROCEDURE DE INSERÇÃO

CREATE OR ALTER PROCEDURE SPI_NFE_PARCELAMENTO (
    NFE_CONTROLE INTEGER,
    ESTABELECIMENTO_CODIGO INTEGER,
    EMPRESA_CODIGO INTEGER,
    NUMERO_NOTAFISCAL INTEGER,
    DATA_ENTRADA DATE,
    DATA_VENCIMENTO DATE,
    PARCELA INTEGER,
    VALOR NUMERIC(10,5),
    VALOR_SALDO NUMERIC(10,5),
    CONTA_PAGAR_OPERACAO INTEGER,
    CONTROLE INTEGER,
    ACEITE VARCHAR(1),
    VALOR_DESCONTO NUMERIC(10,5),
    SERIE VARCHAR(3),
    PAGAMENTO_FORMA INTEGER,
    CLASSIFICACAO_CONTABIL INTEGER,
    CCUSTO INTEGER,
    OBSERVACAO VARCHAR(20),
    REMESSA INTEGER,
    GC_WEB SMALLINT,
    NF_SITUACAO INTEGER,
    NF_NATUREZA INTEGER)
AS
BEGIN
INSERT INTO TBNFE_PARCELAMENTO(
NFE_CONTROLE,ESTABELECIMENTO_CODIGO,EMPRESA_CODIGO,NUMERO_NOTAFISCAL,
DATA_ENTRADA,DATA_VENCIMENTO,PARCELA,VALOR,VALOR_SALDO,CONTA_PAGAR_OPERACAO,
CONTROLE,ACEITE,VALOR_DESCONTO,SERIE,PAGAMENTO_FORMA, CLASSIFICACAO_CONTABIL, CCUSTO, OBSERVACAO, REMESSA, GC_WEB, NF_SITUACAO, NF_NATUREZA) VALUES (
:NFE_CONTROLE,:ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,
:DATA_ENTRADA,:DATA_VENCIMENTO,:PARCELA,:VALOR,:VALOR_SALDO,
:CONTA_PAGAR_OPERACAO,:CONTROLE,:ACEITE,:VALOR_DESCONTO,:SERIE,:PAGAMENTO_FORMA, :CLASSIFICACAO_CONTABIL, :CCUSTO, :OBSERVACAO, :REMESSA, :GC_WEB, :NF_SITUACAO, :NF_NATUREZA);
END;



-- PROCEDURE DE ATUALIZAÇÃO

CREATE OR ALTER PROCEDURE SPU_NFE_PARCELAMENTO (
    ESTABELECIMENTO_CODIGO INTEGER,
    NUMERO_NOTAFISCAL INTEGER,
    SERIE VARCHAR(3),
    EMPRESA_CODIGO INTEGER,
    NFE_CONTROLE INTEGER,
    PARCELA INTEGER,
    DATA_ENTRADA DATE,
    SITUACAO INTEGER,
    CONTROLE INTEGER,
    DATA_VENCIMENTO DATE,
    VALOR NUMERIC(15,2),
    CONTA_PAGAR_OPERACAO INTEGER,
    CLASSIFICACAO_CONTABIL VARCHAR(6),
    CLASSIFICACAO VARCHAR(10),
    OBSERVACAO VARCHAR(20),
    PAGAMENTO_FORMA INTEGER,
    REMESSA INTEGER,
    GC_WEB INTEGER,
    NF_SITUACAO INTEGER,
    NF_NATUREZA INTEGER)
AS
BEGIN
    
    UPDATE TBNFE_PARCELAMENTO SET 
        ESTABELECIMENTO_CODIGO           = :ESTABELECIMENTO_CODIGO,
        NUMERO_NOTAFISCAL                = :NUMERO_NOTAFISCAL,
        SERIE                              = :SERIE,
        EMPRESA_CODIGO                   = :EMPRESA_CODIGO,
        DATA_ENTRADA                     = :DATA_ENTRADA,
        NF_SITUACAO                      = :NF_SITUACAO,
        NF_NATUREZA                      = :NF_NATUREZA
    WHERE (CONTROLE                      = :CONTROLE
    AND NFE_CONTROLE                     = :NFE_CONTROLE);

END;