2023-05-18 18:01:28 +04:00
using DocumentFormat.OpenXml.EMMA ;
using HardwareShopBusinessLogic.OfficePackage.HelperEnums ;
2023-05-18 17:21:54 +04:00
using HardwareShopBusinessLogic.OfficePackage.HelperModels ;
2023-05-18 18:01:28 +04:00
using MigraDoc.Rendering ;
2023-05-18 17:21:54 +04:00
namespace HardwareShopBusinessLogic.OfficePackage
{
public abstract class AbstractSaveToPdf
{
2023-05-18 20:26:26 +04:00
public void GetPurchaseReportFile ( PdfInfo info )
2023-05-18 18:01:28 +04:00
{
CreatePdf ( info ) ;
2023-05-18 17:21:54 +04:00
2023-05-18 18:01:28 +04:00
CreateParagraph ( new PdfParagraph
{
Text = info . Title ,
Style = "NormalTitle" ,
ParagraphAlignment = PdfParagraphAlignmentType . Center
} ) ;
2023-05-18 17:21:54 +04:00
2023-05-18 18:01:28 +04:00
CreateParagraph ( new PdfParagraph
{
Text = $"за период с {info.DateFrom.ToShortDateString()} " +
$"по {info.DateTo.ToShortDateString()}" ,
Style = "Normal" ,
ParagraphAlignment = PdfParagraphAlignmentType . Center
} ) ;
2023-05-18 17:21:54 +04:00
2023-05-18 20:38:05 +04:00
CreateTable ( new List < string > { "3cm" , "4cm" , "3cm" , "4cm" , "4cm" } ) ;
2023-05-18 17:21:54 +04:00
2023-05-18 18:01:28 +04:00
CreateRow ( new PdfRowParameters
{
2023-05-18 19:21:42 +04:00
Texts = new List < string > { "Покупка" , "Дата покупки" , "Цена" , "Комментарии" , "Комплектующие" } ,
2023-05-18 18:01:28 +04:00
Style = "NormalTitle" ,
ParagraphAlignment = PdfParagraphAlignmentType . Center
} ) ;
2023-05-18 17:21:54 +04:00
2023-05-18 18:01:28 +04:00
foreach ( var record in info . ReportPurchases )
{
List < string > comments = record . Comments ;
List < string > components = record . Components ;
int recordHeight = Math . Max ( comments . Count + 1 , components . Count + 1 ) ;
for ( int i = 0 ; i < recordHeight ; i + + )
{
List < string > cellsData = new ( ) { "" , "" , "" , "" , "" } ;
if ( i = = 0 )
{
cellsData [ 0 ] = record . Id . ToString ( ) ;
cellsData [ 1 ] = record . PurchaseDate . ToShortDateString ( ) ;
cellsData [ 2 ] = record . PurchaseSum . ToString ( "0.00" ) + " р ." ;
CreateRow ( new PdfRowParameters
{
Texts = cellsData ,
Style = "Normal" ,
ParagraphAlignment = PdfParagraphAlignmentType . Left
} ) ;
continue ;
}
int k = i - 1 ;
if ( k < comments . Count )
{
cellsData [ 3 ] = comments [ k ] ;
}
if ( k < components . Count )
{
cellsData [ 4 ] = components [ k ] ;
}
CreateRow ( new PdfRowParameters
{
Texts = cellsData ,
Style = "Normal" ,
ParagraphAlignment = PdfParagraphAlignmentType . Left
} ) ;
}
}
2023-05-18 20:26:26 +04:00
SavePdf ( info ) ;
2023-05-18 18:01:28 +04:00
}
2023-05-18 17:21:54 +04:00
2023-05-18 20:26:26 +04:00
public void CreateComponentsReport ( PdfInfo info )
{
CreatePdf ( info ) ;
CreateParagraph ( new PdfParagraph { Text = info . Title , Style = "NormalTitle" , ParagraphAlignment = PdfParagraphAlignmentType . Center } ) ;
CreateParagraph ( new PdfParagraph { Text = $"с {info.DateFrom.ToShortDateString()} по {info.DateTo.ToShortDateString()}" , Style = "Normal" , ParagraphAlignment = PdfParagraphAlignmentType . Center } ) ;
CreateTable ( new List < string > { "5cm" , "5cm" , "3cm" } ) ;
CreateRow ( new PdfRowParameters
{
Texts = new List < string > { "Комплектующее" , "Товар/Сборка" , "Количество" } ,
Style = "NormalTitle" ,
ParagraphAlignment = PdfParagraphAlignmentType . Center
} ) ;
foreach ( var record in info . ReportComponents )
{
CreateRow ( new PdfRowParameters
{
Texts = new List < string > { record . ComponentName , "" , "" } ,
Style = "Normal" ,
ParagraphAlignment = PdfParagraphAlignmentType . Left
} ) ;
foreach ( var goodOrBuild in record . GoodOrBuilds )
{
CreateRow ( new PdfRowParameters
{
Texts = new List < string > { "" , goodOrBuild . Item1 , goodOrBuild . Item2 . ToString ( ) } ,
Style = "Normal" ,
ParagraphAlignment = PdfParagraphAlignmentType . Left
} ) ;
}
CreateRow ( new PdfRowParameters
{
Texts = new List < string > { "Итого" , "" , record . TotalCount . ToString ( ) } ,
Style = "Normal" ,
ParagraphAlignment = PdfParagraphAlignmentType . Left
} ) ;
}
SavePdf ( info ) ;
}
2023-05-18 17:21:54 +04:00
/// <summary>
/// Создание doc-файла
/// </summary>
/// <param name="info"></param>
protected abstract void CreatePdf ( PdfInfo info ) ;
/// <summary>
/// Создание параграфа с текстом
/// </summary>
/// <param name="title"></param>
/// <param name="style"></param>
protected abstract void CreateParagraph ( PdfParagraph paragraph ) ;
/// <summary>
/// Создание таблицы
/// </summary>
/// <param name="title"></param>
/// <param name="style"></param>
protected abstract void CreateTable ( List < string > columns ) ;
/// <summary>
/// Создание и заполнение строки
/// </summary>
/// <param name="rowParameters"></param>
protected abstract void CreateRow ( PdfRowParameters rowParameters ) ;
/// <summary>
/// Сохранение файла
/// </summary>
/// <param name="info"></param>
protected abstract void SavePdf ( PdfInfo info ) ;
}
}