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 _logger; public DocReport(IFuelRepository fuelRepository, IDriverRepository driverRepository, IRouteRepository routeRepository,ITruckRepository truckRepository,IConnectionString connectionstring, ILogger 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 GetTrucks() { return [ ["Тип топлива", "Название топлива", "Цена"], .. _fuelRepository .ReadFuels() .Select(x => new string[] { x.FuelType.ToString(), x.FuelName, x.Price.ToString() }), ]; } private List GetFuels() { return [ ["Тип топлива", "Название топлива", "Цена"], .. _fuelRepository .ReadFuels() .Select(x => new string[] { x.FuelType.ToString(), x.FuelName, x.Price.ToString() }), ]; } private List GetDrivers() { return [ ["Имя", "Фамилия", "Номера машины"], .. _driverRepository .ReadDrivers() .Select(x => new string[] { x.Fname, x.Lname, x.TruckId.ToString() }), ]; } private List GetRoutes() { return [ ["Начальная т.", "Конечная т.", "Протяженность"], .. _routeRepository .ReadRoute() .Select(x => new string[] { x.StartP, x.FinalP, x.Length.ToString() }), ]; } }