CREATE OR ALTER TRIGGER TTBPRODUTO_B01IU FOR TBPRODUTO
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE PRODUTO_COR VARCHAR(500);
DECLARE VARIABLE GRUPO_PRODUTO VARCHAR(500);
BEGIN

    :PRODUTO_COR   = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.DESCRICAO||' / '||FN_LPAD(A.COR_CODIGO, 6, '0')||' - '||COALESCE(B.DESCRICAO, 'SEM COR') FROM TBPRODUTO A LEFT JOIN TBCOR B ON B.CODIGO = A.COR_CODIGO WHERE A.GRUPO_PRODUTO_ID > 0 AND A.GRUPO_PRODUTO_ID = NEW.GRUPO_PRODUTO_ID AND A.COR_CODIGO = NEW.COR_CODIGO), '');
    :GRUPO_PRODUTO = COALESCE((SELECT FIRST 1 FN_LPAD(C.ID, 6, '0')||' - '||C.DESCRICAO FROM TBGRUPO_PRODUTO C WHERE C.ID = NEW.GRUPO_PRODUTO_ID), '');

    IF(INSERTING) THEN
    BEGIN

        IF(:PRODUTO_COR <> '') THEN
        BEGIN
            EXCEPTION "..." 'GRUPO DE PRODUTO '||:GRUPO_PRODUTO||' JA CONTEM UM PRODUTO COM A COR SELECIONADA. <br>PRODUTO/COR: '||PRODUTO_COR;
        END

        :PRODUTO_COR = COALESCE((SELECT FIRST 1 A.CODIGO FROM TBPRODUTO A LEFT JOIN TBCOR B ON B.CODIGO = A.COR_CODIGO WHERE A.DESCRICAO = NEW.DESCRICAO), '');
        
        IF(:PRODUTO_COR <> '') THEN
        BEGIN
            EXCEPTION "..." 'JA EXISTE UM PRODUTO CADASTRADO COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA!';
        END

    END

    IF (UPDATING) THEN
    BEGIN

        IF ((OLD.GRUPO_PRODUTO_ID <> NEW.GRUPO_PRODUTO_ID) OR (OLD.COR_CODIGO <> NEW.COR_CODIGO)) THEN
        BEGIN

            IF (:PRODUTO_COR <> '') THEN
            BEGIN
                EXCEPTION "..." 'GRUPO DE PRODUTO '||:GRUPO_PRODUTO||' JA CONTEM UM PRODUTO COM A COR SELECIONADA. <BR>PRODUTO/COR: '||PRODUTO_COR;
            END    

        END

        IF(NEW.DESCRICAO IS DISTINCT FROM OLD.DESCRICAO AND COALESCE(NEW.DESCRICAO,'') <> '')THEN
        BEGIN
            :PRODUTO_COR = COALESCE((SELECT FIRST 1 A.CODIGO FROM TBPRODUTO A LEFT JOIN TBCOR B ON B.CODIGO = A.COR_CODIGO WHERE A.DESCRICAO = NEW.DESCRICAO), '');
            
            IF(:PRODUTO_COR <> '') THEN
            BEGIN
                EXCEPTION "..." 'JA EXISTE UM PRODUTO CADASTRADO COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA!';
            END
        END

    END

END;

CREATE OR ALTER TRIGGER TTBGRUPO_PRODUTO_B01I FOR TBGRUPO_PRODUTO
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable ID_GRUPO_PRODUTO INTEGER;
BEGIN
   IF(INSERTING)THEN
   BEGIN
     ID_GRUPO_PRODUTO = COALESCE((SELECT FIRST 1 A.ID FROM TBGRUPO_PRODUTO A WHERE A.DESCRICAO = NEW.DESCRICAO),0);

     IF(ID_GRUPO_PRODUTO > 0)THEN
     BEGIN
        EXCEPTION "..." 'JA EXISTE UM GRUPO DE PRODUTO CADASTRADO COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA!';
     END

     IF(NEW.ID IS NULL) THEN
     BEGIN
        NEW.ID = GEN_ID(GTBGRUPO_PRODUTO, 1);
     END
   END

   IF(UPDATING)THEN
   BEGIN
       IF(NEW.DESCRICAO IS DISTINCT FROM OLD.DESCRICAO AND COALESCE(NEW.DESCRICAO,'') <> '')THEN
       BEGIN
         ID_GRUPO_PRODUTO = COALESCE((SELECT FIRST 1 A.ID FROM TBGRUPO_PRODUTO A WHERE A.DESCRICAO = NEW.DESCRICAO),0);

         IF(ID_GRUPO_PRODUTO > 0)THEN
         BEGIN
            EXCEPTION "..." 'JA EXISTE UM GRUPO DE PRODUTO CADASTRADO COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA!';
         END
       END
   END
END;

CREATE OR ALTER TRIGGER TTBCOR00IU FOR TBCOR
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable COR_ID INTEGER;
begin

  if(new.perfil <> ' ')then
  begin
     new.perfil = trim(new.perfil);
  end

  new.amostra = coalesce(new.amostra,0);

  NEW.Descricao = REPLACE(NEW.Descricao,'|','-');
  NEW.Descricao = REPLACE(NEW.Descricao,'"',' ');
  NEW.Descricao = REPLACE(NEW.Descricao,'''',' ');

  IF(INSERTING)THEN
  BEGIN
     COR_ID = COALESCE((SELECT FIRST 1 A.CODIGO FROM TBCOR A WHERE A.DESCRICAO = NEW.DESCRICAO AND A.CODIGO <> NEW.CODIGO),0);
     IF(COR_ID > 0)THEN
     BEGIN
        EXCEPTION "..." 'JA EXISTE UMA COR CADASTRADA COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA!';
     END
  END

  IF(UPDATING)THEN
  BEGIN
      IF(NEW.DESCRICAO IS DISTINCT FROM OLD.DESCRICAO AND COALESCE(NEW.DESCRICAO,'') <> '')THEN
      BEGIN
         COR_ID = COALESCE((SELECT FIRST 1 A.CODIGO FROM TBCOR A WHERE A.DESCRICAO = NEW.DESCRICAO AND A.CODIGO <> NEW.CODIGO),0);
         IF(COR_ID > 0)THEN
         BEGIN
            EXCEPTION "..." 'JA EXISTE UMA COR CADASTRADA COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA!';
         END
      END
  END

end;

CREATE OR ALTER TRIGGER TTBMODELO00IU FOR TBMODELO
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE MODELO_CODIGO INTEGER;
DECLARE VARIABLE MODELO_DESCRICAO VARCHAR(200);
BEGIN
  MODELO_CODIGO = 0;
  MODELO_DESCRICAO = '';
  IF(NEW.CLASSIFICACAO <> ' ')THEN
  BEGIN
     NEW.CLASSIFICACAO = TRIM(NEW.CLASSIFICACAO);
  END

  IF(INSERTING)THEN
  BEGIN
   -- MODELO_CODIGO = COALESCE((SELECT FIRST 1 CODIGO FROM TBMODELO WHERE CODIGO = NEW.CODIGO),0);
     FOR
     SELECT FIRST 1 CODIGO, DESCRICAO
     FROM TBMODELO WHERE (CODIGO = NEW.CODIGO OR DESCRICAO = NEW.DESCRICAO)
     INTO MODELO_CODIGO, MODELO_DESCRICAO DO
     BEGIN
       IF(MODELO_CODIGO > 0 AND NEW.CODIGO = MODELO_CODIGO)THEN
       BEGIN
           EXCEPTION "..." 'JÁ EXISTE UM MODELO CADASTRADO COM O ID:'||MODELO_CODIGO||'!, OPERAÇÃO CANCELADA!';
       END

       IF(MODELO_DESCRICAO IS NOT NULL AND NEW.DESCRICAO = MODELO_DESCRICAO)THEN
       BEGIN
           EXCEPTION "..." 'JÁ EXISTE UM MODELO CADASTRADO COM A DESCRICAO: '||MODELO_DESCRICAO||'!, OPERAÇÃO CANCELADA!';
       END
     END
   END
   IF(UPDATING)THEN
   BEGIN
       IF(NEW.DESCRICAO IS DISTINCT FROM OLD.DESCRICAO AND COALESCE(NEW.DESCRICAO,'') <> '')THEN
       BEGIN
          :MODELO_DESCRICAO = COALESCE((SELECT FIRST 1 DESCRICAO FROM TBMODELO WHERE DESCRICAO = NEW.DESCRICAO),'');
          IF(:MODELO_DESCRICAO <> '')THEN
          BEGIN
              EXCEPTION "..." 'JÁ EXISTE UM MODELO CADASTRADO COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA!';
          END
       END
   END
END;

CREATE OR ALTER TRIGGER TTBMODELO_LINHA00IU FOR TBMODELO_LINHA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE LINHA_ID INTEGER;
BEGIN
  IF(NEW.PERFIL <> ' ')THEN
  BEGIN
     NEW.PERFIL = TRIM(NEW.PERFIL);
  END

  IF(NEW.PERFIL_PEDIDO <> ' ')THEN
  BEGIN
     NEW.PERFIL_PEDIDO = TRIM(NEW.PERFIL_PEDIDO);
  END

  IF(INSERTING)THEN
  BEGIN
     LINHA_ID = COALESCE((SELECT FIRST 1 X.CODIGO FROM TBMODELO_LINHA X WHERE X.DESCRICAO = NEW.DESCRICAO),0);
     IF(LINHA_ID > 0)THEN
     BEGIN
        EXCEPTION "..." 'JA EXISTE UMA LINHA DE PRODUCAO CADASTRADA COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA.';
     END
  END

  IF(UPDATING)THEN
  BEGIN
    IF(NEW.DESCRICAO IS DISTINCT FROM OLD.DESCRICAO AND COALESCE(NEW.DESCRICAO,'') <> '')THEN
    BEGIN
       LINHA_ID = COALESCE((SELECT FIRST 1 X.CODIGO FROM TBMODELO_LINHA X WHERE X.DESCRICAO = NEW.DESCRICAO),0);
       IF(LINHA_ID > 0)THEN
       BEGIN
          EXCEPTION "..." 'JA EXISTE UMA LINHA DE PRODUCAO CADASTRADA COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA.';
       END
    END
  END

END;

CREATE OR ALTER TRIGGER TTBFAMILIA00IU FOR TBFAMILIA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE FAMILIA_ID INTEGER;
BEGIN
  IF(NEW.PERFIL <> ' ')THEN
  BEGIN
     NEW.PERFIL = TRIM(NEW.PERFIL);
  END 

  IF(INSERTING)THEN
  BEGIN
     FAMILIA_ID = COALESCE((SELECT FIRST 1 X.CODIGO FROM TBFAMILIA X WHERE X.DESCRICAO = NEW.DESCRICAO),0);
     IF(FAMILIA_ID > 0)THEN
     BEGIN
        EXCEPTION "..." 'JA EXISTE UMA FAMILIA CADASTRADA COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA.';
     END
  END

  IF(UPDATING)THEN
  BEGIN
    IF(NEW.DESCRICAO IS DISTINCT FROM OLD.DESCRICAO AND COALESCE(NEW.DESCRICAO,'') <> '')THEN
    BEGIN
       FAMILIA_ID = COALESCE((SELECT FIRST 1 X.CODIGO FROM TBFAMILIA X WHERE X.DESCRICAO = NEW.DESCRICAO),0);
       IF(FAMILIA_ID > 0)THEN
       BEGIN
          EXCEPTION "..." 'JA EXISTE UMA FAMILIA CADASTRADA COM A DESCRICAO: '||NEW.DESCRICAO||'!, OPERAÇÃO CANCELADA.';
       END
    END
  END
END;