Esempio n. 1
0
        public Task <Report> AddReport(Report report)
        {
            List <Event> events = (from e in GetEvents()
                                   where e.StartTime <= report.Time.AddMinutes(10) &&
                                   e.EndTime >= report.Time.AddMinutes(-10)
                                   select e).ToList();

            if (events.Count == 1)
            {
                if (report.Time < events[0].StartTime)
                {
                    events[0].StartTime = report.Time;
                    UpdateEvent(events[0]);
                }
                else if (report.Time > events[0].EndTime)
                {
                    events[0].EndTime = report.Time;
                    UpdateEvent(events[0]);
                }
                report.Event = events[0];
            }
            else if (events.Count > 1)
            {
                Event  closestEvent = events[0]; // base case
                double tmpInterval, minInterval = Math.Abs((report.Time - closestEvent.StartTime).TotalMinutes);

                foreach (Event ev in events) // check closest start time
                {
                    tmpInterval = Math.Abs((report.Time - ev.StartTime).TotalMinutes);
                    if (tmpInterval < minInterval)
                    {
                        minInterval  = tmpInterval;
                        closestEvent = ev;
                    }
                }

                foreach (Event ev in events) // check closest end time
                {
                    tmpInterval = Math.Abs((report.Time - ev.EndTime).TotalMinutes);
                    if (tmpInterval < minInterval)
                    {
                        minInterval  = tmpInterval;
                        closestEvent = ev;
                    }
                }

                report.Event = closestEvent;
            }
            else
            {
                report.Event = new Event(report.Time)
                {
                    StartTime = report.Time
                };
            }

            var res = _dal.AddReport(report);

            UpdateExplosions(report);

            return(res);
        }