public static IList <FolioSolicitudInfo> ObtenerPorPagina(FolioSolicitudInfo folioSolicitudInfo) { var pagina = new PaginacionInfo { Inicio = 1, Limite = 15 }; folioSolicitudInfo.Usuario = new UsuarioInfo(); folioSolicitudInfo.OrganizacionID = Usuario.OrganizacionID; folioSolicitudInfo.UsuarioIDAutoriza = Usuario.UsuarioID; folioSolicitudInfo.EstatusID = Estatus.SolicitudProductoPendiente.GetHashCode(); folioSolicitudInfo.Activo = EstatusEnum.Activo; IList <FolioSolicitudInfo> result = null; ResultadoInfo <FolioSolicitudInfo> solicitudes; using (var solicitudProductoBL = new SolicitudProductoBL()) { solicitudes = solicitudProductoBL.ObtenerPorPagina(pagina, folioSolicitudInfo); } if (solicitudes != null && solicitudes.TotalRegistros > 0) { result = solicitudes.Lista; } return(result); }
/// <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> /// Obtiene una folio de solicitud de productos /// </summary> /// <param name="pagina"></param> /// <param name="filtro"></param> /// <returns></returns> public FolioSolicitudInfo ObtenerPorIDAyuda(FolioSolicitudInfo filtro) { FolioSolicitudInfo solicitudProducto = null; try { Dictionary <string, object> parameters = AuxSolicitudProductoReplicaDAL.ObtenerParametrosPorID(filtro); DataSet ds = Retrieve("SolicitudProductoReplica_ObtenerPorID", parameters); if (ValidateDataSet(ds)) { solicitudProducto = MapSolicitudProductoReplicaDAL.ObtenerPorIDAyuda(ds); } } 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); } return(solicitudProducto); }
/// <summary> /// Obtiene un flujo de datos /// para la generacion de la reimpresion /// de la poliza de Salida de Traspaso /// </summary> /// <param name="folioSolicitud"></param> /// <param name="polizaClave"></param> /// <returns></returns> private MemoryStream ReimpresionPolizaSalidaConsumo(FolioSolicitudInfo folioSolicitud, TipoPolizaInfo polizaClave) { var polizaBL = new PolizaBL(); IList <PolizaInfo> polizasSalidaConsumo = polizaBL.ObtenerPoliza(TipoPoliza.SalidaConsumo, folioSolicitud.OrganizacionID, folioSolicitud.FechaEntrega.HasValue ? folioSolicitud.FechaEntrega.Value : DateTime.MinValue, folioSolicitud.FolioSolicitud.ToString(CultureInfo.InvariantCulture), polizaClave.ClavePoliza, 1); MemoryStream stream = null; if (polizasSalidaConsumo != null) { var poliza = FabricaPoliza.ObtenerInstancia().ObtenerTipoPoliza(TipoPoliza.SalidaConsumo); var solicitudProductoDAL = new SolicitudProductoDAL(); using (var almacenDAL = new AlmacenDAL()) { var almacenMovimientoBL = new AlmacenMovimientoBL(); SolicitudProductoInfo solicitud = solicitudProductoDAL.ObtenerPorID(folioSolicitud.FolioID); if (solicitud != null) { AlmacenInfo almacenGeneral = almacenDAL.ObtenerAlmacenGeneralOrganizacion(folioSolicitud.OrganizacionID); AlmacenMovimientoInfo almacenMovimiento = almacenMovimientoBL.ObtenerPorIDCompleto(solicitud.AlmacenMovimientoID.HasValue ? solicitud.AlmacenMovimientoID.Value : 0); if (almacenMovimiento != null) { foreach (var detalle in solicitud.Detalle) { var movimiento = almacenMovimiento.ListaAlmacenMovimientoDetalle.FirstOrDefault( alm => alm.Producto.ProductoId == detalle.Producto.ProductoId); if (movimiento == null) { continue; } detalle.PrecioPromedio = movimiento.Precio; } } if (almacenGeneral == null) { return(null); } solicitud.AlmacenGeneralID = almacenGeneral.AlmacenID; polizasSalidaConsumo = poliza.GeneraPoliza(solicitud); stream = poliza.ImprimePoliza(solicitud, polizasSalidaConsumo); } } } return(stream); }
/// <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); }
/// <summary> /// Obtiene una lista de solicitudes autorizada /// </summary> /// <param name="filtro"></param> /// <returns></returns> public IList <SolicitudProductoInfo> ObtenerSolicitudesAutorizadas(FolioSolicitudInfo filtro) { try { Logger.Info(); return(solicitudProductoDAL.ObtenerSolicitudesAutorizadas(filtro)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene una entidad de SolicitudProducto por su Id /// </summary> /// <param name="filtro">Obtiene una entidad SolicitudProducto por su Id</param> /// <returns></returns> public FolioSolicitudInfo ObtenerPorFolioSolicitud(FolioSolicitudInfo filtro) { try { Logger.Info(); return(solicitudProductoDAL.ObtenerPorFolioSolicitud(filtro)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene el Contexto de la solicitud /// </summary> /// <returns></returns> private FolioSolicitudInfo InicializaContextoSolicitud() { var solicitud = new FolioSolicitudInfo { Descripcion = string.Empty, Usuario = usuario, UsuarioIDEntrega = usuario.UsuarioID, OrganizacionID = usuario.OrganizacionID, Producto = new ProductoInfo(), Cantidad = decimal.Zero, ClaseCostoProducto = new ClaseCostoProductoInfo(), AlmacenID = 0, FolioSolicitud = 0, EstatusID = Estatus.SolicitudProductoEntregado.GetHashCode(), }; return(solicitud); }
public void ObtenerPorPagina() { var bl = new SIE.Services.Servicios.BL.SolicitudProductoBL(); var filtro = new FolioSolicitudInfo { FolioSolicitud = 0, Descripcion = string.Empty, Usuario = new UsuarioInfo { UsuarioID = 4, OrganizacionID = 1 }, Activo = EstatusEnum.Activo }; var solicitudes = bl.ObtenerPorPagina(new PaginacionInfo { Inicio = 1, Limite = 15 }, filtro); Assert.IsNotNull(solicitudes, null); }
/// <summary> /// Obtiene parametros para obtener un folio de solicitud de productos /// </summary> /// <param name="pagina"></param> /// <param name="filtro"></param> /// <returns></returns> public static Dictionary <string, object> ObtenerParametrosPorID(FolioSolicitudInfo filtro) { try { Logger.Info(); var parametros = new Dictionary <string, object> { { "@OrganizacionID", filtro.OrganizacionID }, { "@FolioSolicitud", filtro.FolioSolicitud }, { "@Activo", filtro.Activo } }; return(parametros); } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }
/// <summary> /// Obtiene el Contexto de la solicitud /// </summary> /// <returns></returns> private FolioSolicitudInfo InicializaContextoSolicitud() { var solicitud = new FolioSolicitudInfo { Descripcion = string.Empty, Usuario = solictante, OrganizacionID = solictante.OrganizacionID, Producto = new ProductoInfo(), Cantidad = decimal.Zero, CentroCosto = new CentroCostoInfo { AutorizadorID = autorizadorId }, ClaseCostoProducto = new ClaseCostoProductoInfo(), AlmacenID = almacen != null ? almacen.AlmacenID : 0 }; return(solicitud); }
/// <summary> /// Metodo que mapea un folio de solicitud de productos de almacen /// </summary> /// <param name="ds"></param> /// <returns></returns> internal static FolioSolicitudInfo ObtenerPorIDAyuda(DataSet ds) { FolioSolicitudInfo fol; try { Logger.Info(); DataTable dt = ds.Tables[ConstantesDAL.DtDatos]; fol = new FolioSolicitudInfo() { FolioSolicitud = Convert.ToInt64(dt.Rows[0]["FolioSolicitud"]), //AlmacenDestinoDescripcion = Convert.ToString(dt.Rows[0]["AlmacenDestinoDescripcion"]) AlmacenDestinoID = Convert.ToInt32(dt.Rows[0]["AlmacenDestinoID"]) }; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } return(fol); }
/// <summary> /// Obtiene el Contexto de la solicitud /// </summary> /// <returns></returns> private FolioSolicitudInfo InicializaContextoSolicitud() { var solicitud = new FolioSolicitudInfo { Descripcion = string.Empty, Usuario = usuario, OrganizacionID = usuario.OrganizacionID, Producto = new ProductoInfo(), Cantidad = decimal.Zero, CentroCosto = new CentroCostoInfo { AutorizadorID = autorizadorId }, ClaseCostoProducto = new ClaseCostoProductoInfo(), AlmacenID = 0, //AlmacenID = almacen != null // ? almacen.AlmacenID // : 0, EstatusID = Estatus.SolicitudProductoAutorizado.GetHashCode(), }; return(solicitud); }
public static IList <SolicitudProductoDetalleModel> ObtenerPorFolioSolicitud(int folioSolicitud) { try { IList <SolicitudProductoDetalleModel> productos = null; var folio = new FolioSolicitudInfo { OrganizacionID = Usuario.OrganizacionID, FolioSolicitud = folioSolicitud, UsuarioIDAutoriza = Usuario.UsuarioID, EstatusID = Estatus.SolicitudProductoPendiente.GetHashCode(), Activo = EstatusEnum.Activo }; using (var solicitudProductoBL = new SolicitudProductoBL()) { FolioSolicitudInfo result = solicitudProductoBL.ObtenerPorFolioSolicitud(folio); if (result != null) { var solicitud = ObtenerSolicitudPorId(result.FolioID); if (solicitud != null) { if (solicitud.UsuarioIDSolicita != Usuario.UsuarioID) { var disponibilidad = ValidaDisponibilidad(solicitud, solicitudProductoBL); productos = new List <SolicitudProductoDetalleModel>(); var estatusAutorizados = new[] { Estatus.SolicitudProductoAutorizado.GetHashCode(), Estatus.SolicitudProductoRecibido.GetHashCode(), Estatus.SolicitudProductoEntregado.GetHashCode() }; var estatusDisponibles = new[] { Estatus.SolicitudProductoPendiente.GetHashCode(), Estatus.SolicitudProductoAutorizado.GetHashCode() }; solicitud.Detalle.ForEach(d => { var registro = disponibilidad.FirstOrDefault(e => e.ProductoID == d.ProductoID); if (d.Activo == EstatusEnum.Activo) { productos.Add(new SolicitudProductoDetalleModel { OrganizacionID = solicitud.OrganizacionID, SolicitudProductoDetalleId = d.SolicitudProductoDetalleID, SolicitudProductoId = d.SolicitudProductoID, FolioSolicitud = solicitud.FolioSolicitud, FechaSolicitud = solicitud.FechaSolicitud, ProductoID = d.ProductoID, Producto = d.Producto.Descripcion, Cantidad = d.Cantidad, Existencia = registro != null ? registro.Existencia : 0, Autorizada = registro != null ? registro.Autorizada : 0, IsDisponible = registro != null && registro.IsDisponible && estatusDisponibles.Contains(d.EstatusID), UnidadMedicion = d.Producto.UnidadMedicion.Descripcion, Descripcion = d.Concepto ?? string.Empty, ClaseCosto = d.ClaseCostoProducto != null ? d.ClaseCostoProducto.CuentaSAP.CuentaSAP : string.Empty, EstatusID = d.EstatusID, IsAutorizado = estatusAutorizados.Contains(d.EstatusID), ObservacionUsuarioAutoriza = solicitud.ObservacionUsuarioAutoriza, Activo = d.Activo == EstatusEnum.Activo }); } }); } } } } return(productos); } catch (Exception ex) { throw; } }
/// <summary> /// Obtiene una lista paginada de SolicitudProducto /// </summary> /// <param name="pagina"></param> /// <param name="filtro"></param> /// <returns></returns> public ResultadoInfo <FolioSolicitudInfo> ObtenerPorPagina(PaginacionInfo pagina, FolioSolicitudInfo filtro) { try { Logger.Info(); return(solicitudProductoDAL.ObtenerPorPagina(pagina, filtro)); } catch (ExcepcionGenerica) { throw; } catch (Exception ex) { Logger.Error(ex); throw new ExcepcionDesconocida(MethodBase.GetCurrentMethod(), ex); } }