public IActionResult Need()
        {
            var items     = this.itemService.MapAll <SelectedItemsInputModel>();
            var viewModel = new NeedHelpFormInputModel
            {
                Items = items,
            };

            return(this.View(viewModel));
        }
        public async Task CreateNeedAsync(NeedHelpFormInputModel input, [CallerMemberName] string callerMethodName = "")
        {
            var helpTask = new HelpTask
            {
                Title       = input.Title,
                Description = input.Description,
                Location    = input.Location,
                ImageName   = input.ImageName,
                Type        = input.TaskType,
                Creator     = input.Creator,
            };

            // get selected items by their id's.
            var mandatoryItems = this.itemService.GetAll().Where(i => input.MandatoryItemsId.Contains(i.Id)).ToList();
            var helpfulItems   = this.itemService.GetAll().Where(i => input.HelpfulItemsId.Contains(i.Id)).ToList();

            // add mandatory items to database .
            foreach (var item in mandatoryItems)
            {
                helpTask.Items.Add(new HelpTaskItems()
                {
                    ItemId      = item.Id,
                    ItemUseType = ItemUseType.Mandatory,
                });
            }

            // add helpfull items to database.
            foreach (var item in helpfulItems)
            {
                helpTask.Items.Add(new HelpTaskItems()
                {
                    ItemId      = item.Id,
                    ItemUseType = ItemUseType.Helpful,
                });
            }

            await this.helpTaskRepo.AddAsync(helpTask);

            await this.helpTaskRepo.SaveChangesAsync();
        }
        public async Task <IActionResult> Need(NeedHelpFormInputModel input)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.View(input));
            }

            // get selected items Id's to list.
            var selectedMandatory = input.Items.Where(i => i.SelectedAsMandatory).Select(i => i.Id).ToList();
            var selectedHelpful   = input.Items.Where(i => i.SelectedAsHelpful).Select(i => i.Id).ToList();

            // remove items selected as helpfull if selected as mandatory too.
            foreach (var itemId in selectedMandatory)
            {
                if (selectedHelpful.Contains(itemId))
                {
                    selectedHelpful.Remove(itemId);
                }
            }

            input.MandatoryItemsId = selectedMandatory;
            input.HelpfulItemsId   = selectedHelpful;

            // save image in root folder and get it's name.
            if (input.Image != null)
            {
                input.ImageName = this.SaveImage(input.Image);
            }

            input.Creator = await this.userManager.GetUserAsync(this.User);

            input.TaskType = TaskType.Need;

            await this.helpTaskService.CreateNeedAsync(input);

            return(this.RedirectToAction("Index", "Profile"));
        }