2022-03-19 22:48:13 +04:00
|
|
|
|
using DepartmentContract.BindingModels;
|
|
|
|
|
using DepartmentContract.Logics.IGenericEntityLogic;
|
|
|
|
|
using DepartmentContract.Services.IGenericEntityService;
|
|
|
|
|
using DepartmentContract.ViewModels;
|
2022-12-19 22:12:03 +04:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using ToolsModule.ManagmentDependency;
|
2022-03-20 10:10:44 +04:00
|
|
|
|
using ToolsModule.ManagmentEntity;
|
2022-12-19 22:12:03 +04:00
|
|
|
|
using ToolsModule.ManagmentExtension;
|
2022-03-20 10:10:44 +04:00
|
|
|
|
using ToolsModule.ManagmentSecurity;
|
2022-12-19 22:12:03 +04:00
|
|
|
|
using ToolsOffice.Interfaces;
|
|
|
|
|
using ToolsOffice.Interfaces.Word;
|
|
|
|
|
using ToolsOffice.Interfaces.Word.Models;
|
|
|
|
|
using ToolsOffice.Interfaces.Word.Models.Cases;
|
2022-03-19 22:48:13 +04:00
|
|
|
|
|
|
|
|
|
namespace DepartmentBusinessLogic.BusinessLogics.GenericBusinessLogic
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Логика работы с учебными группами
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class StudentGroupBusinessLogic : GenericBusinessLogic<StudentGroupGetBindingModel, StudentGroupSetBindingModel, StudentGroupListViewModel, StudentGroupViewModel>, IStudentGroupLogic
|
2022-12-19 22:12:03 +04:00
|
|
|
|
{
|
|
|
|
|
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, 2.5);
|
|
|
|
|
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, 2.5);
|
|
|
|
|
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 PageSizes("А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;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-03-19 22:48:13 +04:00
|
|
|
|
}
|