DepartmentProject/DepartmentPortal/Department/DepartmentBusinessLogic/BusinessLogics/GenericBusinessLogic/StudentGroupBusinessLogic.cs

195 lines
7.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DepartmentContract.BindingModels;
using DepartmentContract.Logics.IGenericEntityLogic;
using DepartmentContract.Services.IGenericEntityService;
using DepartmentContract.ViewModels;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ToolsModule.ManagmentDependency;
using ToolsModule.ManagmentEntity;
using ToolsModule.ManagmentExtension;
using ToolsModule.ManagmentSecurity;
using ToolsOffice.Interfaces;
using ToolsOffice.Interfaces.Word;
using ToolsOffice.Interfaces.Word.Models;
using ToolsOffice.Interfaces.Word.Models.Cases;
namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
{
/// <summary>
/// Логика работы с учебными группами
/// </summary>
public class StudentGroupBusinessLogic : GenericBusinessLogic<StudentGroupGetBindingModel, StudentGroupSetBindingModel, StudentGroupListViewModel, StudentGroupViewModel>, IStudentGroupLogic
{
public StudentGroupBusinessLogic(IStudentGroupService service) : base(service, "Учебные Группы", AccessOperation.УчебныеГруппы) { }
public async Task<bool> SaveToWord(StudentGroupSaveToWordBindingModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (model.FileName.IsEmpty())
{
throw new ArgumentNullException("Имя файла", nameof(model.FileName));
}
var builderWordDocument = DependencyManager.Instance.Resolve<BuilderWordDocument>();
if (builderWordDocument == null)
{
throw new ArgumentNullException("Сервис генерации документов", nameof(builderWordDocument));
}
var studentLogic = DependencyManager.Instance.Resolve<IStudentLogic>();
if (studentLogic == null)
{
throw new ArgumentNullException("Сервис студентов", nameof(studentLogic));
}
var studetns = studentLogic.GetList(new StudentGetBindingModel { StudentGroupId = model.StudentGroupId });
if (studetns == null)
{
throw new InvalidOperationException(string.Join(Environment.NewLine, studentLogic.Errors.Select(x => x.Message)));
}
var studentGroup = GetElement(new StudentGroupGetBindingModel { Id = model.StudentGroupId });
if (studentGroup == null)
{
throw new InvalidOperationException(string.Join(Environment.NewLine, Errors.Select(x => x.Message)));
}
var table = new ModelWordTable()
{
RowsHeight = new Dictionary<int, double>(),
BorderType = TypeWordTableBorder.Single,
BorderWidth = 4,
Headers = new List<(int ColumnIndex, int RowIndex, string Header)>(),
ColumnWidths = new Dictionary<int, double>(),
Data = new List<string[]>(),
LookFirstRow = true,
LookFirstColumn = true
};
int columnIndex = 0;
table.Headers.Add((columnIndex, 0, "№"));
table.ColumnWidths.Add(columnIndex, 1);
columnIndex++;
if (model.ShowNumberOfBook)
{
table.Headers.Add((columnIndex, 0, "Номер зачетной книжки"));
table.ColumnWidths.Add(columnIndex, 3);
columnIndex++;
}
if (model.UnionFIO)
{
table.Headers.Add((columnIndex, 0, "ФИО"));
table.ColumnWidths.Add(columnIndex, 5);
columnIndex++;
}
else
{
table.Headers.Add((columnIndex, 0, "Фамилия"));
table.ColumnWidths.Add(columnIndex, 5);
columnIndex++;
table.Headers.Add((columnIndex, 0, "Имя"));
table.ColumnWidths.Add(columnIndex, 5);
columnIndex++;
table.Headers.Add((columnIndex, 0, "Отчество"));
table.ColumnWidths.Add(columnIndex, 5);
columnIndex++;
}
if (model.ShowStatus)
{
table.Headers.Add((columnIndex, 0, "Статус"));
table.ColumnWidths.Add(columnIndex, 3);
columnIndex++;
}
if (model.ShowInfo)
{
table.Headers.Add((columnIndex, 0, "Информация"));
table.ColumnWidths.Add(columnIndex, 15);
columnIndex++;
}
table.RowsHeight.Add(0, 1.5);
int rowIndex = 0;
foreach(var student in studetns.List)
{
var listOfData = new List<string>() { (rowIndex + 1).ToString() };
if (model.ShowNumberOfBook)
{
listOfData.Add(student.NumberOfBook);
}
if (model.UnionFIO)
{
if (model.UseInitials)
{
listOfData.Add($"{student.LastName}{(student.FirstName.Length > 0 ? $" {student.FirstName[0]}." : "")}{(student.Patronymic.Length > 0 ? $" {student.Patronymic[0]}." : "")}");
}
else
{
listOfData.Add($"{student.LastName} {student.FirstName} {student.Patronymic}");
}
}
else
{
listOfData.Add(student.LastName);
listOfData.Add(student.FirstName);
listOfData.Add(student.Patronymic);
}
if (model.ShowStatus)
{
listOfData.Add(student.StudentStateTitle);
}
if (model.ShowInfo)
{
listOfData.Add(student.Description);
}
table.Data.Add(listOfData.ToArray());
table.RowsHeight.Add(rowIndex + 1, 1);
rowIndex++;
}
var pageSize = new WordPageSizes("А4");
var docModel = new ModelWordDocumentWithHeaderAndTable
{
Document = new ModelWordDocument
{
WordPageOrientation = TypeWordPageOrientation.Landscape,
PageSizeHeight = pageSize.PageSizeWidth,
PageSizeWidth = pageSize.PageSizeHeight,
PageMarginBottom = pageSize.PageMarginBottom,
PageMarginTop = pageSize.PageMarginTop,
PageMarginLeft = pageSize.PageMarginLeft,
PageMarginRight = pageSize.PageMarginRight,
PageMarginGutter = pageSize.PageMarginGutter,
PageHeader = pageSize.PageHeader,
PageFooter = pageSize.PageFooter
},
Header = new ModelWordParagraph
{
FontName = FontNames.TimesNewRoman,
FontSize = 16,
IsBold = true,
JustificationType = TypeWordJustification.Center,
Text = studentGroup.ToString(),
SpacingBetweenLinesAfter = 10
},
Table = table
};
var stream = builderWordDocument.CreateDocumentWithTable(docModel);
if (stream == null)
{
throw new InvalidOperationException("Не удалось получить поток с документом");
}
stream.Position = 0;
using (var saveStream = new FileStream(model.FileName, FileMode.OpenOrCreate))
{
await stream.CopyToAsync(saveStream);
}
stream.Close();
return true;
}
}
}