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


CREATE GENERATOR GTBCATALOGO_PRODUTO_VINCULO;

CREATE TABLE TBCATALOGO_PRODUTO_VINCULO (
    ID                  INTEGER NOT NULL,
    CATALOGO_ID         INTEGER NOT NULL,
    PDV_CONFERENCIA_ID  INTEGER NOT NULL,
    CODIGO_PED          INTEGER NOT NULL,
    DADOS_PEDIDO        BLOB SUB_TYPE 1 SEGMENT SIZE 80,
	DATA_HORA 			TIMESTAMP DEFAULT 'NOW'
);




/******************************************************************************/
/****                          Unique constraints                          ****/
/******************************************************************************/

ALTER TABLE TBCATALOGO_PRODUTO_VINCULO ADD CONSTRAINT UNQ1_TBCATALOGO_PRODUTO_VINCULO UNIQUE (ID);


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

ALTER TABLE TBCATALOGO_PRODUTO_VINCULO ADD CONSTRAINT PK_TBCATALOGO_PRODUTO_VINCULO PRIMARY KEY (CATALOGO_ID, PDV_CONFERENCIA_ID, CODIGO_PED);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX ITBCATALOGO_PRODUTO_VINCULO_01 ON TBCATALOGO_PRODUTO_VINCULO (ID);
CREATE INDEX ITBCATALOGO_PRODUTO_VINCULO_02 ON TBCATALOGO_PRODUTO_VINCULO (CATALOGO_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_VINCULO_03 ON TBCATALOGO_PRODUTO_VINCULO (CODIGO_PED);


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



SET TERM ^ ;



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



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

    HISTORICO = '';

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'PRE-PEDIDO: '||OLD.PDV_CONFERENCIA_ID||' VINCULADO VIA INCLUSAO POR CATALOGO: '||OLD.CATALOGO_ID||' COM CODIGO: '||OLD.CODIGO_PED||' EXCLUIDO!';
    END

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


/* Trigger: TTBCATALOGO_PROD_VINCULO_B01I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_VINCULO_B01I FOR TBCATALOGO_PRODUTO_VINCULO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (COALESCE(NEW.ID, 0) = 0) THEN
        NEW.ID = GEN_ID(GTBCATALOGO_PRODUTO_VINCULO, 1);
END
^


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

DECLARE VARIABLE OLD_CATALOGO VARCHAR(500);
DECLARE VARIABLE NEW_CATALOGO VARCHAR(500);
DECLARE VARIABLE OLD_PDV_CONFERENCIA VARCHAR(500);
DECLARE VARIABLE NEW_PDV_CONFERENCIA VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_CATALOGO = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 4, '0')||' - '||A.DESCRICAO FROM TBCATALOGO_PRODUTO A WHERE A.ID = OLD.CATALOGO_ID), '');
    NEW_CATALOGO = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 4, '0')||' - '||A.DESCRICAO FROM TBCATALOGO_PRODUTO A WHERE A.ID = NEW.CATALOGO_ID), '');
    OLD_PDV_CONFERENCIA = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 6, '0') FROM TBPDV_CONFERENCIA B WHERE B.ID = OLD.PDV_CONFERENCIA_ID), '');
    NEW_PDV_CONFERENCIA = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 6, '0') FROM TBPDV_CONFERENCIA B WHERE B.ID = NEW.PDV_CONFERENCIA_ID), '');

    IF (OLD.CATALOGO_ID <> NEW.CATALOGO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' CATALOGO:'||OLD_CATALOGO||'->'||NEW_CATALOGO;
    END

    IF (OLD.PDV_CONFERENCIA_ID <> NEW.PDV_CONFERENCIA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' PRE-PEDIDO:'||OLD_PDV_CONFERENCIA||'->'||NEW_PDV_CONFERENCIA;
    END

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

    IF (OLD.DADOS_PEDIDO <> NEW.DADOS_PEDIDO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DADOS DE INCLUSAO DO PEDIDO ALTERADOS!';
    END

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


/* Trigger: TTBCATALOGO_PROD_VINCULO_B02D */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_VINCULO_B02D FOR TBCATALOGO_PRODUTO_VINCULO
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE DADOS VARCHAR(5000);
BEGIN

    DADOS = '';

    DADOS = FN_TO_JSON_V3(
                FN_TO_PAR_JSON_V3('ID', OLD.ID),
                FN_TO_PAR_JSON_V3('CATALOGO_ID', OLD.CATALOGO_ID),
                FN_TO_PAR_JSON_V3('PDV_CONFERENCIA_ID', OLD.PDV_CONFERENCIA_ID),
                FN_TO_PAR_JSON_V3('CODIGO_PED', OLD.CODIGO_PED)
                );

    EXECUTE PROCEDURE SPI_BACKUP('TBCATALOGO_PRODUTO_VINCULO', OLD.ID, DADOS);
    EXECUTE PROCEDURE SPI_BACKUP('TBCATALOGO_PRODUTO_VINCULO', OLD.ID, OLD.DADOS_PEDIDO);
END
^


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

    HISTORICO = '';

    IF (NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'PRE-PEDIDO: '||NEW.PDV_CONFERENCIA_ID||' VINCULADO VIA INCLUSAO POR CATALOGO: '||NEW.CATALOGO_ID||' COM CODIGO: '||NEW.CODIGO_PED||' INCLUIDO!';
    END

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


/* Trigger: TTBCATALOGO_PROD_VINCULO_B02U */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_VINCULO_B02U FOR TBCATALOGO_PRODUTO_VINCULO
ACTIVE BEFORE UPDATE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';

    IF (OLD.DADOS_PEDIDO <> NEW.DADOS_PEDIDO) THEN
    BEGIN
        HISTORICO = HISTORICO||FN_ELIPSE(OLD.DADOS_PEDIDO, 200)||'->'||FN_ELIPSE(NEW.DADOS_PEDIDO, 200);
    END

    IF (HISTORICO <> '') THEN
    BEGIN
       HISTORICO = 'DADOS DE INCLUSAO DO PEDIDO ALTERADOS: '||HISTORICO;
       EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO_VINCULO', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^



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

COMMENT ON COLUMN TBCATALOGO_PRODUTO_VINCULO.CATALOGO_ID IS 
'ID do Catálogo Utilizado';

COMMENT ON COLUMN TBCATALOGO_PRODUTO_VINCULO.PDV_CONFERENCIA_ID IS 
'ID do Pré-Pedido';

COMMENT ON COLUMN TBCATALOGO_PRODUTO_VINCULO.CODIGO_PED IS 
'Código de Identificação do Pré-Pedido (Mesmo da TBPDV_CONFERENCIA)';

COMMENT ON COLUMN TBCATALOGO_PRODUTO_VINCULO.DADOS_PEDIDO IS 
'Dados Utilizados para a Geração do Pré-Pedido';



SET TERM ^ ;

CREATE OR ALTER trigger tbpdv_conferencia_b01d for tbpdv_conferencia
active before delete position 1
AS
DECLARE VARIABLE VINCULO_ID INTEGER;
begin
  IF(OLD.ID > 0) THEN
  BEGIN
        DELETE FROM TBPDV_CONFERENCIA_ITEM T WHERE T.PDV_CONFERENCIA_ID = OLD.ID;


        IF (OLD.CODIGO_PED > 0) THEN
        BEGIN
        
            :VINCULO_ID = COALESCE((SELECT FIRST 1 A.ID FROM TBCATALOGO_PRODUTO_VINCULO A WHERE A.CODIGO_PED = OLD.CODIGO_PED AND A.PDV_CONFERENCIA_ID = OLD.ID), 0);

            IF (:VINCULO_ID > 0) THEN
            BEGIN
                DELETE FROM TBCATALOGO_PRODUTO_VINCULO WHERE ID = :VINCULO_ID;
            END

        END
  END
end
^

SET TERM ; ^

