using AcademicProgressBusinessLogic.BindingModels; using AcademicProgressBusinessLogic.BusinessLogic; using AcademicProgressBusinessLogic.Enums; using AcademicProgressBusinessLogic.HelperModels; using AcademicProgressBusinessLogic.Interfaces; using AcademicProgressBusinessLogic.ViewModels; using DepartmentBusinessLogic.BindingModels; using DepartmentBusinessLogic.BusinessLogics; using DepartmentBusinessLogic.Interfaces; using ModuleTools.BusinessLogics; using ModuleTools.Enums; using ModuleTools.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AcademicProgressBusinessLogic.BusinessLogics { /// /// Логика работы с отчетами /// public class ReportLogic : CoreBusinessLogic { /// /// Логика для работы со студентами /// private readonly StudentBusinessLogic _studentlogic; /// /// Логика для работы с успеваемостью студента /// private readonly StudentAcademicProgressBusinessLogic _studentAcademicProgresslogic; /// /// Логика для работы с дисциплинами /// private readonly DisciplineBusinessLogic _disciplinelogic; private readonly AcademicPlanRecordBusinessLogic _academicPlanRecordlogic; private readonly StudentGroupBusinessLogic _studentGrouplogic; private readonly EducationDirectionBusinessLogic _educationDirectionlogic; private readonly AcademicPlanBusinessLogic _academicPlanlogic; /// /// Логика работы с отчетом /// /// public ReportLogic(AcademicPlanRecordBusinessLogic _academicPlanRecordlogic, EducationDirectionBusinessLogic _educationDirectionlogic, AcademicPlanBusinessLogic _academicPlanlogic, StudentGroupBusinessLogic _studentGrouplogic, StudentBusinessLogic _studentlogic, StudentAcademicProgressBusinessLogic _studentAcademicProgressService, DisciplineBusinessLogic _disciplinelogic) { this._studentGrouplogic = _studentGrouplogic; this._educationDirectionlogic = _educationDirectionlogic; this._academicPlanlogic = _academicPlanlogic; this._academicPlanRecordlogic = _academicPlanRecordlogic; this._studentAcademicProgresslogic = _studentAcademicProgressService; this._disciplinelogic = _disciplinelogic; this._studentlogic = _studentlogic; _serviceOperation = AccessOperation.Отчет_успеваемость; _entity = "Отчеты для успеваемости"; } public void SaveReportToWordFile(ReportBindingModel model) { SaveToWord.CreateDoc(new WordInfo { FileName = model.FolderName, Title = "Приложение к диплому", StudentScores = GetStudentScores(model.StudentId) }); } public void SaveReportToExcelFile(ReportBindingModel model) { SaveToExcel.CreateDoc(new ExcelInfo { FileName = model.FolderName, Title = "Успеваемость", StudentScores = GetStudentScoresForProgress(model.StudentId) }); } public List GetStudentScoresForProgress(Guid? studentId) { var academicProgress = _studentAcademicProgresslogic.GetList(new StudentAcademicProgressGetBindingModel()); var discipline = _disciplinelogic.GetList(new DisciplineGetBindingModel()); var academicPlanRecords = _academicPlanRecordlogic.GetList(new AcademicPlanRecordGetBindingModel()); var students = _studentlogic.GetList(new StudentGetBindingModel()); var educationDirections = _educationDirectionlogic.GetList(new EducationDirectionGetBindingModel()); var studentGroup = _studentGrouplogic.GetList(new StudentGroupGetBindingModel()); var academicPlans = _academicPlanlogic.GetList(new AcademicPlanGetBindingModel()); var list = new List(); double average = 0; double count = 0; string score = ""; foreach (var student in students.List.Where(rec => rec.Id == studentId)) { foreach (var studGroup in studentGroup.List.Where(rec => rec.Id == student.StudentGroupId)) { foreach (var educatDirection in educationDirections.List.Where(rec => rec.Id == studGroup.EducationDirectionId)) { foreach (var academicPlan in academicPlans.List.Where(rec => rec.EducationDirectionId == educatDirection.Id)) { foreach (var academicPlanRecord in academicPlanRecords.List.Where(rec => rec.AcademicPlanId == academicPlan.Id)) { //является ли родителем if (academicPlanRecord.IsParent) { bool hasScore = false; //ищем всех детей foreach (var academicPlanRecordChild in academicPlanRecords.List.Where(rec => rec.AcademicPlanRecordParentId == academicPlanRecord.Id)) { //если есть оценки то заполняем foreach (var studProgress in academicProgress.List.Where(rec => rec.StudentId == studentId && rec.DisciplineId == academicPlanRecordChild.DisciplineId && rec.Semester == academicPlanRecordChild.Semester)) { var record = new StudentScoresViewModel { DisciplineName = academicPlanRecordChild.DisciplineName, Scores = studProgress.ExamScoresTitle, StudentLastName = student.LastName, StudentFirstName = student.FirstName, Semester = (int)academicPlanRecordChild.Semester, Zet = academicPlanRecordChild.Zet }; list.Add(record); hasScore = true; } } //если оценок нет, то вставляем имя родителя if (!hasScore) { var record = new StudentScoresViewModel { DisciplineName = academicPlanRecord.DisciplineName, Scores = " ", Semester = (int)academicPlanRecord.Semester, StudentLastName = student.LastName, StudentFirstName = student.FirstName, Zet = academicPlanRecord.Zet }; list.Add(record); } }//если не имеет детей то записываем имя без оценки else if (academicPlanRecord.IsChildValue == "Нет") { var record = new StudentScoresViewModel { DisciplineName = academicPlanRecord.DisciplineName, Scores = " ", Semester = (int)academicPlanRecord.Semester, StudentLastName = student.LastName, StudentFirstName = student.FirstName, Zet = academicPlanRecord.Zet }; list.Add(record); } } } } } } //поставили оценки из успеваемости студента в лист foreach (var l in list) { foreach (var studProgress in academicProgress.List.Where(rec => rec.StudentId == studentId && l.DisciplineName == rec.DisciplineName && l.Semester == (int)rec.Semester)) { switch (studProgress.Score) { case ExamScores.Отлично: average += 5; score = "5"; count++; break; case ExamScores.Хорошо: average += 4; score = "4"; count++; break; case ExamScores.Удовлетворительно: average += 3; score = "3"; count++; break; case ExamScores.Зачет: score = "+"; break; } l.Scores = score; } l.Average = Math.Round(((average) / count) , 2); } return list; } public List GetStudentScores(Guid? studentId) { var academicProgress = _studentAcademicProgresslogic.GetList(new StudentAcademicProgressGetBindingModel()); var discipline = _disciplinelogic.GetList(new DisciplineGetBindingModel()); var academicPlanRecords = _academicPlanRecordlogic.GetList(new AcademicPlanRecordGetBindingModel()); var students = _studentlogic.GetList(new StudentGetBindingModel()); var educationDirections = _educationDirectionlogic.GetList(new EducationDirectionGetBindingModel()); var studentGroup = _studentGrouplogic.GetList(new StudentGroupGetBindingModel()); var academicPlans = _academicPlanlogic.GetList(new AcademicPlanGetBindingModel()); var list = new List(); //записываем имена дисциплин в лист foreach (var student in students.List.Where(rec => rec.Id == studentId)) { foreach (var studGroup in studentGroup.List.Where(rec => rec.Id == student.StudentGroupId)) { foreach (var educatDirection in educationDirections.List.Where(rec => rec.Id == studGroup.EducationDirectionId)) { foreach (var academicPlan in academicPlans.List.Where(rec => rec.EducationDirectionId == educatDirection.Id)) { foreach (var academicPlanRecord in academicPlanRecords.List.Where(rec => rec.AcademicPlanId == academicPlan.Id).OrderBy(rec => rec.DisciplineName).ThenByDescending(rec => rec.SemesterTitle)) { //является ли родителем if (academicPlanRecord.IsParent) { bool hasScore = false; //ищем всех детей foreach (var academicPlanRecordChild in academicPlanRecords.List.Where(rec => rec.AcademicPlanRecordParentId == academicPlanRecord.Id)) { //если есть оценки то заполняем foreach (var studProgress in academicProgress.List.Where(rec => rec.StudentId == studentId && rec.DisciplineId == academicPlanRecordChild.DisciplineId && rec.Semester == academicPlanRecordChild.Semester)) { var record = new StudentScoresViewModel { DisciplineName = academicPlanRecordChild.DisciplineName, Scores = studProgress.ExamScoresTitle, StudentLastName = student.LastName, StudentFirstName = student.FirstName, Semester = (int)academicPlanRecordChild.Semester, Zet = academicPlanRecordChild.Zet }; list.Add(record); hasScore = true; } } //если оценок нет, то вставляем имя родителя if (!hasScore) { var record = new StudentScoresViewModel { DisciplineName = academicPlanRecord.DisciplineName, Scores = " ", Semester = (int)academicPlanRecord.Semester, StudentLastName = student.LastName, StudentFirstName = student.FirstName, Zet = academicPlanRecord.Zet }; list.Add(record); } }//если не имеет детей то записываем имя без оценки else if (academicPlanRecord.IsChildValue == "Нет") { var record = new StudentScoresViewModel { DisciplineName = academicPlanRecord.DisciplineName, Scores = " ", Semester = (int)academicPlanRecord.Semester, StudentLastName = student.LastName, StudentFirstName = student.FirstName, Zet = academicPlanRecord.Zet }; list.Add(record); } } } } } } var list2 = new List(); list2.Add(list[0]); int z = 0; //в новый лист заносим только по одной дисциплине и складываем з.ешки у одинаковых дисциплин foreach (var l in list) { if (l.DisciplineName != list2[list2.Count - 1].DisciplineName) { list2.Add(l); z += l.Zet; } else { list2[list2.Count - 1].Zet += l.Zet; z += l.Zet; } } //записываем оценки в лист из успевамости foreach (var l in list2) { foreach (var studProgress in academicProgress.List.Where(rec => rec.StudentId == studentId)) { if (l.DisciplineName == studProgress.DisciplineName && l.Semester == (int)studProgress.Semester && l.Scores != null) { l.Scores = studProgress.Score.ToString(); } } } list.Clear(); foreach (var l in list2.OrderBy(rec => rec.Semester)) { list.Add(l); } list[list.Count - 1].Average = z; return list; } } }