CourseWork_SchoolStudyAgain/SchoolAgainStudy/SchoolAgainStudyBusinessLogic/BusinessLogic/ReportLogic.cs

283 lines
11 KiB
C#
Raw Permalink Normal View History

using DocumentFormat.OpenXml.Office2021.DocumentTasks;
using SchoolAgainStudyBusinessLogic.OfficePackage;
using SchoolAgainStudyBusinessLogic.OfficePackage.HelperModels;
using SchoolAgainStudyContracts.BindingModel;
using SchoolAgainStudyContracts.BusinessLogicContracts;
using SchoolAgainStudyContracts.SearchModel;
using SchoolAgainStudyContracts.StorageContracts;
using SchoolAgainStudyContracts.ViewModel;
using SchoolAgainStudyDataBaseImplements.Models;
using SchoolAgainStudyDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SchoolAgainStudyBusinessLogic.BusinessLogic
{
public class ReportLogic : IReportLogic
{
private readonly IInterestStorage _interestStorage;
private readonly IMaterialStorage _materialStorage;
private readonly IProductStorage _productStorage;
private readonly IDiyStorage _diyStorage;
private readonly ITaskStorage _taskStorage;
private readonly ILessonStorage _lessonStorage;
private readonly AbstractSaveToExcelTeacher _saveToExcelTeacher;
private readonly AbstractSaveToWordTeacher _saveToWordTeacher;
private readonly AbstractSaveToPdfTeacher _saveToPdfTeacher;
private readonly AbstractSaveToExcelStudent _saveToExcelStudent;
private readonly AbstractSaveToWordStudent _saveToWordStudent;
private readonly AbstractSaveToPdfStudent _saveToPdfStudent;
public ReportLogic(IInterestStorage interestStorage, IMaterialStorage materialStorage, IProductStorage productStorage, IDiyStorage diyStorage, ITaskStorage taskStorage, ILessonStorage lessonStorage, AbstractSaveToExcelTeacher saveToExcelTeacher, AbstractSaveToWordTeacher saveToWordTeacher, AbstractSaveToPdfTeacher saveToPdfTeacher, AbstractSaveToExcelStudent saveToExcelStudent, AbstractSaveToWordStudent saveToWordStudent, AbstractSaveToPdfStudent saveToPdfStudent)
{
_interestStorage = interestStorage;
_materialStorage = materialStorage;
_productStorage = productStorage;
_diyStorage = diyStorage;
_taskStorage = taskStorage;
_lessonStorage = lessonStorage;
_saveToExcelTeacher = saveToExcelTeacher;
_saveToWordTeacher = saveToWordTeacher;
_saveToPdfTeacher = saveToPdfTeacher;
_saveToExcelStudent = saveToExcelStudent;
_saveToWordStudent = saveToWordStudent;
_saveToPdfStudent = saveToPdfStudent;
}
public List<ReportDiyMaterialViewModel> GetDiyMaterial(ReportBindingModel model)
{
var tasks = _taskStorage.GetFilteredList(new TaskSearchModel{
TeacherId=model.TeacherId
});
var diys = _diyStorage.GetFullList();
var list = new List<ReportDiyMaterialViewModel>();
foreach (MaterialViewModel material in model.Materials)
{
var record = new ReportDiyMaterialViewModel
{
Title = material.Title
};
foreach(TaskViewModel task in tasks)
{
if (task.TaskMaterials.ContainsKey(material.Id))
{
foreach(DiyViewModel diy in diys)
{
if (diy.TaskId == task.Id)
record.Diys.Add(diy.Title);
}
}
}
list.Add(record);
}
return list;
}
public List<ReportInterestLessonViewModel> GetInterestLesson(ReportBindingModel model)
{
var products = _productStorage.GetFilteredList(new ProductSearchModel
{
StudentId = model.StudentId
});
var lessons = _lessonStorage.GetFullList();
var list = new List<ReportInterestLessonViewModel>();
foreach(InterestViewModel interest in model.Interests)
{
var record = new ReportInterestLessonViewModel
{
Title = interest.Title
};
foreach(ProductViewModel product in products)
{
if (product.ProductInterests.ContainsKey(interest.Id))
{
foreach(LessonViewModel lesson in lessons)
{
if(lesson.ProductId == product.Id)
{
record.Lessons.Add(lesson.Title);
}
}
}
}
list.Add(record);
}
return list;
}
public List<ReportInterestViewModel> GetInterests(ReportBindingModel model)
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
var interests = _interestStorage.GetFilteredList(new InterestSearchModel
{
StudentId = model.StudentId
});
var products = _productStorage.GetFilteredList(new ProductSearchModel
{
StudentId = model.StudentId,
DateFrom = model.DateFrom,
DateTo = model.DateTo
});
var diys = _diyStorage.GetFilteredList(new DiySearchModel
{
StudentId = model.StudentId,
DateFrom = model.DateFrom,
DateTo = model.DateTo
});
var list = new List<ReportInterestViewModel>();
foreach (ProductViewModel product in products)
{
foreach (DiyViewModel diy in diys)
{
foreach (int interestProduct in product.ProductInterests.Keys)
{
if (diy.DiyInterests.ContainsKey(interestProduct))
{
list.Add(new ReportInterestViewModel
{
InterestTitle = interests.FirstOrDefault(x => x.Id == interestProduct).Title,
ProductTitle = product.Title,
DateCreateProduct = product.DateCreate,
DiyTitle = diy.Title,
DateCreateDiy = diy.DateCreate
});
}
}
}
}
return list;
}
public List<ReportLessonTaskViewModel> GetLessonTask(ReportBindingModel model)
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
var tasks = _taskStorage.GetFilteredList(new TaskSearchModel
{
TeacherId = model.TeacherId,
DateFrom = model.DateFrom,
DateTo = model.DateTo
});
var lessons = _lessonStorage.GetFilteredList(new LessonSearchModel
{
TeacherId = model.TeacherId,
DateFrom = model.DateFrom,
DateTo = model.DateTo
});
var list = new List<ReportLessonTaskViewModel>();
foreach (TaskViewModel task in tasks)
{
foreach(LessonViewModel lesson in lessons)
{
foreach (int materialTask in task.TaskMaterials.Keys)
{
if (lesson.LessonMaterials.ContainsKey(materialTask))
{
list.Add(new ReportLessonTaskViewModel
{
TitleLesson = lesson.Title,
TitleTask = task.Title,
DateEventLesson = lesson.DateEvent,
DateIssueTask = task.DateIssue
});
break;
}
}
}
}
return list;
}
public void SaveDiyMaterialToExcelFile(ReportBindingModel model)
{
_saveToExcelTeacher.CreateReport(new ExcelInfoTeacher
{
FileName = model.FileName,
Title = "Список поделок по материалам",
DiyMaterials = GetDiyMaterial(model)
});
}
public void SaveDiyMaterialToWordFile(ReportBindingModel model)
{
_saveToWordTeacher.CreateDoc(new WordInfoTeacher
{
FileName = model.FileName,
Title = "Список поделок по материалам",
DiyMaterials = GetDiyMaterial(model)
});
}
public void SaveInterestLessonToExcelFile(ReportBindingModel model)
{
_saveToExcelStudent.CreateReport(new ExcelInfoStudent
{
FileName = model.FileName,
Title = "Список занятий по интресам",
InterestLessons = GetInterestLesson(model)
});
}
public void SaveInterestLessonToWordFile(ReportBindingModel model)
{
_saveToWordStudent.CreateDoc(new WordInfoStudent
{
FileName = model.FileName,
Title = "Список занятий по интресам",
InterestLessons = GetInterestLesson(model)
});
}
public void SaveInterestsToPdfFile(ReportBindingModel model)
{
_saveToPdfStudent.CreateDoc(new PdfInfoStudent
{
FileName = model.FileName,
Title = "Список интересов",
DateFrom = DateTime.SpecifyKind(model.DateFrom!.Value, DateTimeKind.Utc),
DateTo = DateTime.SpecifyKind(model.DateTo!.Value, DateTimeKind.Utc),
Interests = GetInterests(model)
});
}
public void SaveLessonTaskToPdfFile(ReportBindingModel model)
{
_saveToPdfTeacher.CreateDoc(new PdfInfoTeacher
{
FileName = model.FileName,
Title = "Список заданий и занятий с общими материалами",
DateFrom = DateTime.SpecifyKind(model.DateFrom!.Value, DateTimeKind.Utc),
DateTo = DateTime.SpecifyKind(model.DateTo!.Value, DateTimeKind.Utc),
LessonTasks = GetLessonTask(model)
});
}
}
}