ProjectLib/ProjectLibrary/Reports/DocReport.cs

89 lines
3.2 KiB
C#
Raw Normal View History

2024-12-19 15:31:39 +04:00
using Microsoft.Extensions.Logging;
using ProjectLibrary.Repositores;
using ProjectLibrary.Repositories;
using ProjectLibrary.Repositories.Implementations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectLibrary.Reports;
public class DocReport
{
private readonly IBookRepository _bookRepository;
private readonly IReaderRepository _readerRepository;
private readonly ITicketExtensionsRepository _ticketExtensionsRepository;
private readonly ILogger<DocReport> _logger;
public DocReport(IBookRepository bookRepository, IReaderRepository readerRepository,
ITicketExtensionsRepository ticketExtensionsRepository, ILogger<DocReport> logger)
{
_bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository));
_readerRepository = readerRepository ?? throw new ArgumentNullException(nameof(readerRepository));
_ticketExtensionsRepository = ticketExtensionsRepository ?? throw new ArgumentNullException(nameof(ticketExtensionsRepository));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public bool CreateDoc(string filePath, bool includeBooks, bool includeReaders, bool includeTicketExtensions)
{
try
{
var builder = new WordBuilder(filePath).AddHeader("Документ со справочниками");
if (includeBooks)
{
builder.AddParagraph("Книги").AddTable([2400, 2400, 1200], GetBooks());
}
if (includeReaders)
{
builder.AddParagraph("Читатели").AddTable([2400, 1200, 1200], GetReaders());
}
if (includeTicketExtensions)
{
builder.AddParagraph("Библиотеки").AddTable([2400, 2400, 2400], GetTicketExtensions());
}
builder.Build();
return true;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при формировании документа");
return false;
}
}
private List<string[]> GetBooks()
{
return [
["Автор", "Название", "Тип книги"],
.. _bookRepository
.ReadBooks()
.Select(x => new string[] { x.Author, x.Name, x.TypeBookID.ToString()}),
];
}
private List<string[]> GetReaders()
{
return [
["ФИО читателя", "Билет читателя", "Дата регистрации"],
.. _readerRepository
.ReadReaders()
.Select(x => new string[] { x.Name, x.ReaderTicket.ToString(), x.RegistrationDateRT.ToString()}),
];
}
private List<string[]> GetTicketExtensions()
{
return [
["ID Читателя", "Последняя дата обновления", "Следующая дата обновления"],
.. _ticketExtensionsRepository
.ReadTicketExtensions()
.Select(x => new string[] {x.ReaderID.ToString(), x.LastUpdateDate.ToString(), x.NextUpdateDate.ToString()}),
];
}
}