예제 #1
0
        public async Task <IActionResult> submitPollAnswer(PollViewModel poll)
        {
            if (ModelState.IsValid)
            {
                var selectedRadio = poll.RadioId;
                var pollId        = poll.Id;
                var user          = await userManager.GetUserAsync(HttpContext.User);


                var matchEntry = db.AnswerOptionsPoll.Where(aop => aop.PollId == pollId)
                                 .Where(aop => aop.AnswerOptionsId == selectedRadio);

                var selectedAnswerOptionsPollId = -1;
                selectedAnswerOptionsPollId = matchEntry.First().Id;
                //Neues aktuelles Abstimmungsobjekt
                var userAnswerOptionsPoll = new UserAnswerOptionsPoll();
                userAnswerOptionsPoll.AnswerOptionsPollId = selectedAnswerOptionsPollId;
                userAnswerOptionsPoll.UserId = user.Id;

                //den User in der AnsweroptionsPoll suchen
                var anyAnswers = db.AnswerOptionsPoll.FromSql(
                    "select * from User_AnswerOptions_Poll as uaop  LEFT JOIN AnswerOptions_Poll AS aop on uaop.answerOptions_poll_ID = aop.ID where aop.poll_ID = {0} and uaop.User_ID={1};",
                    pollId, user.Id).ToList();

                //Gibt es schon eine Abstimmung des Users (ja count != 0)
                if (anyAnswers.Count != 0)
                {
                    //db entry wird gelöscht und ein neuer angelegt, mit der neuen ID
                    var userAnswerOptionsPolltmp = new UserAnswerOptionsPoll();
                    userAnswerOptionsPolltmp.AnswerOptionsPollId = anyAnswers.First().Id;
                    userAnswerOptionsPolltmp.UserId = user.Id;
                    db.UserAnswerOptionsPoll.Remove(userAnswerOptionsPolltmp);
                    db.SaveChanges();
                }

                db.UserAnswerOptionsPoll.Add(userAnswerOptionsPoll);
                db.SaveChanges();
            }

            return(ShowPolls());
        }
        public async Task <IActionResult> submitPollAnswer(PollViewModel poll) //submit Poll answer on the index page, and poll page
        {
            if (ModelState.IsValid)
            {
                int  selectedRadio = poll.RadioId;
                int  pollId        = poll.Id;
                User user          = await userManager.GetUserAsync(HttpContext.User);

                IQueryable <AnswerOptionsPoll> matchEntry = db.AnswerOptionsPoll.Where(aop => aop.Id == selectedRadio);

                int selectedAnswerOptionsPollId = -1;
                selectedAnswerOptionsPollId = matchEntry.First().Id;

                UserAnswerOptionsPoll userAnswerOptionsPoll = new UserAnswerOptionsPoll();
                userAnswerOptionsPoll.AnswerOptionsPollId = selectedAnswerOptionsPollId;
                userAnswerOptionsPoll.UserId = user.Id;

                List <AnswerOptionsPoll> anyAnswers = db.AnswerOptionsPoll.FromSql(
                    "select * from User_AnswerOptions_Poll as uaop  LEFT JOIN AnswerOptions_Poll AS aop on uaop.answerOptions_poll_ID = aop.ID where aop.poll_ID = {0} and uaop.User_ID={1};",
                    pollId, user.Id).ToList();

                if (anyAnswers.Count != 0)
                {
                    UserAnswerOptionsPoll userAnswerOptionsPolltmp = new UserAnswerOptionsPoll();
                    userAnswerOptionsPolltmp.AnswerOptionsPollId = anyAnswers.First().Id;
                    userAnswerOptionsPolltmp.UserId = user.Id;
                    db.UserAnswerOptionsPoll.Remove(userAnswerOptionsPolltmp);
                    db.SaveChanges();
                }

                db.UserAnswerOptionsPoll.Add(userAnswerOptionsPoll);
                db.SaveChanges();
            }

            return(await ShowPolls());
        }
        //Umfragen auf der Startseite anzeigen
        public async Task <ICollection <PollViewModel> > ShowPollsIndex()
        {
            DateTime    time  = DateTime.UtcNow;
            List <Poll> polls = db.Poll.Where(p => p.StatusId == 2).Where(p => p.End > time).Include("Category")
                                .OrderBy(p => p.End).Take(4).ToList(); //.OrderBy(p => p.End)
            var user = await userManager.GetUserAsync(HttpContext.User);

            foreach (Poll poll in polls)
            {
                List <AnswerOptionsPoll> answers = db.AnswerOptionsPoll.Where(aop => aop.PollId == poll.Id)
                                                   .Include("AnswerOptions")
                                                   .Where(aop => aop.AnswerOptionsId == aop.AnswerOptions.Id).Select(aop => new AnswerOptionsPoll
                {
                    Id = aop.Id,
                    AnswerOptionsId = aop.AnswerOptionsId,
                    PollId          = aop.PollId,
                    AnswerOptions   = aop.AnswerOptions
                }
                                                                                                                     ).ToList();
                List <Image> images = db.Image.Where(i => i.PollId == poll.Id).Select(ii => new Image
                {
                    Id = ii.Id
                }).ToList();
                List <File> files = db.File.Where(f => f.PollId == poll.Id).Select(ff => new File
                {
                    Id     = ff.Id,
                    Name   = ff.Name,
                    Ending = ff.Ending
                }).ToList();
                poll.AnswerOptionsPoll = answers;
                poll.Image             = images;
                poll.File = files;
            }

            ICollection <PollViewModel> pollViewModels = new List <PollViewModel>();

            foreach (Poll poll in polls)
            {
                PollViewModel pollViewModel = new PollViewModel();

                pollViewModel.Id   = poll.Id;
                pollViewModel.Text = poll.Text;
                if (pollViewModel.End == null)
                {
                    pollViewModel.End = DateTime.UtcNow;
                }
                else
                {
                    pollViewModel.End = (DateTime)poll.End;
                }

                pollViewModel.UserId            = poll.UserId;
                pollViewModel.NeedsLocalCouncil = poll.NeedsLocalCouncil;
                pollViewModel.Approved          = poll.Approved;
                pollViewModel.CategoryId        = poll.CategoryId;
                pollViewModel.Title             = poll.Title;
                pollViewModel.Category          = poll.Category;
                pollViewModel.User = poll.User;
                pollViewModel.AnswerOptionsPoll       = poll.AnswerOptionsPoll;
                pollViewModel.RadioId                 = 0;
                pollViewModel.Image                   = poll.Image;
                pollViewModel.userAnswerOptionsPollId = 0;
                if (user != null)
                {
                    UserAnswerOptionsPoll userAnswerOptionsPoll = null;
                    foreach (AnswerOptionsPoll aop in poll.AnswerOptionsPoll)
                    {
                        userAnswerOptionsPoll = db.UserAnswerOptionsPoll
                                                .Where(uaop => uaop.UserId == user.Id && uaop.AnswerOptionsPollId == aop.Id)
                                                .SingleOrDefault();
                        if (userAnswerOptionsPoll != null)
                        {
                            break;
                        }
                    }

                    if (userAnswerOptionsPoll != null)
                    {
                        pollViewModel.userAnswerOptionsPollId = userAnswerOptionsPoll.AnswerOptionsPollId;
                    }
                }

                pollViewModels.Add(pollViewModel);
            }

            return(pollViewModels);
        }
        //Alle Einwohner Umfragen ausgeben
        public async Task <IActionResult> ShowPolls() //show all Polls
        {
            DateTime    time  = DateTime.UtcNow;
            List <Poll> polls = db.Poll.Where(p => p.End > time).Where(p => p.NeedsLocalCouncil == false)
                                .Where(p => p.Approved).Include("Category").OrderBy(p => p.End).ToList();
            List <SelectListItem> categoriesList = new List <SelectListItem>();
            List <Category>       categories     = db.Category.ToList();
            var user = await userManager.GetUserAsync(HttpContext.User);

            ViewData["Categories"] = categories;
            foreach (Category category in categories)
            {
                categoriesList.Add(new SelectListItem {
                    Value = category.Id.ToString(), Text = category.Description
                });
            }

            ViewData["CategoriesList"] = categoriesList;
            foreach (Poll poll in polls)
            {
                List <AnswerOptionsPoll> answers = db.AnswerOptionsPoll.Where(aop => aop.PollId == poll.Id)
                                                   .Include("AnswerOptions")
                                                   .Where(aop => aop.AnswerOptionsId == aop.AnswerOptions.Id).Select(aop => new AnswerOptionsPoll
                {
                    Id = aop.Id,
                    AnswerOptionsId = aop.AnswerOptionsId,
                    PollId          = aop.PollId,
                    AnswerOptions   = aop.AnswerOptions
                }
                                                                                                                     ).ToList();
                List <Image> images = db.Image.Where(i => i.PollId == poll.Id).Select(ii => new Image
                {
                    Id = ii.Id
                }).ToList();
                List <File> files = db.File.Where(f => f.PollId == poll.Id).Select(ff => new File
                {
                    Id     = ff.Id,
                    Name   = ff.Name,
                    Ending = ff.Ending
                }).ToList();
                poll.AnswerOptionsPoll = answers;
                poll.Image             = images;
                poll.File = files;
            }
            ICollection <PollViewModel> pollViewModels = new List <PollViewModel>();

            foreach (Poll poll in polls)
            {
                PollViewModel pollViewModel = new PollViewModel();

                pollViewModel.Id   = poll.Id;
                pollViewModel.Text = poll.Text;
                if (pollViewModel.End == null)
                {
                    pollViewModel.End = DateTime.UtcNow;
                }
                else
                {
                    pollViewModel.End = (DateTime)poll.End;
                }

                pollViewModel.UserId            = poll.UserId;
                pollViewModel.NeedsLocalCouncil = poll.NeedsLocalCouncil;
                pollViewModel.Approved          = poll.Approved;
                pollViewModel.CategoryId        = poll.CategoryId;
                pollViewModel.Title             = poll.Title;
                pollViewModel.Category          = poll.Category;
                pollViewModel.User = poll.User;
                pollViewModel.AnswerOptionsPoll       = poll.AnswerOptionsPoll;
                pollViewModel.RadioId                 = 0;
                pollViewModel.Image                   = poll.Image;
                pollViewModel.userAnswerOptionsPollId = 0;
                if (user != null)
                {
                    UserAnswerOptionsPoll userAnswerOptionsPoll = null;
                    foreach (AnswerOptionsPoll aop in poll.AnswerOptionsPoll)
                    {
                        userAnswerOptionsPoll = db.UserAnswerOptionsPoll
                                                .Where(uaop => uaop.UserId == user.Id && uaop.AnswerOptionsPollId == aop.Id)
                                                .SingleOrDefault();
                        if (userAnswerOptionsPoll != null)
                        {
                            break;
                        }
                    }

                    if (userAnswerOptionsPoll != null)
                    {
                        pollViewModel.userAnswerOptionsPollId = userAnswerOptionsPoll.AnswerOptionsPollId;
                    }
                }

                pollViewModels.Add(pollViewModel);
            }

            return(View("PollsView", pollViewModels));
        }