2024-03-25 10:22:01 +04:00

144 lines
5.3 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 PizzeriaBusinessLogic.OfficePackage.HelperModels;
using PizzeriaBusinessLogic.OfficePackage;
using PizzeriaContracts.BindingModels;
using PizzeriaContracts.BusinessLogicsContracts;
using PizzeriaContracts.SearchModels;
using PizzeriaContracts.StoragesContracts;
using PizzeriaContracts.ViewModels;
namespace PizzeriaBusinessLogic.BusinessLogics
{
/// <summary>
/// Реализация интерфейса бизнес-логики для создания отчетов
/// </summary>
public class ReportLogic : IReportLogic
{
/// <summary>
/// Хранилище компонентов
/// </summary>
private readonly IComponentStorage _componentStorage;
/// <summary>
/// Хранилище изделий
/// </summary>
private readonly IPizzaStorage _pizzaStorage;
/// <summary>
/// Хранилище заказов
/// </summary>
private readonly IOrderStorage _orderStorage;
/// <summary>
/// Взаимодействие с отчетами в Excel-формате
/// </summary>
private readonly AbstractSaveToExcel _saveToExcel;
/// <summary>
/// Взаимодействие с отчетами в Word-формате
/// </summary>
private readonly AbstractSaveToWord _saveToWord;
/// <summary>
/// Взаимодействие с отчетами в Pdf-формате
/// </summary>
private readonly AbstractSaveToPdf _saveToPdf;
/// <summary>
/// Конструктор
/// </summary>
/// <param name="pizzaStorage"></param>
/// <param name="componentStorage"></param>
/// <param name="orderStorage"></param>
/// <param name="saveToExcel"></param>
/// <param name="saveToWord"></param>
/// <param name="saveToPdf"></param>
public ReportLogic(IPizzaStorage pizzaStorage, IComponentStorage componentStorage, IOrderStorage orderStorage,
AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
{
_pizzaStorage = pizzaStorage;
_componentStorage = componentStorage;
_orderStorage = orderStorage;
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
}
/// <summary>
/// Получение списка изделий с расшифровкой по компонентам
/// </summary>
/// <returns></returns>
public List<ReportPizzaComponentViewModel> GetPizzaComponents()
{
return _pizzaStorage.GetFullList().Select(x => new ReportPizzaComponentViewModel
{
PizzaName = x.PizzaName,
Components = x.PizzaComponents.Select(x => (x.Value.Item1.ComponentName, x.Value.Item2)).ToList(),
TotalCount = x.PizzaComponents.Select(x => x.Value.Item2).Sum()
}).ToList();
}
/// <summary>
/// Получение списка заказов за определенный период
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public List<ReportOrdersViewModel> GetOrders(ReportBindingModel model)
{
return _orderStorage.GetFilteredList(new OrderSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo })
.Select(x => new ReportOrdersViewModel
{
Id = x.Id,
DateCreate = x.DateCreate,
PizzaName = x.PizzaName,
Sum = x.Sum,
Status = x.Status.ToString()
})
.ToList();
}
/// <summary>
/// Сохранение изделий в Word-файл
/// </summary>
/// <param name="model"></param>
public void SavePizzasToWordFile(ReportBindingModel model)
{
_saveToWord.CreateDoc(new WordInfo
{
FileName = model.FileName,
Title = "Список пицц",
Pizzas = _pizzaStorage.GetFullList()
});
}
/// <summary>
/// Сохранение изделий с расшифровкой по компонентам в Excel-файл
/// </summary>
/// <param name="model"></param>
public void SavePizzaComponentToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfo
{
FileName = model.FileName,
Title = "Список пицц",
PizzaComponents = GetPizzaComponents()
});
}
/// <summary>
/// Сохранение заказов в Pdf-файл
/// </summary>
/// <param name="model"></param>
public void SaveOrdersToPdfFile(ReportBindingModel model)
{
_saveToPdf.CreateDoc(new PdfInfo
{
FileName = model.FileName,
Title = "Список заказов",
DateFrom = model.DateFrom!.Value,
DateTo = model.DateTo!.Value,
Orders = GetOrders(model)
});
}
}
}