public void SaveTeamMember(int teamId, int memberId, int createdById)
 {
     var teamMember = new TeamMember { MemberID = memberId, TeamID = teamId, CreatedByID = createdById };
     teamMember.CreatedDate = DateTime.UtcNow;
     db.TeamMembers.Add(teamMember);
     db.SaveChanges();
 }
 public ActionResult Add(AddTeamMemberRequestVM model)
 {
     // This method adds a user to the team
     // If user is new to the system, sends an email to user to signup and join, else add him to the team
     try
     {
         if (ModelState.IsValid)
         {
             var existingUser = repo.GetUser(model.EmailAddress);
             if (existingUser != null)
             {
                 TeamMember teamMember = new TeamMember { MemberID = existingUser.ID, TeamID = TeamID, CreatedByID = UserID };
                 var result = repo.SaveTeamMember(teamMember);
                 if (result.ID > 0)
                 {                            
                     return Json(new { Status = "Success",Message="Successfully added user to team" });
                 }
             }
             else
             {
                 var teamMemberRequest = new TeamMemberRequest { EmailAddress = model.EmailAddress, CreatedByID = UserID };
                 teamMemberRequest.TeamID = model.TeamID;
                 teamMemberRequest.ActivationCode = model.TeamID + "-" + Guid.NewGuid().ToString("n");
                 var resultNew = repo.SaveTeamMemberRequest(teamMemberRequest);
                 if (resultNew.Status)
                 {
                     new UserService(repo,SiteBaseURL).SendJoinMyTeamEmail(teamMemberRequest);
                     return Json(new { Status = "Success" });
                 }
                 else
                 {
                     log.Debug(resultNew);
                 }                        
             }
         }
     }
     catch (Exception ex)
     {
         log.Error(ex);                
     }
     return Json(new { Status = "Error", Message = "Error adding user to team" });
 }
        public ActionResult Index()
        {
            try
            {
                var profiler = MiniProfiler.Current;
                var vm = new TeamProjectListVM();
                List<Project> projectList = new List<Project>();
                TeamMember teamMember = new TeamMember();
                using (profiler.Step("Getting list of projects"))
                {
                    projectList = repo.GetProjects(TeamID).ToList(); ;
                }
                    using (profiler.Step("Getting Team member"))
                    {
                         teamMember = repo.GetTeamMember(UserID, TeamID);
                    }
                        using (profiler.Step("Mapping to ViewModels"))
                        {
                            foreach (var project in projectList)
                            {
                                var projectVM = new ProjectVM { Name = project.Name, ID = project.ID };
                                if (teamMember.DefaultProjectID.HasValue)
                                    projectVM.IsDefaultProject = project.ID == teamMember.DefaultProjectID.Value;

                                vm.Projects.Add(projectVM);
                            }
                        }
                    
                
                return View("~/Views/Projects/Index.cshtml",vm);
            }
            catch (Exception ex)
            {
                log.Error(ex);
                return View("Error");
            }
        }
 public ActionResult Create(TeamVM model)
 {
     try
     {
         if (ModelState.IsValid)
         {
             Team team = new Team { Name = model.Name, ID = model.Id };
             bool isNew = (model.Id == 0);
             if (!isNew)
             {
                 team = repo.GetTeam(model.Id);
                 team.Name = model.Name;                       
             }
             else
             {
                 team.CreatedByID = UserID;
             }
             var result = repo.SaveTeam(team);
             if (result != null)
             {                        
                 if (isNew)
                 {
                     var teamMember = new TeamMember { MemberID = UserID, TeamID = team.ID, CreatedByID = UserID };
                     repo.SaveTeamMember(teamMember);
                 }
                 return Json(new { Status = "Success" });
             }
         }
         return View(model);
     }
     catch(Exception ex)
     {
         log.Error("Error updating team "+model.Id, ex);
     }
     return Json(new { Status = "Error" });
 }    
        public ActionResult JoinMyTeam(string id)
        {
            // For users who received an email with the join link to join a team.
            // The user must have created an account by now and coming back to this link after registration

            try
            {
                var teamMemberRequest = repo.GetTeamMemberRequest(id);
                if (teamMemberRequest != null)
                {
                    var user = repo.GetUser(teamMemberRequest.EmailAddress);
                    if (user.ID == UserID)
                    {
                        //Add to the team
                        var teamMember = new TeamMember { MemberID = UserID, TeamID = teamMemberRequest.TeamID, CreatedByID = teamMemberRequest.CreatedByID };
                        repo.SaveTeamMember(teamMember);
                       
                        //Keep that team as default team for the user 
                        SetUserIDToSession(UserID, teamMemberRequest.TeamID, user.FirstName);
                                                
                        var userService = new UserService(repo);
                        userService.SaveActivityForNewUserJoinedTeam(teamMemberRequest, user, UserID, TeamID);

                        //Correct user 
                        return View("WelcomeToTeam");
                    }
                }
                return View("NotFound");
            }
            catch(Exception ex)
            {
                log.Error(ex);
                return View("Error");
            }
        }
 /* public TeamMemberRequest AddTeamMemberRequest(TeamMemberRequest request)
  {
      request.CreatedDate = DateTime.UtcNow;
      db.TeamMemberRequests.Add(request);
      db.SaveChanges();
      return request;
  }*/
  public TeamMember SaveTeamMember(TeamMember teamMember)
  {
      if (teamMember.ID == 0)
      {
          teamMember.CreatedDate = DateTime.UtcNow;
          db.TeamMembers.Add(teamMember);
      }
      else
      {
          db.Entry(teamMember).State = EntityState.Modified;
      }
      db.SaveChanges();
      return teamMember;
  }