public async Task <IActionResult> Edit(ModuleActivityPostViewModel viewModel) { var module = db.Modules.Find(viewModel.Module.ModuleId); // Validate start and end time var errorMessage = ""; if (!IsModuleTimeCorrect(ref errorMessage, module.CourseId, viewModel.Module.ModuleStartTime, viewModel.Module.ModuleEndTime, viewModel.Module.ModuleId)) { TempData["ValidationError"] = errorMessage; return(Json(new { redirectToUrl = Url.Action("Edit", "Modules", new { id = module.Id }) })); } if (ModelState.IsValid) { try { module.Name = viewModel.Module.ModuleName; module.Description = viewModel.Module.ModuleDescription; module.StartTime = viewModel.Module.ModuleStartTime; module.EndTime = viewModel.Module.ModuleEndTime; db.Update(module); await db.SaveChangesAsync(); if (viewModel.Data != null) { if (IsActivityOverlap(viewModel.Data)) { TempData["ValidationError"] = "Activity start and end times overlap"; return(Json(new { redirectToUrl = Url.Action("Edit", "Modules", new { id = module.Id }) })); } foreach (var item in viewModel.Data) { if (!IsActivityTimeCorrect(ref errorMessage, viewModel.Module.ModuleId, viewModel.Module.ModuleStartTime, viewModel.Module.ModuleEndTime, item.ActivityStartTime, item.ActivityEndTime)) { TempData["ValidationError"] = errorMessage; return(Json(new { redirectToUrl = Url.Action("Edit", "Modules", new { id = module.Id }) })); } var activity = new Activity { Name = item.ActivityName, Description = item.ActivityDescription, StartTime = item.ActivityStartTime, EndTime = item.ActivityEndTime, ActivityTypeId = item.ActivityTypeId, Module = module }; db.Add(activity); } await db.SaveChangesAsync(); } } catch (DbUpdateConcurrencyException) { if (!ModuleExists(module.Id)) { return(NotFound()); } else { throw; } } return(Json(new { redirectToUrl = Url.Action("Teacher", "AppUsers", new { id = module.CourseId }) })); } ViewData["CourseId"] = new SelectList(db.Courses, "Id", "Id", module.CourseId); return(View(module)); }
public async Task <IActionResult> Create(ModuleActivityPostViewModel viewModel) { if (ModelState.IsValid) { // TODO: perform id control comparison // TODO: Check if redirect problem stems from ajax // Check module not is in same timespan as existing module for this course. Also validate other things for start and end time var errorMessage = ""; if (!IsModuleTimeCorrect(ref errorMessage, viewModel.Module.CourseId, viewModel.Module.ModuleStartTime, viewModel.Module.ModuleEndTime, null)) { TempData["ValidationError"] = errorMessage; return(Json(new { redirectToUrl = Url.Action("Create", "Modules", new { id = viewModel.Module.CourseId }) })); // TODO: Create view is reset with default values. Can that be fixed? } var module = new Module { CourseId = viewModel.Module.CourseId, Name = viewModel.Module.ModuleName, Description = viewModel.Module.ModuleDescription, StartTime = viewModel.Module.ModuleStartTime, EndTime = viewModel.Module.ModuleEndTime }; db.Add(module); if (viewModel.Data != null) { if (IsActivityOverlap(viewModel.Data)) { TempData["ValidationError"] = "Activity start and end times overlap"; return(Json(new { redirectToUrl = Url.Action("Create", "Modules", new { id = viewModel.Module.CourseId }) })); } foreach (var item in viewModel.Data) { if (!IsActivityTimeCorrect(ref errorMessage, null, viewModel.Module.ModuleStartTime, viewModel.Module.ModuleEndTime, item.ActivityStartTime, item.ActivityEndTime)) { TempData["ValidationError"] = errorMessage; return(Json(new { redirectToUrl = Url.Action("Create", "Modules", new { id = viewModel.Module.CourseId }) })); } var activity = new Activity { Name = item.ActivityName, Description = item.ActivityDescription, StartTime = item.ActivityStartTime, EndTime = item.ActivityEndTime, ActivityTypeId = item.ActivityTypeId, Module = module }; db.Add(activity); } } await db.SaveChangesAsync(); return(Json(new { redirectToUrl = Url.Action("Teacher", "AppUsers", new { id = viewModel.Module.CourseId }) })); } //ViewData["CourseId"] = new SelectList(db.Courses, "Id", "Id", module.CourseId); // What does this show? Which course it belongs to? return(View(viewModel)); }