/// <summary>
        /// Guarda los costos de los movimientos
        /// </summary>
        /// <param name="distribucionDeIngredientes"></param>
        /// <param name="almacenMovimientoID"></param>
        /// <param name="distribucionorganizaciones"></param>
        /// <returns></returns>
        internal bool GuardarCosto(DistribucionDeIngredientesInfo distribucionDeIngredientes, long almacenMovimientoID, DistribucionDeIngredientesOrganizacionInfo distribucionorganizaciones)
        {
            bool regreso = true;

            try
            {
                var cuentaSAPBL = new CuentaSAPBL();
                IList <CuentaSAPInfo> cuentasSAP = cuentaSAPBL.ObtenerTodos(EstatusEnum.Activo);
                var almacenMovimientoCostoBl     = new AlmacenMovimientoCostoBL();
                if (almacenMovimientoID > 0)
                {
                    //Se obtiene el porcentaje a cobrar cargar por organizacion
                    decimal porcentajeSurtido = distribucionDeIngredientes.CantidadTotal > 0 ?
                                                (decimal)distribucionorganizaciones.CantidadSurtir / (decimal)distribucionDeIngredientes.CantidadTotal : 0;
                    foreach (var costoDistribucion in distribucionDeIngredientes.ListaPremezclaDistribucionCosto)
                    {
                        var almacenMovimientoCosto = new AlmacenMovimientoCostoInfo
                        {
                            AlmacenMovimientoId = almacenMovimientoID,
                            Iva               = costoDistribucion.Iva,
                            Retencion         = costoDistribucion.Retencion,
                            CostoId           = costoDistribucion.Costo.CostoID,
                            Importe           = costoDistribucion.Importe * porcentajeSurtido,
                            UsuarioCreacionId = costoDistribucion.UsuarioCreacionID
                        };

                        if (costoDistribucion.TieneCuenta)
                        {
                            CuentaSAPInfo cuenta =
                                cuentasSAP.FirstOrDefault(
                                    sap => sap.CuentaSAP.Trim().Equals(costoDistribucion.CuentaSAP.CuentaSAP.Trim()));
                            if (cuenta != null)
                            {
                                almacenMovimientoCosto.CuentaSAPID = cuenta.CuentaSAPID;
                                almacenMovimientoCosto.TieneCuenta = costoDistribucion.TieneCuenta;
                            }
                        }
                        else
                        {
                            almacenMovimientoCosto.ProveedorId = costoDistribucion.Proveedor.ProveedorID;
                        }

                        almacenMovimientoCostoBl.Crear(almacenMovimientoCosto);
                    }
                }
            }
            catch (ExcepcionGenerica)
            {
                regreso = false;
                throw;
            }
            catch (Exception ex)
            {
                regreso = false;
                Logger.Error(ex);
                throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
            }

            return(regreso);
        }
 /// <summary>
 /// Obtiene una lista de distribucion de ingredientes
 /// </summary>
 /// <param name="reader"></param>
 /// <returns></returns>
 internal static List <DistribucionDeIngredientesInfo> ObtenerPremezclaDistribucionConciliacion(IDataReader reader)
 {
     try
     {
         Logger.Info();
         var distribuciones = new List <DistribucionDeIngredientesInfo>();
         DistribucionDeIngredientesInfo distribucion;
         while (reader.Read())
         {
             distribucion = new DistribucionDeIngredientesInfo
             {
                 Producto = new ProductoInfo
                 {
                     ProductoId   = Convert.ToInt32(reader["ProductoID"]),
                     Descripcion  = Convert.ToString(reader["Producto"]),
                     UnidadId     = Convert.ToInt32(reader["UnidadID"]),
                     SubfamiliaId = Convert.ToInt32(reader["SubFamiliaID"])
                 },
                 Iva = Convert.ToInt32(reader["IVA"]),
                 CantidadExistente       = Convert.ToInt32(reader["CantidadExistente"]),
                 CostoUnitario           = Convert.ToInt32(reader["CostoUnitario"]),
                 PremezclaDistribucionID = Convert.ToInt32(reader["PremezclaDistribucionID"]),
                 FechaEntrada            = Convert.ToDateTime(reader["FechaEntrada"]),
                 AlmaceMovimientoID      = Convert.ToInt64(reader["AlmacenMovimientoID"]),
                 Proveedor = new ProveedorInfo
                 {
                     ProveedorID = Convert.ToInt32(reader["ProveedorID"]),
                     Descripcion = Convert.ToString(reader["Proveedor"]),
                     CodigoSAP   = Convert.ToString(reader["CodigoSAP"])
                 }
             };
             distribuciones.Add(distribucion);
         }
         reader.NextResult();
         var distribucionIngredientesOrganizaciones = new List <DistribucionDeIngredientesOrganizacionInfo>();
         DistribucionDeIngredientesOrganizacionInfo distribucionIngredienteOrganizacion;
         while (reader.Read())
         {
             distribucionIngredienteOrganizacion = new DistribucionDeIngredientesOrganizacionInfo
             {
                 Lote = new AlmacenInventarioLoteInfo
                 {
                     Lote = Convert.ToInt32(reader["Lote"]),
                     AlmacenInventario = new AlmacenInventarioInfo
                     {
                         Almacen = new AlmacenInfo
                         {
                             AlmacenID = Convert.ToInt32(reader["AlmacenID"])
                         }
                     }
                 },
                 Organizacion = new OrganizacionInfo
                 {
                     OrganizacionID = Convert.ToInt32(reader["OrganizacionID"])
                 },
                 CantidadSurtir          = Convert.ToInt32(reader["CantidadASurtir"]),
                 CantidadNueva           = Convert.ToInt32(reader["CantidadASurtir"]),
                 PremezclaDistribucionID = Convert.ToInt32(reader["PremezclaDistribucionID"]),
             };
             distribucionIngredientesOrganizaciones.Add(distribucionIngredienteOrganizacion);
         }
         distribuciones.ForEach(datos =>
         {
             datos.ListaOrganizaciones =
                 distribucionIngredientesOrganizaciones.Where(
                     id => id.PremezclaDistribucionID == datos.PremezclaDistribucionID)
                 .Select(org => new DistribucionDeIngredientesOrganizacionInfo
             {
                 Lote                    = org.Lote,
                 Organizacion            = org.Organizacion,
                 CantidadSurtir          = org.CantidadNueva,
                 PremezclaDistribucionID =
                     org.PremezclaDistribucionID,
                 CostoTotal =
                     org.CantidadNueva * datos.CostoUnitario
             }).ToList();
         });
         return(distribuciones);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex);
     }
 }