/// <summary> /// Obtiene la existencia de productos. /// </summary> /// <returns></returns> private decimal ObtenerDisponibilidad(int productoId) { decimal disponibilidad = decimal.Zero; if (productoId > 0) { var filtro = new FolioSolicitudInfo { OrganizacionID = Contexto.OrganizacionID, Producto = Contexto.Solicitud.Producto, EstatusID = (int)Estatus.SolicitudProductoAutorizado, Activo = EstatusEnum.Activo }; IList <SolicitudProductoInfo> solicitudes = solicitudProductoBL.ObtenerSolicitudesAutorizadas(filtro); if (solicitudes != null) { disponibilidad = solicitudes.SelectMany(sd => sd.Detalle) .Where(sd => sd.ProductoID == productoId && sd.EstatusID == (int)Estatus.SolicitudProductoAutorizado && sd.Activo == EstatusEnum.Activo) .Sum(c => c.Cantidad); } } return(disponibilidad); }
/// <summary> /// /// </summary> /// <param name="solicitud"></param> /// <param name="solicitudProductoBL"></param> /// <returns></returns> private static List <SolicitudProductoDetalleModel> ValidaDisponibilidad(SolicitudProductoInfo solicitud, SolicitudProductoBL solicitudProductoBL) { dynamic result; IEnumerable <int> idsProductos = solicitud.Detalle .Where(d => d.Producto.FamiliaId != (int)FamiliasEnum.HerramientaYEquipo || d.Producto.FamiliaId != (int)FamiliasEnum.Combustibles) .Select(d => d.ProductoID).Distinct().ToList(); SolicitudProductoInfo solicitudGuardar = solicitudProductoBL.ObtenerPorID(solicitud); var filtro = new FolioSolicitudInfo { OrganizacionID = solicitudGuardar.OrganizacionID, IdsProductos = idsProductos.ToList(), EstatusID = Estatus.SolicitudProductoAutorizado.GetHashCode(), Activo = EstatusEnum.Activo }; IList <AlmacenInventarioInfo> existencia = ObtenerExistencia(idsProductos); IList <SolicitudProductoInfo> solicitudesAutorizadas = solicitudProductoBL.ObtenerSolicitudesAutorizadas(filtro); var productosValidar = solicitud.Detalle.Select(d => new { d.ProductoID, d.Cantidad, d.Producto.FamiliaId }).ToList(); var autorizadas = (from p in solicitudesAutorizadas.SelectMany(sd => sd.Detalle) where p.EstatusID == Estatus.SolicitudProductoAutorizado.GetHashCode() group p by p.ProductoID into pg select new { ProductoID = pg.Key, Autorizada = pg.Sum(c => c.Cantidad) }).ToList(); List <SolicitudProductoDetalleModel> query = (from p in productosValidar join a in autorizadas on p.ProductoID equals a.ProductoID into gj from pa in gj.DefaultIfEmpty() select new SolicitudProductoDetalleModel { ProductoID = p.ProductoID, Cantidad = p.Cantidad, Existencia = ObtenerCantidadExistencia(p.ProductoID, p.FamiliaId, p.Cantidad, existencia, (pa == null ? 0 : pa.Autorizada)), /* Para los */ Autorizada = (pa == null ? 0 : pa.Autorizada), IsDisponible = (ObtenerCantidadExistencia(p.ProductoID, p.FamiliaId, p.Cantidad, existencia, (pa == null ? 0 : pa.Autorizada)) - (pa == null ? 0 : pa.Autorizada)) >= 0 }).ToList(); return(query); }
/// <summary> /// /// </summary> /// <param name="solicitud"></param> /// <returns></returns> private IEnumerable <SolicitudProductoDetalleModel> ValidaDisponibilidad(SolicitudProductoInfo solicitud) { IEnumerable <int> idsProductos = solicitud.Detalle.Select(d => d.ProductoID).Distinct().ToList(); var filtro = new FolioSolicitudInfo { OrganizacionID = solicitud.OrganizacionID, IdsProductos = idsProductos.ToList(), EstatusID = Estatus.SolicitudProductoAutorizado.GetHashCode(), Activo = EstatusEnum.Activo }; IEnumerable <AlmacenInventarioInfo> existencia = ObtenerExistencia(idsProductos); IList <SolicitudProductoInfo> solicitudesAutorizadas = solicitudProductoBL.ObtenerSolicitudesAutorizadas(filtro); var productosValidar = solicitud.Detalle.Select(d => new { d.ProductoID, d.Cantidad }).ToList(); var autorizadas = (from p in solicitudesAutorizadas.SelectMany(sd => sd.Detalle) where p.EstatusID == Estatus.SolicitudProductoAutorizado.GetHashCode() group p by p.ProductoID into pg select new { ProductoID = pg.Key, Autorizada = pg.Sum(c => c.Cantidad) }).ToList(); var query = (from p in productosValidar join e in existencia on p.ProductoID equals e.ProductoID join a in autorizadas on p.ProductoID equals a.ProductoID into gj from pa in gj.DefaultIfEmpty() select new SolicitudProductoDetalleModel { ProductoID = p.ProductoID, Cantidad = p.Cantidad, Existencia = e.Cantidad, Autorizada = (pa == null ? 0 : pa.Autorizada), IsDisponible = (e.Cantidad - (pa == null ? 0 : pa.Autorizada - p.Cantidad)) >= p.Cantidad }).ToList(); return(query); }