ПИбд-21. Басалов А.Д. Лабораторная 3 #3 #3

Closed
Tonby73 wants to merge 14 commits from LabWork_3 into LabWork_2
Showing only changes of commit 40a5dea3d2 - Show all commits

View File

@ -0,0 +1,101 @@
using Microsoft.Extensions.Logging;
using ProjectEmployeeAgency.Repositories;
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Reports;
internal class DocReport
{
private readonly IRouteRepository _routeRepository;
private readonly IEmployeeRepository _employeeRepository;
private readonly IClientRepository _clientRepository;
private readonly ILogger<DocReport> _logger;
public DocReport(IRouteRepository routeRepository, IClientRepository clientRepository,
IEmployeeRepository employeeRepository, ILogger<DocReport> logger)
{
_routeRepository = routeRepository ??
throw new ArgumentNullException(nameof(routeRepository));
_clientRepository = clientRepository ??
throw new ArgumentNullException(nameof(clientRepository));
_employeeRepository = employeeRepository ??
throw new ArgumentNullException(nameof(employeeRepository));
_logger = logger ??
throw new ArgumentNullException(nameof(logger));
}
public bool CreateDoc(string filePath, bool includeClients, bool includeEmployees, bool includeRoutes)
{
try
{
var builder = new WordBuilder(filePath)
.AddHeader("Документ со справочниками");
if (includeClients)
{
builder.AddParagraph("Клиенты")
.AddTable([1200, 2400, 1200], GetClients());
}
if (includeEmployees)
{
builder.AddParagraph("Сотрудники")
.AddTable([2400], GetEmployees());
}
if (includeRoutes)
{
builder.AddParagraph("Маршруты")
.AddTable([2400, 2400, 2400], GetRoutes());
}
builder.Build();
return true;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при формировании документа");
return false;
}
}
private List<string[]> GetClients()
{
return [
["Полное имя", "Дата Рождения", "Номер Телефона", "Статус Клиента", "Денежный Счет"],
.. _clientRepository
.ReadClients()
.Select(x => new string[]{x.FullName,x.BirthDate.ToString(), x.PhoneNumber, x.ClientStatus.ToString(), x.Money.ToString()}),
];
}
private List<string[]> GetEmployees()
{
return [
["Полное имя", "Должность"],
.. _employeeRepository
.ReadEmployees()
.Select(x => new string[]{x.FullName,x.EmployeeJob.ToString()}),
];
}
private List<string[]> GetRoutes()
{
return [
["Место отправления", "Место прибытя", "Продолжительность"],
.. _routeRepository
.ReadRoutes()
.Select(x => new string[]{x.Destination,x.Departure, x.Duration.ToString()}),
];
}
}