public void Add(Portafolio myObject) { var systemDate = DateTime.Now; //CREAR PROPUESTA var propuesta = new PropuestaBalanceo(); propuesta.NumPropuesta = GetId(systemDate.Year, systemDate.Month); propuesta.PortafolioId = myObject.Id; propuesta.CreateDate = systemDate; propuesta.EstadoId = (int)Enums.EstadoType.Pendiente; propuesta.UserId = myObject.UserId; propuesta.PropuestaBalanceoDetalles = new List <PropuestaBalanceoDetalle>(); foreach (var solicitud in myObject.PropuestaBalanceoDetalleViews) { propuesta.PropuestaBalanceoDetalles.Add(new PropuestaBalanceoDetalle { SolicitudRecursoDetalleId = solicitud.SolicitudRecursoId, Quantity = solicitud.Quantity }); } var buRecurso = new BuRecurso(); var buSolicitudRecurso = new BuSolicitudRecurso(); var buSolicitudRecursoDetalle = new BuSolicitudRecursoDetalle(); var buAlmacenRecurso = new BuAlmacenRecurso(); var solicitudRecursoDetalles = new List <SolicitudRecursoDetalle>(); var almacenRecursos = new List <AlmacenRecurso>(); foreach (var solicitudView in myObject.PropuestaBalanceoDetalleViews) { var solicitudRecurso = buSolicitudRecursoDetalle.GetById(solicitudView.SolicitudRecursoId); solicitudRecurso.Recurso = buRecurso.GetById(solicitudRecurso.RecursoId); //CHECK CANTIDAD ATENDIDA SOLICITUD if ((solicitudRecurso.QuantityAttended + solicitudView.Quantity) > solicitudRecurso.Quantity) { throw new Exception($"La cantidad atendida ({solicitudRecurso.QuantityAttended}) mas la cantidad a asignar ({solicitudView.Quantity}) es mayor ({solicitudRecurso.QuantityAttended + solicitudView.Quantity}) a la cantidad solicitada ({solicitudRecurso.Quantity}) del recurso: {solicitudRecurso.Recurso.Id} - {solicitudRecurso.Recurso.Name}."); } solicitudRecurso.QuantityAttended += solicitudView.Quantity; solicitudRecursoDetalles.Add(solicitudRecurso); //CHECK CANTIDAD COMPROMETIDA ALMACEN RECURSO var almacenRecurso = buAlmacenRecurso.Get(x => x.AlmacenId.Equals(1) && x.RecursoId.Equals(solicitudRecurso.RecursoId)); if ((almacenRecurso.StockCommitted + solicitudView.Quantity) > almacenRecurso.Stock) { throw new Exception($"El stock comprometido ({almacenRecurso.StockCommitted}) mas la cantidad a asignar ({solicitudView.Quantity}) es mayor ({almacenRecurso.StockCommitted + solicitudView.Quantity}) a el stock ({almacenRecurso.Stock}) del recurso: {solicitudRecurso.Recurso.Id} - {solicitudRecurso.Recurso.Name}."); } almacenRecurso.StockCommitted += solicitudView.Quantity; almacenRecursos.Add(almacenRecurso); } Add(propuesta); foreach (var solicitudRecursoDetalle in solicitudRecursoDetalles) { buSolicitudRecursoDetalle.Update(solicitudRecursoDetalle); } foreach (var almacenRecurso in almacenRecursos) { buAlmacenRecurso.Update(almacenRecurso); } }
public IEnumerable <SolicitudRecurso> GetSolicitudesFullByProyectoId(int proyectoId) { var solicitudes = GetMany(x => x.ProyectoId.Equals(proyectoId)).ToList(); var buSolicitudRecursoDetalle = new BuSolicitudRecursoDetalle(); var buRecurso = new BuRecurso(); var buAlmacenRecurso = new BuAlmacenRecurso(); var prioridades = new BuPrioridad().GetAll(); var estados = new BuEstado().GetAll(); var trabajadores = new BuTrabajador().GetAll(); foreach (var solicitud in solicitudes) { solicitud.Prioridad = prioridades.FirstOrDefault(x => x.Id.Equals(solicitud.PrioridadId)); solicitud.Estado = estados.FirstOrDefault(x => x.Id.Equals(solicitud.EstadoId)); solicitud.Responsable = trabajadores.FirstOrDefault(x => x.Id.Equals(solicitud.ResponsableId)); solicitud.Recursos = buSolicitudRecursoDetalle.GetMany(x => x.SolicitudRecursoId.Equals(solicitud.Id)).ToList(); foreach (var detalle in solicitud.Recursos) { detalle.Recurso = buRecurso.GetById(detalle.RecursoId); detalle.QuantityAvailable = buAlmacenRecurso .Get(x => x.AlmacenId.Equals(1) && x.RecursoId.Equals(detalle.RecursoId)) .StockAvailable; detalle.QuantityToAssign = (detalle.QuantityAvailable > detalle.QuantityPending) ? detalle.QuantityPending : detalle.QuantityAvailable; } } return(solicitudes); }
public IEnumerable <Proyecto> GetProyectosFullByPortafolioIdOrProgramaId(int portafolioId, int programaId) { var id = portafolioId + programaId; var proyectos = !portafolioId.Equals(0) ? GetMany(x => x.PortafolioId.HasValue && x.PortafolioId.Value.Equals(id)).ToList() : GetMany(x => x.ProgramaId.HasValue && x.ProgramaId.Value.Equals(id)).ToList(); var buCliente = new BuCliente(); var buPatrocinador = new BuPatrocinador(); var buSolicitudRecurso = new BuSolicitudRecurso(); var buSolicitudRecursoDetalle = new BuSolicitudRecursoDetalle(); var buRecurso = new BuRecurso(); var buAlmacenRecurso = new BuAlmacenRecurso(); var prioridades = new BuPrioridad().GetAll(); var estados = new BuEstado().GetAll(); var estadoAprobaciones = new BuEstadoAprobacion().GetAll(); var trabajadores = new BuTrabajador().GetAll(); var tipoProyectos = new BuTipoProyecto().GetAll(); foreach (var proyecto in proyectos) { proyecto.EstadoAprobacion = estadoAprobaciones.FirstOrDefault(x => x.Id.Equals(proyecto.EstadoAprobacionId)); proyecto.Prioridad = prioridades.FirstOrDefault(x => x.Id.Equals(proyecto.PrioridadId)); proyecto.Estado = estados.FirstOrDefault(x => x.Id.Equals(proyecto.EstadoId)); proyecto.Cliente = buCliente.GetById(proyecto.ClienteId); proyecto.TipoProyecto = tipoProyectos.FirstOrDefault(x => x.Id.Equals(proyecto.TipoProyectoId)); proyecto.Responsable = trabajadores.FirstOrDefault(x => x.Id.Equals(proyecto.ResponsableId)); proyecto.Patrocinador = buPatrocinador.GetById(proyecto.PatrocinadorId); var solicitudes = buSolicitudRecurso.GetMany(x => x.ProyectoId.Equals(proyecto.Id) && x.EstadoId.Equals((int)Enums.EstadoType.Pendiente)); if (solicitudes == null) { continue; } { proyecto.SolicitudesRecurso = solicitudes.ToList(); foreach (var solicitud in proyecto.SolicitudesRecurso) { solicitud.Prioridad = prioridades.FirstOrDefault(x => x.Id.Equals(solicitud.PrioridadId)); var detallesSolicitud = buSolicitudRecursoDetalle.GetMany(x => x.SolicitudRecursoId.Equals(solicitud.Id)); if (detallesSolicitud == null) { continue; } { solicitud.Recursos = detallesSolicitud.ToList(); foreach (var detalle in solicitud.Recursos) { detalle.Recurso = buRecurso.GetById(detalle.RecursoId); detalle.QuantityAvailable = buAlmacenRecurso.Get(x => x.AlmacenId.Equals(1) && x.RecursoId.Equals(detalle.RecursoId)).StockAvailable; detalle.QuantityToAssign = (detalle.QuantityAvailable > detalle.QuantityPending) ? detalle.QuantityPending : detalle.QuantityAvailable; } } } } } return(proyectos); }