public ActionResult Create([Bind(Exclude = "Status")] EditPageViewModel editPageViewModel) { EAForm eaform = new EAForm(); if (ModelState.IsValid) { eaform = Mapper.Map<EAFormViewModel, EAForm>(editPageViewModel, eaform); eaform.Status = db.EAFormStatuses.Find(editPageViewModel.SelectedStatusValue); eaform.LastUpdated = DateTime.Now; eaform.CreateSaveHistoryRecord(User.Identity.Name); //Need to create a parent one45 extract copy to compare to in the future EAForm eaformCopy = eaform.Copy(); eaformCopy.Status = db.EAFormStatuses .Where(f => f.Name == "one45 Extract") .FirstOrDefault(); eaformCopy.CreateSaveHistoryRecord(User.Identity.Name); //Link the copy to the original eaform.ParentForm = eaformCopy; try { db.EAForms.Add(eaform); db.EAForms.Add(eaformCopy); db.SaveChanges(); ViewBag.SuccessMessage = "Created successfully"; } catch (Exception ex) { ModelState.AddModelError("CreateForm", "Form could not be created"); //ErrorMessages.SaveError); Elmah.ErrorSignal.FromCurrentContext().Raise(ex); } } else { var errors = ModelState.Values.SelectMany(v => v.Errors); foreach (var error in errors) { if (error.Exception != null) Elmah.ErrorSignal.FromCurrentContext().Raise(error.Exception); else Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception(error.ErrorMessage)); } } editPageViewModel = Mapper.Map<EAForm, EditPageViewModel>(eaform, editPageViewModel); editPageViewModel.EAFormStatuses = db.EAFormStatuses; editPageViewModel.SetupMultiSelectViewModels(eaform); return View(editPageViewModel); }
public void SetupMultiSelectViewModels(EAForm eaform) { //Activity Types -- has only 1 parent category, so we load this one without choices for category ActivityTypesViewModel = new ParentChildCategoriesViewModel("Activity Type(s)"); //ActivityTypesViewModel.ParentCategoryList = ***NO NEED*** //ActivityTypesViewModel.ChildValuesAJAXFetchURL = ***NO NEED*** ActivityTypesViewModel.DefaultChildrenList = CurriculumManagement.Models.POCO.ActivityType.GetActivityTypes().Select(d => new { d.ChildItemName }).Distinct(); //Keywords KeywordViewModel = new ParentChildCategoriesViewModel("Keyword(s)"); //EAFormDBContext db = new EAFormDBContext(); //KeywordViewModel.ParentCategoryList = new SelectList(db.Keywords, "ParentCategoryName", "ParentCategoryName"); //Themes ThemesViewModel = new ParentChildCategoriesViewModel("Theme(s)"); ThemesViewModel.ParentCategoryList = Theme.GetThemes().Select(d => new { d.ParentCategoryName }).Distinct(); ThemesViewModel.ChildValuesAJAXFetchURL = "/EAForms/ThemesList/?selectedParent="; //Formulary FormularyViewModel = new ParentChildCategoriesViewModel("Formulary Item(s)"); //FormularyViewModel.ParentCategoryList = Drug.GetDrugs().Select(d => new { d.ParentCategoryName }).Distinct(); ***NO NEED*** //FormularyViewModel.ChildValuesAJAXFetchURL = "/EAForms/FormularyList/?selectedParent="; ***NO NEED*** FormularyViewModel.DefaultChildrenList = CurriculumManagement.Models.POCO.Drug.GetDrugs().Select(d => new { d.ChildItemName }).Distinct(); //Map eaform data for these select lists if possible... // //Need to create collection of Activity Types based on string field from DB (delimited by comma) if (eaform != null && eaform.ActivityType != null && eaform.ActivityType.Trim() != "") { string[] activityTypeStrings = eaform.ActivityType.Split(','); List<ChildItem> activityTypesList = new List<ChildItem>(); foreach (string activityTypeString in activityTypeStrings) { activityTypesList.Add(new ChildItem(activityTypeString)); } ActivityTypesViewModel.SelectedChildrenList = activityTypesList; } else { ActivityTypesViewModel.SelectedChildrenList = Enumerable.Empty<string>(); } //New to create collection of Keywords based on string filed from DB (delimited by comma) if (eaform != null && eaform.Keywords != null && eaform.Keywords.Trim() != "") { string[] keywordStrings = eaform.Keywords.Split(';'); List<ChildItem> keywordList = new List<ChildItem>(); foreach (string keywordString in keywordStrings) { keywordList.Add(new ChildItem(keywordString)); } KeywordViewModel.SelectedChildrenList = keywordList; } else { KeywordViewModel.SelectedChildrenList = Enumerable.Empty<string>(); } //Need to create collection of Themes based on string field from DB (delimited by comma) if (eaform != null && eaform.Themes != null && eaform.Themes.Trim() != "") { string[] themeStrings = eaform.Themes.Split(';'); List<ChildItem> themesList = new List<ChildItem>(); foreach (string themeString in themeStrings) { themesList.Add(new ChildItem(themeString)); } ThemesViewModel.SelectedChildrenList = themesList; } else { ThemesViewModel.SelectedChildrenList = Enumerable.Empty<string>(); } //Need to create collection of Drugs based on string field from DB (delimited by comma) if (eaform != null && eaform.Formulary != null && eaform.Formulary.Trim() != "") { string[] drugStrings = eaform.Formulary.Split(';'); List<ChildItem> drugsList = new List<ChildItem>(); foreach (string drugString in drugStrings) { drugsList.Add(new ChildItem(drugString)); } FormularyViewModel.SelectedChildrenList = drugsList; } else { FormularyViewModel.SelectedChildrenList = Enumerable.Empty<string>(); } }
public ActionResult ImportFile(ImportViewModel importViewModel) { if (ModelState.IsValid) { bool SaveImportAttempt = true; //Attempt to get required config items from web.config string importFilePath = ""; string[] availableAcademicYears = null; bool thereIsHeader = true; DataTable importDataTable = new DataTable(); if (!CheckRequiredConfigurationItems(new string[] { "ImportFileSaveFolder", "AcademicYearsAvailable", "HeaderRowExists" }, ref importViewModel)) { return View("~/Views/EAForms/Import.cshtml", importViewModel); } else { availableAcademicYears = WebConfigurationManager.AppSettings["AcademicYearsAvailable"].ToString().Split(','); if (availableAcademicYears.Length < 1) { LogError("There are no available years found in config entry: AcademicYearsAvailable.", ref importViewModel); SaveImportAttempt = false; } importFilePath = WebConfigurationManager.AppSettings["ImportFileSaveFolder"].ToString(); thereIsHeader = Convert.ToBoolean(WebConfigurationManager.AppSettings["HeaderRowExists"].ToString()); } //Pull data from Excel file string uploadedFile = ""; //try //{ uploadedFile = Server.MapPath(importFilePath + importViewModel.File.FileName.ToString()); importViewModel.Log("Attempting to save file \"" + importViewModel.File.FileName.ToString() + "\" to folder \"" + Server.MapPath(importFilePath) + "\"..."); //create the file on the server to the specified folder in the web.config importViewModel.File.SaveAs(uploadedFile); importViewModel.Log("Reading file \"" + uploadedFile + "\"..."); importDataTable = ReturnDataTableFromExcel(uploadedFile, ref importViewModel); //Pull data from Excel file //} //catch (Exception ex) //{ // LogError(ex, new string[] { "Failure encountered!" }, ref importViewModel); //} //finally //{ // //delete the file System.IO.File.Delete(uploadedFile); //} //Form object to iteratively create and add to collection to save to DB EAForm eaform; int startIndex = 0; //if (thereIsHeader) //skip the header row OR not? seems to already skip the header row // startIndex = 1; for (int i = startIndex; i < importDataTable.Rows.Count; i++) { string rowNumber = (i + 1).ToString(); importViewModel.Log("Extracting data for row: " + rowNumber + "..."); //Extract from datatable representation of EXCEL sheet for row = i string academicyear = importDataTable.Rows[i][0].ToString().Trim(); string course = importDataTable.Rows[i][1].ToString().Trim(); string courseNumber = importDataTable.Rows[i][2].ToString().Trim(); string blockweektitle = importDataTable.Rows[i][3].ToString().Trim(); string activitytitle = importDataTable.Rows[i][4].ToString().Trim(); string courseTitle = courseNumber + "-" + course; string keystring = academicyear + "/" + courseTitle + "/" + blockweektitle + "/" + activitytitle; if (!availableAcademicYears.Contains(academicyear)) { LogError("Unexpected Academic Year data: " + academicyear + ". Quitting import.", ref importViewModel); SaveImportAttempt = false; break; } //EXCLUDE ACTIVITIES: containing "– Tutorial 1" or "– Tutorial 2" or "– Tutorial 3" or "– Quiz" if (activitytitle.ToUpper().Contains("TUTORIAL 1") || activitytitle.ToUpper().Contains("TUTORIAL 2") || activitytitle.ToUpper().Contains("TUTORIAL 3") || activitytitle.ToUpper().Contains("QUIZ")) { importViewModel.Log("Skipping 'Tutorial/Quiz': " + keystring); continue; } //DUPLICATE KEY CHECK var formsCount = (from f in db.EAForms where (f.AcademicYear + "/" + f.Course + "/" + f.BlockWeekTitle + "/" + f.ActivityTitle) == keystring select f).Count(); if (formsCount > 0) { LogError("Found duplicate at row: " + rowNumber + " = " + keystring + ". Quitting import.", ref importViewModel); SaveImportAttempt = false; break; } string description_org = importDataTable.Rows[i][5].ToString(); string description = importDataTable.Rows[i][5].ToString().Trim(); string sessionObjectives = importDataTable.Rows[i][6].ToString().Trim(); if (activitytitle == "Clinical Study Design") { importViewModel.Log(description_org); importViewModel.Log(description); } if (activitytitle == "Clinical Diagnosis in a world of Uncertainty") { importViewModel.Log(description_org); importViewModel.Log(description); } if (activitytitle == "Sexuality and Culture") { importViewModel.Log(description_org); importViewModel.Log(description); } if (activitytitle == "Orientation to Block 3") { importViewModel.Log(description_org); importViewModel.Log(description); } string activityTypesString = importDataTable.Rows[i][7].ToString().Trim(); string formularysString = importDataTable.Rows[i][8].ToString().Trim(); string keywordsString = importDataTable.Rows[i][9].ToString().Trim(); string themesString = importDataTable.Rows[i][10].ToString().Trim(); string courseDirector = importDataTable.Rows[i][11].ToString().Trim(); string faculty = importDataTable.Rows[i][12].ToString().Trim(); string instructor = importDataTable.Rows[i][13].ToString().Trim(); string startdate = importDataTable.Rows[i][14].ToString().Trim(); eaform = new EAForm(); eaform.AcademicYear = academicyear; eaform.Course = courseTitle; eaform.BlockWeekTitle = blockweektitle; eaform.ActivityTitle = activitytitle; //List<String> activityTypes = ExtractSpecificDataFromJumble("Educational Methods", sessionMappings); //List<String> keywords = ExtractSpecificDataFromJumble("Keywords", keywordString); //List<String> themes = ExtractSpecificDataFromJumble("Themes", themeString); //List<String> formulary = ExtractSpecificDataFromJumble("Formulary (Drug Class ~ Prototype)", formularyString); //string activityTypesString = ""; //string keywordsString = ""; //string themesString = ""; //string drugsString = ""; //string delim = ""; //foreach (string atString in activityTypes) //{ // activityTypesString += delim + atString; // delim = ","; //} //delim = ""; ////We use semi-colon as the delimiter for keywords because some keywords have a comma in them. //foreach (string kwString in keywords) //{ // keywordsString += delim + kwString; // delim = ";"; //} //delim = ""; //foreach (string themeString in themes) //{ // themesString += delim + themeString.Replace("::", "~"); // delim = ","; //} //delim = ""; //foreach (string drugString in formulary) //{ // drugsString += delim + drugString; // delim = ","; //} eaform.ActivityType = activityTypesString; eaform.Keywords = keywordsString; eaform.Themes = themesString; eaform.Formulary = formularysString; //Activity Facilitator Fields if (courseDirector != "") { eaform.ActivityFacilitatorType = "Course Director"; eaform.ActivityFacilitatorNames = courseDirector; } else if (faculty != "") { eaform.ActivityFacilitatorType = "Week Chair"; eaform.ActivityFacilitatorNames = faculty; } else if (instructor != "") { eaform.ActivityFacilitatorType = "Instructor"; eaform.ActivityFacilitatorNames = instructor; } else { eaform.ActivityFacilitatorType = "Other"; } //eaform.ActivityFacilitatorDepartments = ""; eaform.Abstract = description; string[] learningobjArray = sessionObjectives.Split('~'); if (learningobjArray.Length > 2) { //Encountered more than 1 ~ character -- stop import LogError("Invalid use of ~ character at row: " + rowNumber + " = " + keystring + ". Quitting import.", ref importViewModel); SaveImportAttempt = false; break; } eaform.LearningObjectives = StandardizeLineBreaks(learningobjArray[0]); eaform.LastUpdated = DateTime.Now; //Attempt to parse "Last Submitted" from Session Objectives if (learningobjArray.Length > 1) { try { eaform.LastSubmitted = DateTime.Parse(learningobjArray[1].Trim()); } catch { LogError("Invalid Last Submitted Date at row: " + rowNumber + " = " + keystring + ". Quitting import.", ref importViewModel); SaveImportAttempt = false; break; } } else eaform.LastSubmitted = null; //Try and parse Start Date try { eaform.StartDate = DateTime.Parse(startdate); } catch { eaform.StartDate = null; } //Default status when importing is "one45 Extract" eaform.Status = db.EAFormStatuses .Where(f => f.Name == "one45 Extract") .FirstOrDefault(); //Add extracted original to DB db.EAForms.Add(eaform); //Now create a copy for editing EAForm eaformCopy = eaform.Copy(); //Link the copy to the original eaformCopy.ParentForm = eaform; //Change the status of the copy to "Imported"; eaformCopy.Status = db.EAFormStatuses .Where(f => f.Name == "Imported") .FirstOrDefault(); //Create Initial "Imported" SaveHistory eaformCopy.CreateSaveHistoryRecord("Ken");//User.Identity.Name); //Add "Imported" copy to DB db.EAForms.Add(eaformCopy); } //Now attempt save to DB if no problems were encountered before if (SaveImportAttempt) { try { importViewModel.Log("Attempting to save to database..."); db.SaveChanges(); importViewModel.Log("Save successful!"); } catch (DbEntityValidationException ex) { foreach (var eve in ex.EntityValidationErrors) { LogError(String.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State), ref importViewModel); foreach (var ve in eve.ValidationErrors) LogError(String.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage), ref importViewModel); } LogError(ex, new string[] { "Failure encountered!" }, ref importViewModel); } } //return RedirectToAction("Index"); return View("~/Views/EAForms/Import.cshtml", importViewModel); } else { var errors = ModelState.Values.SelectMany(v => v.Errors); foreach (var error in errors) { if (error.Exception != null) Elmah.ErrorSignal.FromCurrentContext().Raise(error.Exception); else Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception(error.ErrorMessage)); } return View("~/Views/EAForms/Import.cshtml", importViewModel); } }
public EAForm Copy() { EAForm copiedForm = new EAForm(); copiedForm.AcademicYear = this.AcademicYear; copiedForm.Course = this.Course; copiedForm.BlockWeekTitle = this.BlockWeekTitle; copiedForm.ActivityTitle = this.ActivityTitle; copiedForm.ActivityType = this.ActivityType; copiedForm.ActivityFacilitatorType = this.ActivityFacilitatorType; copiedForm.ActivityFacilitatorNames = this.ActivityFacilitatorNames; copiedForm.ActivityFacilitatorDepartments = this.ActivityFacilitatorDepartments; copiedForm.Abstract = this.Abstract; copiedForm.LearningObjectives = this.LearningObjectives; copiedForm.Keywords = this.Keywords; copiedForm.Themes = this.Themes; copiedForm.Formulary = this.Formulary; copiedForm.LastUpdated = this.LastUpdated; copiedForm.LastSubmitted = this.LastSubmitted; copiedForm.StartDate = this.StartDate; copiedForm.InstructorSignature = this.InstructorSignature; return copiedForm; }