PIbd-23_Baryshev_D.A._Garage/ProjectGarage/Reports/DocReport.cs
2024-12-18 01:56:55 +04:00

115 lines
3.8 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 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() }),
];
}
}