CourseWork_BankYouBankrupt/BankYouBankrupt/BankYouBankruptBusinessLogic/OfficePackage/AbstractSaveToExcel.cs

633 lines
16 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 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<string, int>();
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<string, int>();
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);
}
}