/// <summary>
 /// Obtiene un registro de SolicitudProductoDetalle
 /// </summary>
 /// <param name="descripcion">Descripción de la SolicitudProductoDetalle</param>
 /// <returns></returns>
 public SolicitudProductoDetalleInfo ObtenerPorDescripcion(string descripcion)
 {
     try
     {
         Logger.Info();
         Dictionary <string, object> parameters = AuxSolicitudProductoDetalleDAL.ObtenerParametrosPorDescripcion(descripcion);
         DataSet ds = Retrieve("SolicitudProductoDetalle_ObtenerPorDescripcion", parameters);
         SolicitudProductoDetalleInfo result = null;
         if (ValidateDataSet(ds))
         {
             result = MapSolicitudProductoDetalleDAL.ObtenerPorDescripcion(ds);
         }
         return(result);
     }
     catch (SqlException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (DataException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Metodo para Crear un registro de SolicitudProductoDetalle
 /// </summary>
 /// <param name="info">Valores de la entidad que será creada</param>
 public int Crear(SolicitudProductoDetalleInfo info)
 {
     try
     {
         Logger.Info();
         Dictionary <string, object> parameters = AuxSolicitudProductoDetalleDAL.ObtenerParametrosCrear(info);
         int result = Create("SolicitudProductoDetalle_Crear", parameters);
         return(result);
     }
     catch (SqlException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (DataException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
예제 #3
0
 /// <summary>
 ///  Método que obtiene un registro
 /// </summary>
 /// <param name="ds"></param>
 /// <returns></returns>
 public static SolicitudProductoDetalleInfo ObtenerPorDescripcion(DataSet ds)
 {
     try
     {
         Logger.Info();
         DataTable dt = ds.Tables[ConstantesDAL.DtDatos];
         SolicitudProductoDetalleInfo entidad =
             (from info in dt.AsEnumerable()
              select
              new SolicitudProductoDetalleInfo
         {
             SolicitudProductoDetalleID = info.Field <int>("SolicitudProductoDetalleID"),
             SolicitudProducto = new SolicitudProductoInfo {
                 SolicitudProductoID = info.Field <int>("SolicitudProductoID")
             },
             Producto = new ProductoInfo {
                 ProductoId = info.Field <int>("ProductoID"), Descripcion = info.Field <string>("Producto")
             },
             Cantidad = info.Field <decimal>("Cantidad"),
             CamionReparto = new CamionRepartoInfo {
                 CamionRepartoID = info.Field <int>("CamionRepartoID")
             },
             Estatus = new EstatusInfo {
                 EstatusId = info.Field <int>("EstatusID"), Descripcion = info.Field <string>("Estatus")
             },
             Activo = info.Field <bool>("Activo").BoolAEnum(),
         }).First();
         return(entidad);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 ///  Obtiene parametros para actualizar
 /// </summary>
 /// <param name="info">Valores de la entidad</param>
 /// <returns></returns>
 public static Dictionary <string, object> ObtenerParametrosActualizar(SolicitudProductoDetalleInfo info)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@SolicitudProductoDetalleID", info.SolicitudProductoDetalleID },
             { "@SolicitudProductoID", info.SolicitudProducto.SolicitudProductoID },
             { "@ProductoID", info.Producto.ProductoId },
             { "@Cantidad", info.Cantidad },
             { "@CamionRepartoID", info.CamionReparto.CamionRepartoID },
             { "@EstatusID", info.Estatus.EstatusId },
             { "@Activo", info.Activo },
             { "@UsuarioModificacionID", info.UsuarioModificacionID },
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
        ///// <summary>
        ///// Obtiene una entidad de SolicitudProductoDetalle por su descripcion
        ///// </summary>
        ///// <returns></returns>
        //public IQueryable<SolicitudProductoDetalleInfo> ObtenerPorSolicitudProductoCompletoPorId(SolicitudProductoInfo filtro)
        //{
        //    try
        //    {
        //        Logger.Info();
        //        var condicion = ObtenerTodos();

        //        if (filtro.SolicitudProductoID > 0)
        //        {
        //            condicion = condicion.Where(c => c.SolicitudProductoID == filtro.SolicitudProductoID);
        //        }

        //        var productoDAL = new ProductoDAL();
        //        var centroCostoDAL = new CentroCostoDAL();
        //        var estatusDAL = new EstatusDAL();

        //        var prods = productoDAL.ObtenerTodosConUnidad();
        //        var cecos = centroCostoDAL.ObtenerTodos(EstatusEnum.Activo);
        //        var estatus = estatusDAL.ObtenerTodos(EstatusEnum.Activo);

        //        var query = from q in condicion
        //                    join p in prods on q.ProductoID equals p.ProductoId
        //                    join c in cecos on q.CentroCostoID equals c.CentroCostoID
        //                    join e in estatus on q.EstatusID equals e.EstatusId
        //                    select new SolicitudProductoDetalleInfo(q, p, c, e);

        //        return query;
        //    }
        //    catch (ExcepcionGenerica)
        //    {
        //        throw;
        //    }
        //    catch (Exception ex)
        //    {
        //        Logger.Error(ex);
        //        throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
        //    }
        //}



        /// <summary>
        /// Metodo para Guardar/Modificar una entidad SolicitudProductoDetalle
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public int Guardar(SolicitudProductoDetalleInfo info)
        {
            try
            {
                Logger.Info();
                var id = 0;
                if (info.SolicitudProductoDetalleID > 0)
                {
                    info.FechaModificacion = da.FechaServidor();
                    id = da.Actualizar <SolicitudProductoDetalleInfo>(info);
                }
                else
                {
                    id = da.Insertar <SolicitudProductoDetalleInfo>(info);
                }
                return(id);
            }
            catch (ExcepcionGenerica)
            {
                throw;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }
 /// <summary>
 /// Asigna Inactivo al registro para ocultarlo del grid.
 /// </summary>
 /// <param name="info"></param>
 private void Eliminar(SolicitudProductoDetalleInfo info)
 {
     info.Activo           = EstatusEnum.Inactivo;
     Contexto.Detalle      = Contexto.DetalleGrid.ToList();
     gridDatos.ItemsSource = Contexto.Detalle.Where(e => e.Activo == EstatusEnum.Activo);
     LimpiarParcial();
     Contexto.Guardar = true;
 }
        /// <summary>
        /// Método para Agregar
        /// </summary>
        private void Agregar()
        {
            bool validaAgregar = ValidaAgregar(true);

            if (validaAgregar)
            {
                bool isAutorizado       = Contexto.IsAutorizado;
                var  producto           = Contexto.Solicitud.Producto ?? new ProductoInfo();
                var  centroCosto        = (CentroCostoInfo)Extensor.ClonarInfo(Contexto.Solicitud.CentroCosto);
                var  claseCostoProducto = Contexto.Solicitud.ClaseCostoProducto ?? new  ClaseCostoProductoInfo();

                int     productoId    = producto == null ? 0 : producto.ProductoId;
                int     centroCostoId = centroCosto == null ? 0 : centroCosto.CentroCostoID;
                decimal cantidad      = txtCantidad.Value.HasValue
                                        ? txtCantidad.Value.Value
                                        : decimal.Zero;

                Contexto.DetalleGrid = Contexto.DetalleGrid ?? new ObservableCollection <SolicitudProductoDetalleInfo>();

                var registro = Contexto.DetalleGrid.FirstOrDefault(e => e.ProductoID == productoId && e.Activo == EstatusEnum.Activo);
                if (registro == null)
                {
                    registro = new SolicitudProductoDetalleInfo
                    {
                        SolicitudProductoID = Contexto.SolicitudProductoID,
                        ProductoID          = productoId,
                        Producto            = producto,
                        Cantidad            = cantidad,
                        ClaseCostoProducto  = claseCostoProducto,
                        CentroCostoID       = centroCostoId,
                        CentroCosto         = centroCosto,
                        EstatusID           = Estatus.SolicitudProductoPendiente.GetHashCode(),
                        Eliminar            = !isAutorizado,
                        Activo = EstatusEnum.Activo
                    };

                    Contexto.DetalleGrid.Add(registro);
                }
                else
                {
                    registro.ProductoID         = producto.ProductoId;
                    registro.Producto           = producto;
                    registro.Cantidad           = cantidad;
                    registro.CentroCostoID      = centroCostoId;
                    registro.CentroCosto        = centroCosto;
                    registro.ClaseCostoProducto = claseCostoProducto;
                }
                Contexto.Solicitud.Producto    = new ProductoInfo();
                Contexto.Solicitud.Cantidad    = 0;
                Contexto.Solicitud.CentroCosto = new CentroCostoInfo();
                Contexto.Detalle      = Contexto.DetalleGrid.ToList();
                gridDatos.ItemsSource = Contexto.Detalle.Where(e => e.Activo == EstatusEnum.Activo);
                Contexto.Guardar      = true;
                LimpiarParcial();
            }
        }
예제 #8
0
 /// <summary>
 /// Metodo para Guardar/Modificar una entidad SolicitudProductoDetalle
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public int Guardar(SolicitudProductoDetalleInfo info)
 {
     try
     {
         Logger.Info();
         return(solicitudProductoDetalleDAL.Guardar(info));
     }
     catch (ExcepcionGenerica)
     {
         throw;
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Metodo para actualizar un registro de SolicitudProductoDetalle
 /// </summary>
 /// <param name="info">Valores de la entidad que se actualizarán</param>
 public void Actualizar(SolicitudProductoDetalleInfo info)
 {
     try
     {
         Logger.Info();
         Dictionary <string, object> parameters = AuxSolicitudProductoDetalleDAL.ObtenerParametrosActualizar(info);
         Update("SolicitudProductoDetalle_Actualizar", parameters);
     }
     catch (SqlException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (DataException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
예제 #10
0
 internal static List <SolicitudProductoInfo> ObtenerConciliacionPorAlmacenMovimientoXML(IDataReader reader)
 {
     try
     {
         Logger.Info();
         var distribuciones = new List <SolicitudProductoInfo>();
         SolicitudProductoInfo distribucion;
         while (reader.Read())
         {
             distribucion = new SolicitudProductoInfo
             {
                 SolicitudProductoID = Convert.ToInt32(reader["SolicitudProductoID"]),
                 Organizacion        = new OrganizacionInfo
                 {
                     OrganizacionID = Convert.ToInt32(reader["OrganizacionID"])
                 },
                 OrganizacionID = Convert.ToInt32(reader["OrganizacionID"]),
                 FolioSolicitud = Convert.ToInt64(reader["FolioSolicitud"]),
                 FechaSolicitud = Convert.ToDateTime(reader["FechaSolicitud"]),
                 Estatus        = new EstatusInfo
                 {
                     EstatusId = Convert.ToInt32(reader["EstatusID"])
                 },
                 EstatusID       = Convert.ToInt32(reader["EstatusID"]),
                 FechaAutorizado = Convert.ToDateTime(reader["FechaAutorizado"]),
                 FechaEntrega    = Convert.ToDateTime(reader["FechaEntrega"]),
                 CentroCosto     = new CentroCostoInfo
                 {
                     CentroCostoID = Convert.ToInt32(reader["CentroCostoID"])
                 },
                 CentroCostoID = Convert.ToInt32(reader["CentroCostoID"]),
                 Almacen       = new AlmacenInfo
                 {
                     AlmacenID   = Convert.ToInt32(reader["AlmacenID"]),
                     Descripcion = Convert.ToString(reader["Almacen"]),
                     TipoAlmacen = new TipoAlmacenInfo
                     {
                         TipoAlmacenID = Convert.ToInt32(reader["TipoAlmacenID"])
                     },
                     TipoAlmacenID = Convert.ToInt32(reader["TipoAlmacenID"])
                 },
                 AlmacenID           = Convert.ToInt32(reader["AlmacenID"]),
                 AlmacenMovimientoID = Convert.ToInt64(reader["AlmacenMovimientoID"])
             };
             distribuciones.Add(distribucion);
         }
         reader.NextResult();
         var distribucionIngredientesOrganizaciones = new List <SolicitudProductoDetalleInfo>();
         SolicitudProductoDetalleInfo distribucionIngredienteOrganizacion;
         while (reader.Read())
         {
             distribucionIngredienteOrganizacion = new SolicitudProductoDetalleInfo
             {
                 SolicitudProductoDetalleID = Convert.ToInt32(reader["SolicitudProductoDetalleID"]),
                 SolicitudProductoID        = Convert.ToInt32(reader["SolicitudProductoID"]),
                 Producto = new ProductoInfo
                 {
                     ProductoId     = Convert.ToInt32(reader["ProductoID"]),
                     Descripcion    = Convert.ToString(reader["Producto"]),
                     UnidadId       = Convert.ToInt32(reader["UnidadID"]),
                     UnidadMedicion = new UnidadMedicionInfo
                     {
                         UnidadID = Convert.ToInt32(reader["UnidadID"]),
                     },
                     SubFamilia = new SubFamiliaInfo
                     {
                         SubFamiliaID = Convert.ToInt32(reader["SubFamiliaID"])
                     },
                     SubfamiliaId = Convert.ToInt32(reader["SubFamiliaID"])
                 },
                 ProductoID    = Convert.ToInt32(reader["ProductoID"]),
                 Cantidad      = Convert.ToDecimal(reader["Cantidad"]),
                 CamionReparto = new CamionRepartoInfo
                 {
                     CamionRepartoID = Convert.ToInt32(reader["CamionRepartoID"])
                 },
                 CamionRepartoID = Convert.ToInt32(reader["CamionRepartoID"]),
                 Estatus         = new EstatusInfo
                 {
                     EstatusId = Convert.ToInt32(reader["EstatusID"])
                 },
                 EstatusID      = Convert.ToInt32(reader["EstatusID"]),
                 PrecioPromedio = Convert.ToDecimal(reader["Precio"])
             };
             distribucionIngredientesOrganizaciones.Add(distribucionIngredienteOrganizacion);
         }
         distribuciones.ForEach(datos =>
         {
             datos.Detalle =
                 distribucionIngredientesOrganizaciones.Where(
                     id => id.SolicitudProductoID == datos.SolicitudProductoID).ToList();
         });
         return(distribuciones);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Obtiene un lista paginada
 /// </summary>
 /// <param name="pagina"></param>
 /// <param name="filtro"></param>
 /// <returns></returns>
 public ResultadoInfo <SolicitudProductoDetalleInfo> ObtenerPorPagina(PaginacionInfo pagina, SolicitudProductoDetalleInfo filtro)
 {
     try
     {
         Dictionary <string, object> parameters = AuxSolicitudProductoDetalleDAL.ObtenerParametrosPorPagina(pagina, filtro);
         DataSet ds = Retrieve("SolicitudProductoDetalle_ObtenerPorPagina", parameters);
         ResultadoInfo <SolicitudProductoDetalleInfo> result = null;
         if (ValidateDataSet(ds))
         {
             result = MapSolicitudProductoDetalleDAL.ObtenerPorPagina(ds);
         }
         return(result);
     }
     catch (SqlException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (DataException ex)
     {
         Logger.Error(ex);
         throw new ExcepcionServicio(MethodBase.GetCurrentMethod(), ex);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
 /// <summary>
 /// Obtiene parametros para obtener lista paginada
 /// </summary>
 /// <param name="pagina"></param>
 /// <param name="filtro"></param>
 /// <returns></returns>
 public static Dictionary <string, object> ObtenerParametrosPorPagina(PaginacionInfo pagina, SolicitudProductoDetalleInfo filtro)
 {
     try
     {
         Logger.Info();
         var parametros =
             new Dictionary <string, object>
         {
             { "@SolicitudProductoDetalleID", filtro.SolicitudProductoDetalleID },
             { "@Activo", filtro.Activo },
             { "@Inicio", pagina.Inicio },
             { "@Limite", pagina.Limite }
         };
         return(parametros);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }
예제 #13
0
        /// <summary>
        /// Registra el envio de alimento de una organizacion a otra
        /// </summary>
        /// <param name="envioAlimento">Información del envio de alimento a guardar</param>
        /// <returns>Regresa una confirmación de registro del envio de alimento</returns>
        internal EnvioAlimentoInfo RegistrarEnvioAlimento(EnvioAlimentoInfo envioAlimento)
        {
            EnvioAlimentoInfo confirmacion = new EnvioAlimentoInfo();

            try
            {
                Logger.Info();
                AlmacenMovimientoBL almacenMovimientoBL = new AlmacenMovimientoBL();

                EnvioAlimentoDAL           salidaAlimentoDAL          = new EnvioAlimentoDAL();
                AlmacenMovimientoDetalleBL almacenMovimientoDetalleBl = new AlmacenMovimientoDetalleBL();
                AlmacenMovimientoDetalle   detalleMovimiento          = new AlmacenMovimientoDetalle();
                AlmacenInventarioBL        inventario = new AlmacenInventarioBL();
                AlmacenInventarioLoteBL    loteBl     = new AlmacenInventarioLoteBL();

                AlmacenMovimientoInfo almacenMovimiento = new AlmacenMovimientoInfo();
                almacenMovimiento.AlmacenID        = envioAlimento.Almacen.AlmacenID;
                almacenMovimiento.TipoMovimientoID = TipoMovimiento.ProductoSalidaTraspaso.GetHashCode();

                almacenMovimiento.Status                = Estatus.AplicadoInv.GetHashCode();
                almacenMovimiento.UsuarioCreacionID     = envioAlimento.UsuarioCreacionID;
                almacenMovimiento.UsuarioModificacionID = envioAlimento.UsuarioCreacionID;
                almacenMovimiento.EsEnvioAlimento       = true;
                almacenMovimiento.OrganizacionID        = envioAlimento.Origen.OrganizacionID;

                PolizaAbstract     poliza       = null;
                IList <PolizaInfo> listaPolizas = null;

                using (var transaccion = new TransactionScope())
                {
                    //registrar en TB AlmacenMovimiento
                    long almacenMovimientoID = almacenMovimientoBL.Crear(almacenMovimiento);
                    almacenMovimiento.AlmacenMovimientoID = almacenMovimientoID;
                    envioAlimento.AlmacenMovimientoId     = almacenMovimientoID;

                    if (envioAlimento.AlmacenMovimientoId == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    //registrar en TB AlmacenMovimientoDetalle
                    detalleMovimiento.AlmacenMovimientoID = almacenMovimiento.AlmacenMovimientoID;
                    almacenMovimiento = almacenMovimientoBL.ObtenerPorId(almacenMovimiento.AlmacenMovimientoID);

                    if (almacenMovimiento.AlmacenMovimientoID == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    envioAlimento.Folio        = almacenMovimiento.FolioMovimiento;
                    detalleMovimiento.Producto = envioAlimento.Producto;

                    if (detalleMovimiento.Producto.ManejaLote)
                    {
                        detalleMovimiento.AlmacenInventarioLoteId = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().AlmacenInventarioLoteId;

                        detalleMovimiento.Precio = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio;
                    }
                    else
                    {
                        detalleMovimiento.Precio = envioAlimento.AlmacenInventario.PrecioPromedio;
                    }

                    detalleMovimiento.ProductoID        = envioAlimento.Producto.ProductoId;
                    detalleMovimiento.Cantidad          = envioAlimento.Cantidad;
                    detalleMovimiento.Importe           = envioAlimento.Importe;
                    detalleMovimiento.UsuarioCreacionID = envioAlimento.UsuarioCreacionID;
                    detalleMovimiento.Piezas            = envioAlimento.Piezas;
                    int almacenMovimientoDetalleid = almacenMovimientoDetalleBl.Crear(detalleMovimiento);
                    if (almacenMovimientoDetalleid == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    //registrar en TB EnvioProducto
                    confirmacion = salidaAlimentoDAL.RegistrarEnvioAlimento(envioAlimento);

                    if (confirmacion.EnvioId == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    envioAlimento.EnvioId    = confirmacion.EnvioId;
                    envioAlimento.FechaEnvio = confirmacion.FechaEnvio;

                    envioAlimento.AlmacenInventario.Cantidad -= envioAlimento.Cantidad;
                    envioAlimento.AlmacenInventario.Importe  -= envioAlimento.Importe;
                    decimal precioPromedioInicial = 0M;
                    if (envioAlimento.Producto.ManejaLote)
                    {
                        precioPromedioInicial = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio;
                    }
                    else
                    {
                        precioPromedioInicial = envioAlimento.AlmacenInventario.PrecioPromedio;
                    }
                    if (envioAlimento.AlmacenInventario.Cantidad == 0)
                    {
                        envioAlimento.AlmacenInventario.PrecioPromedio = 0M;
                    }

                    if (envioAlimento.AlmacenInventario.Cantidad < 0)
                    {
                        envioAlimento.AlmacenInventario.Cantidad = 0;
                    }

                    if (envioAlimento.AlmacenInventario.Importe < 0)
                    {
                        envioAlimento.AlmacenInventario.Importe = 0;
                    }

                    if (envioAlimento.AlmacenInventario.Cantidad > 0 && envioAlimento.AlmacenInventario.Importe > 0)
                    {
                        envioAlimento.AlmacenInventario.PrecioPromedio = envioAlimento.AlmacenInventario.Importe / envioAlimento.AlmacenInventario.Cantidad;
                    }

                    envioAlimento.AlmacenInventario.UsuarioModificacionID = envioAlimento.UsuarioCreacionID;
                    inventario.ActualizarPorProductoId(envioAlimento.AlmacenInventario);

                    if (envioAlimento.Producto.ManejaLote)
                    {
                        FechaInfo fechaInfo = new FechaBL().ObtenerFechaActual();
                        envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad -= envioAlimento.Cantidad;
                        envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe  -= envioAlimento.Importe;

                        if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad <= 0)
                        {
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio = 0M;
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad       = 0;
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe        = 0;

                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().FechaInicio = fechaInfo.FechaActual;
                        }

                        if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe > 0 && envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad > 0)
                        {
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio = envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Importe / envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Cantidad;
                        }
                        else
                        {
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Activo   = EstatusEnum.Inactivo;
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().FechaFin = fechaInfo.FechaActual;
                        }

                        if (envioAlimento.Producto.SubfamiliaId == SubFamiliasEnum.Forrajes.GetHashCode())
                        {
                            envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas -= envioAlimento.Piezas;
                            if (envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas < 0)
                            {
                                envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().Piezas = 0;
                            }
                        }

                        envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().UsuarioModificacionId = envioAlimento.UsuarioCreacionID;
                        loteBl.ActualizarEnvioAlimento(envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault());
                    }

                    if (salidaAlimentoDAL.RegistrarRecepcionProductoEnc(envioAlimento, TipoMovimiento.ProductoSalidaTraspaso) == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    if (salidaAlimentoDAL.RegistrarRecepcionProductoDet(envioAlimento, TipoMovimiento.ProductoSalidaTraspaso) == 0)
                    {
                        return new EnvioAlimentoInfo {
                                   EnvioId = 0
                        }
                    }
                    ;

                    poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaTraspaso);

                    SolicitudProductoInfo oSolicitud = new SolicitudProductoInfo();
                    oSolicitud.FolioSolicitud    = envioAlimento.Folio;
                    oSolicitud.OrganizacionID    = envioAlimento.Origen.OrganizacionID;
                    oSolicitud.AlmacenGeneralID  = envioAlimento.Almacen.AlmacenID;
                    oSolicitud.Almacen           = new AlmacenBL().ObtenerAlmacenPorOrganizacion(envioAlimento.Destino.OrganizacionID).FirstOrDefault();
                    oSolicitud.FechaEntrega      = envioAlimento.FechaEnvio;
                    oSolicitud.UsuarioCreacionID = envioAlimento.UsuarioCreacionID;
                    oSolicitud.Detalle           = new List <SolicitudProductoDetalleInfo>();
                    SolicitudProductoDetalleInfo detalle = new SolicitudProductoDetalleInfo()
                    {
                        Cantidad       = envioAlimento.Cantidad,
                        PrecioPromedio = envioAlimento.Producto.ManejaLote ? envioAlimento.AlmacenInventario.ListaAlmacenInventarioLote.FirstOrDefault().PrecioPromedio: envioAlimento.AlmacenInventario.PrecioPromedio,
                        Producto       = envioAlimento.Producto
                    };
                    detalle.PrecioPromedio = decimal.Round(detalle.PrecioPromedio, 2);
                    if (detalle.PrecioPromedio == 0)
                    {
                        detalle.PrecioPromedio = precioPromedioInicial;
                    }
                    oSolicitud.Detalle.Add(detalle);

                    listaPolizas = poliza.GeneraPoliza(oSolicitud);
                    var polizaDAL = new PolizaDAL();
                    if (listaPolizas != null && listaPolizas.Any())
                    {
                        string Referencia = "03  " + envioAlimento.Folio.ToString() + new Random().Next(10, 20).ToString() + new Random().Next(30, 40) + DateTime.Now.Millisecond.ToString() + listaPolizas.ToList().FirstOrDefault().ClaseDocumento;
                        listaPolizas.ToList().ForEach(datos =>
                        {
                            datos.NumeroReferencia       = envioAlimento.Folio.ToString();
                            datos.OrganizacionID         = oSolicitud.OrganizacionID;
                            datos.UsuarioCreacionID      = envioAlimento.UsuarioCreacionID;
                            datos.Activo                 = EstatusEnum.Activo;
                            datos.ArchivoEnviadoServidor = 1;
                            datos.Referencia3            = Referencia;
                        });

                        ParametroOrganizacionInfo oParametroOrg = new ParametroOrganizacionBL().ObtenerPorOrganizacionIDClaveParametro(oSolicitud.OrganizacionID, ParametrosEnum.CuentaInventarioTransito.ToString());
                        if (oParametroOrg != null)
                        {
                            listaPolizas[listaPolizas.ToList().FindIndex(datos => datos.NumeroLinea.Trim() == "1")].Cuenta = oParametroOrg.Valor;
                        }

                        envioAlimento.Poliza = poliza.ImprimePoliza(oSolicitud, listaPolizas);
                        polizaDAL.CrearServicioPI(listaPolizas, TipoPoliza.SalidaTraspaso);

                        transaccion.Complete();
                    }
                }

                return(envioAlimento);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }
        }