171 lines
5.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 FurnitureAssemblyBusinessLogic.OfficePackage;
using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.BusinessLogicContracts;
using FurnitureAssemblyContracts.SearchModels;
using FurnitureAssemblyContracts.StorageContracts;
using FurnitureAssemblyContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FurnitureAssemblyBusinessLogic.BusinessLogics
{
public class ReportLogic : IReportLogic
{
private readonly IFurnitureModuleStorage _furnitureModuleStorage;
private readonly ISetStorage _setStorage;
private readonly IOrderInfoStorage _orderInfoStorage;
private readonly IOrderStorage _orderStorage;
private readonly AbstractSaveToExcel _saveToExcel;
private readonly AbstractSaveToWord _saveToWord;
private readonly AbstractSaveToPdf _saveToPdf;
public ReportLogic(ISetStorage setStorage, IFurnitureModuleStorage furnitureModuleStorage, IOrderInfoStorage orderInfoStorage,
IOrderStorage orderStorage, AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
{
_setStorage = setStorage;
_furnitureModuleStorage = furnitureModuleStorage;
_orderInfoStorage = orderInfoStorage;
_orderStorage = orderStorage;
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
}
/// <summary>
/// Получение списка мебельных модулей с указанием, в каких гарнитурах используются
/// </summary>
/// <returns></returns>
public List<ReportSetFurnitureModuleViewModel> GetSetFurnitureModule()
{
var furnitureModules = _furnitureModuleStorage.GetFullList();
var sets = _setStorage.GetFullList();
var list = new List<ReportSetFurnitureModuleViewModel>();
foreach (var set in sets)
{
var record = new ReportSetFurnitureModuleViewModel
{
SetName = set.Name,
FurnitureModules = new List<(string, int)>(),
TotalCount = 0
};
foreach (var furnitureModule in furnitureModules)
{
if (set.SetFurnitureModules.ContainsKey(furnitureModule.Id))
{
record.FurnitureModules.Add(new(furnitureModule.Name, set.SetFurnitureModules[furnitureModule.Id].Item2));
record.TotalCount += set.SetFurnitureModules[furnitureModule.Id].Item2;
}
}
list.Add(record);
}
return list;
}
/// <summary>
/// Получение списка заказов за определенный период
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public List<ReportOrdersViewModel> GetOrders(ReportBindingModel model)
{
var orderInfos = _orderInfoStorage
.GetFilteredList(new OrderInfoSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo });
List<int> orderInfoIds = new List<int>();
foreach (var orderInfo in orderInfos)
{
orderInfoIds.Add(orderInfo.Id);
}
var orders = _orderStorage.GetFilteredList(new OrderSearchModel { OrderInfoId = orderInfoIds });
var sets = _setStorage.GetFullList();
var furnitureModules = _furnitureModuleStorage.GetFullList();
var list = new List<ReportOrdersViewModel>();
foreach (var order in orders)
{
var record = new ReportOrdersViewModel
{
Id = order.Id,
SetName = order.SetName,
FurnitureModules = new List<(string, double)>(),
TotalCount = 0
};
foreach (var orderInfo in orderInfos)
{
if (orderInfo.Id == order.OrderInfoId)
{
record = new ReportOrdersViewModel
{
Id = order.Id,
SetName = order.SetName,
DateCreate = orderInfo.DateCreate,
FurnitureModules = new List<(string, double)>(),
TotalCount = 0
};
}
}
foreach (var set in sets)
{
if (set.Id == order.SetId)
{
foreach (var furnitureModule in furnitureModules)
{
if (set.SetFurnitureModules.ContainsKey(furnitureModule.Id))
{
record.FurnitureModules.Add(new(furnitureModule.Name, furnitureModule.Cost));
record.TotalCount += set.SetFurnitureModules[furnitureModule.Id].Item2;
}
}
}
}
list.Add(record);
}
return list;
}
/// <summary>
/// Сохранение компонент в файл-Word
/// </summary>
/// <param name="model"></param>
public void SaveFurnitureModuleToWordFile(ReportBindingModel model)
{
_saveToWord.CreateDoc(new WordInfo
{
FileName = model.FileName,
Title = "Список компонент",
Sets = _setStorage.GetFullList()
});
}
/// <summary>
/// Сохранение компонент с указаеним продуктов в файл-Excel
/// </summary>
/// <param name="model"></param>
public void SaveSetFurnitureModuleToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfo
{
FileName = model.FileName,
Title = "Список компонент",
SetFurnitureModules = GetSetFurnitureModule()
});
}
/// <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)
});
}
}
}