Exemple #1
0
        /// <summary>
        /// Método que contiene el algortmo de búsqueda por la mitad, divide de forma random la búsqueda si esta arrojó más de 100 resultadoos
        /// </summary>
        /// <param name="request">Objeto request que contiene la información del cliente y fechas de búsqueda</param>
        /// <returns>Objeto response con la información del número de facturas y el número de peticiones</returns>
        public InvoiceCountResponse GetCustomerInvoicesCount(InvoiceCountRequest request)
        {
            var invoicesCount = 0;
            var resuelveData  = new ResuelveData();
            var result        = new InvoiceCountResponse();

            var currentRequest = new InvoiceCountRequest(request.CustomerId, request.StartDate, request.EndDate);
            var r = resuelveData.GetCustomerInvoicesCount(currentRequest);

            if (int.TryParse(r, out invoicesCount))
            {
                result.AddInvoicesAndCalls(Convert.ToInt32(r), 1);
                return(result);
            }
            else
            {
                // Se obtiene la cantidad de días y se obtiene un resultado random de días para dividir
                Random rnd          = new Random();
                var    numberOfDays = (int)((request.EndDate - request.StartDate).TotalDays);
                var    randomDays   = rnd.Next(numberOfDays);

                var requestLeft  = new InvoiceCountRequest(request.CustomerId, request.StartDate, request.StartDate.AddDays(randomDays));
                var requestRight = new InvoiceCountRequest(request.CustomerId, request.StartDate.AddDays(randomDays + 1), request.EndDate);

                var resultLeft  = GetCustomerInvoicesCount(requestLeft);
                var resultRigth = GetCustomerInvoicesCount(requestRight);

                result.AddInvoicesAndCalls(resultLeft.CustomerInvoices, resultLeft.Calls + 1);
                result.AddInvoicesAndCalls(resultRigth.CustomerInvoices, resultRigth.Calls);

                return(result);
            }
        }
        /// <summary>
        /// Método que contiene el algortmo de búsqueda por la mitad, divide a la mitad la búsqueda si esta arrojó más de 100 resultadoos
        /// </summary>
        /// <param name="request">Objeto request que contiene la información del cliente y fechas de búsqueda</param>
        /// <returns>Objeto response con la información del número de facturas y el número de peticiones</returns>
        public InvoiceCountResponse GetCustomerInvoicesCount(InvoiceCountRequest request)
        {
            var invoicesCount = 0;
            var resuelveData  = new ResuelveData();
            var result        = new InvoiceCountResponse();

            var currentRequest = new InvoiceCountRequest(request.CustomerId, request.StartDate, request.EndDate);
            var r = resuelveData.GetCustomerInvoicesCount(currentRequest);

            if (int.TryParse(r, out invoicesCount))
            {
                result.AddInvoicesAndCalls(Convert.ToInt32(r), 1);
                return(result);
            }
            else
            {
                // Se obtiene la cantidad de días y se divide a la mitad
                var halfOfDays = (int)((request.EndDate - request.StartDate).TotalDays / 2);

                var requestLeft  = new InvoiceCountRequest(request.CustomerId, request.StartDate, request.StartDate.AddDays(halfOfDays));
                var requestRight = new InvoiceCountRequest(request.CustomerId, request.StartDate.AddDays(halfOfDays + 1), request.EndDate);

                var resultLeft  = GetCustomerInvoicesCount(requestLeft);
                var resultRigth = GetCustomerInvoicesCount(requestRight);

                result.AddInvoicesAndCalls(resultLeft.CustomerInvoices, resultLeft.Calls + 1);
                result.AddInvoicesAndCalls(resultRigth.CustomerInvoices, resultRigth.Calls);

                return(result);
            }
        }
        /// <summary>
        /// Método para obtener la cantidad de facturas de un cliente en un rango de fechas
        /// </summary>
        /// <param name="request">Objeto request con los parámetros necesarios</param>
        /// <returns>Respuesta de la llamada en formato string</returns>
        public string GetCustomerInvoicesCount(InvoiceCountRequest request)
        {
            var result = string.Empty;
            var prms   = new Dictionary <string, string>();

            prms.Add("id", request.CustomerId);
            prms.Add("start", request.StartDate.ToString("yyyy-MM-dd"));
            prms.Add("finish", request.EndDate.ToString("yyyy-MM-dd"));

            var response = new WebUtils(url, prms).GetHttpRequest();

            return(response);
        }
        /// <summary>
        /// Método que contiene el algoritmo de búsqueda por día, divide por días el rango de fechas especificado y busca por cada día
        /// </summary>
        /// <param name="request">Objeto request que contiene la información del cliente y fechas de búsqueda</param>
        /// <returns>Objeto response con la información del número de facturas y el número de peticiones</returns>
        public InvoiceCountResponse GetCustomerInvoicesCount(InvoiceCountRequest request)
        {
            var resuelveData = new ResuelveData();
            var result       = new InvoiceCountResponse();

            for (var currentDate = request.StartDate; currentDate <= request.EndDate; currentDate = currentDate.AddDays(1))
            {
                var currentRequest = new InvoiceCountRequest(request.CustomerId, currentDate, currentDate);
                var r = resuelveData.GetCustomerInvoicesCount(currentRequest);
                result.AddInvoicesAndCalls(Convert.ToInt32(r), 1);
            }

            return(result);
        }
        /// <summary>
        /// Método de búsqueda por divición rándom
        /// </summary>
        /// <param name="customerId">Id del usuario</param>
        /// <param name="startDate">Fecha de inicio</param>
        /// <param name="endDate">Fecha de fin</param>
        /// <returns>Objeto del tipo Json</returns>
        public JsonResult randomSearch(string customerId, string startDate, string endDate)
        {
            var sDate = DateTime.MinValue;
            var eDate = DateTime.MinValue;

            if (DateTime.TryParse(startDate, out sDate) && DateTime.TryParse(endDate, out eDate))
            {
                var request = new InvoiceCountRequest(customerId, sDate, eDate);
                var result  = new RandomLogic().GetCustomerInvoicesCount(request);
                return(Json(result, JsonRequestBehavior.AllowGet));
            }
            else
            {
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                return(Json(new { message = "Error" }, JsonRequestBehavior.AllowGet));
            }
        }