ISEbd-21_Agliullov.D.A._Con.../ConfectionaryBusinessLogic/ReportLogic.cs

135 lines
4.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 ConfectioneryBusinessLogic.OfficePackage.HelperModels;
using ConfectioneryBusinessLogic.OfficePackage;
using ConfectioneryContracts.BindingModels;
using ConfectioneryContracts.BusinessLogicsContracts;
using ConfectioneryContracts.SearchModels;
using ConfectioneryContracts.StoragesContract;
using ConfectioneryContracts.ViewModels;
namespace ConfectioneryBusinessLogic
{
public class ReportLogic : IReportLogic
{
private readonly IPastryStorage _pastryStorage;
private readonly IOrderStorage _orderStorage;
private readonly IShopStorage _shopStorage;
private readonly AbstractSaveToExcel _saveToExcel;
private readonly AbstractSaveToWord _saveToWord;
private readonly AbstractSaveToPdf _saveToPdf;
public ReportLogic(IPastryStorage PastryStorage, IOrderStorage orderStorage, IShopStorage shopStorage,
AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
{
_pastryStorage = PastryStorage;
_orderStorage = orderStorage;
_shopStorage = shopStorage;
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
}
/// <summary>
/// Получение списка магазинов с изделиями
/// </summary>
/// <returns></returns>
public List<ReportShopPastrytViewModel> GetShopPastries()
{
var shops = _shopStorage.GetFullList();
var pastries = _pastryStorage.GetFullList();
var list = new List<ReportShopPastrytViewModel>();
foreach (var shop in shops)
{
var record = new ReportShopPastrytViewModel
{
ShopName = shop.Name,
Pastries = new List<Tuple<string, int>>(),
TotalCount = 0
};
foreach (var pastry in pastries)
{
if (shop.Pastries.ContainsKey(pastry.Id))
{
record.Pastries.Add(new(pastry.PastryName, shop.Pastries[pastry.Id].Item2));
record.TotalCount += shop.Pastries[pastry.Id].Item2;
}
}
record.Workload = record.TotalCount / (double)shop.MaxCountPastries;
list.Add(record);
}
return list;
}
/// <summary>
/// Получение списка заказов за определенный период
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public List<ReportOrdersViewModel> GetOrders(ReportBindingModel model)
{
return _orderStorage.GetFullList()
.GroupBy(x => x.DateCreate.Date)
.Select(x => new ReportOrdersViewModel
{
Date = x.Key,
Count = x.Count(),
Sum = x.Sum(y => y.Sum)
}).ToList();
}
/// <summary>
/// Сохранение магазинов в файл-Word
/// </summary>
/// <param name="model"></param>
public void SaveShopsToWordFile(ReportBindingModel model)
{
_saveToWord.CreateDoc(new WordInfo
{
FileName = model.FileName,
Title = "Список магазинов",
Shops = _shopStorage.GetFullList()
});
}
/// <summary>
/// Сохранение магазинов с указаеним продуктов в файл-Excel
/// </summary>
/// <param name="model"></param>
public void SaveShopPastryToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfo
{
FileName = model.FileName,
Title = "Список магазинов",
ShopPastries = GetShopPastries()
});
}
/// <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)
});
}
}
}