public Event Get(string participantId)
        {
            var id = GuidUtil.ToGuid(participantId);

            var dbParticipant = new ParticipantRepository(_dbContext).Single(id);
            var dbEvent       = new EventRepository(_dbContext).Single(dbParticipant.EventID);

            var eventIsActive = dbEvent.PNR == null;

            // als vluchten zijn geprikt, hoeven overige vluchten niet meer geladen te worden

            var evn = EntityMapper.Map(dbEvent, includeParticipants: false, includeFlights: eventIsActive,
                                       includeAvailability: eventIsActive);

            new FlightSearchService(_dbContext).AddStationNames(evn);

            // don't add other participant data
            evn.Participants.Add(EntityMapper.Map(dbParticipant));

            if (eventIsActive)
            {
                bool participantHasAvailability = dbParticipant.Availabilities.Any();

                if (!participantHasAvailability)
                {
                    // first visit, create if not exist yet (first time participant visits the event)
                    foreach (var dbFlight in dbEvent.OutboundFlightSearch.Flights)
                    {
                        _repository.Create(dbParticipant, dbFlight);
                    }

                    foreach (var dbFlight in dbEvent.InboundFlightSearch.Flights)
                    {
                        _repository.Create(dbParticipant, dbFlight);
                    }

                    _dbContext.Current.SaveChanges();
                }

                CopyParticipantAvailability(participantId, evn.OutboundFlightSearch);
                CopyParticipantAvailability(participantId, evn.InboundFlightSearch);
            }

            // remove personal data

            return(evn);
        }
Exemple #2
0
        public void Complete(Event evn)
        {
            var dbEvent = _repository.Single(GuidUtil.ToGuid(evn.Id));

            // update event details
            dbEvent.Title          = evn.Title;
            dbEvent.Description    = evn.Description;
            dbEvent.OrganizerName  = evn.OrganizerName;
            dbEvent.OrganizerEmail = evn.OrganizerEmail;

            // add selected flights
            dbEvent.OutboundFlightSearch = AddFlightSearch(evn.OutboundFlights, evn.Origin, evn.Destination, evn.BeginDate, evn.EndDate, evn.DaysOfWeek, evn.MaxPrice);
            dbEvent.InboundFlightSearch  = AddFlightSearch(evn.InboundFlights, evn.Destination, evn.Origin, evn.BeginDate, evn.EndDate, evn.DaysOfWeek, evn.MaxPrice);

            // create avaiablities for all participants
            var availabilityRepository = new AvailabilityRepository(_dbContext);

            foreach (var dbParticipant in dbEvent.Participants)
            {
                bool isOrganizer = dbParticipant.Email.Equals(dbEvent.OrganizerEmail);

                short?value = isOrganizer ? (short?)100 : null;

                foreach (var dbFlight in dbEvent.OutboundFlightSearch.Flights)
                {
                    availabilityRepository.Create(dbParticipant, dbFlight, value);
                }
                foreach (var dbFlight in dbEvent.InboundFlightSearch.Flights)
                {
                    availabilityRepository.Create(dbParticipant, dbFlight, value);
                }

                if (isOrganizer)
                {
                    dbParticipant.AvailabilityConfirmed = true;
                }
            }

            dbEvent.StatusID = EventStatusEnum.NewCompleted;
            _dbContext.Current.SaveChanges();

            // send confirmation email
            _mailService.SendEventConfirmation(dbEvent);
        }