public ActionResult Search(YourMatchSearchAdd itemTobeSearched)
        {
            ViewBag.MyProfilePictureId  = m.getProfilePictureIdByCurrentUser(User.Identity.Name);
            ViewBag.CurrentUserFullName = m.GetUserFullName(User.Identity.Name);

            if (ModelState.IsValid)
            {
                // reseting filter user
                this.Session["searchItems"]        = itemTobeSearched;
                this.Session["filterUsersSession"] = m.FindYourMatch(itemTobeSearched, User.Identity.Name);
                var filterUsers = this.Session["filterUsersSession"] as IEnumerable <UserProfileFull>;
                if (filterUsers == null)
                {
                    return(RedirectToAction("index"));
                }
                else
                {
                    return(RedirectToAction("MyFoundResults"));
                }
            }
            else
            {
                var form = m.mapper.Map <YourMatchSearchForm>(itemTobeSearched);
                form.GenderList        = new SelectList(selectListClass.GetGenderAsList());
                form.CountryOfBornList = new SelectList(selectListClass.GetCountriesName());
                return(View(form));
            }
        }
Exemple #2
0
        public IEnumerable <UserProfileFull> FindYourMatch(YourMatchSearchAdd itemTobeSearched, string email)
        {
            var currentUser = ds.UserProfile.Include("Friends").Include("ApplicationUser").SingleOrDefault(i => i.ApplicationUser.UserName == email);
            var allUsers    = ds.UserProfile.Include("Friends").Include("ApplicationUser");

            ICollection <UserProfile> allUsersWithoutFirends     = new List <UserProfile>();
            ICollection <int>         idsOfFriends               = new List <int>();
            ICollection <int>         idsOfUsersExcludingFriends = new List <int>();

            // filter users first based on the items to be filtered
            var filteredUsers = ds.UserProfile.Include("ApplicationUser").Include("UserPhotos").Where(u => u.Gender.ToLower() == itemTobeSearched.Gender.ToLower());

            filteredUsers = filteredUsers.Where(u => (DateTime.Now.Year - u.DateOfBirth.Year) >= itemTobeSearched.MinAge && (DateTime.Now.Year - u.DateOfBirth.Year) <= itemTobeSearched.MaxAge);
            filteredUsers = filteredUsers.Where(u => u.Weight >= itemTobeSearched.MinWeight && u.Weight <= itemTobeSearched.MaxWeight);
            filteredUsers = filteredUsers.Where(u => u.Height >= itemTobeSearched.MinHeight && u.Height <= itemTobeSearched.MaxHeight);
            filteredUsers = filteredUsers.Where(u => u.CountryOfBorn == itemTobeSearched.CountryOfBorn);
            filteredUsers = filteredUsers.Where(u => u.AnnualIncome >= itemTobeSearched.MinAnnualIncome && u.AnnualIncome <= itemTobeSearched.MaxAnnualIncome);

            //// separate string by comma
            //var eachJobTitel = new List<string>(itemTobeSearched.JobTitle.Split(',').ToList<string>());
            //var filterTempList = new List<UserProfile>();

            //foreach (var item in eachJobTitel)
            //{
            //    var filterTemp = ds.UserProfile.Include("ApplicationUser").Include("UserPhotos").Where(u => u.JobTitle.Contains(item));
            //    filterTempList.Add(filterTemp);
            //}
            ////filteredUsers = filteredUsers.Where(u => u.JobTitle.Contains(itemTobeSearched.JobTitle));

            // adding Ids if friendlist to the list
            foreach (var item in currentUser.Friends)
            {
                idsOfFriends.Add(item.Id);
            }
            //adding the id of Admin and current user to the idsOfUsersExcludingFriends to dismiss them
            idsOfFriends.Add(1);
            idsOfFriends.Add(currentUser.Id);

            var fetchObject = ds.FriendshipRequests.Where(i => i.UserProfileIdFrom == currentUser.Id || i.UserProfileIdTo == currentUser.Id);

            foreach (var item in fetchObject)
            {
                if (item.UserProfileIdFrom != currentUser.Id)
                {
                    idsOfFriends.Add(item.UserProfileIdFrom);
                }
                if (item.UserProfileIdTo != currentUser.Id)
                {
                    idsOfFriends.Add(item.UserProfileIdTo);
                }
            }


            bool check = false;

            foreach (var okUsers in filteredUsers)
            {
                check = true;
                foreach (var bannedIds in idsOfFriends)
                {
                    if (okUsers.Id == bannedIds)
                    {
                        check = false;
                    }
                }
                if (check)
                {
                    idsOfUsersExcludingFriends.Add(okUsers.Id);
                }
            }

            foreach (var item in idsOfUsersExcludingFriends)
            {
                var temp = ds.UserProfile.SingleOrDefault(i => i.Id == item);
                allUsersWithoutFirends.Add(temp);
            }

            var found = mapper.Map <IEnumerable <UserProfileFull> >(allUsersWithoutFirends);

            return(found);
        }