Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        // 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);
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        /*
         *  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);
        }
Exemplo n.º 5
0
        /*
         *  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);
        }