initial commit
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
using QuestPDF.Fluent;
|
||||
using QuestPDF.Helpers;
|
||||
using QuestPDF.Infrastructure;
|
||||
using Indotalent.Features.Sales.PaymentReceive.Cqrs;
|
||||
|
||||
namespace Indotalent.Features.Sales.PaymentReceive;
|
||||
|
||||
public class PaymentReceivePdfGenerator
|
||||
{
|
||||
public static byte[] Generate(GetPaymentReceiveByIdResponse data)
|
||||
{
|
||||
QuestPDF.Settings.License = LicenseType.Community;
|
||||
|
||||
var primaryBlue = "#0D47A1";
|
||||
var textSlate = "#64748b";
|
||||
|
||||
return Document.Create(container =>
|
||||
{
|
||||
container.Page(page =>
|
||||
{
|
||||
page.Size(PageSizes.A4);
|
||||
page.Margin(1.5f, Unit.Centimetre);
|
||||
page.PageColor(Colors.White);
|
||||
page.DefaultTextStyle(x => x.FontSize(9).FontFamily(Fonts.Verdana));
|
||||
|
||||
page.Header().Row(row =>
|
||||
{
|
||||
row.RelativeItem().Column(col =>
|
||||
{
|
||||
col.Item().Text("PAYMENT RECEIPT")
|
||||
.FontSize(20).ExtraBold().FontColor(primaryBlue);
|
||||
col.Item().Text($"{data.AutoNumber}").FontSize(11).SemiBold();
|
||||
});
|
||||
|
||||
row.RelativeItem().AlignRight().Column(col =>
|
||||
{
|
||||
col.Item().Text(data.CompanyName).FontSize(11).ExtraBold();
|
||||
col.Item().Text($"{data.CompanyStreet}").FontColor(textSlate);
|
||||
col.Item().Text($"{data.CompanyCity}").FontColor(textSlate);
|
||||
});
|
||||
});
|
||||
|
||||
page.Content().PaddingVertical(20).Column(col =>
|
||||
{
|
||||
col.Item().Row(row =>
|
||||
{
|
||||
row.RelativeItem().Column(c =>
|
||||
{
|
||||
c.Item().BorderBottom(1).PaddingBottom(5).Text("RECEIVED FROM").FontSize(8).Bold().FontColor(textSlate);
|
||||
c.Item().PaddingTop(5).Text(data.CustomerName).Bold();
|
||||
c.Item().Text(data.CustomerStreet);
|
||||
c.Item().Text(data.CustomerCity);
|
||||
});
|
||||
|
||||
row.ConstantItem(40);
|
||||
|
||||
row.RelativeItem().Column(c =>
|
||||
{
|
||||
c.Item().BorderBottom(1).PaddingBottom(5).Text("PAYMENT DETAILS").FontSize(8).Bold().FontColor(textSlate);
|
||||
c.Item().PaddingTop(5).Row(r => {
|
||||
r.RelativeItem().Text("Payment Date");
|
||||
r.RelativeItem().AlignRight().Text(data.PaymentDate?.ToString("dd MMM yyyy"));
|
||||
});
|
||||
c.Item().Row(r => {
|
||||
r.RelativeItem().Text("Payment Method");
|
||||
r.RelativeItem().AlignRight().Text(data.PaymentMethodName);
|
||||
});
|
||||
c.Item().Row(r => {
|
||||
r.RelativeItem().Text("Invoice Ref");
|
||||
r.RelativeItem().AlignRight().Text(data.InvoiceNumber).Bold();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
col.Item().PaddingTop(20).Table(table =>
|
||||
{
|
||||
table.ColumnsDefinition(columns =>
|
||||
{
|
||||
columns.ConstantColumn(25);
|
||||
columns.RelativeColumn(6);
|
||||
columns.RelativeColumn(3);
|
||||
});
|
||||
|
||||
table.Header(header =>
|
||||
{
|
||||
header.Cell().Element(HeaderStyle).Text("#");
|
||||
header.Cell().Element(HeaderStyle).Text("Item Description");
|
||||
header.Cell().Element(HeaderStyle).AlignRight().Text($"Total ({data.CurrencySymbol})");
|
||||
|
||||
static IContainer HeaderStyle(IContainer container) => container.DefaultTextStyle(x => x.SemiBold().FontColor(Colors.White)).PaddingVertical(5).PaddingHorizontal(5).Background("#0D47A1");
|
||||
});
|
||||
|
||||
var index = 1;
|
||||
foreach (var item in data.Items)
|
||||
{
|
||||
table.Cell().Element(CellStyle).Text($"{index++}");
|
||||
table.Cell().Element(CellStyle).Column(c => {
|
||||
c.Item().Text(item.ProductName).Bold();
|
||||
if (!string.IsNullOrEmpty(item.Summary)) c.Item().Text(item.Summary).FontSize(8).FontColor(textSlate);
|
||||
});
|
||||
table.Cell().Element(CellStyle).AlignRight().Text(item.Total.ToString("N2"));
|
||||
|
||||
static IContainer CellStyle(IContainer container) => container.BorderBottom(1).BorderColor("#E2E8F0").PaddingVertical(8).PaddingHorizontal(5);
|
||||
}
|
||||
});
|
||||
|
||||
col.Item().PaddingTop(10).Row(row =>
|
||||
{
|
||||
row.RelativeItem().Column(c => {
|
||||
c.Item().Text("Description / Notes:").FontSize(8).Bold();
|
||||
c.Item().Text(string.IsNullOrEmpty(data.Description) ? "-" : data.Description).FontSize(8);
|
||||
});
|
||||
row.ConstantItem(200).Column(c =>
|
||||
{
|
||||
c.Item().Row(r => { r.RelativeItem().Text("Sub Total"); r.RelativeItem().AlignRight().Text(data.SalesOrderBeforeTaxAmount.ToString("N2")); });
|
||||
c.Item().Row(r => { r.RelativeItem().Text("Tax Amount"); r.RelativeItem().AlignRight().Text(data.SalesOrderTaxAmount.ToString("N2")); });
|
||||
c.Item().PaddingTop(5).BorderTop(1).Row(r => { r.RelativeItem().Text($"TOTAL INVOICE").Bold(); r.RelativeItem().AlignRight().Text(data.SalesOrderAfterTaxAmount.ToString("N2")).ExtraBold(); });
|
||||
c.Item().PaddingTop(5).Background("#F1F5F9").PaddingHorizontal(5).Row(r => { r.RelativeItem().Text($"AMOUNT PAID").Bold().FontColor(primaryBlue); r.RelativeItem().AlignRight().Text(data.PaymentAmount.ToString("N2")).ExtraBold().FontColor(primaryBlue); });
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
page.Footer().AlignCenter().Text(x => { x.Span("Page ").FontSize(8); x.CurrentPageNumber().FontSize(8); });
|
||||
});
|
||||
}).GeneratePdf();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user