335 lines
17 KiB
C#
335 lines
17 KiB
C#
|
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
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Логика работы с отчетами
|
|||
|
/// </summary>
|
|||
|
public class ReportLogic : CoreBusinessLogic
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Логика для работы со студентами
|
|||
|
/// </summary>
|
|||
|
|
|||
|
private readonly StudentBusinessLogic _studentlogic;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Логика для работы с успеваемостью студента
|
|||
|
/// </summary>
|
|||
|
|
|||
|
private readonly StudentAcademicProgressBusinessLogic _studentAcademicProgresslogic;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Логика для работы с дисциплинами
|
|||
|
/// </summary>
|
|||
|
|
|||
|
private readonly DisciplineBusinessLogic _disciplinelogic;
|
|||
|
|
|||
|
private readonly AcademicPlanRecordBusinessLogic _academicPlanRecordlogic;
|
|||
|
private readonly StudentGroupBusinessLogic _studentGrouplogic;
|
|||
|
private readonly EducationDirectionBusinessLogic _educationDirectionlogic;
|
|||
|
private readonly AcademicPlanBusinessLogic _academicPlanlogic;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Логика работы с отчетом
|
|||
|
/// </summary>
|
|||
|
/// <param name="service"></param>
|
|||
|
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<StudentScoresViewModel> 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<StudentScoresViewModel>();
|
|||
|
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<StudentScoresViewModel> 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<StudentScoresViewModel>();
|
|||
|
//записываем имена дисциплин в лист
|
|||
|
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<StudentScoresViewModel>();
|
|||
|
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;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|