private void CreateSchoolList1(GetEventsResult ger)
 {
     if (ger.OutData.Regions != null && ger.OutData.Regions.Length > 0)
     {
         ArrayOfRegionRegion region = ger.OutData.Regions[0];
         if (region != null && region.RegionEvents.Length > 0)
         {
             SchoolList.Items.Clear();
             for (int i = 0; i < region.RegionEvents.Length; i++)
             {
                 ArrayOfEventEvent anEvent = region.RegionEvents[i];
                 SchoolList.Items.Add(new ListItem(anEvent.SchoolName, anEvent.SchoolId));
             }
         }
     }
 }
Exemple #2
0
        public static Event ToEvent(this GetEventsResult result)
        {
            if (result == null)
            {
                return(null);
            }
            var newEvent = new Event
            {
                Id    = result.Id,
                Time  = ((double)result.Timestamp).JsonUnixTicksToDateTime().ToLocalTime(),
                Hosts = result.Hosts != null?result.Hosts.Select(hostResult => hostResult.ToHost()).Where(h => h != null).ToList() : new List <Host>(),
                            Trigger = result.Triggers != null?result.Triggers.Select(triggerResult => triggerResult.ToTrigger()).FirstOrDefault() : new Trigger()
            };

            if (result.State != 2)
            {
                newEvent.IsOk = result.State == 0;
            }

            return(newEvent);
        }
        public async Task <IActionResult> GetEvents(GetEventsParameter data)
        {
            var result = new GetEventsResult();

            // TODO: get GlobalVerification & GlobalPayment from settings
            bool globalVerification = false; // Events should verified first by admin
            bool globalPayment      = false; // Events should pay specified fee

            var q = context.Events.Where(a => a.Visible && (!globalVerification || a.Verified) && (!globalPayment || a.Payed));

            // TODO: Move query to repository

            if (data.From.HasValue)
            {
                q = q.Where(a => a.HoldingDate >= data.From.Value.ToLocalTime());
            }
            else if (data.To.HasValue)
            {
                var to = data.To.Value.ToLocalTime().AddDays(1);
                q = q.Where(a => a.HoldingDate <= to);
            }
            else
            {
                // Do not return past events at first
                q = q.Where(a => a.HoldingDate >= DateTime.Now);
            }

            if (!string.IsNullOrEmpty(data.Str))
            {
                q = q.Where(a => a.Title.Contains(data.Str));
            }

            if (data.Tags.Count > 0)
            {
                // TODO: Check generated query and execution plan
                q = q.Where(a => a.EventTags.Any(b => data.Tags.Contains(b.TagId)));
            }

            if (!string.IsNullOrEmpty(data.UserId))
            {
                q = q.Where(a => a.UserId == data.UserId);
            }

            const int distance = 10000;

            if (data.Latitude.HasValue && data.Longitude.HasValue)
            {
                q = q.Where(a => DataContext.GetDistance(data.Latitude.Value, data.Longitude.Value, a.Latitude, a.Longitude) <= distance);
            }

            switch (data.Sort)
            {
            case GetEventsSort.Latest:
                q = q.OrderBy(a => a.HoldingDate);
                break;

            case GetEventsSort.Popular:
                q = q.OrderByDescending(a => a.Activities.Count);
                break;

            case GetEventsSort.Nearest:
                // TODO: create a database function which take a geo location as input and sort the events by distance
                break;

            default:
                break;
            }

            var count = q.Count();

            var events = await q.Skip(data.Count *data.Page).Take(data.Count)
                         .Select(a => new EventSummury()
            {
                Capacity    = a.Capacity,
                HoldingDate = a.HoldingDate,
                Id          = a.Id,
                Joined      = a.Joined,
                Tags        = a.EventTags.Select(b => b.TagId),
                Photo       = a.Photos.DefaultIfEmpty().First().FileName,
                Title       = a.Title,
                Latitude    = a.Latitude,
                Longitude   = a.Longitude
            }).ToListAsync();

            result.Events = events;

            result.TotalCount = count;

            return(Ok(result));
        }