PIbd-21_RazubaevSM_Plumbing.../PlumbingRepair/PlumbingRepairBusinessLogic/BusinessLogics/ReportLogic.cs

200 lines
6.9 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 PlumbingRepairBusinessLogic.OfficePackage;
using PlumbingRepairBusinessLogic.OfficePackage.HelperModels;
using PlumbingRepairContracts.BindingModels;
using PlumbingRepairContracts.BusinessLogicsContracts;
using PlumbingRepairContracts.SearchModels;
using PlumbingRepairContracts.StoragesContracts;
using PlumbingRepairContracts.ViewModels;
namespace PlumbingRepairBusinessLogic.BusinessLogics
{
public class ReportLogic : IReportLogic
{
private readonly IComponentStorage _componentStorage;
private readonly IWorkStorage _workStorage;
private readonly IOrderStorage _orderStorage;
private readonly IShopStorage _shopStorage;
private readonly AbstractSaveToExcel _saveToExcel;
private readonly AbstractSaveToWord _saveToWord;
private readonly AbstractSaveToPdf _saveToPdf;
public ReportLogic(IWorkStorage workStorage, IComponentStorage componentStorage, IOrderStorage orderStorage, IShopStorage shopStorage,
AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
{
_workStorage = workStorage;
_componentStorage = componentStorage;
_orderStorage = orderStorage;
_shopStorage = shopStorage;
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
}
/// <summary>
/// Получение списка компонент с указанием, в каких изделиях используются
/// </summary>
/// <returns></returns>
public List<ReportWorkComponentViewModel> GetWorkComponent()
{
var works = _workStorage.GetFullList();
var list = new List<ReportWorkComponentViewModel>();
foreach (var work in works)
{
var record = new ReportWorkComponentViewModel
{
WorkName = work.WorkName,
Components = new List<(string Component, int count)>(),
TotalCount = 0
};
foreach (var component in work.WorkComponents)
{
record.Components.Add(new (component.Value.Item1.ComponentName, component.Value.Item2));
record.TotalCount += component.Value.Item2;
}
list.Add(record);
}
return list;
}
public List<ReportShopWorkViewModel> GetShopWork()
{
var shops = _shopStorage.GetFullList();
var list = new List<ReportShopWorkViewModel>();
foreach (var shop in shops)
{
var record = new ReportShopWorkViewModel
{
ShopName = shop.ShopName,
Works = new List<(string Work, int count)>(),
TotalCount = 0
};
foreach (var work in shop.ShopWorks)
{
record.Works.Add(new(work.Value.Item1.WorkName, work.Value.Item2));
record.TotalCount += work.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,
WorkName = x.WorkName,
Status = x.Status.ToString(),
Sum = x.Sum
})
.ToList();
}
public List<ReportOrderByDateViewModel> GetOrdersByDate()
{
return _orderStorage.GetFullList()
.GroupBy(x => x.DateCreate.Date)
.Select(x => new ReportOrderByDateViewModel
{
DateCreate = x.Key,
Count = x.Count(),
Sum = x.Sum(x=> x.Sum)
})
.ToList();
}
/// <summary>
/// Сохранение компонент в файл-Word
/// </summary>
/// <param name="model"></param>
public void SaveComponentsToWordFile(ReportBindingModel model)
{
_saveToWord.CreateDoc(new WordInfo
{
FileName = model.FileName,
Title = "Список работ",
Works = _workStorage.GetFullList()
});
}
public void SaveShopsToWordFile(ReportBindingModel model)
{
_saveToWord.CreateDocShopTable(new WordInfoShopTable
{
FileName = model.FileName,
Title = "Список магазинов",
Shops = _shopStorage.GetFullList()
});
}
/// <summary>
/// Сохранение компонент с указаеним продуктов в файл-Excel
/// </summary>
/// <param name="model"></param>
public void SaveWorkComponentToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfo
{
FileName = model.FileName,
Title = "Список работ",
WorkComponents = GetWorkComponent()
});
}
public void SaveShopWorkToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateReportShop(new ExcelInfoShop
{
FileName = model.FileName,
Title = "Список магазинов",
ShopWorks = GetShopWork()
});
}
/// <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)
});
}
public void SaveOrdersByDateToPdfFile(ReportBindingModel model)
{
_saveToPdf.CreateDocOrdersByDate(new PdfInfoOrdersByDate
{
FileName = model.FileName,
Title = "Список заказов",
Orders = GetOrdersByDate()
});
}
}
}