120 lines
3.8 KiB
C#
120 lines
3.8 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// Абстрактный класс для создания отчета Pdf
|
||
/// </summary>
|
||
public abstract class AbstractSaveToPdf
|
||
{
|
||
/// <summary>
|
||
/// Создать отчет Pdf
|
||
/// </summary>
|
||
/// <param name="info"></param>
|
||
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<string> { "7cm", "4cm", "4cm" });
|
||
|
||
// Создаем заголовок таблицы
|
||
// "Визит" | "Медикаменты" | "Вакцинации"
|
||
CreateRow(new PdfRowParameters
|
||
{
|
||
Texts = new List<string> { "Визит", "Медикаменты", "Вакцинации" },
|
||
Style = "NormalTitle",
|
||
ParagraphAlignment = PdfParagraphAlignmentType.Center
|
||
});
|
||
|
||
// Записываем основную информацию
|
||
foreach (var view in info.VisitsInfo)
|
||
{
|
||
// Записываем номер визита - дата
|
||
CreateRow(new PdfRowParameters
|
||
{
|
||
Texts = new List<string> { view.Visit.Id.ToString() + " - " + view.Visit.Date.ToString(), "", "" },
|
||
Style = "Normal",
|
||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||
});
|
||
|
||
// Конвертируем из HashSet в List, чтобы можно было обращаться по индексу
|
||
List<MedicationViewModel> medications = new List<MedicationViewModel>(view.Medications);
|
||
List<VaccinationViewModel> vaccinations = new List<VaccinationViewModel>(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<string> { "", medication, vaccination },
|
||
Style = "Normal",
|
||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||
});
|
||
}
|
||
}
|
||
|
||
// Сохраняем файл
|
||
SavePdf(info);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Создать файл Pdf
|
||
/// </summary>
|
||
/// <param name="info"></param>
|
||
protected abstract void CreatePdf(PdfInfo info);
|
||
|
||
/// <summary>
|
||
/// Создать абзац с текстом
|
||
/// </summary>
|
||
/// <param name="paragraph"></param>
|
||
protected abstract void CreateParagraph(PdfParagraph paragraph);
|
||
|
||
/// <summary>
|
||
/// Создать таблицу
|
||
/// </summary>
|
||
/// <param name="columns"></param>
|
||
protected abstract void CreateTable(List<string> columns);
|
||
|
||
/// <summary>
|
||
/// Создать и заполнить строку
|
||
/// </summary>
|
||
/// <param name="rowParameters"></param>
|
||
protected abstract void CreateRow(PdfRowParameters rowParameters);
|
||
|
||
/// <summary>
|
||
/// Сохранить файл Pdf
|
||
/// </summary>
|
||
/// <param name="info"></param>
|
||
protected abstract void SavePdf(PdfInfo info);
|
||
}
|
||
}
|