Files
Print_server/Inspectron.Epson/PrintServer/Printers/Utils/BarReceipt/BarReceiptConverter.cs
EugeneTes e90465e286 discount
2026-02-02 12:50:00 +01:00

147 lines
4.7 KiB
C#

using Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt;
namespace Inspectron.Epson.PrintServer.Printers.Utils.BarReceipt;
public class BarReceiptConverter
{
private readonly int _lineWidth;
private readonly int _BigLineWidth;
public BarReceiptConverter(int lineWidth = 42, int bigLineWidth=22)
{
_BigLineWidth = bigLineWidth;
_lineWidth = lineWidth;
}
public List<PrintCommand> ConvertToPrintCommands(BarReceipt 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)));
commands.Add(new PrintCommand(""));
string tableLine = $"Tisch: {kitchenReceipt.TableNumber}";
commands.Add(new PrintCommand(Center(tableLine, true), true, true));
if (!string.IsNullOrEmpty(kitchenReceipt.SpecialInstruction))
{
commands.Add(new PrintCommand(""));
commands.Add(new PrintCommand(Center(kitchenReceipt.SpecialInstruction, true), true, true));
commands.Add(new PrintCommand(""));
}
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)
{
PrintDish(dish, commands);
}
}
if (kitchenReceipt.Gangs.Count > 0)
{
commands.Add(new PrintCommand(CreateDashedLine()));
}
foreach (var dish in kitchenReceipt.Dishes)
{
PrintDish(dish, commands);
}
if (kitchenReceipt.Dishes != null && kitchenReceipt.Dishes.Any())
{
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 static void PrintDish(Dish drink, List<PrintCommand> commands)
{
string drinkLine = $"{drink.Number}x {drink.Name}";
commands.Add(new PrintCommand(drinkLine,isBig:true));
// Modifications
if (drink.Modifications != null && (drink.Modifications.Removed.Any() || drink.Modifications.Added.Any()))
{
foreach (var removed in drink.Modifications.Removed)
{
commands.Add(new PrintCommand($" - {removed}", isBold:true));
}
foreach (var added in drink.Modifications.Added)
{
commands.Add(new PrintCommand($" + {added}", isBold: true));
}
}
// SpecialInstruction
if (!string.IsNullOrEmpty(drink.Comment))
{
commands.Add(new PrintCommand($" Comment: {drink.Comment}", isBold: true));
}
commands.Add(new PrintCommand("")); // Extra line between drinks for bar
}
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);
}
}