final receipt update
This commit is contained in:
@@ -60,178 +60,204 @@ using FinalReceipt = Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe.Fin
|
||||
//Console.ReadLine();
|
||||
|
||||
|
||||
//var receipt = new FinalReceipt
|
||||
//{
|
||||
// CompanyName = "Klingler Gastro AG",
|
||||
// Address1 = "Münzplatz 3",
|
||||
// Address2 = "CH-8001 Zürich",
|
||||
// Phone = "043 321 22 22",
|
||||
// ReceiptNumber = "1-81-202",
|
||||
// DateTime = new DateTime(2025, 12, 16, 14, 58, 0),
|
||||
// Guests = 2,
|
||||
// Total = 160.00m,
|
||||
// Currency = "CHF",
|
||||
// TotalInAlternateCurrency = 172.80m,
|
||||
// AlternateCurrency = "EUR",
|
||||
// PaymentMethod = "MASTER",
|
||||
// PaymentAmount = 160.00m,
|
||||
// WaiterName = "Yves",
|
||||
// Terminal = "Hauptkasse ZH",
|
||||
// TableNumber = "12",
|
||||
// VatNumber = "CHE-449.635.880 MWST",
|
||||
// ThankYouMessage = "Das Team bedankt sich herzlich für Ihren",
|
||||
// GoodbyeMessageLine1 = "Besuch.",
|
||||
// GoodbyeMessageLine2 = "Auf Wiedersehen.",
|
||||
// TerminalReceipt = new PaymentTerminalReceipt
|
||||
// {
|
||||
// ReceiptType = "*** Kundenbeleg ***",
|
||||
// BookingType = "Buchung",
|
||||
// PaymentSystem = "TWINT",
|
||||
// TransactionNumber = "XXXXXXXXXXXXXXX1494",
|
||||
// TransactionDateTime = new DateTime(2025, 11, 11, 12, 34, 49),
|
||||
// TerminalId = "31108834",
|
||||
// AID = "A0000015749E",
|
||||
// TransactionSeqCount = "6127",
|
||||
// TransactionRefNo = "99036644599",
|
||||
// AuthCode = "0d3396",
|
||||
// AcquirerId = "2",
|
||||
// EftAmount = 67.00m,
|
||||
// TipAmount = 6.70m,
|
||||
// TotalEftAmount = 73.70m,
|
||||
// Currency = "CHF"
|
||||
// }
|
||||
//};
|
||||
var receipt = new FinalReceipt
|
||||
{
|
||||
CompanyName = "Klingler Gastro AG",
|
||||
Address1 = "Münzplatz 3",
|
||||
Address2 = "CH-8001 Zürich",
|
||||
Phone = "043 321 22 22",
|
||||
ReceiptNumber = "1-81-202",
|
||||
DateTime = new DateTime(2025, 12, 16, 14, 58, 0),
|
||||
Guests = 2,
|
||||
Total = 160.00m,
|
||||
Currency = "CHF",
|
||||
TotalInAlternateCurrency = 172.80m,
|
||||
AlternateCurrency = "EUR",
|
||||
PaymentMethod = "MASTER",
|
||||
PaymentAmount = 160.00m,
|
||||
WaiterName = "Yves",
|
||||
Terminal = "Hauptkasse ZH",
|
||||
TableNumber = "12",
|
||||
VatNumber = "CHE-449.635.880 MWST",
|
||||
ThankYouMessage = "Das Team bedankt sich herzlich für Ihren",
|
||||
GoodbyeMessageLine1 = "Besuch.",
|
||||
GoodbyeMessageLine2 = "Auf Wiedersehen.",
|
||||
SplitPayments = new List<SplitPaymentInfo>
|
||||
{
|
||||
new SplitPaymentInfo { PaymentMethod = "Cash", Amount = 50.00m, Currency = "CHF"},
|
||||
new SplitPaymentInfo { PaymentMethod = "Card", Amount = 110.00m, Currency = "CHF" }
|
||||
},
|
||||
TerminalReceipts = new List<PaymentTerminalReceipt>
|
||||
{
|
||||
new PaymentTerminalReceipt
|
||||
{
|
||||
ReceiptType = "*** Kundenbeleg ***",
|
||||
BookingType = "Buchung",
|
||||
PaymentSystem = "TWINT",
|
||||
TransactionNumber = "XXXXXXXXXXXXXXX1494",
|
||||
TransactionDateTime = new DateTime(2025, 11, 11, 12, 34, 49),
|
||||
TerminalId = "31108834",
|
||||
AID = "A0000015749E",
|
||||
TransactionSeqCount = "6127",
|
||||
TransactionRefNo = "99036644599",
|
||||
AuthCode = "0d3396",
|
||||
AcquirerId = "2",
|
||||
EftAmount = 67.00m,
|
||||
TipAmount = 6.70m,
|
||||
TotalEftAmount = 73.70m,
|
||||
Currency = "CHF"
|
||||
},
|
||||
new PaymentTerminalReceipt
|
||||
{
|
||||
ReceiptType = "*** Kundenbeleg ***",
|
||||
BookingType = "Buchung",
|
||||
PaymentSystem = "MASTER",
|
||||
TransactionNumber = "XXXXXXXXXXXXXXX2587",
|
||||
TransactionDateTime = new DateTime(2025, 11, 11, 12, 36, 12),
|
||||
TerminalId = "31108834",
|
||||
AID = "A0000000041010",
|
||||
TransactionSeqCount = "6128",
|
||||
TransactionRefNo = "99036644600",
|
||||
AuthCode = "1a4b2c",
|
||||
AcquirerId = "1",
|
||||
EftAmount = 93.00m,
|
||||
TipAmount = 0.00m,
|
||||
TotalEftAmount = 93.00m,
|
||||
Currency = "CHF"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//// Add items
|
||||
//receipt.Items.Add(new ReceiptItem
|
||||
//{
|
||||
// Quantity = 1,
|
||||
// Description = "San Pellegrino 50cl",
|
||||
// UnitPrice = 6.50m,
|
||||
// TotalPrice = 6.50m,
|
||||
// TaxCategory = "A"
|
||||
//});
|
||||
// Add items
|
||||
receipt.Items.Add(new ReceiptItem
|
||||
{
|
||||
Quantity = 1,
|
||||
Description = "San Pellegrino 50cl",
|
||||
UnitPrice = 6.50m,
|
||||
TotalPrice = 6.50m,
|
||||
TaxCategory = "A"
|
||||
});
|
||||
|
||||
//receipt.Items.Add(new ReceiptItem
|
||||
//{
|
||||
// Quantity = 1,
|
||||
// Description = "Panna 50cl",
|
||||
// UnitPrice = 6.50m,
|
||||
// TotalPrice = 6.50m,
|
||||
// TaxCategory = "A"
|
||||
//});
|
||||
receipt.Items.Add(new ReceiptItem
|
||||
{
|
||||
Quantity = 1,
|
||||
Description = "Panna 50cl",
|
||||
UnitPrice = 6.50m,
|
||||
TotalPrice = 6.50m,
|
||||
TaxCategory = "A"
|
||||
});
|
||||
|
||||
//receipt.Items.Add(new ReceiptItem
|
||||
//{
|
||||
// Quantity = 1,
|
||||
// Description = "Granini Tomatensaft",
|
||||
// UnitPrice = 5.50m,
|
||||
// TotalPrice = 5.50m,
|
||||
// TaxCategory = "A"
|
||||
//});
|
||||
receipt.Items.Add(new ReceiptItem
|
||||
{
|
||||
Quantity = 1,
|
||||
Description = "Granini Tomatensaft",
|
||||
UnitPrice = 5.50m,
|
||||
TotalPrice = 5.50m,
|
||||
TaxCategory = "A"
|
||||
});
|
||||
|
||||
//receipt.Items.Add(new ReceiptItem
|
||||
//{
|
||||
// Quantity = 2,
|
||||
// Description = "Business Lunch Menu Seco",
|
||||
// UnitPrice = 44.00m,
|
||||
// TotalPrice = 88.00m,
|
||||
// TaxCategory = "A"
|
||||
//});
|
||||
receipt.Items.Add(new ReceiptItem
|
||||
{
|
||||
Quantity = 2,
|
||||
Description = "Business Lunch Menu Seco",
|
||||
UnitPrice = 44.00m,
|
||||
TotalPrice = 88.00m,
|
||||
TaxCategory = "A"
|
||||
});
|
||||
|
||||
//receipt.Items.Add(new ReceiptItem
|
||||
//{
|
||||
// Quantity = 2,
|
||||
// Description = "Brunello di Montalcino 1",
|
||||
// UnitPrice = 16.00m,
|
||||
// TotalPrice = 32.00m,
|
||||
// TaxCategory = "A"
|
||||
//});
|
||||
receipt.Items.Add(new ReceiptItem
|
||||
{
|
||||
Quantity = 2,
|
||||
Description = "Brunello di Montalcino 1",
|
||||
UnitPrice = 16.00m,
|
||||
TotalPrice = 32.00m,
|
||||
TaxCategory = "A"
|
||||
});
|
||||
|
||||
//receipt.Items.Add(new ReceiptItem
|
||||
//{
|
||||
// Quantity = 2,
|
||||
// Description = "Espresso",
|
||||
// UnitPrice = 5.50m,
|
||||
// TotalPrice = 11.00m,
|
||||
// TaxCategory = "A"
|
||||
//});
|
||||
receipt.Items.Add(new ReceiptItem
|
||||
{
|
||||
Quantity = 2,
|
||||
Description = "Espresso",
|
||||
UnitPrice = 5.50m,
|
||||
TotalPrice = 11.00m,
|
||||
TaxCategory = "A"
|
||||
});
|
||||
|
||||
//receipt.Items.Add(new ReceiptItem
|
||||
//{
|
||||
// Quantity = 1,
|
||||
// Description = "Tip",
|
||||
// UnitPrice = 10.50m,
|
||||
// TotalPrice = 10.50m,
|
||||
// TaxCategory = "B"
|
||||
//});
|
||||
receipt.Items.Add(new ReceiptItem
|
||||
{
|
||||
Quantity = 1,
|
||||
Description = "Tip",
|
||||
UnitPrice = 10.50m,
|
||||
TotalPrice = 10.50m,
|
||||
TaxCategory = "B"
|
||||
});
|
||||
|
||||
//// Add tax breakdown
|
||||
//receipt.TaxBreakdown.Add(new TaxInfo
|
||||
//{
|
||||
// Category = "A",
|
||||
// Rate = 8.1m,
|
||||
// Gross = 149.50m,
|
||||
// Net = 138.30m,
|
||||
// TaxAmount = 11.20m,
|
||||
// Currency = "CHF"
|
||||
//});
|
||||
// Add tax breakdown
|
||||
receipt.TaxBreakdown.Add(new TaxInfo
|
||||
{
|
||||
Category = "A",
|
||||
Rate = 8.1m,
|
||||
Gross = 149.50m,
|
||||
Net = 138.30m,
|
||||
TaxAmount = 11.20m,
|
||||
Currency = "CHF"
|
||||
});
|
||||
|
||||
//receipt.TaxBreakdown.Add(new TaxInfo
|
||||
//{
|
||||
// Category = "B",
|
||||
// Rate = 0m,
|
||||
// Gross = 10.50m,
|
||||
// Net = 10.50m,
|
||||
// TaxAmount = 0.00m,
|
||||
// Currency = "CHF"
|
||||
//});
|
||||
receipt.TaxBreakdown.Add(new TaxInfo
|
||||
{
|
||||
Category = "B",
|
||||
Rate = 0m,
|
||||
Gross = 10.50m,
|
||||
Net = 10.50m,
|
||||
TaxAmount = 0.00m,
|
||||
Currency = "CHF"
|
||||
});
|
||||
|
||||
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
|
||||
//var deserializedReceipt = JsonSerializer.Deserialize<FinalReceipt>(serializedReceipt);
|
||||
//// Convert to print commands
|
||||
//var converter = new FinalReceiptConverter(lineWidth: 48, bigFontLineWidth: 24);
|
||||
//var printCommands = converter.Convert(serializedReceipt);
|
||||
var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
|
||||
var deserializedReceipt = JsonSerializer.Deserialize<FinalReceipt>(serializedReceipt);
|
||||
// Convert to print commands
|
||||
var converter = new FinalReceiptConverter(lineWidth: 48, bigFontLineWidth: 24);
|
||||
var printCommands = converter.Convert(serializedReceipt);
|
||||
|
||||
|
||||
|
||||
|
||||
//// Print the commands
|
||||
//Console.WriteLine("=== PRINT COMMANDS ===\n");
|
||||
//var printer = new HtmlPrinter(@".\test.html", paperWidth: 384);
|
||||
//await printer.ConnectAsync("");
|
||||
//await printer.SetAbsolutePrintPosition(42);
|
||||
//await printer.LoadImageAsync("ristorante-klinglers.ch-logo_white_bg.png", 300);
|
||||
//await printer.PrintLoadedImage();
|
||||
//await printer.SetAbsolutePrintPosition(0);
|
||||
//await Task.Delay(200);
|
||||
////await printer.FeedLinesAsync(1);
|
||||
//await printer.SetCustomLineSpacing(22);
|
||||
//foreach (var command in printCommands)
|
||||
//{
|
||||
// string attributes = "";
|
||||
// if (command.IsBig) attributes += "[BIG] ";
|
||||
// if (command.IsBold) attributes += "[BOLD] ";
|
||||
// Print the commands
|
||||
Console.WriteLine("=== PRINT COMMANDS ===\n");
|
||||
var printer = new HtmlPrinter(@".\test.html", paperWidth: 384);
|
||||
await printer.ConnectAsync("");
|
||||
await printer.SetAbsolutePrintPosition(42);
|
||||
await printer.LoadImageAsync("ristorante-klinglers.ch-logo_white_bg.png", 300);
|
||||
await printer.PrintLoadedImage();
|
||||
await printer.SetAbsolutePrintPosition(0);
|
||||
await Task.Delay(200);
|
||||
//await printer.FeedLinesAsync(1);
|
||||
await printer.SetCustomLineSpacing(22);
|
||||
foreach (var command in printCommands)
|
||||
{
|
||||
string attributes = "";
|
||||
if (command.IsBig) attributes += "[BIG] ";
|
||||
if (command.IsBold) attributes += "[BOLD] ";
|
||||
|
||||
// Console.WriteLine($"{attributes}{command.Text}");
|
||||
Console.WriteLine($"{attributes}{command.Text}");
|
||||
|
||||
// if (command.IsBig)
|
||||
// {
|
||||
// await printer.SetFontSizeAsync(2, 1);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// await printer.SetFontSizeAsync(1, 1);
|
||||
// }
|
||||
// //await Task.Delay(200);
|
||||
if (command.IsBig)
|
||||
{
|
||||
await printer.SetFontSizeAsync(2, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
await printer.SetFontSizeAsync(1, 1);
|
||||
}
|
||||
//await Task.Delay(200);
|
||||
|
||||
// await printer.SetEmphasized(command.IsBold);
|
||||
// //await Task.Delay(200);
|
||||
await printer.SetEmphasized(command.IsBold);
|
||||
//await Task.Delay(200);
|
||||
|
||||
// await printer.PrintTextAsync(command.Text + "\n");
|
||||
// //await Task.Delay(200);
|
||||
await printer.PrintTextAsync(command.Text + "\n");
|
||||
//await Task.Delay(200);
|
||||
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
//var receipt = new KitchenReceipt
|
||||
@@ -332,93 +358,93 @@ using FinalReceipt = Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe.Fin
|
||||
//}
|
||||
|
||||
|
||||
var receipt = new KitchenReceipt
|
||||
{
|
||||
Title = "Warme Küche",
|
||||
TransactionDateTime = new DateTime(2025, 10, 23, 12, 18, 0),
|
||||
ReceiptNumber = "132018166",
|
||||
WaiterName = "Mariano Amato",
|
||||
WaiterId = "32 (VK Restaurant)",
|
||||
TableNumber = "22",
|
||||
SpecialInstruction = "Next dish"
|
||||
};
|
||||
//var receipt = new KitchenReceipt
|
||||
//{
|
||||
// Title = "Warme Küche",
|
||||
// TransactionDateTime = new DateTime(2025, 10, 23, 12, 18, 0),
|
||||
// ReceiptNumber = "132018166",
|
||||
// WaiterName = "Mariano Amato",
|
||||
// WaiterId = "32 (VK Restaurant)",
|
||||
// TableNumber = "22",
|
||||
// SpecialInstruction = "Next dish"
|
||||
//};
|
||||
|
||||
// Add dishes (this section can be empty if no dishes were ordered)
|
||||
//// Add dishes (this section can be empty if no dishes were ordered)
|
||||
|
||||
receipt.Gangs.Add(new Gang(2, "Gang"));
|
||||
//receipt.Gangs.Add(new Gang(2, "Gang"));
|
||||
|
||||
receipt.Gangs[0].Dishes.Add(new Dish(1, "Avocado Sashimi")
|
||||
{
|
||||
Modifications = new DishModifications
|
||||
{
|
||||
Removed = new List<string> { "Wasabi" },
|
||||
Added = new List<string> { "Extra Ginger" }
|
||||
},
|
||||
Comment = "No soy sauce"
|
||||
});
|
||||
receipt.Gangs[0].Dishes.Add(new Dish(1, "Baby Spinach Salad with Truffl"));
|
||||
receipt.Gangs[0].Dishes.Add(new Dish(1, "Beef Tataki")
|
||||
{
|
||||
Modifications = new DishModifications
|
||||
{
|
||||
Removed = new List<string> { "Onion" },
|
||||
Added = new List<string> { "Extra Sauce" }
|
||||
},
|
||||
Comment = "Medium rare"
|
||||
});
|
||||
receipt.Gangs[0].Dishes.Add(new Dish(1, "Salmon Taco")
|
||||
{
|
||||
Modifications = new DishModifications
|
||||
{
|
||||
Added = new List<string> { "Extra Lime" }
|
||||
}
|
||||
});
|
||||
//receipt.Gangs[0].Dishes.Add(new Dish(1, "Avocado Sashimi")
|
||||
//{
|
||||
// Modifications = new DishModifications
|
||||
// {
|
||||
// Removed = new List<string> { "Wasabi" },
|
||||
// Added = new List<string> { "Extra Ginger" }
|
||||
// },
|
||||
// Comment = "No soy sauce"
|
||||
//});
|
||||
//receipt.Gangs[0].Dishes.Add(new Dish(1, "Baby Spinach Salad with Truffl"));
|
||||
//receipt.Gangs[0].Dishes.Add(new Dish(1, "Beef Tataki")
|
||||
//{
|
||||
// Modifications = new DishModifications
|
||||
// {
|
||||
// Removed = new List<string> { "Onion" },
|
||||
// Added = new List<string> { "Extra Sauce" }
|
||||
// },
|
||||
// Comment = "Medium rare"
|
||||
//});
|
||||
//receipt.Gangs[0].Dishes.Add(new Dish(1, "Salmon Taco")
|
||||
//{
|
||||
// Modifications = new DishModifications
|
||||
// {
|
||||
// Added = new List<string> { "Extra Lime" }
|
||||
// }
|
||||
//});
|
||||
|
||||
// Add additional info
|
||||
//// Add additional info
|
||||
|
||||
var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
|
||||
var deserializedReceipt = JsonSerializer.Deserialize<KitchenReceipt>(serializedReceipt);
|
||||
KitchenReceiptConverter converter = new KitchenReceiptConverter(bigLineWidth: 18, lineWidth: 33);
|
||||
var printCommands = converter.ConvertToPrintCommands(deserializedReceipt);
|
||||
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
|
||||
//var deserializedReceipt = JsonSerializer.Deserialize<KitchenReceipt>(serializedReceipt);
|
||||
//KitchenReceiptConverter converter = new KitchenReceiptConverter(bigLineWidth: 18, lineWidth: 33);
|
||||
//var printCommands = converter.ConvertToPrintCommands(deserializedReceipt);
|
||||
|
||||
Console.WriteLine("=== PRINT COMMANDS ===\n");
|
||||
//var printer = new HtmlPrinter(@".\test.html", paperWidth: 258);
|
||||
//await printer.ConnectAsync("");
|
||||
bool useDelay=true;
|
||||
var printer = new EpsonPrinter();
|
||||
await printer.ConnectAsync("127.0.0.1", 8888);
|
||||
if (useDelay)await Task.Delay(200);
|
||||
await printer.FeedLinesAsync(1);
|
||||
await printer.SetCustomLineSpacing(22);
|
||||
foreach (var command in printCommands)
|
||||
{
|
||||
string attributes = "";
|
||||
if (command.IsBig) attributes += "[BIG] ";
|
||||
if (command.IsBold) attributes += "[BOLD] ";
|
||||
if (command.IsRed) attributes += "[RED] ";
|
||||
//Console.WriteLine("=== PRINT COMMANDS ===\n");
|
||||
////var printer = new HtmlPrinter(@".\test.html", paperWidth: 258);
|
||||
////await printer.ConnectAsync("");
|
||||
//bool useDelay=true;
|
||||
//var printer = new EpsonPrinter();
|
||||
//await printer.ConnectAsync("127.0.0.1", 8888);
|
||||
//if (useDelay)await Task.Delay(200);
|
||||
//await printer.FeedLinesAsync(1);
|
||||
//await printer.SetCustomLineSpacing(22);
|
||||
//foreach (var command in printCommands)
|
||||
//{
|
||||
// string attributes = "";
|
||||
// if (command.IsBig) attributes += "[BIG] ";
|
||||
// if (command.IsBold) attributes += "[BOLD] ";
|
||||
// if (command.IsRed) attributes += "[RED] ";
|
||||
|
||||
Console.WriteLine($"{attributes}{command.Text}");
|
||||
await printer.SetBiggerFontTM220(command.IsBig, command.IsTall| command.IsBig, secondaryFont: false);
|
||||
// Console.WriteLine($"{attributes}{command.Text}");
|
||||
// await printer.SetBiggerFontTM220(command.IsBig, command.IsTall| command.IsBig, secondaryFont: false);
|
||||
|
||||
|
||||
|
||||
if (useDelay) await Task.Delay(200);
|
||||
// if (useDelay) await Task.Delay(200);
|
||||
|
||||
await printer.SetRedColor(command.IsRed);
|
||||
// await printer.SetRedColor(command.IsRed);
|
||||
|
||||
if (useDelay) await Task.Delay(200);
|
||||
// if (useDelay) await Task.Delay(200);
|
||||
|
||||
await printer.SetEmphasized(command.IsBold);
|
||||
if (useDelay) await Task.Delay(200);
|
||||
// await printer.SetEmphasized(command.IsBold);
|
||||
// if (useDelay) await Task.Delay(200);
|
||||
|
||||
await printer.PrintTextAsync(command.Text + "\n");
|
||||
if (useDelay) await Task.Delay(200);
|
||||
// await printer.PrintTextAsync(command.Text + "\n");
|
||||
// if (useDelay) await Task.Delay(200);
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
await printer.FeedLinesAsync(5);
|
||||
if (useDelay) await Task.Delay(200*5);
|
||||
await printer.CutAsync();
|
||||
//await printer.FeedLinesAsync(5);
|
||||
//if (useDelay) await Task.Delay(200*5);
|
||||
//await printer.CutAsync();
|
||||
|
||||
//await printer.SetDefaultLineSpacing();
|
||||
//await printer.PrintTextAsync(
|
||||
|
||||
Reference in New Issue
Block a user