public IActionResult GetVisitorOverview(Guid id)
        {
            try
            {
                VisitorManager  visitorMng = new VisitorManager();
                VisitorResource visitor    = visitorMng.GetRecordById(id).ToVisitorResource();

                var result = new VisitorOverviewResource(visitor);
                VisitorNotificationManager notificationsMng = new VisitorNotificationManager();
                var notifications = notificationsMng.GetRecordsByVisitorId(id);
                result.Notifications = notifications.Select(n => n.ToVisitorNotificationResource()).ToList();

                VisitManager visitMng = new VisitManager();
                var          visits   = visitMng.GetRecordsByVisitorId(id);
                result.Visits = visits.Select(v => v.ToVisitResource()).ToList();

                PositiveCaseManager positiveCasesMng = new PositiveCaseManager();
                var positiveCases = positiveCasesMng.GetRecordsByVisitorId(id);
                result.PositiveCases = positiveCases.Select(v => v.ToPositiveCaseResource()).ToList();

                return(Ok(result));
            }
            catch (EntityValidationException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch
            {
                return(Problem());
            }
        }
Example #2
0
        public IActionResult GetPositiveCase(Guid id)
        {
            try
            {
                PositiveCaseManager        positiveCaseMng = new PositiveCaseManager();
                VisitManager               visitMng        = new VisitManager();
                VisitorNotificationManager notificationMng = new VisitorNotificationManager();
                var positiveCase = positiveCaseMng.GetRecordById(id).ToPositiveCaseResource();

                // load visitor name (needed for the autocomplete component)
                VisitorManager visitorMng = new VisitorManager();
                var            visitor    = visitorMng.GetRecordById(positiveCase.VisitorId);
                positiveCase.VisitorName = visitor.Name;

                #region Determine if all users with colliding visits were notified

                // Set date to the last minute of the day to include all the visits from that day on the retrieved visits
                DateTime visitDate = positiveCase.VisitDate.Date.AddHours(23).AddMinutes(59);
                var      positiveCaseVisitsBefore = visitMng.GetUserVisitsBeforeDate(positiveCase.VisitorId, visitDate, 2).ToList();

                // Get colliding visits
                var collidingVisits = visitMng.GetCollidingVisits(positiveCaseVisitsBefore);

                positiveCase.AllUsersNotified = true;

                foreach (var collidingVisit in collidingVisits)
                {
                    bool notificationSent = notificationMng.GetRecordsByVisitorId(collidingVisit.Visitor.Id).Any(v => v.PositiveCase.Id == id);
                    if (!notificationSent)
                    {
                        positiveCase.AllUsersNotified = false;
                        break;
                    }
                }

                #endregion

                return(Ok(positiveCase));
            }
            catch (EntityNotFoundException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch
            {
                return(Problem());
            }
        }
        public IActionResult Update(VisitorNotificationResource visitorNotification)
        {
            try
            {
                VisitorNotificationManager visitorNotificationMng = new VisitorNotificationManager();
                var visitorNotificationDb = visitorNotificationMng.GetRecordById(visitorNotification.Id);
                if (visitorNotificationDb == null)
                {
                    return(BadRequest("Invalid visitor notification id!"));
                }

                visitorNotificationDb.SentDate = visitorNotification.SentDate;

                if (visitorNotificationDb.Visitor.Id != visitorNotification.VisitorId)
                {
                    VisitorManager visitorMng = new VisitorManager();
                    Visitor        visitor    = visitorMng.GetRecordById(visitorNotification.VisitorId);
                    if (visitor == null)
                    {
                        return(BadRequest("Invalid visitor id!"));
                    }
                    visitorNotificationDb.Visitor = visitor;
                }

                if (visitorNotificationDb.PositiveCase.Id != visitorNotification.PositiveCaseId)
                {
                    PositiveCaseManager positiveCaseMng = new PositiveCaseManager();
                    PositiveCase        positiveCase    = positiveCaseMng.GetRecordById(visitorNotification.PositiveCaseId);
                    if (positiveCase == null)
                    {
                        return(BadRequest("Invalid positive case id!"));
                    }
                    visitorNotificationDb.PositiveCase = positiveCase;
                }

                visitorNotificationMng.Update(visitorNotificationDb);
                return(Ok());
            }
            catch (EntityValidationException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch
            {
                return(Problem());
            }
        }
Example #4
0
        public IActionResult GetPositiveCaseOverview(Guid id)
        {
            try
            {
                PositiveCaseManager        positiveCaseMng = new PositiveCaseManager();
                VisitManager               visitMng        = new VisitManager();
                VisitorManager             visitorMng      = new VisitorManager();
                VisitorNotificationManager notificationMng = new VisitorNotificationManager();

                var positiveCase = positiveCaseMng.GetRecordById(id).ToPositiveCaseResource();
                var result       = new PositiveCaseOverviewResource(positiveCase);

                // load visitor name (needed for the autocomplete component)
                result.VisitorName = visitorMng.GetRecordById(positiveCase.VisitorId).Name;

                // Set date to the last minute of the day to include all the visits from that day on the retrieved visits
                result.VisitDate = result.VisitDate.Date.AddHours(23).AddMinutes(59);
                var positiveCaseVisitsBefore = visitMng.GetUserVisitsBeforeDate(result.VisitorId, result.VisitDate, 2).ToList();

                // Get colliding visits
                var collidingVisits = visitMng.GetCollidingVisits(positiveCaseVisitsBefore);


                foreach (var collidingVisit in collidingVisits)
                {
                    result.CollidingVisits.Add(new AffectedVisitsResource()
                    {
                        VisitId          = collidingVisit.Visitor.Id,
                        VisitDate        = collidingVisit.CheckIn,
                        NotificationSent = notificationMng.GetRecordsByVisitorId(collidingVisit.Visitor.Id).Any(v => v.PositiveCase.Id == id),
                        VisitorId        = collidingVisit.Visitor.Id,
                        VisitorName      = visitorMng.GetRecordById(collidingVisit.Visitor.Id).Name
                    });
                }
                result.AllUsersNotified = result.CollidingVisits.Any(c => !c.NotificationSent);

                return(Ok(result));
            }
            catch (EntityNotFoundException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                return(Problem(ex.Message));
            }
        }
 public IActionResult New(VisitorNotificationResource visitorNotification)
 {
     try
     {
         VisitorNotificationManager visitorNotificationMng = new VisitorNotificationManager();
         visitorNotificationMng.Insert(visitorNotification.ToVisitorNotification());
         return(Ok());
     }
     catch (EntityValidationException ex)
     {
         return(BadRequest(ex.Message));
     }
     catch
     {
         return(Problem());
     }
 }
        public IActionResult Delete(Guid id)
        {
            try
            {
                VisitorNotificationManager visitorNotificationMng = new VisitorNotificationManager();
                var visitorNotificationDb = visitorNotificationMng.GetRecordById(id);

                if (visitorNotificationDb == null)
                {
                    return(BadRequest("Invalid positive case id!"));
                }

                visitorNotificationMng.Delete(id);
                return(Ok());
            }
            catch (EntityValidationException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch
            {
                return(Problem());
            }
        }