kitchen receipt + html printer

This commit is contained in:
EugeneTes
2026-01-14 11:47:43 +01:00
parent 011978136d
commit 147265358f
16 changed files with 1346 additions and 178 deletions

View File

@@ -0,0 +1,109 @@
namespace Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt;
public class KitchenReceiptConverter
{
private readonly int _lineWidth;
private readonly int _BigLineWidth;
public KitchenReceiptConverter(int lineWidth = 42, int bigLineWidth=22)
{
_BigLineWidth = bigLineWidth;
_lineWidth = lineWidth;
}
public List<PrintCommand> ConvertToPrintCommands(KitchenReceipt kitchenReceipt)
{
var commands = new List<PrintCommand>();
// Header - Restaurant name in red
commands.Add(new PrintCommand(Center(kitchenReceipt.Title, true)) { IsRed = true , IsBig = true});
commands.Add(new PrintCommand(CreateDashedLine()));
commands.Add(new PrintCommand(""));
// Transaction info
string dateTimeLine = $"{kitchenReceipt.TransactionDateTime:dd-MMM-yy HH:mm} Nr.:{kitchenReceipt.ReceiptNumber}";
commands.Add(new PrintCommand(Center(dateTimeLine, false)));
string serverLine = $"{kitchenReceipt.WaiterName}";
commands.Add(new PrintCommand(Center(serverLine, false)));
string serverIdLine = $"{kitchenReceipt.WaiterId}";
commands.Add(new PrintCommand(Center(serverIdLine, false)));
string tableLine = $"Tisch: {kitchenReceipt.TableNumber}";
commands.Add(new PrintCommand(Center(tableLine, true), true, true));
commands.Add(new PrintCommand(CreateDashedLine()));
// Gangs
foreach (Gang gang in kitchenReceipt.Gangs)
{
commands.Add(new PrintCommand(Center($"{gang.Id}. {gang.Name}", false)) { IsRed = true });
foreach (var dish in gang.Dishes)
{
string dishLine = $"{dish.Number}x {dish.Name}";
commands.Add(new PrintCommand(dishLine));
}
}
if (kitchenReceipt.Gangs.Count > 0)
{
commands.Add(new PrintCommand(CreateDashedLine()));
}
foreach (var dish in kitchenReceipt.Dishes)
{
string dishLine = $"{dish.Number}x {dish.Name}";
commands.Add(new PrintCommand(dishLine));
}
commands.Add(new PrintCommand(""));
commands.Add(new PrintCommand(CreateDashedLine()));
commands.Add(new PrintCommand(""));
//// Additional info section
//if (kitchenReceipt.AdditionalInfo != null && kitchenReceipt.AdditionalInfo.Count > 0)
//{
// commands.Add(new PrintCommand(CreateAsterisksLine()));
// commands.Add(new PrintCommand("Info über zugehörige Artikel"));
// commands.Add(new PrintCommand(CreateAsterisksLine()));
// foreach (var info in kitchenReceipt.AdditionalInfo)
// {
// commands.Add(new PrintCommand(info));
// }
// commands.Add(new PrintCommand(""));
//}
return commands;
}
private string Center(string text, bool isBigFont)
{
var actualLineWidth = isBigFont ? _BigLineWidth : _lineWidth;
if (string.IsNullOrEmpty(text) || text.Length >= actualLineWidth)
return text;
int totalPadding = actualLineWidth - text.Length;
int leftPadding = totalPadding / 2;
return new string(' ', leftPadding) + text;
}
private string CreateDashedLine()
{
return new string('-', _lineWidth);
}
private string CreateAsterisksLine()
{
return new string('*', _lineWidth);
}
}

View File

@@ -0,0 +1,92 @@
namespace Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt
{
/// <summary>
/// Represents a restaurant receipt from Warme Küche
/// </summary>
public class KitchenReceipt
{
/// <summary>
/// Restaurant name
/// </summary>
public string Title { get; set; }
/// <summary>
/// Date and time of the transaction
/// </summary>
public DateTime TransactionDateTime { get; set; }
/// <summary>
/// Receipt number
/// </summary>
public string ReceiptNumber { get; set; }
/// <summary>
/// Server/Waiter name
/// </summary>
public string WaiterName { get; set; }
/// <summary>
/// Server/Waiter ID
/// </summary>
public string WaiterId { get; set; }
/// <summary>
/// Table number
/// </summary>
public int TableNumber { get; set; }
public List<Gang> Gangs { get; set; } = new List<Gang>();
public List<Dish> Dishes { get; set; } = new List<Dish>();
/// <summary>
/// Additional items or notes (e.g., "Amuse Bouche")
/// </summary>
public List<string> AdditionalInfo { get; set; }
public KitchenReceipt()
{
Gangs = new List<Gang>();
AdditionalInfo = new List<string>();
}
}
public class Gang
{
public Gang(int id, string name)
{
Id = id;
Name = name;
}
public int Id { get; set; }
public string Name { get; set; }
public List<Dish> Dishes { get; set; } = new List<Dish>();
}
/// <summary>
/// Represents a dish item on the receipt
/// </summary>
public class Dish
{
/// <summary>
/// Number ordered
/// </summary>
public int Number { get; set; }
/// <summary>
/// Name of the dish
/// </summary>
public string Name { get; set; }
public Dish(int number, string name)
{
Number = number;
Name = name;
}
}
}