Example #1
0
        public async Task <IActionResult> Edit(int id, [Bind("EventId,UserId,EventCreator,EventMembers,DeclinedMembers,Subject,Description,Location,StartTime,EndTime,IsFullDay")] Event @event)
        {
            if (id != @event.EventId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    @event.SchedulerUser = await _userManager.GetUserAsync(HttpContext.User); // Find current User

                    //Lowercase all members
                    @event.EventMembers = @event.EventMembers.ConvertAll(d => d.ToLower());

                    // Checks current event. Initialize new list for updated Declined members.
                    // Add current members that have already declined event to new declined list.
                    // This removes declinded member count for event members that have been removed during edit.
                    // Not required for event creator as they cannot be edited. Once declined it is final (shown as +1 in delete confirmed).
                    var currentEvent = await _context.Events
                                       .AsNoTracking()
                                       .FirstOrDefaultAsync(e => e.EventId == id);

                    List <string> currentDeclindedMembers = new List <string>();
                    foreach (var e in @event.EventMembers)
                    {
                        foreach (var d in currentEvent.DeclinedMembers)
                        {
                            if (e == d)
                            {
                                currentDeclindedMembers.Add(e);
                            }
                        }
                    }
                    @event.DeclinedMembers = currentDeclindedMembers;

                    _context.Update(@event);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!EventExists(@event.EventId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(@event));
        }