118 lines
5.4 KiB
C#
118 lines
5.4 KiB
C#
namespace Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe;
|
|
|
|
public class ReceiptConverter
|
|
{
|
|
private readonly int _lineWidth;
|
|
private readonly int _bigFontLineWidth;
|
|
|
|
public ReceiptConverter(int lineWidth = 42, int bigFontLineWidth = 21)
|
|
{
|
|
_lineWidth = lineWidth;
|
|
_bigFontLineWidth = bigFontLineWidth;
|
|
}
|
|
|
|
public List<PrintCommand> ConvertToPrintCommands(FinalReceipt finalReceipt)
|
|
{
|
|
var commands = new List<PrintCommand>();
|
|
|
|
// Header - Company info
|
|
commands.Add(new PrintCommand(Center(finalReceipt.CompanyName, false)));
|
|
commands.Add(new PrintCommand(Center(finalReceipt.Address1, false)));
|
|
commands.Add(new PrintCommand(Center(finalReceipt.Address2, false)));
|
|
commands.Add(new PrintCommand(Center(finalReceipt.Phone, false)));
|
|
commands.Add(new PrintCommand(""));
|
|
commands.Add(new PrintCommand(""));
|
|
|
|
// FinalReceipt info
|
|
string receiptLine = $"Rechnung Nr. {finalReceipt.ReceiptNumber}".PadRight(_lineWidth/2)+$"{finalReceipt.DateTime:HH:mm dd.MM.yyyy}".PadLeft(_lineWidth/2);
|
|
commands.Add(new PrintCommand(receiptLine,isBold:true));
|
|
commands.Add(new PrintCommand($"Guests: {finalReceipt.Guests}"));
|
|
commands.Add(new PrintCommand(""));
|
|
|
|
// Items
|
|
foreach (var item in finalReceipt.Items)
|
|
{
|
|
string quantityDesc = $"{item.Quantity}x {item.Description}";
|
|
string prices = $"{item.UnitPrice:F2}"+$"{item.TotalPrice:F2}".PadLeft(7)+$" {item.TaxCategory}";
|
|
|
|
// Calculate spacing to align prices to the right
|
|
int spacesNeeded = _lineWidth - quantityDesc.Length - prices.Length;
|
|
if (spacesNeeded < 1) spacesNeeded = 1;
|
|
|
|
string itemLine = quantityDesc + new string(' ', spacesNeeded) + prices;
|
|
commands.Add(new PrintCommand(itemLine));
|
|
}
|
|
|
|
commands.Add(new PrintCommand("")); // Reini
|
|
commands.Add(new PrintCommand("---------".PadLeft(_lineWidth)));
|
|
commands.Add(new PrintCommand("")); //Reini
|
|
|
|
// Total
|
|
string totalLine = $"Summe: {finalReceipt.Total:F2} {finalReceipt.Currency}";
|
|
commands.Add(new PrintCommand(Center(totalLine, true), true, true));
|
|
commands.Add(new PrintCommand(""));
|
|
|
|
// Alternate currency
|
|
if (finalReceipt.TotalInAlternateCurrency.HasValue)
|
|
{
|
|
string altCurrencyLine = $"{finalReceipt.TotalInAlternateCurrency:F2} {finalReceipt.AlternateCurrency}";
|
|
commands.Add(new PrintCommand(altCurrencyLine.PadLeft(_lineWidth)));
|
|
commands.Add(new PrintCommand(""));
|
|
}
|
|
|
|
// Payment method
|
|
string paymentLine = $"{finalReceipt.PaymentMethod}";
|
|
string paymentAmount = $"{finalReceipt.PaymentAmount:F2} {finalReceipt.Currency}";
|
|
int paymentSpaces = _lineWidth - paymentLine.Length - paymentAmount.Length;
|
|
if (paymentSpaces < 1) paymentSpaces = 1;
|
|
commands.Add(new PrintCommand(paymentLine + new string(' ', paymentSpaces) + paymentAmount,isBold:true));
|
|
commands.Add(new PrintCommand(""));
|
|
|
|
// Tax breakdown
|
|
foreach (var tax in finalReceipt.TaxBreakdown)
|
|
{
|
|
string taxLine = "MwSt %".PadRight(_lineWidth/4)+" Brutto".PadRight(_lineWidth / 4) + " Netto".PadRight(_lineWidth / 4) + "MwSt".PadLeft(_lineWidth / 4);
|
|
if (finalReceipt.TaxBreakdown.IndexOf(tax) == 0)
|
|
{
|
|
commands.Add(new PrintCommand(taxLine));
|
|
}
|
|
|
|
string taxDetail = ($"{tax.Category}:"+ $"{tax.Rate}%".PadLeft(5)).PadRight(_lineWidth / 4) + $"{tax.Gross:F2} {tax.Currency}".PadLeft(_lineWidth/4)+$"{tax.Net:F2} {tax.Currency}".PadLeft(_lineWidth/4)+$"{tax.TaxAmount:F2} {tax.Currency}".PadLeft(_lineWidth / 4);
|
|
commands.Add(new PrintCommand(taxDetail));
|
|
}
|
|
commands.Add(new PrintCommand(""));
|
|
|
|
// Footer info
|
|
//commands.Add(new PrintCommand(Center($"Bedient von: {finalReceipt.WaiterName}", false)));
|
|
//commands.Add(new PrintCommand(Center($"Terminal: {finalReceipt.Terminal}", false)));
|
|
//commands.Add(new PrintCommand(Center($"Tisch: {finalReceipt.TableNumber}", false)));
|
|
commands.Add(new PrintCommand($"Bedient von:".PadLeft(_lineWidth / 2) + $" {finalReceipt.WaiterName}"));
|
|
commands.Add(new PrintCommand($"Terminal:".PadLeft(_lineWidth / 2) + $" {finalReceipt.Terminal}"));
|
|
commands.Add(new PrintCommand($"Tisch:".PadLeft(_lineWidth / 2)+$" {finalReceipt.TableNumber}"));
|
|
commands.Add(new PrintCommand(""));
|
|
commands.Add(new PrintCommand(""));
|
|
|
|
// VAT number
|
|
commands.Add(new PrintCommand(Center(finalReceipt.VatNumber, false)));
|
|
|
|
// Thank you message
|
|
commands.Add(new PrintCommand(Center(finalReceipt.ThankYouMessage, false)));
|
|
commands.Add(new PrintCommand(Center(finalReceipt.GoodbyeMessageLine1, false)));
|
|
commands.Add(new PrintCommand(Center(finalReceipt.GoodbyeMessageLine2, false)));
|
|
|
|
return commands;
|
|
}
|
|
|
|
private string Center(string text, bool isBigFont)
|
|
{
|
|
int effectiveLineWidth = isBigFont ? _bigFontLineWidth : _lineWidth;
|
|
|
|
if (string.IsNullOrEmpty(text) || text.Length >= effectiveLineWidth)
|
|
return text;
|
|
|
|
int totalPadding = effectiveLineWidth - text.Length;
|
|
int leftPadding = totalPadding / 2;
|
|
|
|
return new string(' ', leftPadding) + text;
|
|
}
|
|
} |