using BankYouBankruptBusinessLogic.OfficePackage; using BankYouBankruptBusinessLogic.OfficePackage.HelperModels; using BankYouBankruptContracts.BindingModels; using BankYouBankruptContracts.BusinessLogicsContracts; using BankYouBankruptContracts.SearchModels; using BankYouBankruptContracts.StoragesContracts; using BankYouBankruptContracts.ViewModels; using BankYouBankruptContracts.ViewModels.Client.Default; using BankYouBankruptDataModels.Enums; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BankYouBankruptBusinessLogic.BusinessLogics { public class ReportCashierLogic : IReportCashierLogic { private readonly IMoneyTransferStorage _moneyTransferStorage; private readonly ICashWithdrawalStorage _cashWithdrawalStorage; private readonly IClientStorage _clientStorage; private readonly IDebitingStorage _debitingStorage; private readonly ICardStorage _cardStorage; private readonly AbstractSaveToExcel _saveToExcel; private readonly AbstractSaveToWord _saveToWord; private readonly AbstractSaveToPdf _saveToPdf; //инициализируем поля класса через контейнер public ReportCashierLogic(IMoneyTransferStorage moneyTransferStorage, ICashWithdrawalStorage cashWithdrawalStorage, IClientStorage clientStorage, AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf, IDebitingStorage debitingStorage, ICardStorage cardStorage) { _moneyTransferStorage = moneyTransferStorage; _cashWithdrawalStorage = cashWithdrawalStorage; _saveToExcel = saveToExcel; _saveToWord = saveToWord; _saveToPdf = saveToPdf; _clientStorage = clientStorage; _debitingStorage = debitingStorage; _cardStorage = cardStorage; } //формирование списка переводов между счетами за период public List? GetMoneyTransfers(ReportBindingModel model) { return _moneyTransferStorage.GetFilteredList(new MoneyTransferSearchModel { ClientId = model.ClientId, DateFrom = model.DateFrom, DateTo = model.DateTo}) .Select(x => new ReportCashierViewModel { OperationId = x.Id, DateComplite = x.DateOperation, AccountPayeeNumber = x.AccountPayeeNumber, AccountSenderNumber = x.AccountSenderNumber, SumOperation = x.Sum }) .ToList(); } //формирование списка выдаци наличных со счёта за период public List? GetCashWithrawals(ReportBindingModel model) { return _cashWithdrawalStorage.GetFilteredList(new CashWithdrawalSearchModel { ClientId = model.ClientId, DateFrom = model.DateFrom, DateTo = model.DateTo }) .Select(x => new ReportCashierViewModel { OperationId = x.Id, DebitingId = x.DebitingId, AccountPayeeNumber = x.AccountNumber, DateComplite = x.DateOperation, SumOperation = x.Sum }) .ToList(); } //формирование списка выдаци наличных со счёта за период public List? GetDebitings(ReportBindingModel model) { List CardIdList = new(); var list = _cardStorage.GetFilteredList(new CardSearchModel { AccountId = model.AccountId }); foreach(var index in list) { CardIdList.Add(index.Id); } List totalList = new(); foreach(var index in CardIdList) { var result = _debitingStorage.GetFilteredList(new DebitingSearchModel { CardId = index }); totalList.AddRange(result); } return totalList; } //формирование полного имени клиента для отчёта public string GetFullName(ReportBindingModel model) { var client = _clientStorage.GetElement(new ClientSearchModel { Id = model.ClientId }); return client.Surname + " " + client.Name + " " + client.Patronymic; } //Сохранение мороженных в файл-Word public void SaveAccountsToWordFile(ReportBindingModel model) { _saveToWord.CreateDoc(new WordInfo { FileName = model.FileName, Title = "Заявки на снятия со счёта", Debiting = GetDebitings(model) }, OfficeOperationEnum.Для_кассира); } //Сохранение заготовок с указаеним изделий в файл-Excel public void SaveAccountsToExcelFile(ReportBindingModel model) { _saveToExcel.CreateReport(new ExcelInfo { FileName = model.FileName, Title = "Заявки на счёт", Debiting = GetDebitings(model) }, OfficeOperationEnum.Для_кассира); } //Сохранение заказов в файл-Pdf public ReportCashierViewModelForHTML SaveAccountsToPdfFile(ReportBindingModel model) { var listMoneyTransfers = GetMoneyTransfers(model); var listCashWithdrawals = GetCashWithrawals(model); _saveToPdf.CreateDoc(new PdfInfo { ForClient = false, FileName = model.FileName, FullClientName = GetFullName(model), Title = "Отчёт по операциям начислений и переводов между счетами", DateFrom = model.DateFrom!.Value, DateTo = model.DateTo!.Value, ReportMoneyTransfer = listMoneyTransfers, ReportCashWithdrawal = listCashWithdrawals }); //возврат полученных списков для отображения на вебе return new ReportCashierViewModelForHTML { ReportCashWithdrawal = listCashWithdrawals, ReportMoneyTransfer = listMoneyTransfers }; } } }