public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }
            int userIdCurrentlyLoggedIn = Int32.Parse(User.Claims.FirstOrDefault(uc => uc.Type == ClaimTypes.NameIdentifier).Value);

            JobListing jobListing     = _jobListingsRepository.GetJobListingById(id);
            Template   templateFromDb = _templatesRepository.GetTemplateByJobId(id);

            bool isAllowedToSeeJobListing = _jobListingsRepository.isAllowedToModifyJobListing(userIdCurrentlyLoggedIn, jobListing.CompanyId);

            if (!isAllowedToSeeJobListing)
            {
                return(NotFound());
            }

            List <Company>  companiesAssignedToUserLoggedIn = _companiesRepository.GetCompaniesAssignedToUser(userIdCurrentlyLoggedIn);
            List <Category> categories = _categoriesRepository.GetCategories();

            List <string> regions = new List <string> {
                "Africa", "Asia", "The Caribbean", "Central America", "Europe", "Oceania", "North America", "South America"
            };
            List <string> types = new List <string> {
                "Full Time", "Part Time", "Remote", "Voluntary or carity acts"
            };

            EditJobListingWithTemplateViewModel editJobListingWithTemplateViewModel = new EditJobListingWithTemplateViewModel
            {
                Title          = jobListing.Title,
                Position       = jobListing.Position,
                Type           = jobListing.Type,
                Description    = jobListing.Description,
                Location       = jobListing.Location,
                JobListingId   = userIdCurrentlyLoggedIn,
                CategoryId     = jobListing.Category.CategoryId,
                CompanyId      = jobListing.Company.CompanyId,
                Region         = jobListing.Region,
                UserId         = jobListing.JobFinderUser.UserId,
                IsActive       = Convert.ToBoolean(jobListing.IsActive),
                Education      = Convert.ToBoolean(templateFromDb.Education),
                WorkExperience = Convert.ToBoolean(templateFromDb.WorkExperience),
                Skills         = Convert.ToBoolean(templateFromDb.Skills),
                OtherNotes     = Convert.ToBoolean(templateFromDb.OtherNotes)
            };

            ViewData["Companies"]  = new SelectList(companiesAssignedToUserLoggedIn, "CompanyId", "Name");
            ViewData["Categories"] = new SelectList(categories, "CategoryId", "Name");
            ViewData["Regions"]    = new SelectList(regions, regions);
            ViewData["Types"]      = new SelectList(types, types);
            ViewBag.SelectedNav    = "Dashboard";

            return(View(editJobListingWithTemplateViewModel));
        }
        public ActionResult Edit(int id, [Bind("JobListingId, CompanyId, CategoryId,Title,Type,Position,Region,Location,Description,IsActive,WorkExperience,Education,Skills,OtherNotes")] EditJobListingWithTemplateViewModel editJobListingWithTemplateViewModel)
        {
            JobListing jobListingFromDb        = _jobListingsRepository.GetJobListingById(id);
            int        userIdCurrentlyLoggedIn = Int32.Parse(User.Claims.FirstOrDefault(uc => uc.Type == ClaimTypes.NameIdentifier).Value);

            if (!_jobListingsRepository.isAllowedToModifyJobListing(userIdCurrentlyLoggedIn, jobListingFromDb.CompanyId))
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                jobListingFromDb.Location    = editJobListingWithTemplateViewModel.Location;
                jobListingFromDb.Position    = editJobListingWithTemplateViewModel.Position;
                jobListingFromDb.Region      = editJobListingWithTemplateViewModel.Region;
                jobListingFromDb.Title       = editJobListingWithTemplateViewModel.Title;
                jobListingFromDb.Type        = editJobListingWithTemplateViewModel.Type;
                jobListingFromDb.Description = editJobListingWithTemplateViewModel.Description;
                jobListingFromDb.CategoryId  = editJobListingWithTemplateViewModel.CategoryId;
                jobListingFromDb.CompanyId   = editJobListingWithTemplateViewModel.CompanyId;
                jobListingFromDb.IsActive    = Convert.ToByte(editJobListingWithTemplateViewModel.IsActive);

                if (!editJobListingWithTemplateViewModel.IsActive)
                {
                    jobListingFromDb.JobListingClosedAt = DateTime.Now;
                }

                _jobListingsRepository.EditJobListing(jobListingFromDb);

                Template templateFromDb = _templatesRepository.GetTemplateByJobId(id);

                templateFromDb.WorkExperience    = Convert.ToByte(editJobListingWithTemplateViewModel.WorkExperience);
                templateFromDb.Skills            = Convert.ToByte(editJobListingWithTemplateViewModel.Skills);
                templateFromDb.Education         = Convert.ToByte(editJobListingWithTemplateViewModel.Education);
                templateFromDb.OtherNotes        = Convert.ToByte(editJobListingWithTemplateViewModel.OtherNotes);
                templateFromDb.JobListingId      = id;
                templateFromDb.UserId            = userIdCurrentlyLoggedIn;
                templateFromDb.TemplateUpdatedAt = DateTime.Now;
                _templatesRepository.EditTemplate(templateFromDb);

                ViewBag.SelectedNav = "Dashboard";
                return(RedirectToAction(nameof(Index)));
            }
            ViewBag.SelectedNav = "Dashboard";
            return(View(editJobListingWithTemplateViewModel));
        }