public long Add(int Id_Prensa)
        {
            long Id_Request = -1;

            try
            {
                log.Debug("MemoryGeneratedRequest. Add(). ");
                //Add Request
                Solicitudes            model     = new Solicitudes();
                Model.BL.DTO.Solicitud solicitud = new Model.BL.DTO.Solicitud();
                solicitud.Id_Prensa        = Id_Prensa;
                solicitud.Fecha_Generacion = DateTime.Now;
                Id_Request = model.Agregar(solicitud);

                PendingRequestLogic pendingRequestLogic = new PendingRequestLogic();
                pendingRequestLogic.SetConfiguration(Estado_Solicitud.Pendiente, null, null);

                _dicRequest.Add(Id_Request, pendingRequestLogic);

                //Add to History
                Model.BL.Historico_Solicitud     modelHistoric = new Model.BL.Historico_Solicitud(ConfigurationManager.ConnectionStrings["PrensasConfigDB"].ConnectionString);
                Model.BL.DTO.Historico_Solicitud historico     = new Model.BL.DTO.Historico_Solicitud();
                historico.Fecha        = solicitud.Fecha_Generacion;
                historico.Id_Solicitud = Id_Request;
                historico.Estado       = Estado_Solicitud.Pendiente;

                modelHistoric.Agregar(historico);
            }
            catch (Exception er)
            {
                log.Error("Add()", er);
            }
            return(Id_Request);
        }
        public long MarkAs(long Id_Request, Estado_Solicitud state, int?id_Usuario, int?id_Device)
        {
            long idRequestCambioEstado = -1;

            try
            {
                // Configuramos el estado de las notificaciones en memoria
                log.Debug("MarkAs. Guardando el estado en memoria");
                PendingRequestLogic confRequest = null;

                if (_dicRequest.TryGetValue(Id_Request, out confRequest))
                {
                    // Obtenemos el estado actual
                    Estado_Solicitud?estadoSolicitud = confRequest.GetRequestState;

                    if (estadoSolicitud != null && state < estadoSolicitud)
                    {
                        //Add to History
                        Model.BL.Historico_Solicitud     modelHistoric = new Model.BL.Historico_Solicitud(ConfigurationManager.ConnectionStrings["PrensasConfigDB"].ConnectionString);
                        Model.BL.DTO.Historico_Solicitud historico     = new Model.BL.DTO.Historico_Solicitud();
                        historico.Fecha        = DateTime.Now;
                        historico.Id_Solicitud = Id_Request;
                        historico.Estado       = state;
                        idRequestCambioEstado  = modelHistoric.Agregar(historico);

                        //Change State
                        confRequest.SetConfiguration(state, id_Usuario, id_Device);
                    }
                }
            }
            catch (Exception er)
            {
                log.Error("MarkAs()", er);
            }

            return(idRequestCambioEstado);
        }
        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);
        }