Pendientes:

* Oller debe ver a tiendacentro y a arosa.

Optimizaciones:

* Se toco el paquete de replicacion de catálogos de inventario
  para que al actualizar los departamentos
  no se toque la bodega.

* Se toco los triggers de replicacion de inv_encabmovimiento
  e inv_detmovimiento para solo replicar movimientos
  de salidas de la clase (salida traslado).

And 
      :New.Tip_Movto = 'S' And RepInvMov.ObtClaseMovto(:New.Cod_Cia, :New.Tip_Movto, :New.Cod_Movto) = 'ST' Then 

  Se agrega ademas al paquete repinvmov la funcion
  para obtener la clase de movimiento:

   Function ObtClaseMovto(pCia in Varchar2, pTipMovto in Varchar2, pCodMovto in Varchar2) Return Varchar2 Is
      vClase Inv_ConcepMovto.Clase_Movto%Type;
   Begin
      Select Clase_Movto
        Into vClase
      From Inv_ConcepMovto
      Where Cod_Cia   = pCia
        And Tip_Movto = pTipMovto
        And Cod_Movto = pCodMovto;      

      Return vClase;
   Exception
      When No_Data_Found Then
         Raise_Application_Error(-20001, '<RepInvMov.ObtClaseMovto>: El Concepto de Inventario '||pTipMovto||'-'||pCodMovto||
                                                                   ' NO Existe!');
   End ObtClaseMovto;

* Los movimientos de precios y promociones deben replicarse
  siempre en estado pendiente, entonces en los triggers
  de sus encabezados el estado siempre se pasara como P.

  Además se cambia el paquete reppremov para consultar el estado
  del cambio de precio o promocion para permitir
  que caigan replicaciones solamente cuando se està pendiente.

   Function EstadoCambPrecio(pCia in Varchar2, pDocumento in Number) Return Varchar2 Is
      vEstado PreEncCambio.Estado%Type;
   Begin
      Select Estado
        Into vEstado
      From PreEncCambio
      Where Cod_Cia = pCia
        And Documento = pDocumento;

      Return vEstado;
   Exception
      When No_Data_Found Then
         Return 'P';
   End EstadoCambPrecio;

   Function EstadoPromocion(pCia in Varchar2, pPromocion in Varchar2) Return Varchar2 Is
      vEstado PrePromocion.Estado%Type;
   Begin
      Select Estado
        Into vEstado
      From PrePromocion
      Where Cod_Cia = pCia
        And Cod_Promocion = pPromocion;

      Return vEstado;
   Exception
      When No_Data_Found Then
         Return 'P';
   End EstadoPromocion;

   Procedure ACTPREENCCAMBIO (pOldCOD_CIA in CHAR, pOldDOCUMENTO in NUMBER, pCOD_CIA in CHAR, pDOCUMENTO in NUMBER, 
                              pCOD_LISTA_PRECIO in CHAR, pCOD_PROVEEDOR in VARCHAR2, pDOC_REF in VARCHAR2, 
                              pESTADO in CHAR, pFEC_FINAL in DATE, pFECHA in DATE, pFEC_INICIO in DATE, 
                              pOBSERVACIONES in VARCHAR2, pORIGEN in CHAR, pTIPO_TRANSACCION in CHAR, 
                              pUSUARIO in VARCHAR2, pUSUARIO_AUTORIZA in VARCHAR2) is 
   Begin 
      If EstadoCambPrecio(pOldCod_Cia, pOldDocumento) = 'P' Then
         Update PREENCCAMBIO 
            Set COD_CIA = pCOD_CIA, DOCUMENTO = pDOCUMENTO, COD_LISTA_PRECIO = pCOD_LISTA_PRECIO, 
                COD_PROVEEDOR = pCOD_PROVEEDOR, DOC_REF = pDOC_REF, ESTADO = pESTADO, FEC_FINAL = pFEC_FINAL, 
                FECHA = pFECHA, FEC_INICIO = pFEC_INICIO, OBSERVACIONES = pOBSERVACIONES, ORIGEN = pORIGEN, 
                TIPO_TRANSACCION = pTIPO_TRANSACCION, USUARIO = pUSUARIO, USUARIO_AUTORIZA = pUSUARIO_AUTORIZA, LOCAL1='N'
         Where COD_CIA = pOldCOD_CIA And DOCUMENTO = pOldDOCUMENTO;
 
         If Sql%NotFound Then 
            INSPREENCCAMBIO(pCOD_CIA, pDOCUMENTO, pCOD_LISTA_PRECIO, pCOD_PROVEEDOR, pDOC_REF, pESTADO, pFEC_FINAL, pFECHA, 
                            pFEC_INICIO, pOBSERVACIONES, pORIGEN, pTIPO_TRANSACCION, pUSUARIO, pUSUARIO_AUTORIZA); 
         End If;
      End If;
   End ACTPREENCCAMBIO;
 
   Procedure DELPREENCCAMBIO(pCOD_CIA in CHAR, pDOCUMENTO in NUMBER) is 
   Begin 
      If EstadoCambPrecio(pCod_Cia, pDocumento) = 'P' Then
         Update PREENCCAMBIO 
            Set LOCAL1 = 'D', REPLICA1 = 'N' 
         Where COD_CIA = pCOD_CIA And DOCUMENTO = pDOCUMENTO; 
   
         If Sql%Found Then 
            Delete From PREENCCAMBIO 
            Where COD_CIA = pCOD_CIA And DOCUMENTO = pDOCUMENTO;
         End If; 
      End If;
   End DELPREENCCAMBIO;

   Procedure ACTPREPROMOCION (pOldCOD_CIA in CHAR, pOldCOD_PROMOCION in VARCHAR2, pCOD_CIA in CHAR, 
                              pCOD_PROMOCION in VARCHAR2, pCOD_LISTA_PRECIO in CHAR, pCOD_USUARIO in VARCHAR2, 
                              pDESCRIPCION in VARCHAR2, pESTADO in CHAR, pFECHA_FIN in DATE, pFECHA_INI in DATE, 
                              pSUCURSAL in CHAR) is 
   Begin 
      If EstadoPromocion(pOldCod_Cia, pOldCod_Promocion) = 'P' Then
         Update PREPROMOCION 
            Set COD_CIA = pCOD_CIA, COD_PROMOCION = pCOD_PROMOCION, COD_LISTA_PRECIO = pCOD_LISTA_PRECIO, 
                COD_USUARIO = pCOD_USUARIO, DESCRIPCION = pDESCRIPCION, ESTADO = pESTADO, FECHA_FIN = pFECHA_FIN, 
                FECHA_INI = pFECHA_INI, SUCURSAL = pSUCURSAL, LOCAL1='N'
         Where COD_CIA = pOldCOD_CIA And COD_PROMOCION = pOldCOD_PROMOCION;
 
         If Sql%NotFound Then 
            INSPREPROMOCION(pCOD_CIA, pCOD_PROMOCION, pCOD_LISTA_PRECIO, pCOD_USUARIO, pDESCRIPCION, pESTADO, pFECHA_FIN, 
                            pFECHA_INI, pSUCURSAL); 
         End If;
      End If;
   End ACTPREPROMOCION;
 
   Procedure DELPREPROMOCION(pCOD_CIA in CHAR, pCOD_PROMOCION in VARCHAR2) is 
   Begin 
      If EstadoPromocion(pCod_Cia, pCod_Promocion) = 'P' Then      
         Update PREPROMOCION 
           Set LOCAL1 = 'D', REPLICA1 = 'N' 
         Where COD_CIA = pCOD_CIA And COD_PROMOCION = pCOD_PROMOCION; 
 
         If Sql%Found Then 
            Delete From PREPROMOCION 
            Where COD_CIA = pCOD_CIA And COD_PROMOCION = pCOD_PROMOCION;
         End If; 
      End If;
   End DELPREPROMOCION;