using BankYouBankruptBusinessLogic.OfficePackage.HelperEnums; using BankYouBankruptBusinessLogic.OfficePackage.HelperModels; using BankYouBankruptDataModels.Enums; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BankYouBankruptBusinessLogic.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.DateOperation.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; //string supportNumber = string.Empty; 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) { //строчка с номером счёта получателя 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.DateClose == null ? "В обработке" : cr.DateClose.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 == StatusEnum.Открыта).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 == StatusEnum.Закрыта).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); } }