public IActionResult UpdateUpdateQueueItemStatus([FromRoute] int id, [FromBody] UpdateQueueItemStatusRequest request)
        {
            try
            {
                var facade   = new QueueFacade();
                var response = facade.UpdateQueueItemStatus(id, request);

                switch (response.Status)
                {
                case HttpStatusCode.OK:
                    return(Ok());

                case HttpStatusCode.BadRequest:
                    return(BadRequest(BuildBadRequestMessage(response)));

                case HttpStatusCode.NotFound:
                    return(NotFound());

                case HttpStatusCode.InternalServerError:
                    return(StatusCode(StatusCodes.Status500InternalServerError));
                }
                s_logger.Fatal("This code should be unreachable, unknown result has occured.");
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to update queue item status.");
            }
            return(StatusCode(StatusCodes.Status500InternalServerError));
        }
        public void UpdateQueueItemStatusBothTimesNull()
        {
            var request = new UpdateQueueItemStatusRequest
            {
                TimeHelped  = null,
                TimeRemoved = null
            };
            var queueFacade = new QueueFacade();
            var response    = queueFacade.UpdateQueueItemStatus(-1, request);

            // Check that a request containing both TimeHelped and TimeRemoved is rejected.
            Assert.AreEqual(HttpStatusCode.BadRequest, response.Status);
        }
        public void UpdateQueueItemStatusBothTimesNotNull()
        {
            DateTime timeHelped  = DateTime.Now;
            DateTime timeRemoved = timeHelped.AddMinutes(1);
            var      request     = new UpdateQueueItemStatusRequest {
                TimeHelped  = timeHelped,
                TimeRemoved = timeRemoved
            };
            var queueFacade = new QueueFacade();
            var response    = queueFacade.UpdateQueueItemStatus(-1, request);

            // Check that a request containing both TimeHelped and TimeRemoved is rejected.
            Assert.AreEqual(HttpStatusCode.BadRequest, response.Status);
        }
        public void UpdateQueueItemStatusDoesNotExist()
        {
            DateTime timeHelped = DateTime.Now;
            var      request    = new UpdateQueueItemStatusRequest
            {
                TimeHelped  = timeHelped,
                TimeRemoved = null
            };
            var queueFacade = new QueueFacade();
            var response    = queueFacade.UpdateQueueItemStatus(-1, request);

            // Check that a request containing both TimeHelped and TimeRemoved is rejected.
            Assert.AreEqual(HttpStatusCode.NotFound, response.Status);
        }
        /// <summary>
        /// This method is used to check a check in item out of the helpdesk system
        /// </summary>
        /// <param name="id">Specified CheckInID</param>
        /// <returns>A response indicating success or failure</returns>
        public CheckOutResponse CheckOut(CheckOutRequest request, int id)
        {
            CheckOutResponse response = new CheckOutResponse();

            try
            {
                CheckInDataLayer dataLayer = new CheckInDataLayer();

                bool result = dataLayer.CheckOut(request, id);

                if (result == false)
                {
                    throw new NotFoundException("Unable to find check in item!");
                }

                QueueDataLayer queueDataLayer = new QueueDataLayer();
                var            queueItems     = queueDataLayer.GetQueueItemsByCheckIn(id);
                UpdateQueueItemStatusRequest removeRequest = new UpdateQueueItemStatusRequest()
                {
                    TimeRemoved = DateTime.Now
                };

                foreach (var item in queueItems)
                {
                    queueDataLayer.UpdateQueueItemStatus(item.ItemId, removeRequest);
                }

                response.Result = result;
                response.Status = HttpStatusCode.OK;
            }
            catch (NotFoundException ex)
            {
                s_logger.Warn(ex, "Unable to find check out item");
                response.Status = HttpStatusCode.NotFound;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.NotFound, "Unable to find check out item"));
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to check out");
                response.Status = HttpStatusCode.InternalServerError;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to check out"));
            }
            return(response);
        }
Exemple #6
0
        /// <summary>
        /// This method is used to update a queue item's status
        /// </summary>
        /// <param name="id">ID of the specific queue item to be updated</param>
        /// <param name="request">Request which contains the new queue item status</param>
        /// <returns>Response which indicates success or failure</returns>
        public UpdateQueueItemStatusResponse UpdateQueueItemStatus(int id, UpdateQueueItemStatusRequest request)
        {
            UpdateQueueItemStatusResponse response = new UpdateQueueItemStatusResponse();

            try
            {
                response = (UpdateQueueItemStatusResponse)request.CheckValidation(response);

                if (response.Status == HttpStatusCode.BadRequest)
                {
                    return(response);
                }

                QueueDataLayer dataLayer = new QueueDataLayer();
                bool           result    = dataLayer.UpdateQueueItemStatus(id, request);

                if (result)
                {
                    response.Status = HttpStatusCode.OK;
                    response.Result = true;
                }
                else
                {
                    response.Status = HttpStatusCode.BadRequest;
                    response.StatusMessages.Add(new StatusMessage(HttpStatusCode.BadRequest, "Unable to update queue item status."));
                }
            }
            catch (NotFoundException ex)
            {
                s_logger.Warn(ex, "Unable to update queue item status");
                response.Status = HttpStatusCode.NotFound;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.NotFound, "Unable to update queue item status"));
            }
            catch (Exception ex)
            {
                s_logger.Error(ex, "Unable to update queue item status.");
                response.Status = HttpStatusCode.InternalServerError;
                response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to update queue item status."));
            }
            return(response);
        }
Exemple #7
0
        /// <summary>
        /// Used to update a queue item status in the database.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public bool UpdateQueueItemStatus(int id, UpdateQueueItemStatusRequest request)
        {
            using (helpdesksystemContext context = new helpdesksystemContext())
            {
                Queueitem item = context.Queueitem.FirstOrDefault(p => p.ItemId == id);

                if (item == null)
                {
                    throw new NotFoundException($"Unable to find queue item with id [{id}]");
                }

                if (request.TimeHelped != null && request.TimeRemoved == null && item.TimeHelped == null)
                {
                    // Update TimeHelped
                    item.TimeHelped = request.TimeHelped;
                    context.SaveChanges();
                    return(true);
                }
                if (request.TimeRemoved != null && request.TimeHelped == null && item.TimeRemoved == null)
                {
                    if (request.TimeRemoved <= item.TimeHelped)
                    {
                        // TimeRemoved date is earlier than TimeHelped date - this can not happen.
                        return(false);
                    }
                    // Update TimeRemoved
                    item.TimeRemoved = request.TimeRemoved;
                    context.SaveChanges();
                    return(true);
                }
                // something went wrong. Shouldn't happen if the facade validation did its job.
                // Means both Helped and Removed values are assigned or null.
                // Could also mean a TimeHelped or TimeRemoved was provided twice.
                // E.g. you tried to provide TimeHelped when TimeHelped was alrady set for that queue item.
                return(false);
            }
        }
        public void UpdateQueueItemStatusInvalidTimeRemoved()
        {
            // Fill empty string parameters "" with auto-generated string.
            testEntityFactory.PopulateEmptyStrings = true;

            // Add test helpdesk.
            TestDataHelpdesk helpdeskData = testEntityFactory.AddHelpdesk();

            // Check that helpdesk was created successfully.
            Assert.AreEqual(HttpStatusCode.OK, helpdeskData.Response.Status);
            Assert.IsTrue(helpdeskData.Response.HelpdeskID > 0);

            // Create a unit. ID provided is 0, which will indicates creation of new helpdesk.
            List <string> topics   = new List <string>(new string[] { "Layouts", "Lifecycle" });
            TestDataUnit  unitData = testEntityFactory.AddUpdateUnit(0, helpdeskData.Response.HelpdeskID, "", "", false, topics);

            // Check that unit was created successfully.
            Assert.AreEqual(HttpStatusCode.OK, unitData.Response.Status);
            Assert.IsTrue(unitData.Response.UnitID > 0);

            // Get topics for the unit that was just created.
            TopicsFacade topicsFacade = new TopicsFacade();
            GetTopicsByUnitIDResponse topicResponse = topicsFacade.GetTopicsByUnitID(unitData.Response.UnitID);

            // Check that there are two units in the response (Layouts, Lifecycle).
            Assert.IsTrue(topicResponse.Topics.Count() == 3);

            // Add test queue item, pass in topic [0].
            TestDataQueue queueData = testEntityFactory.AddQueueItem(null, topicResponse.Topics[0].TopicId);

            // Check that queue item was created successfully.
            Assert.AreEqual(HttpStatusCode.OK, queueData.Response.Status);

            // Create update request for TimeHelped.
            var queueUpdateRequest = new UpdateQueueItemStatusRequest
            {
                TimeHelped  = DateTime.Now,
                TimeRemoved = null
            };

            // Update queue item TimeHelped.
            var queueUpdateResponse = testEntityFactory.QueueFacade.UpdateQueueItemStatus(queueData.Response.ItemId, queueUpdateRequest);

            // Check that queue item was updated successfully.
            Assert.AreEqual(HttpStatusCode.OK, queueData.Response.Status);
            Assert.IsTrue(queueUpdateResponse.Result == true);

            // Create update request for TimeRemoved.
            // NOTICE we're providing a TimedRemoved time that precedes TimeHelped. This should fail.
            DateTime timeRemoved = queueUpdateRequest.TimeHelped.Value.AddMinutes(-1);

            queueUpdateRequest = new UpdateQueueItemStatusRequest
            {
                TimeHelped  = null,
                TimeRemoved = timeRemoved
            };

            // Update queue item TimeRemoved.
            queueUpdateResponse = testEntityFactory.QueueFacade.UpdateQueueItemStatus(queueData.Response.ItemId, queueUpdateRequest);

            // Check that queue item was updated successfully.
            Assert.AreEqual(HttpStatusCode.BadRequest, queueUpdateResponse.Status);
            Assert.IsTrue(queueUpdateResponse.Result == false);
        }