ALTER TABLE TBESTOQUE_CLIENTE
    ADD FAMILIA_ID INTEGER;
	
ALTER TABLE TBESTOQUE_CLIENTE_ITEM_PREVISAO
    ADD ESTOQUE_CLIENTE_ID INTEGER;
	
CREATE OR ALTER trigger ttbestoque_cliente_b01u for tbestoque_cliente
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';

    IF ( NEW.EMPRESA_ID IS DISTINCT FROM OLD.EMPRESA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' CLIENTE:'||COALESCE(OLD.EMPRESA_ID, 0)||'->'||COALESCE(NEW.EMPRESA_ID, 0);
    END

    IF ( NEW.FAMILIA_ID IS DISTINCT FROM OLD.FAMILIA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' FAMILIA:'||COALESCE(OLD.FAMILIA_ID, 0)||'->'||COALESCE(NEW.FAMILIA_ID, 0);
    END

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


    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' REG.ALTERADO: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_CLIENTE',NEW.ID, HISTORICO);
    END
END;

CREATE OR ALTER trigger ttbestoque_cliente_item_b02i for tbestoque_cliente_item
active before insert position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE MODELO_DESC VARCHAR(100);
DECLARE VARIABLE TAMANHO_DESCRICAO VARCHAR(100);
DECLARE VARIABLE GRADE_MODELO INTEGER;
DECLARE VARIABLE COR_DESC VARCHAR(100);

BEGIN

    HISTORICO = '';

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

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_CLIENTE',NEW.ESTOQUE_CLIENTE_ID, HISTORICO);
    END
END;

CREATE OR ALTER trigger ttbestoque_cliente_item_b01u for tbestoque_cliente_item
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE COR_DESC VARCHAR(100);
BEGIN

    HISTORICO = '';

    COR_DESC    = COALESCE((SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = NEW.COR_ID), '');

    IF (OLD.MODELO_ID IS DISTINCT FROM NEW.MODELO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' MOD: '||COALESCE(OLD.MODELO_ID, 0)||'->'||COALESCE(NEW.MODELO_ID, 0);
    END

    IF (OLD.COR_ID IS DISTINCT FROM NEW.COR_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' COR: '||COALESCE(OLD.COR_ID, 0)||'->'||COALESCE(NEW.COR_ID, 0);
    END

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

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

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

    IF (HISTORICO <> '') THEN
    BEGIN

        HISTORICO = ' ITEM '||NEW.ID||' ALTERADO: '||HISTORICO;


        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_CLIENTE', NEW.ESTOQUE_CLIENTE_ID, HISTORICO);
    END

END;

CREATE OR ALTER trigger ttbestoque_cliente_item_b01d for tbestoque_cliente_item
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE MODELO_DESC VARCHAR(100);
DECLARE VARIABLE COR_DESC VARCHAR(100);

BEGIN

    HISTORICO = '';
    
    --MODELO_DESC = COALESCE((SELECT FIRST 1 M.DESCRICAO FROM TBMODELO M WHERE M.CODIGO = OLD.MODELO_ID), '');
    --COR_DESC    = COALESCE((SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = OLD.COR_ID), '');

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

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_CLIENTE',OLD.ESTOQUE_CLIENTE_ID, HISTORICO);
    END
END;

CREATE trigger ttbestoque_cliente_item_b02d for tbestoque_cliente_item
active before delete position 2
AS
BEGIN
  DELETE FROM TBESTOQUE_CLIENTE_ITEM_PREVISAO T WHERE T.ESTOQUE_CLIENTE_ITEM_ID = OLD.ID;
END;


CREATE trigger ttbestoque_cli_item_prev_b01 for tbestoque_cliente_item_previsao
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE PERIODO_F VARCHAR(10);
BEGIN
    :HISTORICO = '';

    IF (NEW.QUANTIDADE IS DISTINCT FROM OLD.QUANTIDADE) THEN
    BEGIN
        HISTORICO = HISTORICO||' QTD:'||COALESCE(OLD.QUANTIDADE, 0)||'->'||COALESCE(NEW.QUANTIDADE, 0);
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        :PERIODO_F = FN_DATE(NEW.PERIODO, 'MYYYY');

        :HISTORICO = ' PREV. '||:PERIODO_F||' DO ITEM '||NEW.ESTOQUE_CLIENTE_ITEM_ID||' ALTERADA: '||HISTORICO;

        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_CLIENTE',OLD.ESTOQUE_CLIENTE_ID, HISTORICO);
    END
    
END;


CREATE trigger ttbestoque_cli_item_prev_b01d for tbestoque_cliente_item_previsao
active before delete position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE PERIODO_F VARCHAR(10);
BEGIN
    :HISTORICO = '';
    :PERIODO_F = FN_DATE(OLD.PERIODO, 'MYYYY');

    :HISTORICO = ' PREV. '||:PERIODO_F||' DO ITEM '||OLD.ESTOQUE_CLIENTE_ITEM_ID||' EXCLUIDA';

    EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_CLIENTE',OLD.ESTOQUE_CLIENTE_ID, HISTORICO);
END;

CREATE OR ALTER trigger ttbestoque_cliente_b01iu for tbestoque_cliente
active before insert or update position 1
AS
DECLARE VARIABLE ID VARCHAR(100);
BEGIN
    FOR
        SELECT
           ID

        FROM TBESTOQUE_CLIENTE T
        WHERE T.EMPRESA_ID = NEW.EMPRESA_ID
        AND T.FAMILIA_ID = NEW.FAMILIA_ID
        AND T.ID <> NEW.ID

    INTO
    :ID
    DO BEGIN
        EXCEPTION "..." 'CLIENTE: '||'<b>'||COALESCE((SELECT FIRST 1 C.RAZAOSOCIAL FROM TBEMPRESA C WHERE C.CODIGO = NEW.EMPRESA_ID), '')||'</b>'||' COM REGISTRO DE ESTOQUE JÁ VINCULADO PARA ESSA FAMILIA';
    END

END;

UPDATE OR INSERT INTO TBPARAMETRO (TABELA, CODIGO, DESCRICAO, VALOR, OBSERVACAO, GRUPO, DATAHORA, USUARIO_ID)
                           VALUES ('TBUSUARIO', 'LOTE_MIN_MAX_CLI', 'ALTERAR LOTE MIN/MAX ESTOQUE DO CLIENTE', '0', 'PERMITIR ALTERAR LOTE MIN/MAX DO ESTOQUE DO CLIENTE
0 - NAO / 1 - SIM;', 'WEB22720', '2022-01-26 11:18:47', 837)
                         MATCHING (TABELA, CODIGO);

COMMIT WORK;