160 lines
5.5 KiB
C#
160 lines
5.5 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(""));
|
||
commands.Add(new PrintCommand(CreateDashedLine()));
|
||
|
||
|
||
|
||
|
||
// Gangs
|
||
|
||
foreach (Gang gang in kitchenReceipt.Gangs)
|
||
{
|
||
|
||
commands.Add(new PrintCommand(Center($"{gang.Id}. {gang.Name}", true)) { IsBig = true });
|
||
commands.Add(new PrintCommand(""));
|
||
commands.Add(new PrintCommand(""));
|
||
foreach (var dish in gang.Dishes)
|
||
{
|
||
PrintDish(dish, commands);
|
||
}
|
||
if (gang != kitchenReceipt.Gangs.Last())
|
||
{
|
||
commands.Add(new PrintCommand("") { IsCut = true });
|
||
commands.Add(new PrintCommand(""));
|
||
commands.Add(new PrintCommand(""));
|
||
}
|
||
}
|
||
|
||
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 <20>ber zugeh<65>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 quantityPrefix = $"{drink.Number}x ";
|
||
string guestInfo = drink.GuestId.HasValue ? $"{drink.GuestId.Value} " : "";
|
||
string fullPrefix = guestInfo + quantityPrefix;
|
||
string drinkLine = fullPrefix + drink.Name;
|
||
commands.Add(new PrintCommand(drinkLine){IsTall = true});
|
||
// Modifications
|
||
if (drink.Modifications != null && (drink.Modifications.Removed.Any() || drink.Modifications.Added.Any()))
|
||
{
|
||
string modificationIndent = new string(' ', guestInfo.Length + 1);
|
||
foreach (var removed in drink.Modifications.Removed)
|
||
{
|
||
commands.Add(new PrintCommand($"{modificationIndent}- {removed}", isBold:true){IsTall = true});
|
||
}
|
||
|
||
foreach (var added in drink.Modifications.Added)
|
||
{
|
||
commands.Add(new PrintCommand($"{modificationIndent}+ {added}", isBold: true){IsTall = true});
|
||
}
|
||
}
|
||
|
||
// SpecialInstruction
|
||
if (!string.IsNullOrEmpty(drink.Comment))
|
||
{
|
||
string commentIndent = new string(' ', guestInfo.Length);
|
||
commands.Add(new PrintCommand($"{commentIndent}Comment: {drink.Comment}", isBold: true){IsTall = 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);
|
||
}
|
||
}
|