Files
Print_server/Inspectron.Epson/PrintServer/Printers/Utils/KitchenReceiptPrinter.cs
2026-01-14 11:47:43 +01:00

95 lines
2.6 KiB
C#

namespace Inspectron.Epson.PrintServer.Printers.Utils;
public class KitchenReceiptPrinter
{
private readonly int _lineWidth;
private readonly int _bigFontLineWidth;
public KitchenReceiptPrinter(int lineWidth = 42, int bigFontLineWidth = 21)
{
_lineWidth = lineWidth;
_bigFontLineWidth = bigFontLineWidth;
}
public List<KitchenPrintCommand> ConvertToCommands(TranslatedKitchenReceipt receipt)
{
var commands = new List<KitchenPrintCommand>();
// Header: "Warme Küche" - Big, Bold, Red, Centered
commands.Add(new KitchenPrintCommand
{
Text = Center(receipt.Location, isBigFont: true),
IsBig = true,
IsBold = true,
IsRed = true
});
commands.Add(Separator());
// Date and Owner info - Normal, Left-aligned
commands.Add(new KitchenPrintCommand { Text = Center(receipt.Date,false) });
var ownerLines = receipt.Owner.Split('\n');
foreach (var line in ownerLines)
{
commands.Add(new KitchenPrintCommand { Text = Center(line, false) });
}
// Table number - Big, Bold, Centered
commands.Add(new KitchenPrintCommand
{
Text = Center($"Tisch: {receipt.Tisch}", isBigFont: true),
IsBig = true,
IsBold = true
});
commands.Add(Separator());
// Items - Left-aligned
foreach (var item in receipt.items)
{
if (item is KitchenProduct kp)
{
commands.Add(new KitchenPrintCommand
{
Text = $"{kp.Amount}x {item.Name}"
});
}
if(item is KitchenGang kg)
{
commands.Add(new KitchenPrintCommand
{
IsRed = true,
IsBig = true,
IsBold = true,
Text = Center(item.Name,true)
});
}
}
commands.Add(Separator());
return commands;
}
private KitchenPrintCommand Separator()
{
return new KitchenPrintCommand
{
Text = new string('-', _lineWidth)
};
}
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;
}
}