PIbd-21_Markov_D.P._LawFirm/LawFirm/LawFirmBusinessLogic/BusinessLogics/ReportLogic.cs

126 lines
4.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 LawFirmBusinessLogic.OfficePackage;
using LawFirmBusinessLogic.OfficePackage.HelperModels;
using LawFirmContracts.BindingModels;
using LawFirmContracts.BusinessLogicsContracts;
using LawFirmContracts.SearchModels;
using LawFirmContracts.StoragesContracts;
using LawFirmContracts.ViewModels;
namespace LawFirmBusinessLogic.BusinessLogics
{
public class ReportLogic : IReportLogic
{
private readonly IBlankStorage _blankStorage;
private readonly IDocumentStorage _documentStorage;
private readonly IOrderStorage _orderStorage;
private readonly AbstractSaveToExcel _saveToExcel;
private readonly AbstractSaveToWord _saveToWord;
private readonly AbstractSaveToPdf _saveToPdf;
public ReportLogic(IDocumentStorage documentStorage, IBlankStorage
blankStorage, IOrderStorage orderStorage,
AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord,
AbstractSaveToPdf saveToPdf)
{
_documentStorage = documentStorage;
_blankStorage = blankStorage;
_orderStorage = orderStorage;
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
}
/// <summary>
/// Получение списка компонент с указанием, в каких изделиях используются
/// </summary>
/// <returns></returns>
public List<ReportDocumentBlankViewModel> GetDocumentBlank()
{
var blanks = _blankStorage.GetFullList();
var documents = _documentStorage.GetFullList();
var list = new List<ReportDocumentBlankViewModel>();
foreach (var document in documents)
{
var record = new ReportDocumentBlankViewModel
{
DocumentName = document.DocumentName,
Blanks = new List<Tuple<string, int>>(),
TotalCount = 0
};
foreach (var blank in blanks)
{
if (document.DocumentBlanks.ContainsKey(blank.Id))
{
record.Blanks.Add(new Tuple<string, int>(blank.BlankName, document.DocumentBlanks[blank.Id].Item2));
record.TotalCount +=
document.DocumentBlanks[blank.Id].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,
DocumentName = x.DocumentName,
OrderStatus = x.Status.ToString(),
Sum = x.Sum
})
.ToList();
}
/// <summary>
/// Сохранение компонент в файл-Word
/// </summary>
/// <param name="model"></param>
public void SaveBlanksToWordFile(ReportBindingModel model)
{
_saveToWord.CreateDoc(new WordInfo
{
FileName = model.FileName,
Title = "Список бланков",
Blanks = _blankStorage.GetFullList()
});
}
/// <summary>
/// Сохранение продукта с указаеним компонент в файл-Excel
/// </summary>
/// <param name="model"></param>
public void SaveDocumentBlankToExcelFile(ReportBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfo
{
FileName = model.FileName,
Title = "Документы и их бланки",
DocumentBlanks = GetDocumentBlank()
});
}
/// <summary>
/// Сохранение заказов в файл-Pdf
/// </summary>
/// <param name="model"></param>
public void SaveOrdersToPdfFile(ReportBindingModel model)
{
_saveToPdf.CreateDoc(new PdfInfo
{
FileName = model.FileName,
Title = "Список заказов",
DateFrom = DateTime.SpecifyKind(model.DateFrom!.Value, DateTimeKind.Utc),
DateTo = DateTime.SpecifyKind(model.DateTo!.Value, DateTimeKind.Utc),
Orders = GetOrders(model)
});
}
}
}