Пример #1
0
        public async Task <IActionResult> Remove([FromBody] DequeuePosition item)
        {
            if (item is null || item.ServiceType == ServiceType.none)
            {
                return(new BadRequestResult());
            }

            DequeuePositionResult result = await _queueService.RemoveFromQueue(item);

            if (result is null)
            {
                return(new NoContentResult());
            }

            var notification = new QueueNotification
            {
                StationNumber = item.StationNumber,
                UserNumber    = result.CustomerNumberInQueue
            };

            try
            {
                string groupName = item.ServiceType.ToString();
                await _hubContext.Clients.Group(groupName).SendQueueNotificationToGroup(notification);
            }
            catch (Exception)
            {
            }

            return(new OkObjectResult(result));
        }
        public async Task <DequeuePositionResult> RemoveFromQueue(DequeuePosition item)
        {
            if (item is null)
            {
                throw new ArgumentNullException(nameof(item));
            }

            try
            {
                QueueItem nextItem = await _repository.GetNextItem(item.ServiceType);

                if (nextItem is null)
                {
                    return(null);
                }

                return(new DequeuePositionResult
                {
                    CustomerID = nextItem.UserID,
                    CustomerNumberInQueue = nextItem.UserNumber
                });
            }
            catch (Exception e)
            {
                return(null);
            }
        }
Пример #3
0
        public async Task <DequeuePositionResult> CallNextInQueueAsync(DequeuePosition request)
        {
            DequeuePositionResult result;

            switch (request.ServiceType)
            {
            case ServiceType.none:
                throw new ArgumentException("Argument is invalid");

            case ServiceType.Pharmacist:
                result = await mockRepository.GetDequeuePositionPharmacy(request);

                break;

            case ServiceType.Nurse:
                result = await mockRepository.GetDequeuePositionNurse(request);

                break;

            default:
                throw new ArgumentException("Argument is not set");
            }

            return(result);
        }
        public Task <DequeuePositionResult> GetDequeuePositionPharmacy(DequeuePosition position)
        {
            var top = pharmacyQueueMock.First;

            pharmacyQueueMock.Remove(top);

            DequeuePositionResult result = new DequeuePositionResult()
            {
                CustomerID = top.Value.CustomerID, CustomerNumberInQueue = top.Value.CustomerNumberInQueue
            };

            return(Task.FromResult(result));
        }
        /*
         * Call for the next client to the station
         */
        public async Task <DequeuePositionResult> CallNextInQueueAsync(DequeuePosition request)
        {
            HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Delete, $"{ConstantURI.queueServerURI}Queue");

            httpRequest.Content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
            var response = await client.SendAsync(httpRequest);

            response.EnsureSuccessStatusCode();

            var result = await response.Content.ReadAsAsync <DequeuePositionResult>();

            return(result);
        }
Пример #6
0
        async void ExecuteCallNextCommandAsync()
        {
            try
            {
                DequeuePosition dequeuePosition = new DequeuePosition()
                {
                    ServiceType = Model.StationServiceType, StationNumber = Model.StationNumber
                };

                DequeuePositionResult result = await http.CallNextInQueueAsync(dequeuePosition);

                if (result == null)
                {
                    dialog.ShowMessage("There are no client wating for treatment");
                    return;
                }

                DequeueModel.CustomerId   = result.CustomerID;
                DequeueModel.QueueuNumber = result.CustomerNumberInQueue;

                // Send last client as a treatment report
                if (DequeueModel.CustomerId > 0)
                {
                    CustomerTreatment treatment = new CustomerTreatment()
                    {
                        CustomerId         = DequeueModel.CustomerId,
                        TreatingEmployeeId = Model.EmployeeId,
                        DateOfTreatment    = DateTime.Now
                    };
                    await http.SendTreatmentReportAsync(treatment);
                }
            }
            catch (Exception e)
            {
                dialog.ShowMessage(e.Message);
            }
        }