Esempio n. 1
0
        public PendingRequestLogic GetNextRequest(int id_Usuario)
        {
            PendingRequestLogic request = new PendingRequestLogic();

            try
            {
                //Get Prensas for user
                List <int> prensasUsuario = _catalogPrensas.GetUserPrensas(id_Usuario);
                List <PrensaCatalog.DTO.Prensa> listCaracteristicas = new List <PrensaCatalog.DTO.Prensa>();
                if (prensasUsuario.Count > 0)
                {
                    foreach (int prensaId in prensasUsuario)
                    {
                        listCaracteristicas.Add(GetCaracteristicasPrensa(prensaId));
                    }
                    //Agrupamos y cogemos el grupo con mayor prioridad
                    var groupsPrioridad = listCaracteristicas.OrderByDescending(x => x.prioridad).GroupBy(x => x.prioridad).First();
                    //Convertimos en lista con IDs de prensa con mayor prioridad
                    var lstMaxPrioridad    = groupsPrioridad.Select(x => x).ToList();
                    var lstIdsMaxPrioridad = lstMaxPrioridad.Select(x => x.prensa.Id).ToList();
                    //Buscamos las solicitudes asociadas a las prensas
                    var matches = _dicRequest.Where(kvp => lstIdsMaxPrioridad.Contains(kvp.Value.GetIdPrensa)).Select(x => x);
                    //Elegimos la solicitud más antigua
                    var match = from x in matches where x.Value.GetDateGeneration == matches.Min(v => v.Value.GetDateGeneration) select x.Value;
                    if (match.Count() > 0)
                    {
                        request = match.ElementAt(0);
                    }
                }
            }catch (Exception ex)
            {
                log.Error("GetNextRequest()", ex);
            }

            return(request);
        }