public IActionResult QueueProcessed(int Id) { // Cargamos las variables que nos servirán durante la funcion ApiResponse response = new ApiResponse() { Success = true, ErrorMessage = "", Data = "OK" }; queueFunctions = new QueueFunctions(_db); try { // Creamos / Editamos el cliente solicitante del turno ResponseIdExceptionFunction queueResponse = queueFunctions.queueProcessed(Id); if (queueResponse.Integer == 0) { response.Success = false; response.ErrorMessage = queueResponse.Exception; } } catch (Exception e) { // Guardamos la excepción encontrada en un archivo log Log.LOG("CONTROLADOR: QueueController, FUNCIÓN: QueueProcessed(), PARÁMETROS: Queue.Id = " + Id.ToString() + " ERROR: " + e.Message); response.ErrorMessage = e.Message; } return(Json(response)); }
// Crea o edita el cliente public ResponseIdExceptionFunction CreateOrUpdate(Client client) { // Iniciamos la variable que vamos a retornar ResponseIdExceptionFunction clientInsertResponse = new ResponseIdExceptionFunction(); clientInsertResponse.Integer = 0; try { // Consultamos el cliente por su ClientIdentification Client clientInserted = _db.Client.FirstOrDefault(c => c.ClientIdentification == client.ClientIdentification); // De no existir hacemos la inserción if (clientInserted == null) { _db.Client.Add(client); _db.SaveChanges(); clientInsertResponse.Integer = client.Id; } // Caso que exista editamos else { clientInserted.ClientName = client.ClientName; _db.SaveChanges(); clientInsertResponse.Integer = clientInserted.Id; } } // Capturamos la excepción catch (Exception e) { // Guardamos la excepción encontrada en un archivo log Log.LOG("CONTROLADOR: ClientFunctions, FUNCIÓN: CreateOrUpdate(), PARÁMETROS: Client.Identification = " + client.ClientIdentification + ", Client.Name = " + client.ClientName + " ERROR: " + e.Message); clientInsertResponse.Exception = e.Message; } return(clientInsertResponse); }
public IActionResult GetTurn([FromBody] Client client) { // Cargamos las variables que nos servirán durante la funcion ApiResponse response = new ApiResponse(); queueFunctions = new QueueFunctions(_db); clientFuntions = new ClientFuntions(_db); try { // Creamos / Editamos el cliente solicitante del turno ResponseIdExceptionFunction clientResponse = clientFuntions.CreateOrUpdate(client); if (clientResponse.Integer > 0) { ResponseIdExceptionFunction turnResponse = queueFunctions.TurnAsing(clientResponse.Integer); if (turnResponse.Integer > 0) { response.Success = true; response.Data = turnResponse.Integer; } else { response.Success = false; response.ErrorMessage = turnResponse.Exception; } } else { response.Success = false; response.ErrorMessage = clientResponse.Exception; } } catch (Exception e) { // Guardamos la excepción encontrada en un archivo log Log.LOG("CONTROLADOR: QueueController, FUNCIÓN: GetTurn(), PARÁMETROS: Client.Identification = " + client.ClientIdentification.ToString() + ", " + client.ClientName.ToString() + " ERROR: " + e.Message); response.ErrorMessage = e.Message; } return(Json(response)); }
/* * Function queueProcessed * Actualiza por medio del ID de la Tabal Queue, la cola como procesada * @params Id, llave principal de la tabla Queue * @return ResponseIdExceptionFunction con intero y excepción en caso de existir */ public ResponseIdExceptionFunction queueProcessed(int Id) { // Reutilizamos el modelo de respuestas con entero, donde el valor 1 corresponde a OK, y el 0 a error ResponseIdExceptionFunction response = new ResponseIdExceptionFunction() { Exception = "", Integer = 1 }; try { // Consultamos la cola por su ID Queue queue = _db.Queue.Find(Id); // Evaluamos (para prevenir fallos) que esa cola si exista, sino, reportamos como no encontrada if (queue == null) { response.Exception = "Cola no encontrada con el ID " + Id.ToString(); response.Integer = 0; } // Ya existente la editamos else { queue.Processed = true; _db.Update(queue); _db.SaveChanges(); } } // Capturamos la excepción catch (Exception e) { // Guardamos la excepción encontrada en un archivo log Log.LOG("CONTROLADOR: QueueFunctions, FUNCIÓN: queueProcessed(), PARÁMETROS: Queue.Id = " + Id.ToString() + " ERROR: " + e.Message); response.Exception = e.Message; response.Integer = 0; } return(response); }
/* * Function ResponseIdExceptionFunction * Contiene asigna el turno al cliente * @params ClientId ID del cliente previamente registrado * @return ResponseIdExceptionFunction con intero y excepción en caso de existir */ public ResponseIdExceptionFunction TurnAsing(int ClientId) { // iniciamos el objeto a retornar ResponseIdExceptionFunction turnAsignResponse = new ResponseIdExceptionFunction(); turnAsignResponse.Integer = 0; DateTime now = DateTime.Now; Queue newTurn = new Queue(); newTurn.ClientId = ClientId; newTurn.Processed = false; newTurn.CreatedAt = now; try { // Seteamos la posición uno másde la cantidad registrada para las colas newTurn.Position = _db.Queue.Count() + 1; turnAsignResponse.Integer = newTurn.Position; // Seleccionamos el catálogo de colas ordenado ascendente por el tiempo de demora List <QueueCat> catalogs = _db.QueueCat.OrderBy(ob => ob.QueueTime).ToList(); // Consultamos las colas pendientes var activesQueues = this.activesQueues(_db); // Si no existe ninguna cola por procesar, seteamos por defecto la primera del catálogo y pasaría de inmediato if (activesQueues.Count == 0) { newTurn.QueueId = catalogs[0].Id; newTurn.TurnAt = now.AddMinutes(catalogs[0].QueueTime); } // En caso de existir consultamos agrupadamente `por el catálogo de colas else { List <Queue> comparationTimes = new List <Queue>(); foreach (QueueCat cat in catalogs) { Queue query = activesQueues.Where(fd => fd.QueueId == cat.Id).OrderByDescending(obd => obd.TurnAt).FirstOrDefault(); Queue comparationTime = new Queue { Id = 0, ClientId = 0, CreatedAt = now, Position = 0, Processed = true, QueueId = query != null ? query.QueueId : cat.Id, TurnAt = query != null?query.TurnAt.AddMinutes(cat.QueueTime) : now.AddMinutes(cat.QueueTime) }; comparationTimes.Add(comparationTime); } Queue lastOne = comparationTimes.OrderBy(od => od.TurnAt).FirstOrDefault(); // En caso de que la última haya pasado antes de ahora, quiere decir que no hay nadie en cola y puede pasar de inmediato if (lastOne.TurnAt < now) { newTurn.QueueId = catalogs[0].Id; newTurn.TurnAt = now.AddMinutes(catalogs[0].QueueTime); } // Caso contrario se le asigna una cola y tiempo para ser atendido else { newTurn.QueueId = lastOne.QueueId; newTurn.TurnAt = lastOne.TurnAt; } } // Guardamos la información _db.Queue.Add(newTurn); _db.SaveChanges(); } // Capturamos la excepción catch (Exception e) { // Guardamos la excepción encontrada en un archivo log Log.LOG("CONTROLADOR: QueueFunctions, FUNCIÓN: TurnAsing(), PARÁMETROS: Client.Id = " + ClientId.ToString() + " ERROR: " + e.Message); turnAsignResponse.Exception = e.Message; } return(turnAsignResponse); }