CREATE OR ALTER TRIGGER TBCLIENTE_MODELO_PRECO_B03IU FOR TBCLIENTE_MODELO_PRECO
ACTIVE BEFORE INSERT OR UPDATE POSITION 4
AS

DECLARE VARIABLE FAMILIA_ID INTEGER;
DECLARE VARIABLE COUNT_REGISTROS INTEGER;
DECLARE VARIABLE DESCRICAO_MODELO VARCHAR(50);
DECLARE VARIABLE DESCRICAO_TABELA VARCHAR(100);
DECLARE VARIABLE DESCRICAO_FAMILIA VARCHAR(20);

BEGIN

    /* BUSCA FAMILIA DO MODELO */

    SELECT T.FAMILIA_CODIGO, FN_LPAD(T.CODIGO, 4, '0')||' - '||T.DESCRICAO FROM TBMODELO T WHERE T.CODIGO = NEW.MODELO_CODIGO INTO :FAMILIA_ID, :DESCRICAO_MODELO;

    IF(:FAMILIA_ID > 0) THEN
        BEGIN
            /* VERIFICA SE A FAMILIA DO MODELO PERTENCE A TABELA DE PRECO SELECIONADA */

            SELECT COUNT(T.FAMILIA_ID) FROM TBTABELA_PRECO_FAMILIA T
            WHERE   T.TABELA_PRECO_ID   = NEW.TABELA_ID
                AND T.FAMILIA_ID        = :FAMILIA_ID
            INTO :COUNT_REGISTROS;

            IF(:COUNT_REGISTROS = 0) THEN
            BEGIN

                /* BUSCA A DESCRICAO DA TABELA */

                SELECT FIRST 1 FN_LPAD(T.ID, 4, '0')||' - '||T.DESCRICAO FROM TBTABELA_PRECO T WHERE T.ID = NEW.TABELA_ID INTO :DESCRICAO_TABELA;

                /* BUSCA A DESCRICAO DA FAMILIA */

                SELECT FIRST 1 FN_LPAD(T.CODIGO, 4, '0')||' - '||T.DESCRICAO FROM TBFAMILIA T WHERE T.CODIGO = :FAMILIA_ID INTO :DESCRICAO_FAMILIA;

                EXCEPTION "..."'FAMILIA ' ||:DESCRICAO_FAMILIA||' DO MODELO '||:DESCRICAO_MODELO||' NAO PERMITIDA PARA A TABELA DE PREÇO '||:DESCRICAO_TABELA;

            END
            

        END

END;

COMMENT ON TRIGGER TBCLIENTE_MODELO_PRECO_B03IU IS 'VERIFICAR SE A FAMILIA DO MODELO ESTÁ CONTIDA NA TABELA DE PREÇO DO MODELO';


CREATE OR ALTER TRIGGER TBCLIENTE_PRODUTO_PRECO_B02IU FOR TBCLIENTE_PRODUTO_PRECO
ACTIVE BEFORE INSERT OR UPDATE POSITION 4
AS

DECLARE VARIABLE FAMILIA_ID INTEGER;
DECLARE VARIABLE COUNT_REGISTROS INTEGER;
DECLARE VARIABLE DESCRICAO_PRODUTO VARCHAR(100);
DECLARE VARIABLE DESCRICAO_TABELA VARCHAR(100);
DECLARE VARIABLE DESCRICAO_FAMILIA VARCHAR(20);

BEGIN

    /* BUSCA FAMILIA DO PRODUTO */

    SELECT T.FAMILIA_CODIGO, FN_LPAD(T.CODIGO, 4, '0')||' - '||T.DESCRICAO FROM TBPRODUTO T WHERE T.CODIGO = NEW.PRODUTO_CODIGO INTO :FAMILIA_ID, :DESCRICAO_PRODUTO;

    IF(:FAMILIA_ID > 0) THEN
        BEGIN
            /* VERIFICA SE A FAMILIA DO PRODUTO PERTENCE A TABELA DE PRECO SELECIONADA */

            SELECT COUNT(T.FAMILIA_ID) FROM TBTABELA_PRECO_FAMILIA T
            WHERE   T.TABELA_PRECO_ID   = NEW.TABELA_ID
                AND T.FAMILIA_ID        = :FAMILIA_ID
            INTO :COUNT_REGISTROS;

            IF(:COUNT_REGISTROS = 0) THEN
            BEGIN

                /* BUSCA A DESCRICAO DA TABELA */

                SELECT FIRST 1 FN_LPAD(T.ID, 4, '0')||' - '||T.DESCRICAO FROM TBTABELA_PRECO T WHERE T.ID = NEW.TABELA_ID INTO :DESCRICAO_TABELA;

                /* BUSCA A DESCRICAO DA FAMILIA */

                SELECT FIRST 1 FN_LPAD(T.CODIGO, 4, '0')||' - '||T.DESCRICAO FROM TBFAMILIA T WHERE T.CODIGO = :FAMILIA_ID INTO :DESCRICAO_FAMILIA;

                EXCEPTION "..."'FAMILIA ' ||:DESCRICAO_FAMILIA||' DO PRODUTO '||:DESCRICAO_PRODUTO||' NAO PERMITIDA PARA A TABELA DE PREÇO '||:DESCRICAO_TABELA;

            END
            

        END

END;

COMMENT ON TRIGGER TBCLIENTE_PRODUTO_PRECO_B02IU IS 'VERIFICAR SE A FAMILIA DO PRODUTO ESTÁ CONTIDA NA TABELA DE PREÇO DO PRODUTO';

CREATE OR ALTER TRIGGER TTBCLIENTE_PRODUTO_PRECO_B03I FOR TBCLIENTE_PRODUTO_PRECO
ACTIVE BEFORE INSERT POSITION 3
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('TBCLIENTE_PRODUTO_PRECO', NEW.ID, HISTORICO);
  END
END;

CREATE OR ALTER TRIGGER TTBCLIENTE_PRODUTO_PRECO_B03U FOR TBCLIENTE_PRODUTO_PRECO
ACTIVE BEFORE UPDATE POSITION 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';

    IF(OLD.TABELA_ID <> NEW.TABELA_ID) THEN
    BEGIN
       HISTORICO = HISTORICO||' TABELA:'||OLD.TABELA_ID||'->'||NEW.TABELA_ID;
    END
	
	IF(OLD.CLIENTE_CODIGO <> NEW.CLIENTE_CODIGO) THEN
    BEGIN
       HISTORICO = HISTORICO||' Cliente:'||OLD.CLIENTE_CODIGO||'->'||NEW.CLIENTE_CODIGO;
    END
	
	IF(OLD.PRODUTO_CODIGO <> NEW.PRODUTO_CODIGO) THEN
    BEGIN
       HISTORICO = HISTORICO||' Produto:'||OLD.PRODUTO_CODIGO||'->'||NEW.PRODUTO_CODIGO;
    END

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

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

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

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

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

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

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

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

    IF(OLD.PR_NF_08 <> NEW.PR_NF_08) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T08:'||OLD.PR_NF_08||'->'||NEW.PR_NF_08;
    END
    
    IF(OLD.PR_NF_09 <> NEW.PR_NF_09) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T09:'||OLD.PR_NF_09||'->'||NEW.PR_NF_09;
    END
    
    IF(OLD.PR_NF_10 <> NEW.PR_NF_10) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T10:'||OLD.PR_NF_10||'->'||NEW.PR_NF_10;
    END
    
    IF(OLD.PR_NF_11 <> NEW.PR_NF_11) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T11:'||OLD.PR_NF_11||'->'||NEW.PR_NF_11;
    END
    
    IF(OLD.PR_NF_12 <> NEW.PR_NF_12) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T12:'||OLD.PR_NF_12||'->'||NEW.PR_NF_12;
    END
    
    IF(OLD.PR_NF_13 <> NEW.PR_NF_13) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T13:'||OLD.PR_NF_13||'->'||NEW.PR_NF_13;
    END
    
    IF(OLD.PR_NF_14 <> NEW.PR_NF_14) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T14:'||OLD.PR_NF_14||'->'||NEW.PR_NF_14;
    END
    
    IF(OLD.PR_NF_15 <> NEW.PR_NF_15) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T15:'||OLD.PR_NF_15||'->'||NEW.PR_NF_15;
    END
    
    IF(OLD.PR_NF_16 <> NEW.PR_NF_16) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T16:'||OLD.PR_NF_16||'->'||NEW.PR_NF_16;
    END
    
    IF(OLD.PR_NF_17 <> NEW.PR_NF_17) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T17:'||OLD.PR_NF_17||'->'||NEW.PR_NF_17;
    END
    
    IF(OLD.PR_NF_18 <> NEW.PR_NF_18) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T18:'||OLD.PR_NF_18||'->'||NEW.PR_NF_18;
    END

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

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

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCLIENTE_PRODUTO_PRECO',NEW.ID,FN_ELIPSES(HISTORICO,500));
    END
END;

CREATE OR ALTER TRIGGER TTBCLIENTE_PRODUTO_PRECO_B01D FOR TBCLIENTE_PRODUTO_PRECO
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

  HISTORICO = '';

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

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

CREATE OR ALTER TRIGGER TTBCLIENTE_MODELO_PRECO_B02I FOR TBCLIENTE_MODELO_PRECO
ACTIVE BEFORE INSERT POSITION 2
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('TBCLIENTE_MODELO_PRECO', NEW.ID, HISTORICO);
  END
END;

CREATE OR ALTER TRIGGER TTBCLIENTE_MODELO_PRECO_B04U FOR TBCLIENTE_MODELO_PRECO
ACTIVE BEFORE UPDATE POSITION 4
AS
DECLARE VARIABLE HISTORICO VARCHAR(4000);
BEGIN
    HISTORICO = '';

    IF(OLD.TABELA_ID <> NEW.TABELA_ID) THEN
    BEGIN
       HISTORICO = HISTORICO||' TABELA:'||OLD.TABELA_ID||'->'||NEW.TABELA_ID;
    END
	
	IF(OLD.CLIENTE_CODIGO <> NEW.CLIENTE_CODIGO) THEN
    BEGIN
       HISTORICO = HISTORICO||' Cliente:'||OLD.CLIENTE_CODIGO||'->'||NEW.CLIENTE_CODIGO;
    END

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

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

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

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

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

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

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

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

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

    IF(OLD.PR_NF_08 <> NEW.PR_NF_08) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T08:'||OLD.PR_NF_08||'->'||NEW.PR_NF_08;
    END
    
    IF(OLD.PR_NF_09 <> NEW.PR_NF_09) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T09:'||OLD.PR_NF_09||'->'||NEW.PR_NF_09;
    END
    
    IF(OLD.PR_NF_10 <> NEW.PR_NF_10) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T10:'||OLD.PR_NF_10||'->'||NEW.PR_NF_10;
    END
    
    IF(OLD.PR_NF_11 <> NEW.PR_NF_11) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T11:'||OLD.PR_NF_11||'->'||NEW.PR_NF_11;
    END
    
    IF(OLD.PR_NF_12 <> NEW.PR_NF_12) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T12:'||OLD.PR_NF_12||'->'||NEW.PR_NF_12;
    END
    
    IF(OLD.PR_NF_13 <> NEW.PR_NF_13) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T13:'||OLD.PR_NF_13||'->'||NEW.PR_NF_13;
    END
    
    IF(OLD.PR_NF_14 <> NEW.PR_NF_14) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T14:'||OLD.PR_NF_14||'->'||NEW.PR_NF_14;
    END
    
    IF(OLD.PR_NF_15 <> NEW.PR_NF_15) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T15:'||OLD.PR_NF_15||'->'||NEW.PR_NF_15;
    END
    
    IF(OLD.PR_NF_16 <> NEW.PR_NF_16) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T16:'||OLD.PR_NF_16||'->'||NEW.PR_NF_16;
    END
    
    IF(OLD.PR_NF_17 <> NEW.PR_NF_17) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T17:'||OLD.PR_NF_17||'->'||NEW.PR_NF_17;
    END
    
    IF(OLD.PR_NF_18 <> NEW.PR_NF_18) THEN
    BEGIN
       HISTORICO = HISTORICO||' NF.T18:'||OLD.PR_NF_18||'->'||NEW.PR_NF_18;
    END

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

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

    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCLIENTE_MODELO_PRECO',NEW.ID,FN_ELIPSES(HISTORICO,500));
    END
END;

CREATE OR ALTER TRIGGER TTBCLIENTE_MODELO_PRECO_B01D FOR TBCLIENTE_MODELO_PRECO
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

  HISTORICO = '';

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

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