public ActionResult CloneCourse(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Course course = db.Courses.Find(id); if (course == null) { return(HttpNotFound()); } CloneCourseViewModel ccViewModel = new CloneCourseViewModel { Course = course, NewDate = course.StartDate }; return(PartialView("_cloneCourse", ccViewModel)); }
public ActionResult CloneCourse(CloneCourseViewModel ccViewModel) { if (ccViewModel.NewDate < DateTime.Now) { return(RedirectToAction("Index", "TeacherCourses", null)); } Course oldcourse = db.Courses.Find(ccViewModel.Course.CourseId); if (oldcourse == null) { return(RedirectToAction("Index", "TeacherCourses", null)); } int offsetDays = (ccViewModel.NewDate - oldcourse.StartDate).Days; if (offsetDays == 0) { return(RedirectToAction("Index", "TeacherCourses", null)); } //get a unique name for the clone int i = 0; string suggestedName; do { i++; suggestedName = "Clone" + i + " " + oldcourse.CourseName; suggestedName = suggestedName.Substring(0, Math.Min(suggestedName.Length, 50)); } while (db.Courses.FirstOrDefault(n => n.CourseName == suggestedName) != null); //clone the course Course newcourse = new Course { CourseName = suggestedName, CourseDescription = oldcourse.CourseDescription, StartDate = ccViewModel.NewDate, EndDate = oldcourse.EndDate.AddDays(offsetDays) }; db.Courses.Add(newcourse); db.SaveChanges(); Document newdoc; //clone the course documents foreach (var doc in oldcourse.CourseDocuments) { newdoc = new Document { ApplicationUserId = doc.ApplicationUserId, CourseId = newcourse.CourseId, Description = doc.Description, DocumentFileType = doc.DocumentFileType, DocumentName = doc.DocumentName, FileData = doc.FileData, UploadingTime = doc.UploadingTime, isHomework = doc.isHomework }; db.Documents.Add(newdoc); } db.SaveChanges(); //clone modules Module newmodule; Activity newact; foreach (var mod in oldcourse.CourseModules) { newmodule = new Module { CourseId = newcourse.CourseId, StartDate = mod.StartDate.AddDays(offsetDays), EndDate = mod.EndDate.AddDays(offsetDays), Description = mod.Description, Name = mod.Name }; db.Modules.Add(newmodule); db.SaveChanges(); //clone module documents foreach (var doc in mod.ModuleDocuments) { newdoc = new Document { ApplicationUserId = doc.ApplicationUserId, ModuleId = newmodule.ModuleId, Description = doc.Description, DocumentFileType = doc.DocumentFileType, DocumentName = doc.DocumentName, FileData = doc.FileData, UploadingTime = doc.UploadingTime, isHomework = doc.isHomework }; db.Documents.Add(newdoc); } db.SaveChanges(); //Clone activities for this mod foreach (var act in mod.Activities) { newact = new Activity { ActivityName = act.ActivityName, ActivityTypeId = act.ActivityTypeId, ModuleId = newmodule.ModuleId, Start = act.Start.AddDays(offsetDays), End = act.End.AddDays(offsetDays), Description = act.Description }; db.Activities.Add(newact); db.SaveChanges(); // clone documents for this activity foreach (var doc in act.ActivityDocuments) { newdoc = new Document { ApplicationUserId = doc.ApplicationUserId, ActivityId = newact.ActivityId, Description = doc.Description, DocumentFileType = doc.DocumentFileType, DocumentName = doc.DocumentName, FileData = doc.FileData, UploadingTime = doc.UploadingTime, isHomework = doc.isHomework }; db.Documents.Add(newdoc); } db.SaveChanges(); } } return(RedirectToAction("Index", "TeacherCourses", null)); }