public IActionResult GetCommercials([FromQuery] string name) { try { /// <summary> /// Metodo para guardar request en logs /// </summary> _securityService.RequestLog("api/bo/commercials/GetCommercials: " + JsonConvert.SerializeObject(name)); string strKeepAliveMaxTime = _config.GetValue <string>("KeepAlive:MaxTime"); if (!uint.TryParse(strKeepAliveMaxTime, out uint uiKeepAliveMaxTime)) { uiKeepAliveMaxTime = 1; // valor por defecto } BOGetCommercialsResponseModel dataCommercialsModel = _boCommercialService.GetCommercials(name, uiKeepAliveMaxTime); switch (dataCommercialsModel.status) { case ResultStatus.SUCCESS: return(Ok(_mapper.Map <List <BOCommercialDto> >(dataCommercialsModel.commercials))); case ResultStatus.NOT_FOUND: return(NotFound()); case ResultStatus.ACCESS_DENIED: return(StatusCode(401)); case ResultStatus.NOT_AUTHORIZED: return(StatusCode(403)); default: return(StatusCode(500)); } } catch (Exception e) { return(StatusCode(500, e)); } }
/// <summary> /// <para> /// Busca todos los comerciales en los cuales el campo 'Name' coincide y/o contiene la palabra /// clave indicada por el parametro <paramref name="strName"/>. /// </para> /// <para> /// Si <paramref name="strName"/> es NULL, string vacio o string blanco (todos espacios) /// se recuperan todos los comerciales. /// </para> /// </summary> /// <param name="strName">Palabra clave a buscar en los nombres de los comerciales.</param> /// <param name="pMaxTimeKeepAlive">Tiempo máximo (en minutos, 1 por defecto) por el cuál se asume que un comercial esta conectado tras el último KeepAlive.</param> /// <returns> /// Modelo <see cref="BOGetCommercialsResponseModel"/> con los datos de la respuesta. /// </returns> public BOGetCommercialsResponseModel GetCommercials(string strName = null, uint pMaxTimeKeepAlive = 1) { BOGetCommercialsResponseModel commercialsModel = new BOGetCommercialsResponseModel { commercials = new List <CommercialModel>(), status = ResultStatus.SUCCESS }; try { // Lista que contendrá los comerciales que cuyos campo 'Name' contengan el filtro 'strName'. // Busqueda similar al LIKE. List <Commercials> commercialsDB = new List <Commercials>(); // Si 'strName" es null o string vacio o string blanco => debo recuperar todos los comerciales // en otro caso => debo realizar el filtrado. if (string.IsNullOrWhiteSpace(strName)) { var tablaCommerciales = _commercialRepository.GetTable(); var commercials = tablaCommerciales.Include(c => c.Session); commercialsDB.AddRange(commercials.Cast <Commercials>().ToList()); } else { // Elimino los espacios extras (tanto del inicio, entre palabras y al final) // del parametro de entrada string filtro = NormalizeWhiteSpace(strName); // Declaro una variable Func y asigno una expresión lambda a la variable. var compareInfo = CultureInfo.InvariantCulture.CompareInfo; Func <Commercials, bool> selector = c => compareInfo.IndexOf(c.Name, filtro, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) > -1; // Busco en el repositorio de acuerdo al 'selector' actual y lo agrego a la lista de comerciales var tablaCommerciales = _commercialRepository.GetTable(); var commercials = tablaCommerciales.Include(c => c.Session).Where(selector); commercialsDB.AddRange(commercials); } foreach (Commercials c in commercialsDB) { commercialsModel.commercials.Add(new CommercialModel { CommercialId = c.Id, CommercialName = String.Format("{0}", c.Name), CommercialEmail = c.Email, Peer = c.Peer, SiebelId = c.SiebelId, PBXPhoneNumber = c.PBXPhoneNumber, MobilePhoneNumber = c.MobilePhoneNumber, Active = c.Active, Connected = c.Session != null && // session exist !c.Session.EndDate.HasValue && // no logout c.Session.LastKeepAlive.HasValue && // LastKeepAlive != null => connected DateTimeOffset.Now.Subtract(c.Session.LastKeepAlive.Value).TotalMinutes <= pMaxTimeKeepAlive // (DateNow-LastKeepAlive) <= MaxTimeKeepAlive }); } return(commercialsModel); } catch (Exception e) { return(new BOGetCommercialsResponseModel { status = ResultStatus.ERROR }); } }