using BankBusinessLogic.OfficePackage.HelperEnums; using BankBusinessLogic.OfficePackage.HelperModels; using BankDataModels.Enums; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BankBusinessLogic.OfficePackage { public abstract class AbstractSaveToExcel { // Создание отчета. Описание методов ниже public void CreateReport(ExcelInfo info, OfficeOperationEnum operationEnum) { if (operationEnum == OfficeOperationEnum.Между_cчетами) { CreateMoneyTransferExcel(info); } if (operationEnum == OfficeOperationEnum.Пополнение_карт) { CreateCreditingExcel(info); } if (operationEnum == OfficeOperationEnum.Cнятие_с_карты) { CreateDebitingExcel(info); } if (operationEnum == OfficeOperationEnum.Для_кассира) { CreateCashierExcel(info); } } private void CreateMoneyTransferExcel(ExcelInfo info) { CreateExcel(info); // Вставляет заголовок InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = 1, Text = info.Title, StyleInfo = ExcelStyleInfoType.Title }); // Соединяет 3 ячейки для заголовка MergeCells(new ExcelMergeParameters { CellFromName = "A1", CellToName = "C1" }); // Номер строчки в докуметне uint rowIndex = 2; foreach (var mt in info.MoneyTransfer) { // Вставляет номер перевода InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Перевод №" + mt.Id, StyleInfo = ExcelStyleInfoType.Text }); rowIndex++; // Строчка с номером счёта отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Номер счёта отправителя: ", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = mt.AccountSenderNumber, StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; // Строчка с номером счёта получателя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Номер счёта получателя: ", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = mt.AccountPayeeNumber, StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; // Вставляет слово "Сумма перевода" InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Сумма перевода: ", StyleInfo = ExcelStyleInfoType.Text }); // Подсчитывает общее кол-во сумму InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = mt.Sum.ToString(), StyleInfo = ExcelStyleInfoType.Text }); rowIndex++; // Вставляет слово "Сумма перевода" InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Дата операции: ", StyleInfo = ExcelStyleInfoType.Text }); // Подсчитывает общее кол-во переводов InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = mt.DateTransfer.ToString(), StyleInfo = ExcelStyleInfoType.Text }); rowIndex++; } rowIndex++; InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Суммарный объём переводов: ", StyleInfo = ExcelStyleInfoType.Text }); MergeCells(new ExcelMergeParameters { CellFromName = "A" + rowIndex.ToString(), CellToName = "B" + rowIndex.ToString() }); InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = info.MoneyTransfer.Sum(x => x.Sum).ToString(), StyleInfo = ExcelStyleInfoType.Text }); SaveExcel(info); } private void CreateCreditingExcel(ExcelInfo info) { CreateExcel(info); // Вставляет заголовок операции InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = 1, Text = info.Title, StyleInfo = ExcelStyleInfoType.Title }); // Соединяет 3 ячейки для заголовка MergeCells(new ExcelMergeParameters { CellFromName = "A1", CellToName = "E2" }); // Номер строчки в докуметне uint rowIndex = 3; foreach (var cr in info.Crediting) { // Вставляет номер перевода InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Пополнение №" + cr.Id, StyleInfo = ExcelStyleInfoType.Text }); rowIndex++; // Строчка с номером счёта отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Номер карты: ", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = cr.CardNumber, StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; // Строчка с номером счёта получателя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Сумма пополнения: ", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = cr.Sum.ToString(), StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; } rowIndex++; // Формирование списка поступления по каждой карте var dict = new Dictionary(); foreach (var elem in info.Crediting) { if (dict.ContainsKey(elem.CardNumber)) { dict[elem.CardNumber] += elem.Sum; } else { dict[elem.CardNumber] = elem.Sum; } } foreach (var elem in dict) { // Cтрочка с номером счёта получателя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Сумма пополнения на карту №" + elem.Key + ":", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = elem.Value.ToString(), StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; } rowIndex++; InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Суммарный объём пополнений: ", StyleInfo = ExcelStyleInfoType.Text }); MergeCells(new ExcelMergeParameters { CellFromName = "A" + rowIndex.ToString(), CellToName = "B" + rowIndex.ToString() }); InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = info.Crediting.Sum(x => x.Sum).ToString(), StyleInfo = ExcelStyleInfoType.Text }); SaveExcel(info); } private void CreateDebitingExcel(ExcelInfo info) { CreateExcel(info); // Вставляет заголовок InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = 1, Text = info.Title, StyleInfo = ExcelStyleInfoType.Title }); // Соединяет 3 ячейки для заголовка MergeCells(new ExcelMergeParameters { CellFromName = "A1", CellToName = "E2" }); // Номер строчки в докуметне uint rowIndex = 3; foreach (var cr in info.Debiting) { // Вставляет номер перевода InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Снятие №" + cr.Id, StyleInfo = ExcelStyleInfoType.Text }); rowIndex++; // Строчка с номером счёта отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Номер карты: ", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = cr.CardNumber, StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; // Строчка с номером счёта получателя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Сумма снятия: ", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = cr.Sum.ToString(), StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; } rowIndex++; // Формирование списка поступления по каждой карте var dict = new Dictionary(); foreach (var elem in info.Debiting) { if (dict.ContainsKey(elem.CardNumber)) { dict[elem.CardNumber] += elem.Sum; } else { dict[elem.CardNumber] = elem.Sum; } } foreach (var elem in dict) { // Строчка с номером счёта получателя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Сумма снятия с карты №" + elem.Key + ":", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = elem.Value.ToString(), StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; } rowIndex++; InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Суммарный объём снятий: ", StyleInfo = ExcelStyleInfoType.Text }); MergeCells(new ExcelMergeParameters { CellFromName = "A" + rowIndex.ToString(), CellToName = "B" + rowIndex.ToString() }); InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = info.Debiting.Sum(x => x.Sum).ToString(), StyleInfo = ExcelStyleInfoType.Text }); SaveExcel(info); } private void CreateCashierExcel(ExcelInfo info) { CreateExcel(info); // Вставляет заголовок InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = 1, Text = info.Title, StyleInfo = ExcelStyleInfoType.Title }); // Соединяет 3 ячейки для заголовка MergeCells(new ExcelMergeParameters { CellFromName = "A1", CellToName = "E2" }); // Номер строчки в докуметне uint rowIndex = 3; foreach (var cr in info.Debiting) { // Вставляет номер перевода InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Заявка №" + cr.Id, StyleInfo = ExcelStyleInfoType.Text }); rowIndex++; // Строчка с номером счёта получателя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Сумма заявки: ", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка суммы заявки InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = cr.Sum.ToString(), StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; // Строчка с номером счёта получателя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Статус: ", StyleInfo = ExcelStyleInfoType.TextWithBorder }); // Вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = cr.Status.ToString(), StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; //строчка с номером счёта получателя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, Text = "Дата: ", StyleInfo = ExcelStyleInfoType.TextWithBorder }); //вставка номера отправителя InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "C", RowIndex = rowIndex, Text = cr.DateDebit == null ? "В обработке" : cr.DateDebit.ToString(), StyleInfo = ExcelStyleInfoType.TextWithBorder }); rowIndex++; } rowIndex++; InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Суммарный объём открытых заявок на снятие: ", StyleInfo = ExcelStyleInfoType.Text }); MergeCells(new ExcelMergeParameters { CellFromName = "A" + rowIndex.ToString(), CellToName = "C" + rowIndex.ToString() }); InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "D", RowIndex = rowIndex, Text = info.Debiting.Where(x => x.Status == StatusCard.Открыта).Sum(x => x.Sum).ToString(), StyleInfo = ExcelStyleInfoType.Text }); rowIndex += 2; InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "A", RowIndex = rowIndex, Text = "Суммарный объём закртытых заявок на снятие: ", StyleInfo = ExcelStyleInfoType.Text }); MergeCells(new ExcelMergeParameters { CellFromName = "A" + rowIndex.ToString(), CellToName = "C" + rowIndex.ToString() }); InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "D", RowIndex = rowIndex, Text = info.Debiting.Where(x => x.Status == StatusCard.Закрыта).Sum(x => x.Sum).ToString(), StyleInfo = ExcelStyleInfoType.Text }); SaveExcel(info); } // Создание excel-файла protected abstract void CreateExcel(ExcelInfo info); // Добавляем новую ячейку в лист protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams); // Объединение ячеек protected abstract void MergeCells(ExcelMergeParameters excelParams); // Сохранение файла protected abstract void SaveExcel(ExcelInfo info); } }