using DocumentFormat.OpenXml.Presentation;
using HospitalBusinessLogics.OfficePackage.HelperEnums;
using HospitalBusinessLogics.OfficePackage.HelperModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HospitalBusinessLogics.OfficePackage
{
///
/// Абстрактный класс для создания отчета Excel
///
public abstract class AbstractSaveToExcel
{
///
/// Создать отчет Excel
///
///
public void CreateReport(ExcelInfo info)
{
// Создаем файл
CreateExcel(info);
// Создаем заголовок таблицы
// "Список процедур."
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "A",
RowIndex = 1,
Text = info.Title,
StyleInfo = ExcelStyleInfoType.Title
});
// Объединяем ячейки A1:D1 для заголовка таблицы
MergeCells(new ExcelMergeParameters
{
CellFromName = "A1",
CellToName = "D1"
});
// Записываем основную информацию
uint rowIndex = 2;
foreach (var view in info.RecipeProcedures)
{
// "Рецепт:"
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "A",
RowIndex = rowIndex,
Text = "Рецепт:",
StyleInfo = ExcelStyleInfoType.SubtitleWithBorder
});
// Номер рецепта "№X"
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "B",
RowIndex = rowIndex,
Text = $"№{view.Recipe.Id}",
StyleInfo = ExcelStyleInfoType.TextWithBorder
});
// "Дата выписки:"
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "C",
RowIndex = rowIndex,
Text = "Дата выписки:",
StyleInfo = ExcelStyleInfoType.SubtitleWithBorder
});
// Дата "XX.XX.XXXX"
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "D",
RowIndex = rowIndex,
Text = $"{view.Recipe.IssueDate.ToShortDateString()}",
StyleInfo = ExcelStyleInfoType.TextWithBorder
});
rowIndex++;
// "Процедуры:"
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "A",
RowIndex = rowIndex,
Text = "Процедуры:",
StyleInfo = ExcelStyleInfoType.Subtitle
});
// Список процедур
foreach (var procedure in view.Procedures)
{
// "Название процедуры"
InsertCellInWorksheet(new ExcelCellParameters
{
ColumnName = "B",
RowIndex = rowIndex,
Text = $"{procedure.Name}",
StyleInfo = ExcelStyleInfoType.Text
});
// Объединяем ячейки BX:DX для названия процедуры
MergeCells(new ExcelMergeParameters
{
CellFromName = "B" + rowIndex,
CellToName = "D" + rowIndex
});
rowIndex++;
}
}
SaveExcel(info);
}
///
/// Создать файл Excel
///
///
protected abstract void CreateExcel(ExcelInfo info);
///
/// Добавить новую ячейку в лист
///
///
protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams);
///
/// Объединить ячейки
///
///
protected abstract void MergeCells(ExcelMergeParameters excelParams);
///
/// Сохранить файл Excel
///
///
protected abstract void SaveExcel(ExcelInfo info);
}
}