95 lines
2.6 KiB
C#
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;
|
|
}
|
|
} |