106 lines
4.7 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 ProjectOptika.Scripts.Repositories;
namespace ProjectOptika.Scripts.Reports
{
internal class DocReport
{
private readonly IAccessoriesRepository _accessoriesRepository;
private readonly IClientRepositiory _clientRepositiory;
private readonly IEmployeeRepository _employeeRepository;
private readonly ISpecificationsRepository _specificationsRepository;
private readonly ILogger<DocReport> _logger;
public DocReport(IAccessoriesRepository accessoriesRepository, IClientRepositiory clientRepositiory, IEmployeeRepository employeeRepository, ISpecificationsRepository specificationsRepository,
ILogger<DocReport> logger)
{
_accessoriesRepository = accessoriesRepository ??
throw new ArgumentNullException(nameof(accessoriesRepository));
_clientRepositiory = clientRepositiory ??
throw new ArgumentNullException(nameof(clientRepositiory));
_employeeRepository = employeeRepository ??
throw new ArgumentNullException(nameof(employeeRepository));
_specificationsRepository = specificationsRepository ??
throw new ArgumentNullException(nameof(specificationsRepository));
_logger = logger ??
throw new ArgumentNullException(nameof(logger));
}
public bool CreateDoc(string filePath, bool includeAccessories, bool includeSpecification,
bool includeEmployees, bool includeClients)
{
try
{
var builder = new WordBuilder(filePath).AddHeader("Документ со справочниками");
if (includeAccessories)
{
builder.AddParagraph("Аксессуары")
.AddTable([2400, 2400, 2400, 1200, 1200, 1200, 2400],
GetAccessories());
}
if (includeSpecification)
{
builder.AddParagraph("Характеристики")
.AddTable([1200, 1200, 2400, 1200, 1200, 2400], GetSpecification());
}
if (includeEmployees)
{
builder.AddParagraph("Сотрудники")
.AddTable([2400, 2400, 2400, 2400], GetEmploeyees());
}
if (includeClients)
{
builder.AddParagraph("Клиент")
.AddTable([2400, 2400, 2400, 2400, 2400], GetClients());
}
builder.Build();
return true;
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка при формировании документа");
return false;
}
}
private List<string[]> GetAccessories()
{
return [
["Название", "Бренд", "Стоимость", "Наличие в магазине", "Наличие на складе", "Дата доставки", "Тип"],
.. _accessoriesRepository.GetAccessories()
.Select(x => new string[] { x.Name, x.Brand, x.Cost.ToString(), x.StockAvailability.ToString(), x.AvailabilityStore.ToString(), x.DeliveryDate.ToString(), x.CategoryName.ToString() }),
];
}
private List<string[]> GetSpecification()
{
return [
["ID аксессуара", "Материал", "Астигматизм", "Диоптрийность", "Страна изготовителя", "Время доставки"],
.. _specificationsRepository
.GetSpecifications()
.Select(x => new string[] { x.AccessoriesID.ToString(), x.Material, x.Astigmatism, x.Dioptericity, x.OriginCountry, x.TimeProduction.ToString()}),
];
}
private List<string[]> GetEmploeyees()
{
return [
["Имя", "Отчество", "Фамилия", "Должность"],
.. _employeeRepository
.GetEmployees()
.Select(x => new string[] { x.FirstName, x.SecondName, x.Surname, x.PositionEmployee.ToString() }),
];
}
private List<string[]> GetClients()
{
return [
["Имя", "Отчество", "Фамилия", "Номер телефона", "Тип клиента"],
.. _clientRepositiory
.GetClients()
.Select(x => new string[] { x.FirstName, x.SecondName, x.Surname, x.PhoneNumber, x.ClientType.ToString() }),
];
}
}
}