CREATE GENERATOR GTBCLIENTE_PAGAMENTO_FORMA;

CREATE TABLE TBCLIENTE_PAGAMENTO_FORMA (
    ID                      INTEGER NOT NULL,
    CLIENTE_ID              INTEGER,
    GRUPO_CLIENTE_ID        INTEGER,
    PAGAMENTO_FORMA_ID      INTEGER,
    UTILIZA_LIMITE_CREDITO  INTEGER DEFAULT 0,
    TIPO_INCLUSAO           INTEGER DEFAULT 0
);




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

ALTER TABLE TBCLIENTE_PAGAMENTO_FORMA ADD CONSTRAINT PK_TBCLIENTE_PAGAMENTO_FORMA PRIMARY KEY (ID);


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



SET TERM ^ ;



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



/* Trigger: TTBCLIENTE_PAG_FORM_B01D */
CREATE OR ALTER TRIGGER TTBCLIENTE_PAG_FORM_B01D FOR TBCLIENTE_PAGAMENTO_FORMA
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);

DECLARE VARIABLE OLD_CLIENTE VARCHAR(500);
DECLARE VARIABLE OLD_GRUPO_CLIENTE VARCHAR(500);
DECLARE VARIABLE OLD_FORM_PAG VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_CLIENTE         = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A            WHERE A.HABILITA_CLIENTE = '1'  AND A.CODIGO = OLD.CLIENTE_ID), '');
    OLD_GRUPO_CLIENTE   = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO        FROM TBEMPRESA_GRUPO B      WHERE B.TIPO = 'C'              AND B.ID = OLD.GRUPO_CLIENTE_ID), '');
    OLD_FORM_PAG        = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO    FROM TBPAGAMENTO_FORMA C    WHERE C.CODIGO = OLD.PAGAMENTO_FORMA_ID), '');

    IF (OLD.ID > 0) THEN
    BEGIN

        IF (OLD.TIPO_INCLUSAO = 2) THEN
        BEGIN
            HISTORICO = HISTORICO||' FORMA DE PAGAMENTO: '||OLD_FORM_PAG||' EXCLUIDA NO GRUPO DE CLIENTES: '||OLD_GRUPO_CLIENTE||' (12450)';
        END ELSE
        IF (OLD.TIPO_INCLUSAO = 1) THEN
        BEGIN

            IF (OLD.GRUPO_CLIENTE_ID > 0) THEN
            BEGIN
                HISTORICO = HISTORICO||' GRUPO DE CLIENTE: '||OLD_GRUPO_CLIENTE||' EXCLUIDO NA FORMA DE PAGAMENTO: '||OLD_FORM_PAG||' (20181)';
            END ELSE
            BEGIN
                HISTORICO = HISTORICO||' CLIENTE: '||OLD_CLIENTE||' EXCLUIDO NA FORMA DE PAGAMENTO: '||OLD_FORM_PAG||' (20181)';
            END

        END ELSE
        BEGIN
            HISTORICO = HISTORICO||' FORMA DE PAGAMENTO: '||OLD_FORM_PAG||' EXCLUIDA NO CLIENTE: '||OLD_CLIENTE||' (12360)';
        END

    END

    IF (HISTORICO <> '') THEN
    BEGIN

        IF (OLD.CLIENTE_ID > 0) THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA', OLD.CLIENTE_ID, HISTORICO);
        END

        IF (OLD.GRUPO_CLIENTE_ID > 0) THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA_GRUPO', OLD.GRUPO_CLIENTE_ID, HISTORICO);
        END

        IF (OLD.PAGAMENTO_FORMA_ID > 0) THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBPAGAMENTO_FORMA', OLD.PAGAMENTO_FORMA_ID, HISTORICO);
        END

    END
END
^


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


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

DECLARE VARIABLE OLD_CLIENTE VARCHAR(500);
DECLARE VARIABLE NEW_CLIENTE VARCHAR(500);
DECLARE VARIABLE OLD_GRUPO_CLIENTE VARCHAR(500);
DECLARE VARIABLE NEW_GRUPO_CLIENTE VARCHAR(500);
DECLARE VARIABLE OLD_FORM_PAG VARCHAR(500);
DECLARE VARIABLE NEW_FORM_PAG VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_CLIENTE         = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A            WHERE A.HABILITA_CLIENTE = '1'  AND A.CODIGO = OLD.CLIENTE_ID), '');
    NEW_CLIENTE         = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A            WHERE A.HABILITA_CLIENTE = '1'  AND A.CODIGO = NEW.CLIENTE_ID), '');
    OLD_GRUPO_CLIENTE   = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO        FROM TBEMPRESA_GRUPO B      WHERE B.TIPO = 'C'              AND B.ID = OLD.GRUPO_CLIENTE_ID), '');
    NEW_GRUPO_CLIENTE   = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO        FROM TBEMPRESA_GRUPO B      WHERE B.TIPO = 'C'              AND B.ID = NEW.GRUPO_CLIENTE_ID), '');
    OLD_FORM_PAG        = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO    FROM TBPAGAMENTO_FORMA C    WHERE C.CODIGO = OLD.PAGAMENTO_FORMA_ID), '');
    NEW_FORM_PAG        = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO    FROM TBPAGAMENTO_FORMA C    WHERE C.CODIGO = NEW.PAGAMENTO_FORMA_ID), '');

    IF (OLD.CLIENTE_ID IS DISTINCT FROM NEW.CLIENTE_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' CLIENTE:'||OLD_CLIENTE||'->'||NEW_CLIENTE;
    END

    IF (OLD.GRUPO_CLIENTE_ID IS DISTINCT FROM NEW.GRUPO_CLIENTE_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' GRUP.CLIENTE:'||OLD_GRUPO_CLIENTE||'->'||NEW_GRUPO_CLIENTE;
    END

    IF (OLD.PAGAMENTO_FORMA_ID IS DISTINCT FROM NEW.PAGAMENTO_FORMA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' FORM.PAGAMENTO:'||OLD_FORM_PAG||'->'||NEW_FORM_PAG;
    END

    IF (OLD.UTILIZA_LIMITE_CREDITO IS DISTINCT FROM NEW.UTILIZA_LIMITE_CREDITO) THEN
    BEGIN
        HISTORICO = HISTORICO||' UTIL.LIMIT.CREDITO:'||OLD.UTILIZA_LIMITE_CREDITO||'->'||NEW.UTILIZA_LIMITE_CREDITO;
    END

    IF (OLD.TIPO_INCLUSAO IS DISTINCT FROM NEW.TIPO_INCLUSAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' TIPO INC:'||OLD.TIPO_INCLUSAO||'->'||NEW.TIPO_INCLUSAO;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        IF (NEW.TIPO_INCLUSAO = 2) THEN
        BEGIN
            HISTORICO = 'FORMA DE PAGAMENTO: '||NEW_FORM_PAG||' NO GRUPO DE CLIENTES: '||NEW_GRUPO_CLIENTE||' (12450) ALTERADA:'||HISTORICO;
        END ELSE
        IF (NEW.TIPO_INCLUSAO = 1) THEN
        BEGIN

            IF (NEW.GRUPO_CLIENTE_ID > 0) THEN
            BEGIN
                HISTORICO = 'GRUPO DE CLIENTE: '||NEW_GRUPO_CLIENTE||' NA FORMA DE PAGAMENTO: '||NEW_FORM_PAG||' (20181) ALTERADA:'||HISTORICO;
            END ELSE
            BEGIN
                HISTORICO = 'CLIENTE: '||NEW_CLIENTE||' NA FORMA DE PAGAMENTO: '||NEW_FORM_PAG||' (20181) ALTERADA:'||HISTORICO;
            END

        END ELSE
        BEGIN
            HISTORICO = 'FORMA DE PAGAMENTO: '||NEW_FORM_PAG||' NO CLIENTE: '||NEW_CLIENTE||' (12360) ALTERADA:'||HISTORICO;
        END

        IF (OLD.CLIENTE_ID > 0) THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA', OLD.CLIENTE_ID, FN_ELIPSE(HISTORICO, 500));
        END

        IF (OLD.GRUPO_CLIENTE_ID > 0) THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA_GRUPO', OLD.GRUPO_CLIENTE_ID, FN_ELIPSE(HISTORICO, 500));
        END

        IF (OLD.PAGAMENTO_FORMA_ID > 0) THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBPAGAMENTO_FORMA', OLD.PAGAMENTO_FORMA_ID, FN_ELIPSE(HISTORICO, 500));
        END

    END
END
^


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

DECLARE VARIABLE NEW_CLIENTE VARCHAR(500);
DECLARE VARIABLE NEW_GRUPO_CLIENTE VARCHAR(500);
DECLARE VARIABLE NEW_FORM_PAG VARCHAR(500);
BEGIN

    HISTORICO = '';

    NEW_CLIENTE         = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A            WHERE A.HABILITA_CLIENTE = '1'  AND A.CODIGO = NEW.CLIENTE_ID), '');
    NEW_GRUPO_CLIENTE   = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO        FROM TBEMPRESA_GRUPO B      WHERE B.TIPO = 'C'              AND B.ID = NEW.GRUPO_CLIENTE_ID), '');
    NEW_FORM_PAG        = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO    FROM TBPAGAMENTO_FORMA C    WHERE C.CODIGO = NEW.PAGAMENTO_FORMA_ID), '');

    IF (NEW.ID > 0) THEN
    BEGIN

        IF (NEW.TIPO_INCLUSAO = 2) THEN
        BEGIN
            HISTORICO = HISTORICO||' FORMA DE PAGAMENTO: '||NEW_FORM_PAG||' INCLUIDA NO GRUPO DE CLIENTES: '||NEW_GRUPO_CLIENTE||' (12450)';
        END ELSE
        IF (NEW.TIPO_INCLUSAO = 1) THEN
        BEGIN

            IF (NEW.GRUPO_CLIENTE_ID > 0) THEN
            BEGIN
                HISTORICO = HISTORICO||' GRUPO DE CLIENTE: '||NEW_GRUPO_CLIENTE||' INCLUIDO NA FORMA DE PAGAMENTO: '||NEW_FORM_PAG||' (20181)';
            END ELSE
            BEGIN
                HISTORICO = HISTORICO||' CLIENTE: '||NEW_CLIENTE||' INCLUIDO NA FORMA DE PAGAMENTO: '||NEW_FORM_PAG||' (20181)';
            END

        END ELSE
        BEGIN
            HISTORICO = HISTORICO||' FORMA DE PAGAMENTO: '||NEW_FORM_PAG||' INCLUIDA NO CLIENTE: '||NEW_CLIENTE||' (12360)';
        END

    END

    IF (HISTORICO <> '') THEN
    BEGIN

        IF (NEW.CLIENTE_ID > 0) THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA', NEW.CLIENTE_ID, HISTORICO);
        END

        IF (NEW.GRUPO_CLIENTE_ID > 0) THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA_GRUPO', NEW.GRUPO_CLIENTE_ID, HISTORICO);
        END

        IF (NEW.PAGAMENTO_FORMA_ID > 0) THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBPAGAMENTO_FORMA', NEW.PAGAMENTO_FORMA_ID, HISTORICO);
        END

    END
END
^

SET TERM ; ^



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

COMMENT ON COLUMN TBCLIENTE_PAGAMENTO_FORMA.UTILIZA_LIMITE_CREDITO IS 
'0 - NAO UTILIZA O LIMITE DE CREDITO DO CLIENTE;
1 - UTILIZA O LIMITE DE CREDITO DO CLIENTE;';

COMMENT ON COLUMN TBCLIENTE_PAGAMENTO_FORMA.TIPO_INCLUSAO IS 
'0 - CADASTRO INDIVIDUAL - CLIENTES;
1 - CADASTRO INDIVIDUAL - FORMAS DE PAGAMENTO;
2 - CADASTRO DE GRUPOS DE CLIENTES;';


/******************************************************************************/
/******************************************************************************/
/******************************************************************************/


INSERT INTO TBCLIENTE_PAGAMENTO_FORMA (CLIENTE_ID, GRUPO_CLIENTE_ID, PAGAMENTO_FORMA_ID, UTILIZA_LIMITE_CREDITO, TIPO_INCLUSAO)
    SELECT
        0,
        COALESCE(A.EMPRESA_GRUPO_ID, 0),
        COALESCE(A.PAGAMENTO_FORMA, 0),
        1,
        2
    FROM TBEMPRESA_GRUPO_LIMITE_CREDITO A
    WHERE COALESCE((SELECT FIRST 1 B.ID FROM TBCLIENTE_PAGAMENTO_FORMA B WHERE B.GRUPO_CLIENTE_ID = A.EMPRESA_GRUPO_ID AND B.PAGAMENTO_FORMA_ID = A.PAGAMENTO_FORMA), 0) = 0;

