CREATE OR ALTER TRIGGER TTBPEDIDO_ITEM_B02IU FOR TBPEDIDO_ITEM
ACTIVE BEFORE INSERT OR UPDATE POSITION 6
AS
DECLARE VARIABLE VALOR_DESCONTO_REAL  NUMERIC(15,8);
DECLARE VARIABLE TOLERANCIA_REAL      NUMERIC(15,8);
BEGIN

 IF(COALESCE(NEW.PERCENTUAL_DESCONTO,0) > 0 AND INSERTING) THEN
  BEGIN
     VALOR_DESCONTO_REAL  = FN_NUMBER_ROUND(((CAST(NEW.QUANTIDADE AS DOUBLE PRECISION) * CAST(NEW.VALOR AS DOUBLE PRECISION))*(NEW.PERCENTUAL_DESCONTO/100.00)),2);
     TOLERANCIA_REAL      = NEW.VALOR_DESCONTO - VALOR_DESCONTO_REAL;
     IF(VALOR_DESCONTO_REAL <> NEW.VALOR_DESCONTO AND (TOLERANCIA_REAL < -0.10 or TOLERANCIA_REAL > 0.10))THEN
     BEGIN
        EXCEPTION "..." 'ERRO AO CALCULAR DESCONTO DO ITEM SEQ.'||FN_LPAD(NEW.SEQUENCIA,3,0)||'.<BR> ENTRE EM CONTATO COM O SUPORTE TÉCNICO.(D1.'||COALESCE(NEW.VALOR_DESCONTO,0)||',D2.'||CAST(VALOR_DESCONTO_REAL AS NUMERIC(15,2))||')';
     END
  END

  IF(UPDATING)THEN
  BEGIN
      IF(OLD.QUANTIDADE          IS DISTINCT FROM NEW.QUANTIDADE
      OR OLD.VALOR               IS DISTINCT FROM NEW.VALOR
      OR OLD.VALOR_DESCONTO      IS DISTINCT FROM NEW.VALOR_DESCONTO
      OR OLD.PERCENTUAL_DESCONTO IS DISTINCT FROM NEW.PERCENTUAL_DESCONTO)THEN
      BEGIN
         VALOR_DESCONTO_REAL  = FN_NUMBER_ROUND(((CAST(NEW.QUANTIDADE AS DOUBLE PRECISION) * CAST(NEW.VALOR AS DOUBLE PRECISION))*(NEW.PERCENTUAL_DESCONTO/100.00)),2);
         TOLERANCIA_REAL      = NEW.VALOR_DESCONTO - VALOR_DESCONTO_REAL;
         IF(VALOR_DESCONTO_REAL <> NEW.VALOR_DESCONTO AND (TOLERANCIA_REAL < -0.10 OR TOLERANCIA_REAL > 0.10))THEN
         BEGIN
            EXCEPTION "..." 'ERRO AO CALCULAR DESCONTO DO ITEM SEQ.'||FN_LPAD(NEW.SEQUENCIA,3,0)||'.<BR> ENTRE EM CONTATO COM O SUPORTE TÉCNICO.(D1.'||COALESCE(NEW.VALOR_DESCONTO,0)||',D2.'||CAST(VALOR_DESCONTO_REAL AS NUMERIC(15,2))||')';
         END
      END
  END
END;

CREATE OR ALTER TRIGGER TTBPEDIDO_ITEM00IU FOR TBPEDIDO_ITEM
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
  IF(NEW.PERFIL <> ' ')THEN
  BEGIN
     NEW.PERFIL = TRIM(NEW.PERFIL);
  END

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

  IF(NEW.VALOR_DESCONTO IS NULL) THEN
  BEGIN
     NEW.VALOR_DESCONTO = 0;
  END
--  IF(NEW.PEDIDO <> OLD.PEDIDO)THEN
--  BEGIN
--     EXCEPTION "..." 'NUMERO DO PEDIDO DO ITEM NAO PODE SER TROCADO, OPERACAO CANCELADA!';
--  END

  --PEDIDOS DIGITADOS NA TELA 12200 TEM VALOR ORIGINAL
  IF(COALESCE(NEW.VALOR_ORIGINAL,0) = 0)THEN
  BEGIN
    NEW.VALOR_ORIGINAL = NEW.VALOR;
  END
END