CREATE trigger ttbproduto_b02u for tbproduto
active before update position 0
AS
DECLARE VARIABLE PEDIDO CHAR(1);
DECLARE VARIABLE NFS CHAR(1);
DECLARE VARIABLE NFE INTEGER;
DECLARE VARIABLE OC INTEGER;
DECLARE VARIABLE REMESSA INTEGER;
DECLARE VARIABLE ESTOQUE INTEGER;
BEGIN
 
   IF (OLD.GRADE_CODIGO IS DISTINCT FROM NEW.GRADE_CODIGO) THEN
       BEGIN

        PEDIDO = COALESCE((SELECT FIRST 1 1 FROM TBPEDIDO_ITEM PED WHERE PED.PRODUTO_CODIGO = OLD.CODIGO), 0);
        IF(PEDIDO > 0) THEN
         BEGIN
            EXCEPTION "..." 'NÃO É PERMITIDO ALTERAR A GRADE, POIS ESTE PRODUTO JÁ POSSUI ITENS DE PEDIDO';
         END

        NFS = COALESCE((SELECT FIRST 1 1 FROM TBNFS_ITEM NFS WHERE NFS.PRODUTO_CODIGO = OLD.CODIGO), 0);

         IF(NFS > 0) THEN
          BEGIN
            EXCEPTION "..." 'NÃO É PERMITIDO ALTERAR A GRADE, POIS ESTE PRODUTO JÁ POSSUI ITENS DE NOTA FISCAL DE SAÍDA';
          END

        NFE = COALESCE((SELECT FIRST 1 1 FROM TBNFE_ITEM NFE WHERE NFE.PRODUTO_CODIGO = OLD.CODIGO), 0);
      
         IF(NFE > 0) THEN
          BEGIN
            EXCEPTION "..." 'NÃO É PERMITIDO ALTERAR A GRADE, POIS ESTE PRODUTO JÁ POSSUI ITENS DE NOTA FISCAL DE ENTRADA';
          END

        OC = COALESCE((SELECT FIRST 1 1 FROM TBOC_ITEM OC WHERE OC.PRODUTO_CODIGO = OLD.CODIGO), 0);
        
        IF(OC > 0) THEN
         BEGIN
            EXCEPTION "..." 'NÃO É PERMITIDO ALTERAR A GRADE, POIS ESTE PRODUTO JÁ POSSUI ORDEM DE COMPRA';
         END

        REMESSA = COALESCE((SELECT FIRST 1 1 FROM TBPEDIDO_ITEM_PROCESSADO R WHERE R.PRODUTO_CODIGO = OLD.CODIGO), 0);
        
        IF(REMESSA > 0) THEN
         BEGIN
            EXCEPTION "..." 'NÃO É PERMITIDO ALTERAR A GRADE, POIS ESTE PRODUTO JÁ POSSUI REMESSA';
         END

        ESTOQUE = COALESCE((SELECT FIRST 1 1 FROM TBESTOQUE_TRANSACAO_ITEM E WHERE E.PRODUTO_CODIGO = OLD.CODIGO), 0);

        IF(ESTOQUE > 0) THEN
         BEGIN
            EXCEPTION "..." 'NÃO É PERMITIDO ALTERAR A GRADE, POIS ESTE PRODUTO JÁ POSSUI TRANSAÇÃO DE ESTOQUE';
         END

    END

END;

