예제 #1
0
        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);
        }
예제 #2
0
        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>();
            }
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
파일: EAForm.cs 프로젝트: rderouin/CMU
 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;
 }