PIbd-23_Baryshev_D.A._Garage/ProjectGarage/Reports/DocReport.cs

115 lines
3.8 KiB
C#
Raw Normal View History

2024-12-18 01:56:55 +04:00
using Microsoft.Extensions.Logging;
using ProjectGarage.Repositories;
using ProjectGarage.Repositories.Implementations;
using Serilog.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectGarage.Reports;
public class DocReport
{
private readonly IFuelRepository _fuelRepository;
private readonly IDriverRepository _driverRepository;
private readonly IRouteRepository _routeRepository;
private readonly ITruckRepository _truckRepository;
private readonly ILogger<DocReport> _logger;
public DocReport(IFuelRepository fuelRepository, IDriverRepository driverRepository,
IRouteRepository routeRepository,ITruckRepository truckRepository,IConnectionString connectionstring,
ILogger<DocReport> logger)
{
_fuelRepository = fuelRepository ?? throw new ArgumentNullException(nameof(fuelRepository));
_driverRepository = driverRepository ?? throw new ArgumentNullException(nameof(driverRepository));
_routeRepository = routeRepository ?? throw new ArgumentNullException(nameof(routeRepository));
_truckRepository = truckRepository ?? throw new ArgumentNullException(nameof(truckRepository));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public bool CreateDoc(string filePath, bool includeFuels, bool includeDrivers,
bool includeRoutes, bool includeTrucks)
{
try
{
var builder = new WordBuilder(filePath)
.AddHeader("Документ со справочниками");
if (includeTrucks)
{
builder.AddParagraph("Фуры")
.AddTable([2400, 2400, 2400],
GetTrucks());
}
if (includeFuels)
{
builder.AddParagraph("Топлива")
.AddTable([2400, 1200, 1200],
GetFuels());
}
if (includeDrivers)
{
builder.AddParagraph("Водители")
.AddTable([2400, 2400, 2400],
GetDrivers());
}
if (includeRoutes)
{
builder.AddParagraph("Маршруты")
.AddTable([2400, 2400, 2400],
GetRoutes());
}
builder.Build();
return true;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при формировании документа");
return false;
}
}
private List<string[]> GetTrucks()
{
return [
["Тип топлива", "Название топлива", "Цена"],
.. _fuelRepository
.ReadFuels()
.Select(x => new string[] { x.FuelType.ToString(), x.FuelName, x.Price.ToString() }),
];
}
private List<string[]> GetFuels()
{
return [
["Тип топлива", "Название топлива", "Цена"],
.. _fuelRepository
.ReadFuels()
.Select(x => new string[] { x.FuelType.ToString(), x.FuelName, x.Price.ToString() }),
];
}
private List<string[]> GetDrivers()
{
return [
["Имя", "Фамилия", "Номера машины"],
.. _driverRepository
.ReadDrivers()
.Select(x => new string[] { x.Fname, x.Lname, x.TruckId.ToString() }),
];
}
private List<string[]> GetRoutes()
{
return [
["Начальная т.", "Конечная т.", "Протяженность"],
.. _routeRepository
.ReadRoute()
.Select(x => new string[] { x.StartP, x.FinalP, x.Length.ToString() }),
];
}
}