public ConventionStatisticsViewModel BuildStatisticView(string conventionId)
        {
            var viewModel = new ConventionStatisticsViewModel();

            var selectConvention = Session
                                   .Include <Convention>(x => x.DayIds)
                                   .Load <Convention>(conventionId);

            var engagements = Session.Query <ConventionEngagement>()
                              .Include(x => x.ParticipantId)
                              .Where(x => x.ConventionId == conventionId)
                              .ToList();

            var activities = Session.Query <Activity>().ToDictionary(x => x.Id, x => x);
            var days       = Session.Load <Day>(selectConvention.DayIds);

            viewModel.SelectedConvention         = selectConvention;
            viewModel.TotalLongTermParticipants  = engagements.Count(x => x.IsLongTerm);
            viewModel.TotalShortTermParticipants = engagements.Count(x => x.IsLongTerm == false);

            var actualEvents = Session
                               .Query <Event>()
                               .Where(x => x.ConventionId == conventionId)
                               .ToList();

            foreach (var actualEvent in actualEvents)
            {
                var activity = "לא ידוע";
                if (actualEvent.ActivityId != null &&
                    activities.ContainsKey(actualEvent.ActivityId))
                {
                    activity = activities[actualEvent.ActivityId].Name;
                }

                viewModel.AddEventSeats(days, actualEvent, activity);
            }

            foreach (var engagement in engagements)
            {
                var ticketName = engagement.Payment.TicketCopy != null
                    ? engagement.Payment.TicketCopy.Name
                    : "לא שולם";
                viewModel.AddPayment(ticketName, engagement.Payment.IsPaid);

                foreach (var eventId in engagement.EventIds)
                {
                    viewModel.AddEventTakenSeat(eventId);
                }
            }

            return(viewModel);
        }
        public IActionResult Index(string conventionId)
        {
            var viewModel = new ConventionStatisticsViewModel();

            if (conventionId.IsEmptyString() && Actor.HasManagedConvention)
            {
                conventionId = Actor.ManagedConvention.ConventionId;
            }

            if (conventionId.IsEmptyString())
            {
                return(View(viewModel));
            }

            viewModel = Gateway.BuildStatisticView(conventionId);
            return(View(viewModel));
        }