create or replace PROCEDURE ALTERA_PRECOITENS(
   P_CDFILIAL      IN PEDIDO.CDFILIAL%TYPE,
   P_NRPEDIDO      IN PEDIDO.NRPEDIDO%TYPE,
   P_CDPRECOBASE   IN PRECOBASE.CDPRECOBASE%TYPE,
   P_IDDTATUAL     IN PARAMPEDIDO.IDOBRTPOPPED%TYPE,
   P_NRERRO        OUT NUMBER
) IS

  V_VRITEPREBASE  NUMBER;
  V_VRDESITPED    NUMBER;
  V_VRPEDESC      NUMBER;
BEGIN
   P_NRERRO := 0;

   FOR C_ITEM IN
      (SELECT
          PE.CDFILIAL, PE.NRPEDIDO,   IT.NRITEMPED,  IT.CDPRODUTO,
          PE.DTPEDIDO, IT.VRDESITPED, IT.VRPREUNITPED,
          BUSCA_PRECO_PED(IT.CDFILIAL, PR.CDARVPROD, PE.CDCLIENTE,P_CDPRECOBASE, DECODE(P_IDDTATUAL, 'S', SYSDATE, PE.DTPEDIDO), PE.CDMODPGTO) VRITEPREBASE,
          PE.CDTIPOOPER, PE.CDFILIALPED, PE.CDCLIENTE, F.CDINSCESTA, F.CDEMPRESA, TP.IDORIGDESTOP
       FROM ITEMPEDIDO IT, PEDIDO PE, PRODUTO PR, FILIAL F, TIPOOPERAC TP
       WHERE PE.CDFILIAL    = P_CDFILIAL
         AND PE.NRPEDIDO    = P_NRPEDIDO
         AND IT.CDFILIAL    = PE.CDFILIAL
         AND IT.NRPEDIDO    = PE.NRPEDIDO
         AND IT.IDSITITEMPED IN ('1', '2')
         AND IT.CDPRODUTO = PR.CDPRODUTO
         AND NVL(PE.CDFILIALPED,PE.CDFILIAL) = F.CDFILIAL
         AND PE.CDTIPOOPER = TP.CDTIPOOPER
         AND PE.IDENTRSAIDOP = TP.IDENTRSAIDOP) LOOP

      IF (C_ITEM.VRITEPREBASE > 0) THEN
         V_VRDESITPED := C_ITEM.VRDESITPED;
         IF (C_ITEM.VRDESITPED > 0) THEN
            V_VRPEDESC   := (C_ITEM.VRDESITPED * 100)/C_ITEM.VRPREUNITPED;
            V_VRDESITPED := (C_ITEM.VRITEPREBASE * V_VRPEDESC)/100;
         END IF;

         UPDATE ITEMPEDIDO
         SET VRPREUNITPED = C_ITEM.VRITEPREBASE,
             VRPRTABITPED = C_ITEM.VRITEPREBASE,
             VRDESITPED   = V_VRDESITPED
         WHERE CDFILIAL  = C_ITEM.CDFILIAL
           AND NRPEDIDO  = C_ITEM.NRPEDIDO
           AND NRITEMPED = C_ITEM.NRITEMPED;
           
         IMPOSTO_ITEMPEDIDO(C_ITEM.CDEMPRESA, C_ITEM.CDINSCESTA, C_ITEM.CDCLIENTE, NVL(C_ITEM.CDFILIALPED,C_ITEM.CDFILIAL), C_ITEM.CDFILIAL, 
                            C_ITEM.NRPEDIDO, C_ITEM.NRITEMPED, SYSDATE, C_ITEM.CDTIPOOPER, C_ITEM.IDORIGDESTOP, 'N' );
      ELSE
         P_NRERRO := 1;
      END IF;
   END LOOP;
END;
/