public void DeleteUserFromProjectsShare(Project project, ApplicationUser user)
        {
            if (project == null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork())
            {
                var projectsShare = unitOfWork.ProjectsShares.GetAll()
                        .FirstOrDefault(c => c.ProjectId.Equals(project.ProjectID) && c.UserId.Equals(user.Id));

                if (projectsShare != null)
                {
                    unitOfWork.ProjectsShares.Delete(projectsShare);

                    unitOfWork.Save();
                }

            }
        }
        public void AddUserToProjectsShare(Project project, ApplicationUser user, int userRole, ApplicationUser fromUser = null)
        {
            if (project == null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            if (userRole < UserRoleProjectsShareConstants.Invited && userRole > UserRoleProjectsShareConstants.Owner)
            {
                throw new ArgumentNullException(nameof(userRole));
            }

            using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork())
            {
                var projectsShare = unitOfWork.ProjectsShares.GetAll().FirstOrDefault(c => c.ProjectId.Equals(project.ProjectID)
                                            && c.UserId.Equals(user.Id));

                if (projectsShare != null)
                {
                    if (projectsShare.UserRole > UserRoleProjectsShareConstants.Invited)
                    {
                        throw new ArgumentException("User exists in projects share.");
                    }

                    projectsShare.UserRole = userRole;
                    unitOfWork.ProjectsShares.Update(projectsShare);
                }
                else
                {
                    var newprojectsShare = new ProjectsShare
                    {
                        ProjectId = project.ProjectID,
                        UserId = user.Id,
                        UserRole = userRole
                    };

                    if (fromUser != null)
                    {
                        newprojectsShare.FromUserId = fromUser.Id;
                    }

                    unitOfWork.ProjectsShares.Create(newprojectsShare);
                }

                unitOfWork.Save();
            }
        }
        public void SaveProject(Project project)
        {
            if (project == null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork())
            {
                if (project.ProjectID == 0)
                    unitOfWork.Projects.Create(project);
                else
                    unitOfWork.Projects.Update(project);

                unitOfWork.Save();
            }
        }
        public void AddEmailToProjectsShare(Project project, string email)
        {
            if (project == null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            if (string.IsNullOrWhiteSpace(email))
            {
                throw new ArgumentException("Empty email.");
            }

            using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork())
            {
                var projectsShare = unitOfWork.ProjectsShares.GetAll().FirstOrDefault(c => c.ProjectID.Equals(project.ProjectID)
                                                                                           && c.SharedEmail.Equals(email));

                if (projectsShare != null)
                {
                    if (projectsShare.Delflag == DelflagConstants.UnactiveSet)
                    {
                        projectsShare.Delflag = DelflagConstants.ActiveSet;
                        unitOfWork.ProjectsShares.Update(projectsShare);
                    }
                    else if (projectsShare.Delflag == DelflagConstants.ActiveSet)
                    {
                        throw new ArgumentException("Email exists in projects shares.");
                    }
                }
                else
                {
                    var newprojectsShare = new ProjectsShare
                    {
                        ProjectID = project.ProjectID,
                        SharedEmail = email
                    };

                    unitOfWork.ProjectsShares.Create(newprojectsShare);
                }
                unitOfWork.Save();
            }
        }
 private void ClickMethodSaveProject()
 {
     var project = new Project
     {
         ProjectName = MainWindowData.ProjectName,
         ProjectOwner = MainWindowData.ProjectOwner,
         ProjectDescription = MainWindowData.DescriptionProject
     };
     _projectService.SaveProject(project);
 }
 private void CreateProjectMethod()
 {
     var project = new Project
     {
         ProjectName = Name,
         ProjectOwner = MainWindowData.CurrentUser.Email,
         ProjectDescription = Summary
     };
     _projectService.SaveProject(project);
 }
        public IEnumerable<ApplicationUser> GetUsersForSharedProject(Project project)
        {
            if (project == null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork())
            {
                var projectUsers = GetProjectUsers(project).Select(p => p.Id).ToList();
                return unitOfWork.Users.GetMany(x => !projectUsers.Contains(x.Id));
            }
        }
        public IEnumerable<ApplicationUser> GetProjectUsers(Project project)
        {
            if (project == null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork())
            {
                return unitOfWork.ProjectsShares.GetMany(p => p.ProjectId == project.ProjectID).Select(f => f.User).ToList();
            }
        }