public void UpdateCourses(StudyProject studyProject, StudyCourse newStudyCourse) { if (studyProject == null) { throw new ArgumentException("Argument 'studyProject' is null"); } if (newStudyCourse == null) { throw new ArgumentException("Argument 'newStudyCourse' is null"); } bool foundCourse = false; foreach (var studyCourse in studyProject.Courses) { if (studyCourse.TreeId == newStudyCourse.TreeId) { foundCourse = true; studyCourse.CourseName = newStudyCourse.CourseName; studyCourse.BackgroundColor = newStudyCourse.BackgroundColor; } } // Add course to project if not exists if (!foundCourse) { studyProject.Courses.Add(newStudyCourse); } }
public static StudyProject Clone(this StudyProject studyProject) { // Simplest and stupidest way - just serialize and deserialize. // It works, so who gives a damn. string serializedXml = studyProject.Serialize(); var clonedStudyProject = serializedXml.Deserialize <StudyProject>(); return(clonedStudyProject); }
public static StudyCourse GetCourseByTreeId(this StudyProject studyProject, string treeId) { if (String.IsNullOrEmpty(treeId)) { throw new ArgumentException("Argument 'treeId' is null or empty"); } return(studyProject.Courses.FirstOrDefault(e => e.TreeId.Equals(treeId))); }
public StudyProject CreateStudyProject(string name, string parentId) { if (String.IsNullOrEmpty(name)) { throw new ArgumentException("Argument 'name' is null or empty"); } var studyProject = new StudyProject(); if (!String.IsNullOrEmpty(parentId)) { // Create from existing project. var existingStudyProject = StudyManager.Instance.GetStudyProject(parentId); if (existingStudyProject != null) { studyProject = existingStudyProject.Clone(); } else { throw new NullReferenceException("Specified parent study project does not exist!"); } } else { // Populate with courses foreach (var course in SettingManager.Instance.AvailableStudyCourses) { UpdateCourses(studyProject, course); } // Populate with groups foreach (var group in SettingManager.Instance.AvailableStudyGroups) { UpdateGroups(studyProject, group); } } studyProject.Id = Guid.NewGuid().ToString("N"); studyProject.Name = name; studyProject.CreationDate = DateTime.Now; studyProject.LastUpdatedDate = DateTime.Now; studyProject.FileName = Guid.NewGuid().ToString("N") + ".xml"; // Add to list StudyProjects.Add(studyProject); // Initial save to file FileManager.SaveObjectToFile(studyProject, FileManager.DataPath, studyProject.FileName); return(studyProject); }
private void DeleteStudyProjectFile(StudyProject studyProject) { if (studyProject == null) { throw new ArgumentException("Argument 'studyProject' is null"); } if (String.IsNullOrEmpty(studyProject.FileName)) { throw new Exception($"Study project '{studyProject.Id}' name is empty!"); } string fullFilePath = AppDomain.CurrentDomain.BaseDirectory + FileManager.DataPath + studyProject.FileName; FileManager.DeleteFile(fullFilePath); }
public void UpdateGroups(StudyProject studyProject, StudyGroup newStudyGroup) { if (studyProject == null) { throw new ArgumentException("Argument 'studyProject' is null"); } if (newStudyGroup == null) { throw new ArgumentException("Argument 'newStudyGroup' is null"); } foreach (var studyCourse in studyProject.Courses) { UpdateGroups(studyCourse, newStudyGroup); } }
public void UpdateStudies(StudyProject studyProject, Study newStudy) { if (studyProject == null) { throw new ArgumentException("Argument 'studyProject' is null"); } if (newStudy == null) { throw new ArgumentException("Argument 'newStudy' is null"); } foreach (var studyCourse in studyProject.Courses) { UpdateStudies(studyCourse, newStudy); } }
public static StudyGroup GetGroupByTreeId(this StudyProject studyProject, string treeId) { if (String.IsNullOrEmpty(treeId)) { throw new ArgumentException("Argument 'treeId' is null or empty"); } foreach (var course in studyProject.Courses) { foreach (var group in course.Groups) { if (group.TreeId.Equals(treeId)) { return(group); } } } return(null); }
public Study GetStudy(StudyProject studyProject, string treeId) { if (String.IsNullOrEmpty(treeId)) { throw new ArgumentException("Argument 'treeId' is null or empty"); } if (studyProject == null) { return(null); } Study study = null; lock (_locker) { study = FindStudyByTreeId(studyProject, treeId); } return(study); }
public Study FindStudyByTreeId(StudyProject studyProject, string treeId) { if (studyProject == null) { throw new ArgumentException("Argument 'studyProject' is null"); } if (String.IsNullOrEmpty(treeId)) { throw new Exception("Argument 'treeId' is null or empty!"); } foreach (var studyCourse in studyProject.Courses) { var study = FindStudyByTreeId(studyCourse, treeId); if (study != null) { return(study); } } return(null); }
public static List <StudyInfoMessage> CheckStudyProject(StudyProject studyProject) { var messages = new List <StudyInfoMessage>(); if (studyProject != null) { int totalOfClass10 = 0; int totalOfClass11 = 0; int totalOfClass12 = 0; bool obligatoryStudiesNotFilled = false; bool minimalStudyCountNotMet = false; bool tooManyCreditsInStudy = false; bool parentStudiesNotFilledIn = false; var groupStudyCount = new Dictionary <string, int>(); foreach (var course in studyProject.Courses) { foreach (var group in course.Groups) { if (!groupStudyCount.ContainsKey(group.TreeId)) { groupStudyCount.Add(group.TreeId, 0); } int countByGroup = 0; foreach (var study in group.Studies) { totalOfClass10 += study.CreditPoints[0]; totalOfClass11 += study.CreditPoints[1]; totalOfClass12 += study.CreditPoints[2]; if (study.CreditPoints[0] == 0 && study.CreditPoints[1] == 0 && study.CreditPoints[2] == 0 ) { if (study.IsObligatory) { obligatoryStudiesNotFilled = true; messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Warning, TreeId = study.TreeId }); } } else { countByGroup++; // Check parent studies not filled in. if (!String.IsNullOrEmpty(study.ParentTreeId)) { var parentStudy = StudyManager.Instance.GetStudy(studyProject, study.ParentTreeId); if (parentStudy != null && parentStudy.CreditPoints[0] == 0 && parentStudy.CreditPoints[1] == 0 && parentStudy.CreditPoints[2] == 0) { parentStudiesNotFilledIn = true; messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Error, TreeId = study.TreeId }); messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Error, TreeId = parentStudy.TreeId }); } } // Check credit point total in all years. if (study.CreditPointLimit > 0 && study.CreditPoints[0] + study.CreditPoints[1] + study.CreditPoints[2] > study.CreditPointLimit) { tooManyCreditsInStudy = true; messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Error, TreeId = study.TreeId }); } } } groupStudyCount[group.TreeId] += countByGroup; } } // Check for minimal study count in group. foreach (var groupPair in groupStudyCount) { var group = SettingManager.Instance.GetGroupByTreeId(groupPair.Key); if (group != null) { if (group.MinimalStudyCount > groupPair.Value) { minimalStudyCountNotMet = true; messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Warning, TreeId = groupPair.Key }); } } } // Check totals by each class - must be between CreditPointMinimum and CreditPointMaximum. if (totalOfClass10 < CreditPointMinimum || totalOfClass11 < CreditPointMinimum || totalOfClass12 < CreditPointMinimum) { string additionalInfo = String.Empty; additionalInfo += " " + (totalOfClass10 < CreditPointMinimum ? "10;" : String.Empty); additionalInfo += " " + (totalOfClass11 < CreditPointMinimum ? "11;" : String.Empty); additionalInfo += " " + (totalOfClass12 < CreditPointMinimum ? "12;" : String.Empty); messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Error, Message = "errors.notEnoughCreditPointsInYear", AdditionalInfo = additionalInfo.Trim() }); } if (totalOfClass10 > CreditPointMaximum || totalOfClass11 > CreditPointMaximum || totalOfClass12 > CreditPointMaximum) { string additionalInfo = String.Empty; additionalInfo += " " + (totalOfClass10 > CreditPointMaximum ? "10;" : String.Empty); additionalInfo += " " + (totalOfClass11 > CreditPointMaximum ? "11;" : String.Empty); additionalInfo += " " + (totalOfClass12 > CreditPointMaximum ? "12;" : String.Empty); messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Error, Message = "errors.tooManyCreditPointsInYear", AdditionalInfo = additionalInfo.Trim() }); } // Check for obligatory studies not filled in. if (obligatoryStudiesNotFilled) { messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Warning, Message = "errors.obligatoryStudiesNotFilled" }); } // Check for minimal study count in group. if (minimalStudyCountNotMet) { messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Warning, Message = "errors.groupMinimalStudyCountNotMet" }); } // Check credit point total in all years. if (tooManyCreditsInStudy) { messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Error, Message = "errors.tooManyCreditPointsInStudy" }); } // Check parent studies not filled in. if (parentStudiesNotFilledIn) { messages.Add( new StudyInfoMessage { SeverityLevel = SeverityLevel.Error, Message = "errors.parentStudiesNotFilled" }); } } return(messages); }