/// <summary>
        /// Obtiene el listado de lotes que tiene programados para el surtido
        /// </summary>
        /// <param name="pedidoDetalle"></param>
        /// <returns></returns>
        internal List <ProgramacionMateriaPrimaInfo> ObtenerProgramacionMateriaPrima(PedidoDetalleInfo pedidoDetalle)
        {
            try
            {
                Logger.Info();
                var programacionMateriaPrimaDal = new ProgramacionMateriaPrimaDAL();
                var listaProgramacion           = programacionMateriaPrimaDal.ObtenerProgramacionMateriaPrima(pedidoDetalle);

                if (listaProgramacion != null)
                {
                    var almacenInventarioLoteBl = new AlmacenInventarioLoteBL();
                    var almacenBl = new AlmacenBL();
                    var pesaje    = new PesajeMateriaPrimaBL();

                    foreach (ProgramacionMateriaPrimaInfo programacionMateria in listaProgramacion)
                    {
                        programacionMateria.InventarioLoteOrigen =
                            almacenInventarioLoteBl.ObtenerAlmacenInventarioLotePorId(
                                programacionMateria.InventarioLoteOrigen.AlmacenInventarioLoteId);

                        programacionMateria.Almacen            = almacenBl.ObtenerPorID(programacionMateria.Almacen.AlmacenID);
                        programacionMateria.PesajeMateriaPrima =
                            pesaje.ObtenerPesajesPorProgramacionMateriaPrimaId(
                                programacionMateria.ProgramacionMateriaPrimaId);
                    }
                }

                return(listaProgramacion);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
        /// <summary>
        /// Almacena la programacion de la cantidad de un producto
        /// </summary>
        /// <param name="pedido"></param>
        /// <param name="listaProgramacion"></param>
        /// <returns></returns>
        internal bool GuardarProgramacionMateriaPrima(PedidoInfo pedido, List <ProgramacionMateriaPrimaInfo> listaProgramacion)
        {
            bool resultado = true;

            try
            {
                using (var transaction = new TransactionScope())
                {
                    var programacionMateriaDal = new ProgramacionMateriaPrimaDAL();

                    if (listaProgramacion != null && listaProgramacion.Count > 0)
                    {
                        programacionMateriaDal.GuardarProgramacionMateriaPrima(listaProgramacion.Where(pr => pr.ProgramacionMateriaPrimaId == 0).ToList());

                        var pedidoBl = new PedidosBL();
                        pedidoBl.ActualizarEstatusPedido(pedido);
                        transaction.Complete();
                    }
                }
            }
            catch (Exception ex)
            {
                resultado = false;
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(resultado);
        }
 internal bool Cancelar(ProgramacionMateriaPrimaInfo programacion)
 {
     try
     {
         Logger.Info();
         var programacionMateriaPrimaDal = new ProgramacionMateriaPrimaDAL();
         programacionMateriaPrimaDal.Cancelar(programacion);
         return(true);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Obtiene una programacion de materia prima
 /// </summary>
 /// <param name="pesajeMateriaPrima"></param>
 /// <returns></returns>
 internal ProgramacionMateriaPrimaInfo ObtenerPorPesajeMateriaPrima(PesajeMateriaPrimaInfo pesajeMateriaPrima)
 {
     try
     {
         Logger.Info();
         var programacionMateriaPrimaDal = new ProgramacionMateriaPrimaDAL();
         var programacion = programacionMateriaPrimaDal.ObtenerPorPesajeMateriaPrima(pesajeMateriaPrima);
         return(programacion);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Obtiene una programacion de materia prima por Clave y Ticket
 /// </summary>
 /// <param name="programacionMateriaPrimaId"></param>
 /// <param name="ticket"></param>
 /// <returns></returns>
 internal ProgramacionMateriaPrimaInfo ObtenerPorProgramacionMateriaPrimaTicket(int programacionMateriaPrimaId, int ticket)
 {
     try
     {
         Logger.Info();
         var programacionMateriaPrimaDal           = new ProgramacionMateriaPrimaDAL();
         ProgramacionMateriaPrimaInfo programacion =
             programacionMateriaPrimaDal.ObtenerPorProgramacionMateriaPrimaTicket(programacionMateriaPrimaId,
                                                                                  ticket);
         return(programacion);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Metodo que actualiza la cantidad entregada
 /// </summary>
 /// <param name="programacionMateriaPrimaInfo"></param>
 internal void ActualizarCantidadEntregada(ProgramacionMateriaPrimaInfo programacionMateriaPrimaInfo)
 {
     try
     {
         Logger.Info();
         var programacionMateriaPrimaDal = new ProgramacionMateriaPrimaDAL();
         programacionMateriaPrimaDal.ActualizarCantidadEntregada(programacionMateriaPrimaInfo);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Actualiza el almacen movimiento
 /// </summary>
 /// <param name="programacionMateriaPrimaID"></param>
 /// <param name="almacenMovimientoID"></param>
 internal void ActualizarAlmacenMovimiento(int programacionMateriaPrimaID, long almacenMovimientoID)
 {
     try
     {
         Logger.Info();
         var programacionMateriaPrimaDal = new ProgramacionMateriaPrimaDAL();
         programacionMateriaPrimaDal.ActualizarAlmacenMovimiento(programacionMateriaPrimaID, almacenMovimientoID);
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }