public async Task <ActionResult> CreateUserInMeeting(UserInMeetingModel model, int meetingId)
        {
            if (!_permissionService.Authorize(PermissionProvider.ManageUser))
            {
                return(AccessDeniedView());
            }

            if (model.User == null || model.User.Id < 1)
            {
                return(Content("User is invalid!"));
            }
            if (ModelState.IsValid)
            {
                var meeting = await _meetingService.GetByIdAsync(model.MeetingId);

                var existUser = meeting.UserInMeetings.FirstOrDefault(u => u.UserId == model.User.Id);

                if (existUser != null)
                {
                    return(Content(model.User.Name + " has Existed!"));
                }

                if (!model.IsLeader)
                {
                    if (model.IsCurrentLeader)
                    {
                        return(Content("Please set leader before set current leader"));
                    }
                }

                var userInMeeting = new UserInMeeting()
                {
                    MeetingId = model.MeetingId,
                    UserId    = model.User.Id,
                    IsLeader  = model.IsLeader,
                    Order     = model.Order
                };
                await _userInMeetingService.InsertAsync(userInMeeting);

                ////if set user is current leader or chua co ai la leader and this user isleader
                //if (model.IsCurrentLeader || (meeting.CurrentLeaderId == 0 && userInMeeting.IsLeader))
                if (model.IsCurrentLeader)
                {
                    await _meetingService.UpdateMeetingLeader(meeting.Id, meeting.CurrentLeaderId, model.User.Id);

                    meeting.CurrentLeaderId = model.User.Id;
                    await _meetingService.UpdateAsync(meeting);
                }
                return(Json(new
                {
                    status = "success",
                }));
            }

            // If we got this far, something failed, redisplay form
            return(Content("Can not Create User in Meeting because model state is invalid"));
        }
        public async Task <ActionResult> UpdateUserInMeeting(UserInMeetingModel model)
        {
            if (!_permissionService.Authorize(PermissionProvider.ManageUser))
            {
                return(AccessDeniedView());
            }

            if (model.User == null || model.User.Id < 1)
            {
                return(Content("User is invalid!"));
            }

            if (ModelState.IsValid)
            {
                var meeting = await _meetingService.GetByIdAsync(model.MeetingId);

                var existUser = meeting.UserInMeetings.FirstOrDefault(u => u.UserId == model.User.Id);

                //check user has existed and is not current user
                if (existUser != null && existUser.Id != model.Id)
                {
                    return(Content(model.User.Name + " has Existed in Meeting"));
                }

                if (!model.IsLeader)
                {
                    if (model.IsCurrentLeader)
                    {
                        return(Content("Please set is leader before set is current leader"));
                    }
                }

                //if(!model.IsCurrentLeader)
                //    if(meeting.CurrentLeaderId == model.User.Id)
                //        return Content("This user is current leader, can't set it isn't current leader");

                var userInMeeting = await _userInMeetingService.GetByIdAsync(model.Id);

                if (userInMeeting == null)
                {
                    throw new ArgumentException("No meeting found with the specified id");
                }
                userInMeeting.UserId   = model.User.Id;
                userInMeeting.IsLeader = model.IsLeader;
                userInMeeting.Order    = model.Order;
                //if (model.IsCurrentLeader || (meeting.CurrentLeaderId == 0 && userInMeeting.IsLeader))
                if (model.IsCurrentLeader)
                {
                    await _meetingService.UpdateMeetingLeader(meeting.Id, meeting.CurrentLeaderId, model.User.Id);

                    meeting.CurrentLeaderId = model.User.Id;
                    await _meetingService.UpdateAsync(meeting);
                }
                else
                {
                    if (meeting.CurrentLeaderId == model.User.Id)
                    {
                        await _meetingService.UpdateMeetingLeader(meeting.Id, meeting.CurrentLeaderId, 0);

                        meeting.CurrentLeaderId = 0;
                        await _meetingService.UpdateAsync(meeting);
                    }
                }

                await _userInMeetingService.UpdateAsync(userInMeeting);

                return(Json(new
                {
                    status = "success",
                }));
            }
            return(Content("Can not Edit User in Meeting because model state is invalid"));
        }