示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }