using VeterinaryClinicBusinessLogics.OfficePackage.HelperEnums;
using VeterinaryClinicBusinessLogics.OfficePackage.HelperModels;
using VeterinaryClinicContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VeterinaryClinicBusinessLogics.OfficePackage
{
///
/// Абстрактный класс для создания отчета Pdf
///
public abstract class AbstractSaveToPdf
{
///
/// Создать отчет Pdf
///
///
public void CreateReport(PdfInfo info)
{
// Создаем файл
CreatePdf(info);
// Создаем заголовок
// "Сведения по визитам."
CreateParagraph(new PdfParagraph
{
Text = info.Title,
Style = "NormalTitle"
});
// Период выборки данных
// "с XX.XX.XXXX по XX.XX.XXXX"
CreateParagraph(new PdfParagraph
{
Text = $"С {info.DateFrom.ToShortDateString()} по {info.DateTo.ToShortDateString()}",
Style = "Normal"
});
// Создаем таблицу с тремя колонками
CreateTable(new List { "7cm", "4cm", "4cm" });
// Создаем заголовок таблицы
// "Визит" | "Медикаменты" | "Вакцинации"
CreateRow(new PdfRowParameters
{
Texts = new List { "Визит", "Медикаменты", "Вакцинации" },
Style = "NormalTitle",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
// Записываем основную информацию
foreach (var view in info.VisitsInfo)
{
// Записываем номер визита - дата
CreateRow(new PdfRowParameters
{
Texts = new List { view.Visit.Id.ToString() + " - " + view.Visit.Date.ToString(), "", "" },
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Left
});
// Конвертируем из HashSet в List, чтобы можно было обращаться по индексу
List medications = new List(view.Medications);
List vaccinations = new List(view.Vaccinations);
// Записываем названия медикамента во 2 колонку
// и названия вакцинации в 3 колонку
int maxLength = Math.Max(medications.Count, vaccinations.Count);
for (int i = 0; i < maxLength; i++)
{
string medication = (i < medications.Count) ? medications[i].Name : "";
string vaccination = (i < vaccinations.Count) ? vaccinations[i].Name : "";
CreateRow(new PdfRowParameters
{
Texts = new List { "", medication, vaccination },
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Left
});
}
}
// Сохраняем файл
SavePdf(info);
}
///
/// Создать файл Pdf
///
///
protected abstract void CreatePdf(PdfInfo info);
///
/// Создать абзац с текстом
///
///
protected abstract void CreateParagraph(PdfParagraph paragraph);
///
/// Создать таблицу
///
///
protected abstract void CreateTable(List columns);
///
/// Создать и заполнить строку
///
///
protected abstract void CreateRow(PdfRowParameters rowParameters);
///
/// Сохранить файл Pdf
///
///
protected abstract void SavePdf(PdfInfo info);
}
}