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