-- TBMENU
UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, DESCRICAO)
VALUES (20450, 'FIN', 'FIN', 1, 'REGISTRO DE RECEBIMENTO DE CHEQUES')
MATCHING (CONTROLE)

-- PARAMETRO DE USUARIO

UPDATE OR INSERT INTO TBPARAMETRO (ID, TABELA, CONTROLE, CODIGO, DESCRICAO, VALOR, OBSERVACAO, GRUPO, USUARIO_ID)
VALUES (760, 'TBUSUARIO', 927, 'BAIXA_DEV_CHEQUES', 'PERMITIR REGISTRA BAIXAS E DEVOLUCOES DE CHEQUES', '0', '0 - NAO;1 - SIM;', 'WEB20450', 788)
MATCHING (ID);

------------------------------------------------------------------------------------------
-- TBCHEQUE (Criar Tabela)

/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR GTBCHEQUE;

CREATE TABLE TBCHEQUE (
    ID                	INTEGER NOT NULL,
	ESTABELECIMENTO_ID	INTEGER,
    SITUACAO          	CHAR(1),
    DATA_RECEBIMENTO  	DATE,
    BANCO_CODIGO      	VARCHAR(10),
    AGENCIA           	VARCHAR(15),
    CONTA             	VARCHAR(15),
    CONTA_DIGITO      	VARCHAR(10),
    NUMERO_CHEQUE     	VARCHAR(15),
    NOME_TITULAR      	VARCHAR(100),
    DATA_CHEQUE       	DATE,
    VALOR             	DECIMAL(15,4),
    OBSERVACAO        	VARCHAR(200)
);




/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE TBCHEQUE ADD CONSTRAINT PK_TBCHEQUE PRIMARY KEY (ID);

/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN TBCHEQUE.SITUACAO IS 
'0 - PENDENTE;
1 - CHEQUE BAIXADO - TRANSFERENCIA;
2 - CHEQUE DEVOLVIDO - TRANSFERENCIA;
3 - PARCELAS BAIXADAS;
4 - CHEQUE BAIXADO - ANTECIPACAO;
5 - CHEQUE DEVOLVIDO - ANTECIPACAO;';

COMMENT ON COLUMN TBCHEQUE.OBSERVACAO IS 
'OBSERVAÇÃO PARA DEVOLUÇÃO DE CHEUQE (SITUAÇÃO = 2);';


------------------------------------------------------------------------------------------
-- TBCHEQUE_ITEM (Criar Tabela)

/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR GTBCHEQUE_ITEM;

CREATE TABLE TBCHEQUE_ITEM (
    ID              INTEGER NOT NULL,
    CHEQUE_ID       INTEGER NOT NULL,
    EMPRESA_ID      INTEGER,
    TIPO_DOCUMENTO  CHAR(1),
    DOCUMENTO_ID    INTEGER,
    VALOR           DECIMAL(15,4)
);




/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE TBCHEQUE_ITEM ADD CONSTRAINT PK_TBCHEQUE_ITEM PRIMARY KEY (ID);

/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN TBCHEQUE_ITEM.TIPO_DOCUMENTO IS 
'1 - NF;
2 - CF;
3 - AVULSO;';


------------------------------------------------------------------------------------------
-- TBCHEQUE (Triggers)

/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: TTBCHEQUE_B01D */
CREATE OR ALTER TRIGGER TTBCHEQUE_B01D FOR TBCHEQUE
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    
    IF( (OLD.SITUACAO = 1) OR (OLD.SITUACAO = 2) )THEN
    BEGIN
        IF(OLD.SITUACAO = 1)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: 1 - BAIXADO, EXCLUSÃO NÃO AUTORIZADA!';
        END
        IF(OLD.SITUACAO = 2)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: 2 - DEVOLVIDO, EXCLUSÃO NÃO AUTORIZADA!';
        END
    END

    HISTORICO = '';

    IF(OLD.ID > 0)THEN
    BEGIN
        HISTORICO = HISTORICO||'REGISTRO EXCLUIDO';
    END

    IF(HISTORICO <> '')THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCHEQUE', OLD.ID, HISTORICO);
    END
END
^


/* Trigger: TTBCHEQUE_B01I */
CREATE OR ALTER TRIGGER TTBCHEQUE_B01I FOR TBCHEQUE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GTBCHEQUE, 1);
END
^


/* Trigger: TTBCHEQUE_B01U */
CREATE OR ALTER TRIGGER TTBCHEQUE_B01U FOR TBCHEQUE
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_BANCO VARCHAR(500);
DECLARE VARIABLE NEW_BANCO VARCHAR(500);
BEGIN

    IF((OLD.DATA_RECEBIMENTO <> NEW.DATA_RECEBIMENTO) OR (OLD.BANCO_CODIGO <> NEW.BANCO_CODIGO) OR (OLD.AGENCIA <> NEW.AGENCIA) OR (OLD.CONTA <> NEW.CONTA) OR (OLD.CONTA_DIGITO <> NEW.CONTA_DIGITO) OR (OLD.NUMERO_CHEQUE <> NEW.NUMERO_CHEQUE) OR (OLD.NOME_TITULAR <> NEW.NOME_TITULAR) OR (OLD.DATA_CHEQUE <> NEW.DATA_CHEQUE) OR (OLD.VALOR <> NEW.VALOR))THEN
    BEGIN
        IF(OLD.SITUACAO = 1)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: 1 - BAIXADO, ALTERAÇÃO NÃO AUTORIZADA!';
        END
        IF(OLD.SITUACAO = 2)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: 2 - DEVOLVIDO, ALTERAÇÃO NÃO AUTORIZADA!';
        END
        IF(OLD.SITUACAO = 3)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.ID, 4, '0')||' COM SITUAÇÃO: 3 - QUITADO, ALTERAÇÃO NÃO AUTORIZADA!';
        END
    END

    HISTORICO = '';
    OLD_BANCO = COALESCE((SELECT A.CODIGO||' - '||A.DESCRICAO FROM TBBANCO A WHERE A.CODIGO = OLD.BANCO_CODIGO), '');
    NEW_BANCO = COALESCE((SELECT A.CODIGO||' - '||A.DESCRICAO FROM TBBANCO A WHERE A.CODIGO = NEW.BANCO_CODIGO), '');

    IF(OLD.SITUACAO <> NEW.SITUACAO)THEN
    BEGIN
        HISTORICO = HISTORICO||' SITUACAO:'||OLD.SITUACAO||'->'||NEW.SITUACAO;
    END

    IF(OLD.DATA_RECEBIMENTO <> NEW.DATA_RECEBIMENTO)THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.RECEBIMENTO:'||FORMATDATE(OLD.DATA_RECEBIMENTO)||'->'||FORMATDATE(NEW.DATA_RECEBIMENTO);
    END

    IF(OLD.BANCO_CODIGO <> NEW.BANCO_CODIGO)THEN
    BEGIN
        HISTORICO = HISTORICO||' BANCO:'||OLD_BANCO||'->'||NEW_BANCO;
    END

    IF(OLD.AGENCIA <> NEW.AGENCIA)THEN
    BEGIN
        HISTORICO = HISTORICO||' AGENCIA:'||OLD.AGENCIA||'->'||NEW.AGENCIA;
    END

    IF(OLD.CONTA <> NEW.CONTA)THEN
    BEGIN
        HISTORICO = HISTORICO||' CONTA:'||OLD.CONTA||'->'||NEW.CONTA;
    END

    IF(OLD.CONTA_DIGITO <> NEW.CONTA_DIGITO)THEN
    BEGIN
        HISTORICO = HISTORICO||' DV:'||OLD.CONTA_DIGITO||'->'||NEW.CONTA_DIGITO;
    END

    IF(OLD.NUMERO_CHEQUE <> NEW.NUMERO_CHEQUE)THEN
    BEGIN
        HISTORICO = HISTORICO||' N.CHEQUE:'||OLD.NUMERO_CHEQUE||'->'||NEW.NUMERO_CHEQUE;
    END

    IF(OLD.NOME_TITULAR <> NEW.NOME_TITULAR)THEN
    BEGIN
        HISTORICO = HISTORICO||' TITULAR:'||OLD.NOME_TITULAR||'->'||NEW.NOME_TITULAR;
    END

    IF(OLD.DATA_CHEQUE <> NEW.DATA_CHEQUE)THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.CHEQUE:'||FORMATDATE(OLD.DATA_CHEQUE)||'->'||FORMATDATE(NEW.DATA_CHEQUE);
    END

    IF(OLD.VALOR <> NEW.VALOR)THEN
    BEGIN
        HISTORICO = HISTORICO||' VALOR:R$'||CAST(OLD.VALOR AS NUMERIC(15,2))||'->R$'||CAST(NEW.VALOR AS NUMERIC(15,2));
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCHEQUE', OLD.ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^


/* Trigger: TTBCHEQUE_B02D */
CREATE OR ALTER TRIGGER TTBCHEQUE_B02D FOR TBCHEQUE
ACTIVE BEFORE DELETE POSITION 1
AS
BEGIN
    DELETE FROM TBCHEQUE_ITEM A WHERE A.CHEQUE_ID = OLD.ID;
END
^


/* Trigger: TTBCHEQUE_B02I */
CREATE OR ALTER TRIGGER TTBCHEQUE_B02I FOR TBCHEQUE
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF(NEW.ID > 0)THEN
    BEGIN
        HISTORICO = HISTORICO||'REGISTRO INCLUIDO';
    END

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCHEQUE', NEW.ID, HISTORICO);
    END
END
^

SET TERM ; ^


------------------------------------------------------------------------------------------
-- TBCHEQUE_ITEM (Triggers)

/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: TTBCHEQUE_ITEM_B01D */
CREATE OR ALTER TRIGGER TTBCHEQUE_ITEM_B01D FOR TBCHEQUE_ITEM
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE SITUACAO INTEGER;
BEGIN

    SITUACAO = COALESCE((SELECT B.SITUACAO FROM TBCHEQUE B WHERE B.ID = OLD.CHEQUE_ID), -1);

    IF((SITUACAO = 1) OR (SITUACAO = 2) OR (SITUACAO = 3) )THEN
    BEGIN
        IF(SITUACAO = 1)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.CHEQUE_ID, 4, '0')||' COM SITUAÇÃO: 1 - BAIXADO, EXCLUSÃO DE ITENS NÃO AUTORIZADA!';
        END
        IF(SITUACAO = 2)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.CHEQUE_ID, 4, '0')||' COM SITUAÇÃO: 2 - DEVOLVIDO, EXCLUSÃO DE ITENS NÃO AUTORIZADA!';
        END
        IF(SITUACAO = 3)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(OLD.CHEQUE_ID, 4, '0')||' COM SITUAÇÃO: 3 - QUITADO, EXCLUSÃO DE ITENS NÃO AUTORIZADA!';
        END
    END

    HISTORICO = '';

    IF(OLD.ID > 0)THEN
    BEGIN
        HISTORICO = HISTORICO||'REGISTRO EXCLUIDO';
    END

    IF(HISTORICO <> '')THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCHEQUE', OLD.CHEQUE_ID, HISTORICO);
    END
END
^


/* Trigger: TTBCHEQUE_ITEM_B01I */
CREATE OR ALTER TRIGGER TTBCHEQUE_ITEM_B01I FOR TBCHEQUE_ITEM
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE SITUACAO INTEGER;
BEGIN

    SITUACAO = COALESCE((SELECT B.SITUACAO FROM TBCHEQUE B WHERE B.ID = NEW.CHEQUE_ID), -1);

    IF((SITUACAO = 1) OR (SITUACAO = 2) OR (SITUACAO = 3)  )THEN
    BEGIN
        IF(SITUACAO = 1)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(NEW.CHEQUE_ID, 4, '0')||' COM SITUAÇÃO: 1 - BAIXADO, INCLUSÃO DE ITENS NÃO AUTORIZADA!';
        END
        IF(SITUACAO = 2)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(NEW.CHEQUE_ID, 4, '0')||' COM SITUAÇÃO: 2 - DEVOLVIDO, INCLUSÃO DE ITENS NÃO AUTORIZADA!';
        END
        IF(SITUACAO = 3)THEN
        BEGIN
            EXCEPTION "..." 'REGISTRO: '||FN_LPAD(NEW.CHEQUE_ID, 4, '0')||' COM SITUAÇÃO: 3 - QUITADO, INCLUSÃO DE ITENS NÃO AUTORIZADA!';
        END
    END

  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GTBCHEQUE_ITEM, 1);
END
^


/* Trigger: TTBCHEQUE_ITEM_B01U */
CREATE OR ALTER TRIGGER TTBCHEQUE_ITEM_B01U FOR TBCHEQUE_ITEM
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_EMPRESA VARCHAR(500);
DECLARE VARIABLE NEW_EMPRESA VARCHAR(500);
DECLARE VARIABLE OLD_DOCUMENTO VARCHAR(500);
DECLARE VARIABLE NEW_DOCUMENTO VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_EMPRESA = COALESCE((SELECT FN_LPAD(A.CODIGO, 6,'0')||' - '||A.RAZAOSOCIAL FROM TBEMPRESA A WHERE A.CODIGO = OLD.EMPRESA_ID), '');
    NEW_EMPRESA = COALESCE((SELECT FN_LPAD(B.CODIGO, 6,'0')||' - '||B.RAZAOSOCIAL FROM TBEMPRESA B WHERE B.CODIGO = NEW.EMPRESA_ID), '');
    OLD_DOCUMENTO = COALESCE((CASE WHEN OLD.TIPO_DOCUMENTO = 1 THEN (SELECT FIRST 1 FN_LPAD(C.NUMERO_NOTAFISCAL, 7, '0') FROM TBNFS C WHERE C.CONTROLE = OLD.DOCUMENTO_ID) WHEN OLD.TIPO_DOCUMENTO = 2 THEN (SELECT FIRST 1 FN_LPAD(D.NUMERO_CFE, 7, '0') FROM TBPDV_CFE D WHERE D.ID = OLD.DOCUMENTO_ID) ELSE '' END), '');
    NEW_DOCUMENTO = COALESCE((CASE WHEN NEW.TIPO_DOCUMENTO = 1 THEN (SELECT FIRST 1 FN_LPAD(C.NUMERO_NOTAFISCAL, 7, '0') FROM TBNFS C WHERE C.CONTROLE = NEW.DOCUMENTO_ID) WHEN NEW.TIPO_DOCUMENTO = 2 THEN (SELECT FIRST 1 FN_LPAD(D.NUMERO_CFE, 7, '0') FROM TBPDV_CFE D WHERE D.ID = NEW.DOCUMENTO_ID) ELSE '' END), '');

    IF(OLD.EMPRESA_ID <> NEW.EMPRESA_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' EMPRESA:'||OLD_EMPRESA||'->'||NEW_EMPRESA;
    END

    IF(OLD.TIPO_DOCUMENTO <> NEW.TIPO_DOCUMENTO)THEN
    BEGIN
        HISTORICO = HISTORICO||' TIPO DOCUMENTO:'||OLD.TIPO_DOCUMENTO||'->'||NEW.TIPO_DOCUMENTO;
    END

    IF(OLD.DOCUMENTO_ID <> NEW.DOCUMENTO_ID)THEN
    BEGIN
        HISTORICO = HISTORICO||' DOCUMENTO:'||OLD_DOCUMENTO||'->'||NEW_DOCUMENTO;
    END

    IF(OLD.VALOR <> NEW.VALOR)THEN
    BEGIN
        HISTORICO = HISTORICO||' VALOR:R$'||CAST(OLD.VALOR AS NUMERIC(15,2))||'->R$'||CAST(NEW.VALOR AS NUMERIC(15,2));
    END

    IF(HISTORICO <> '')THEN
    BEGIN
        HISTORICO = 'REFERENCIA: '||FN_LPAD(OLD.ID, 4, '0')||' ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCHEQUE', OLD.CHEQUE_ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^


/* Trigger: TTBCHEQUE_ITEM_B02I */
CREATE OR ALTER TRIGGER TTBCHEQUE_ITEM_B02I FOR TBCHEQUE_ITEM
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    IF(NEW.ID > 0)THEN
    BEGIN
        HISTORICO = HISTORICO||'REGISTRO INCLUIDO';
    END

    IF(HISTORICO <> '')THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCHEQUE', NEW.CHEQUE_ID, HISTORICO);
    END
END
^

SET TERM ; ^

