ALTER TABLE TBCATALOGO_PRODUTO
    ADD CAMPOS_INFO_CLIENTE BLOB SUB_TYPE 1 SEGMENT SIZE 80;

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

UPDATE TBCATALOGO_PRODUTO
	SET CAMPOS_INFO_CLIENTE = '[{"ORDEM":1,"CAMPO":"TELEFONE","DESCRICAO":"WhatsApp","VISIVEL":2},{"ORDEM":2,"CAMPO":"NOME","DESCRICAO":"Nome","VISIVEL":2},{"ORDEM":3,"CAMPO":"DOCUMENTO","DESCRICAO":"CPF/CNJP","VISIVEL":0},{"ORDEM":4,"CAMPO":"EMAIL","DESCRICAO":"Email","VISIVEL":0},{"ORDEM":5,"CAMPO":"CEP","DESCRICAO":"CEP","VISIVEL":0},{"ORDEM":6,"CAMPO":"UF","DESCRICAO":"UF","VISIVEL":0},{"ORDEM":7,"CAMPO":"CIDADE","DESCRICAO":"Cidade","VISIVEL":0},{"ORDEM":8,"CAMPO":"ENDERECO","DESCRICAO":"Endereço","VISIVEL":0},{"ORDEM":9,"CAMPO":"NUMERO","DESCRICAO":"Número","VISIVEL":0},{"ORDEM":10,"CAMPO":"COMPLEMENTO","DESCRICAO":"Complemento","VISIVEL":0},{"ORDEM":11,"CAMPO":"BAIRRO","DESCRICAO":"Bairro","VISIVEL":0}]'
	WHERE CAMPOS_INFO_CLIENTE IS NULL;

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b01i for tbcatalogo_produto
active before insert position 0
AS
BEGIN
    IF (COALESCE(NEW.CAMPOS_INFO_CLIENTE, '') = '') THEN
    BEGIN
        NEW.CAMPOS_INFO_CLIENTE = '[{"ORDEM":1,"CAMPO":"TELEFONE","DESCRICAO":"WhatsApp","VISIVEL":2},{"ORDEM":2,"CAMPO":"NOME","DESCRICAO":"Nome","VISIVEL":2},{"ORDEM":3,"CAMPO":"DOCUMENTO","DESCRICAO":"CPF/CNJP","VISIVEL":0},{"ORDEM":4,"CAMPO":"EMAIL","DESCRICAO":"Email","VISIVEL":0},{"ORDEM":5,"CAMPO":"CEP","DESCRICAO":"CEP","VISIVEL":0},{"ORDEM":6,"CAMPO":"UF","DESCRICAO":"UF","VISIVEL":0},{"ORDEM":7,"CAMPO":"CIDADE","DESCRICAO":"Cidade","VISIVEL":0},{"ORDEM":8,"CAMPO":"ENDERECO","DESCRICAO":"Endereço","VISIVEL":0},{"ORDEM":9,"CAMPO":"NUMERO","DESCRICAO":"Número","VISIVEL":0},{"ORDEM":10,"CAMPO":"COMPLEMENTO","DESCRICAO":"Complemento","VISIVEL":0},{"ORDEM":11,"CAMPO":"BAIRRO","DESCRICAO":"Bairro","VISIVEL":0}]';
    END

    IF (COALESCE(NEW.ID, 0) = 0) THEN
        NEW.ID = GEN_ID(GTBCATALOGO_PRODUTO, 1);
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b01u for tbcatalogo_produto
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE NEW_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE OLD_TABELA_PRECO VARCHAR(500);
DECLARE VARIABLE NEW_TABELA_PRECO VARCHAR(500);
DECLARE VARIABLE OLD_LOCALIZACAO VARCHAR(500);
DECLARE VARIABLE NEW_LOCALIZACAO VARCHAR(500);
DECLARE VARIABLE OLD_CANAL_VENDAS VARCHAR(500);
DECLARE VARIABLE NEW_CANAL_VENDAS VARCHAR(500);
DECLARE VARIABLE OLD_TABELA_PRECO_ESP VARCHAR(500);
DECLARE VARIABLE NEW_TABELA_PRECO_ESP VARCHAR(500);
DECLARE VARIABLE OLD_TABELA_PRECO_REC VARCHAR(500);
DECLARE VARIABLE NEW_TABELA_PRECO_REC VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_ESTABELECIMENTO     = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.RAZAOSOCIAL  FROM TBESTABELECIMENTO A    WHERE A.CODIGO = OLD.ESTABELECIMENTO_ID), '');
    NEW_ESTABELECIMENTO     = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.RAZAOSOCIAL  FROM TBESTABELECIMENTO A    WHERE A.CODIGO = NEW.ESTABELECIMENTO_ID), '');
    OLD_TABELA_PRECO        = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO        FROM TBTABELA_PRECO B       WHERE B.ID = OLD.TABELA_PRECO_ID), '');
    NEW_TABELA_PRECO        = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO        FROM TBTABELA_PRECO B       WHERE B.ID = NEW.TABELA_PRECO_ID), '');
    OLD_LOCALIZACAO         = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO    FROM TBLOCALIZACAO C        WHERE C.CODIGO = OLD.LOCALIZACAO_ID), '');
    NEW_LOCALIZACAO         = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 4, '0')||' - '||C.DESCRICAO    FROM TBLOCALIZACAO C        WHERE C.CODIGO = NEW.LOCALIZACAO_ID), '');
    OLD_CANAL_VENDAS        = COALESCE((SELECT FIRST 1 FN_LPAD(D.ID, 4, '0')||' - '||D.DESCRICAO        FROM TBCANAL_VENDAS D       WHERE D.ID = OLD.CANAL_VENDAS_ID), '');
    NEW_CANAL_VENDAS        = COALESCE((SELECT FIRST 1 FN_LPAD(D.ID, 4, '0')||' - '||D.DESCRICAO        FROM TBCANAL_VENDAS D       WHERE D.ID = NEW.CANAL_VENDAS_ID), '');
    OLD_TABELA_PRECO_ESP    = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO        FROM TBTABELA_PRECO E       WHERE E.ID = OLD.TABELA_PRECO_ESP_ID), '');
    NEW_TABELA_PRECO_ESP    = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO        FROM TBTABELA_PRECO E       WHERE E.ID = NEW.TABELA_PRECO_ESP_ID), '');
    OLD_TABELA_PRECO_REC    = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO        FROM TBTABELA_PRECO E       WHERE E.ID = OLD.TABELA_PRECO_REC_ID), '');
    NEW_TABELA_PRECO_REC    = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO        FROM TBTABELA_PRECO E       WHERE E.ID = NEW.TABELA_PRECO_REC_ID), '');

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

    IF (OLD.DATA_INICIAL IS DISTINCT FROM NEW.DATA_INICIAL) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.INICIAL:'||FORMATDATE(OLD.DATA_INICIAL)||'->'||FORMATDATE(NEW.DATA_INICIAL);
    END

    IF (OLD.DATA_FIM IS DISTINCT FROM NEW.DATA_FIM) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.FINAL:'||FORMATDATE(OLD.DATA_FIM)||'->'||FORMATDATE(NEW.DATA_FIM);
    END

    IF (OLD.UTILIZADO IS DISTINCT FROM NEW.UTILIZADO) THEN
    BEGIN
        HISTORICO = HISTORICO||' STATUS/UTIL:'||OLD.UTILIZADO||'->'||NEW.UTILIZADO;
    END

    IF (OLD.ESTABELECIMENTO_ID IS DISTINCT FROM NEW.ESTABELECIMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' ESTAB:'||OLD_ESTABELECIMENTO||'->'||NEW_ESTABELECIMENTO;
    END

    IF (OLD.LOCALIZACAO_ID IS DISTINCT FROM NEW.LOCALIZACAO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' LOCALIZACAO:'||OLD_LOCALIZACAO||'->'||NEW_LOCALIZACAO;
    END

    IF (OLD.TABELA_PRECO_ID IS DISTINCT FROM NEW.TABELA_PRECO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' TAB.PRECO:'||OLD_TABELA_PRECO||'->'||NEW_TABELA_PRECO;
    END

    IF (OLD.TABELA_PRECO_ESP_ID IS DISTINCT FROM NEW.TABELA_PRECO_ESP_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' TAB.PRECO ESP:'||OLD_TABELA_PRECO_ESP||'->'||NEW_TABELA_PRECO_ESP;
    END

    IF (OLD.TABELA_PRECO_REC_ID IS DISTINCT FROM NEW.TABELA_PRECO_REC_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' TAB.PRECO REC:'||OLD_TABELA_PRECO_REC||'->'||NEW_TABELA_PRECO_REC;
    END

    IF (OLD.CANAL_VENDAS_ID IS DISTINCT FROM NEW.CANAL_VENDAS_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' CANAL VENDAS:'||OLD_CANAL_VENDAS||'->'||NEW_CANAL_VENDAS;
    END

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

    IF (OLD.VISUALIZACAO_GRADE IS DISTINCT FROM NEW.VISUALIZACAO_GRADE) THEN
    BEGIN
        HISTORICO = HISTORICO||' GRADE TAM:'||OLD.VISUALIZACAO_GRADE||'->'||NEW.VISUALIZACAO_GRADE;
    END

    IF (OLD.VISUALIZACAO_COR IS DISTINCT FROM NEW.VISUALIZACAO_COR) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC.COR:'||OLD.VISUALIZACAO_COR||'->'||NEW.VISUALIZACAO_COR;
    END

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

    IF (OLD.HABILITA_ESTOQUE IS DISTINCT FROM NEW.HABILITA_ESTOQUE) THEN
    BEGIN
        HISTORICO = HISTORICO||' HAB.ESTOQUE:'||OLD.HABILITA_ESTOQUE||'->'||NEW.HABILITA_ESTOQUE;
    END

    IF (OLD.CONTATO_VENDEDOR IS DISTINCT FROM NEW.CONTATO_VENDEDOR) THEN
    BEGIN
        HISTORICO = HISTORICO||' CONTATO:'||FN_MASK_V2(OLD.CONTATO_VENDEDOR, 'FONE')||'->'||FN_MASK_V2(NEW.CONTATO_VENDEDOR, 'FONE');
    END

    IF (OLD.PERFIL_PEDIDO IS DISTINCT FROM NEW.PERFIL_PEDIDO) THEN
    BEGIN
        HISTORICO = HISTORICO||' PERFIL PED:'||OLD.PERFIL_PEDIDO||'->'||NEW.PERFIL_PEDIDO;
    END

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

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

    IF (OLD.DESCRICAO_AGRUPAMENTO IS DISTINCT FROM NEW.DESCRICAO_AGRUPAMENTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC.AGRUP:'||OLD.DESCRICAO_AGRUPAMENTO||'->'||NEW.DESCRICAO_AGRUPAMENTO;
    END

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

    IF (OLD.TIPO_VINCULO_LOGIN IS DISTINCT FROM NEW.TIPO_VINCULO_LOGIN) THEN
    BEGIN
        HISTORICO = HISTORICO||' VINC.LOGIN:'||OLD.TIPO_VINCULO_LOGIN||'->'||NEW.TIPO_VINCULO_LOGIN;
    END

    IF (OLD.TIPO_ORDEM_MODELO IS DISTINCT FROM NEW.TIPO_ORDEM_MODELO) THEN
    BEGIN
        HISTORICO = HISTORICO||' ORDEM MOD:'||OLD.TIPO_ORDEM_MODELO||'->'||NEW.TIPO_ORDEM_MODELO;
    END
	
	IF (OLD.VALOR_MINIMO_PEDIDO IS DISTINCT FROM NEW.VALOR_MINIMO_PEDIDO) THEN
    BEGIN
        HISTORICO = HISTORICO||' VR.PED.MIN:'||FN_FORMAT_NUMBER2(OLD.VALOR_MINIMO_PEDIDO, 2)||'->'||FN_FORMAT_NUMBER2(NEW.VALOR_MINIMO_PEDIDO, 2);
    END

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

    IF (OLD.COR_BASE1 IS DISTINCT FROM NEW.COR_BASE1) THEN
    BEGIN
        HISTORICO = HISTORICO||' COR BASE1:'||OLD.COR_BASE1||'->'||NEW.COR_BASE1;
    END

    IF (OLD.COR_BASE2 IS DISTINCT FROM NEW.COR_BASE2) THEN
    BEGIN
        HISTORICO = HISTORICO||' COR BASE2:'||OLD.COR_BASE2||'->'||NEW.COR_BASE2;
    END

    IF (OLD.COR_BASE3 IS DISTINCT FROM NEW.COR_BASE3) THEN
    BEGIN
        HISTORICO = HISTORICO||' COR BASE3:'||OLD.COR_BASE3||'->'||NEW.COR_BASE3;
    END

    IF (OLD.COR_CARD IS DISTINCT FROM NEW.COR_CARD) THEN 
    BEGIN
        HISTORICO = HISTORICO||' COR CARD:'||OLD.COR_CARD||'->'||NEW.COR_CARD;
    END

    IF (OLD.COR_TEXTO IS DISTINCT FROM NEW.COR_TEXTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' COR TEXTO:'||OLD.COR_TEXTO||'->'||NEW.COR_TEXTO;
    END

    IF (OLD.WIDTH_CARD IS DISTINCT FROM NEW.WIDTH_CARD) THEN
    BEGIN
        HISTORICO = HISTORICO||' LARGURA CARD:'||OLD.WIDTH_CARD||'->'||NEW.WIDTH_CARD;
    END

    IF (OLD.HEIGHT_CARD IS DISTINCT FROM NEW.HEIGHT_CARD) THEN
    BEGIN
        HISTORICO = HISTORICO||' ALTURA CARD:'||OLD.HEIGHT_CARD||'->'||NEW.HEIGHT_CARD;
    END

    IF (OLD.WIDTH_CARD_CEL IS DISTINCT FROM NEW.WIDTH_CARD_CEL) THEN
    BEGIN
        HISTORICO = HISTORICO||' LARGURA CARD CEL:'||OLD.WIDTH_CARD_CEL||'->'||NEW.WIDTH_CARD_CEL;
    END

    IF (OLD.HEIGHT_CARD_CEL IS DISTINCT FROM NEW.HEIGHT_CARD_CEL) THEN
    BEGIN
        HISTORICO = HISTORICO||' ALTURA CARD CEL:'||OLD.HEIGHT_CARD_CEL||'->'||NEW.HEIGHT_CARD_CEL;
    END

    IF (OLD.LINK IS DISTINCT FROM NEW.LINK) THEN
    BEGIN
        HISTORICO = HISTORICO||' CAMPO LINK ALTERADO!';
    END

    IF (OLD.CABECALHO IS DISTINCT FROM NEW.CABECALHO) THEN
    BEGIN
        HISTORICO = HISTORICO||' CABECALHO LINK ALTERADO!';
    END

    IF (OLD.RODAPE IS DISTINCT FROM NEW.RODAPE) THEN
    BEGIN
        HISTORICO = HISTORICO||' RODAPE LINK ALTERADO!';
    END

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

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b02u for tbcatalogo_produto
active before update position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';

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

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'CAMPO LINK ALTERADO: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END

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

    HISTORICO = '';

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

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'CAMPO CABECALHO ALTERADO: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END

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

    HISTORICO = '';

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

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'CAMPO RODAPE ALTERADO: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^

