PIbd-21_Danilov_V.V._Course.../VeterinaryClinic/VeterinaryClinicBusinessLogics/OfficePackage/AbstractSaveToPdf.cs
Владимир Данилов b0510098af Выгрузка в пдф
2024-05-29 23:48:13 +04:00

120 lines
3.8 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 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);
}
}