CREATE OR ALTER TRIGGER TTBPEDIDO_ITEM00IU FOR TBPEDIDO_ITEM
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable DESCONTO1 NUMERIC(15,2);
declare variable DESCONTO2 NUMERIC(15,2);
declare variable DESCONTO3 NUMERIC(15,2);
declare variable VR_TOTAL  NUMERIC(15,2);
declare variable produto_codigo integer;
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.VALOR_DESCONTO = 0 AND (NEW.PERCENTUAL_DESCONTO1 > 0 or NEW.PERCENTUAL_DESCONTO2 > 0 or NEW.PERCENTUAL_DESCONTO3 > 0))THEN
  BEGIN

    :VR_TOTAL  = FN_CALC_PRECISION_V2(NEW.QUANTIDADE, NEW.VALOR,'*',2);
    :DESCONTO1 = 0;
    :DESCONTO2 = 0;
    :DESCONTO3 = 0;

    IF(NEW.PERCENTUAL_DESCONTO1 > 0) THEN BEGIN :DESCONTO1 = FN_CALC_PRECISION_V2(:VR_TOTAL,FN_CALC_PRECISION_V2(NEW.PERCENTUAL_DESCONTO1, 100.00,'/',2),'*',2); :VR_TOTAL = FN_CALC_PRECISION_V2(:VR_TOTAL, :DESCONTO1,'-',2); END
    IF(NEW.PERCENTUAL_DESCONTO2 > 0) THEN BEGIN :DESCONTO2 = FN_CALC_PRECISION_V2(:VR_TOTAL,FN_CALC_PRECISION_V2(NEW.PERCENTUAL_DESCONTO2, 100.00,'/',2),'*',2); :VR_TOTAL = FN_CALC_PRECISION_V2(:VR_TOTAL, :DESCONTO2,'-',2); END
    IF(NEW.PERCENTUAL_DESCONTO3 > 0) THEN BEGIN :DESCONTO3 = FN_CALC_PRECISION_V2(:VR_TOTAL,FN_CALC_PRECISION_V2(NEW.PERCENTUAL_DESCONTO3, 100.00,'/',2),'*',2); :VR_TOTAL = FN_CALC_PRECISION_V2(:VR_TOTAL, :DESCONTO3,'-',2); END

    NEW.VALOR_DESCONTO = FN_CALC_PRECISION_V2(NEW.VALOR_DESCONTO, :DESCONTO1,'+',2);
    NEW.VALOR_DESCONTO = FN_CALC_PRECISION_V2(NEW.VALOR_DESCONTO, :DESCONTO2,'+',2);
    NEW.VALOR_DESCONTO = FN_CALC_PRECISION_V2(NEW.VALOR_DESCONTO, :DESCONTO3,'+',2);

  END

  if(new.PEDIDO <> old.PEDIDO)then
  begin
     exception "..." 'NUMERO DO PEDIDO DO ITEM NAO PODE SER TROCADO, OPERACAO CANCELADA!';
  end

  IF(INSERTING)then
  BEGIN
     :PRODUTO_CODIGO = COALESCE((SELECT FIRST 1 D.CODIGO FROM TBPRODUTO D WHERE D.COR_CODIGO = new.COR_ID AND new.MODELO_CODIGO = d.MODELO_CODIGO and d.status = '1' ORDER BY D.CODIGO),0);
      IF(NEW.PRODUTO_CODIGO IS DISTINCT FROM :PRODUTO_CODIGO AND :PRODUTO_CODIGO > 0)THEN
      BEGIN
           INSERT INTO TBHISTORICO (
           TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
          'TBPEDIDO', NEW.PEDIDO,
          (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
          (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
           'Item [Seq.'||NEW.Sequencia||'] PROD.'||coalesce(NEW.PRODUTO_CODIGO,0)||' -> '||:PRODUTO_CODIGO||' AJUSTADO AUTOMATICAMENTE.');
    
         NEW.PRODUTO_CODIGO =  :PRODUTO_CODIGO;
      END

      IF(:PRODUTO_CODIGO = 0)THEN
      BEGIN
        EXCEPTION "..." 'ITEM [SEQ.'||NEW.Sequencia||'], MODELO :'||new.MODELO_CODIGO||', COR :'||new.COR_ID||' NAO POSSUI UM PRODUTO VALIDO PARA INCLUSAO. OPERACAO CANCELADA.';
      END
  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