PIbd-21_Balberova_D.N._Sush.../SushiBar/SushiBarBusinessLogic/BusinessLogics/ReportLogic.cs
2023-03-23 21:06:58 +04:00

217 lines
7.6 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 SushiBarBusinessLogic.OfficePackage.HelperModels;
using SushiBarBusinessLogic.OfficePackage;
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarContracts.SearchModels;
using SushiBarContracts.StoragesContracts;
using SushiBarContracts.ViewModels;
namespace SushiBarBusinessLogic.BusinessLogics
{
public class ReportLogic : IReportLogic
{
private readonly ISushiStorage _sushiStorage;
private readonly IOrderStorage _orderStorage;
private readonly IShopStorage _shopStorage;
private readonly AbstractSaveToExcel _saveToExcel;
private readonly AbstractSaveToWord _saveToWord;
private readonly AbstractSaveToPdf _saveToPdf;
public ReportLogic(ISushiStorage productStorage, IOrderStorage orderStorage,
AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf, IShopStorage shopStorage)
{
_sushiStorage = productStorage;
_orderStorage = orderStorage;
_shopStorage = shopStorage;
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
}
/// <summary>
/// Получение списка ингредиентов с указанием, в каких суши используются
/// </summary>
/// <returns></returns>
public List<ReportSushiIngredientViewModel> GetSushiIngredient()
{
var listSushi = _sushiStorage.GetFullList();
var list = new List<ReportSushiIngredientViewModel>();
foreach (var sushi in listSushi)
{
var record = new ReportSushiIngredientViewModel
{
SushiName = sushi.SushiName,
Ingredients = new(),
TotalCount = 0
};
foreach (var ingredient in sushi.SushiIngredients)
{
record.Ingredients.Add(new(ingredient.Value.Item1.IngredientName, ingredient.Value.Item2));
record.TotalCount += ingredient.Value.Item2;
}
list.Add(record);
}
return list;
}
/// <summary>
/// Получение списка суши с указанием, в каких магазинах используются
/// </summary>
/// <returns></returns>
public List<ReportShopSushiViewModel> GetShopSushi()
{
var shops = _shopStorage.GetFullList();
var list = new List<ReportShopSushiViewModel>();
foreach (var shop in shops)
{
var record = new ReportShopSushiViewModel
{
ShopName = shop.ShopName,
ListSushi = new(),
TotalCount = 0
};
foreach (var sushi in shop.ListSushi)
{
record.ListSushi.Add(new(sushi.Value.Item1.SushiName, sushi.Value.Item2));
record.TotalCount += sushi.Value.Item2;
}
list.Add(record);
}
return list;
}
/// <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,
SushiName = x.SushiName,
OrderStatus = x.Status.ToString(),
Sum = x.Sum
})
.ToList();
}
/// <summary>
/// Получение списка заказов, сгруппированных по дате
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public List<ReportOrdersGroupedByDateViewModel> GetOrdersGroupedByDate()
{
return _orderStorage.GetFullList()
.GroupBy(x => x.DateCreate.Date)
.Select(x => new ReportOrdersGroupedByDateViewModel
{
DateCreate = x.Key,
Count = x.Count(),
Sum = x.Sum(x => x.Sum)
})
.ToList();
}
/// <summary>
/// Сохранение суши в файл-Word
/// </summary>
/// <param name="model"></param>
public void SaveListSushiToWordFile(ReportBindingModel model)
{
_saveToWord.CreateDoc(new WordInfo
{
FileName = model.FileName,
Title = "Список суши",
ListSushi = _sushiStorage.GetFullList()
});
}
/// <summary>
/// Сохранение магазинов в файл-Word
/// </summary>
/// <param name="model"></param>
public void SaveShopsToWordFile(ReportBindingModel model)
{
_saveToWord.CreateShopsDoc(new WordInfo
{
FileName = model.FileName,
Title = "Список магазинов",
Shops = _shopStorage.GetFullList()
});
}
/// <summary>
/// Сохранение ингредиентов с указаеним суши в файл-Excel
/// </summary>
/// <param name="model"></param>
public void SaveSushiIngredientToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfo
{
FileName = model.FileName,
Title = "Список суши",
SushiIngredients = GetSushiIngredient()
});
}
/// <summary>
/// Сохранение суши с указаеним магазина в файл-Excel
/// </summary>
/// <param name="model"></param>
public void SaveShopSushiToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateShopReport(new ExcelInfo
{
FileName = model.FileName,
Title = "Список магазинов",
ShopListSushi = GetShopSushi()
});
}
/// <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)
});
}
/// <summary>
/// Сохранение заказов в файл-Pdf
/// </summary>
/// <param name="model"></param>
public void SaveOrdersGroupedByDateToPdfFile(ReportBindingModel model)
{
_saveToPdf.CreateOrdersGroupedByDateDoc(new PdfInfo
{
FileName = model.FileName,
Title = "Список заказов",
OrdersGroupedByDate = GetOrdersGroupedByDate()
});
}
}
}