From 53cf40c5e3253448a766c88ce0e48835c5817ea8 Mon Sep 17 00:00:00 2001 From: EugeneTes Date: Mon, 26 Jan 2026 10:53:09 +0100 Subject: [PATCH] 1.0.3 --- EpsonPrintService/EpsonPrintService.csproj | 2 +- EpsonTest/Program.cs | 2 +- EpsonTest/TestHelpers.cs | 48 +++++++++++-------- .../Printers/Utils/FinalReceipt/Models.cs | 2 + .../Utils/FinalReceipt/ReceiptConverter.cs | 30 +++++++++++- .../Printers/Utils/InvoiceReceipt/Models.cs | 1 + .../Utils/InvoiceReceipt/ReceiptConverter.cs | 9 ++++ 7 files changed, 70 insertions(+), 24 deletions(-) diff --git a/EpsonPrintService/EpsonPrintService.csproj b/EpsonPrintService/EpsonPrintService.csproj index e253044..a87410f 100644 --- a/EpsonPrintService/EpsonPrintService.csproj +++ b/EpsonPrintService/EpsonPrintService.csproj @@ -5,7 +5,7 @@ net8.0 enable enable - 1.0.2 + 1.0.3 diff --git a/EpsonTest/Program.cs b/EpsonTest/Program.cs index 7458e1d..b608502 100644 --- a/EpsonTest/Program.cs +++ b/EpsonTest/Program.cs @@ -10,7 +10,7 @@ using System.Text.Json; // ============================================================================ // FINAL RECEIPT - HTML PRINTER // ============================================================================ -//var receipt = TestHelpers.BuildSampleFinalReceipt(); +//var receipt = TestHelpers.BuildSampleFinalReceipt(true); //var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true }); //var converter = new FinalReceiptConverter(lineWidth: 48, bigFontLineWidth: 24); diff --git a/EpsonTest/TestHelpers.cs b/EpsonTest/TestHelpers.cs index 028d37b..8a239cf 100644 --- a/EpsonTest/TestHelpers.cs +++ b/EpsonTest/TestHelpers.cs @@ -40,7 +40,7 @@ public static class TestHelpers #region Receipt Builders - public static FinalReceipt BuildSampleFinalReceipt() + public static FinalReceipt BuildSampleFinalReceipt(bool includeTax = true) { var receipt = new FinalReceipt { @@ -64,6 +64,7 @@ public static class TestHelpers ThankYouMessage = "Das Team bedankt sich herzlich für Ihren", GoodbyeMessageLine1 = "Besuch.", GoodbyeMessageLine2 = "Auf Wiedersehen.", + IsDebtor = true, SplitPayments = new List { new() { PaymentMethod = "Cash", Amount = 50.00m, Currency = "CHF" }, @@ -144,7 +145,8 @@ public static class TestHelpers Description = "Business Lunch Menu Seco", UnitPrice = 44.00m, TotalPrice = 88.00m, - TaxCategory = "A" + TaxCategory = "A", + SubItems = new List { "Tomato Soup", "Grilled Salmon", "Tiramisu" } }); receipt.Items.Add(new FinalReceiptItem @@ -174,26 +176,29 @@ public static class TestHelpers TaxCategory = "B" }); - // Add tax breakdown - receipt.TaxBreakdown.Add(new TaxInfo + if (includeTax) { - 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" + }); + } return receipt; } @@ -247,7 +252,8 @@ public static class TestHelpers Description = "Business Lunch Menu Seco", UnitPrice = 44.00m, TotalPrice = 88.00m, - TaxCategory = "A" + TaxCategory = "A", + SubItems = new List { "Tomato Soup", "Grilled Salmon", "Tiramisu" } }); receipt.Items.Add(new Inspectron.Epson.PrintServer.Printers.Utils.InvoiceReceipt.ReceiptItem diff --git a/Inspectron.Epson/PrintServer/Printers/Utils/FinalReceipt/Models.cs b/Inspectron.Epson/PrintServer/Printers/Utils/FinalReceipt/Models.cs index c07299e..a2d9956 100644 --- a/Inspectron.Epson/PrintServer/Printers/Utils/FinalReceipt/Models.cs +++ b/Inspectron.Epson/PrintServer/Printers/Utils/FinalReceipt/Models.cs @@ -18,6 +18,7 @@ public class FinalReceipt public string PaymentMethod { get; set; } public decimal PaymentAmount { get; set; } public List TaxBreakdown { get; set; } = new List(); + public bool IsDebtor { get; set; } = false; public string WaiterName { get; set; } public string Terminal { get; set; } public string TableNumber { get; set; } @@ -35,6 +36,7 @@ public class FinalReceiptItem public decimal UnitPrice { get; set; } public decimal TotalPrice { get; set; } public string TaxCategory { get; set; } + public List SubItems { get; set; } } public class TaxInfo diff --git a/Inspectron.Epson/PrintServer/Printers/Utils/FinalReceipt/ReceiptConverter.cs b/Inspectron.Epson/PrintServer/Printers/Utils/FinalReceipt/ReceiptConverter.cs index f4ea497..895bbc6 100644 --- a/Inspectron.Epson/PrintServer/Printers/Utils/FinalReceipt/ReceiptConverter.cs +++ b/Inspectron.Epson/PrintServer/Printers/Utils/FinalReceipt/ReceiptConverter.cs @@ -22,7 +22,10 @@ public class ReceiptConverter commands.Add(new PrintCommand(Center(finalReceipt.Phone, false))); commands.Add(new PrintCommand("")); commands.Add(new PrintCommand("")); - + if (finalReceipt.IsDebtor) + { + commands.Add(new PrintCommand("Debitorenrechnung")); + } // FinalReceipt info string receiptLine = $"Rechnung Nr. {finalReceipt.ReceiptNumber}".PadRight(_lineWidth/2)+$"{finalReceipt.DateTime:HH:mm dd.MM.yyyy}".PadLeft(_lineWidth/2); commands.Add(new PrintCommand(receiptLine,isBold:true)); @@ -41,6 +44,15 @@ public class ReceiptConverter string itemLine = quantityDesc + new string(' ', spacesNeeded) + prices; commands.Add(new PrintCommand(itemLine)); + + // SubItems + if (item.SubItems != null) + { + foreach (var subItem in item.SubItems) + { + commands.Add(new PrintCommand($" - {subItem}")); + } + } } commands.Add(new PrintCommand("")); // Reini @@ -91,6 +103,12 @@ public class ReceiptConverter string taxDetail = ($"{tax.Category}:"+ $"{tax.Rate}%".PadLeft(5)).PadRight(_lineWidth / 4) + $"{tax.Gross:F2} {tax.Currency}".PadLeft(_lineWidth/4)+$"{tax.Net:F2} {tax.Currency}".PadLeft(_lineWidth/4)+$"{tax.TaxAmount:F2} {tax.Currency}".PadLeft(_lineWidth / 4); commands.Add(new PrintCommand(taxDetail)); } + + if (finalReceipt.TaxBreakdown.Count(x => x.Category.ToLower()!="d")==0) + { + commands.Add(new PrintCommand("Nicht mehrwertsteuerpflichtig")); + } + commands.Add(new PrintCommand("")); // Footer info @@ -135,6 +153,16 @@ public class ReceiptConverter commands.Add(new PrintCommand(Center(finalReceipt.ThankYouMessage, false))); commands.Add(new PrintCommand(Center(finalReceipt.GoodbyeMessageLine1, false))); commands.Add(new PrintCommand(Center(finalReceipt.GoodbyeMessageLine2, false))); + if (finalReceipt.IsDebtor) + { + commands.Add(new PrintCommand("")); + commands.Add(new PrintCommand("")); + commands.Add(new PrintCommand("")); + commands.Add(new PrintCommand("".PadRight(_lineWidth, '-'))); + commands.Add(new PrintCommand("Unterschrift")); + + + } return commands; } diff --git a/Inspectron.Epson/PrintServer/Printers/Utils/InvoiceReceipt/Models.cs b/Inspectron.Epson/PrintServer/Printers/Utils/InvoiceReceipt/Models.cs index e9e114e..c907e0b 100644 --- a/Inspectron.Epson/PrintServer/Printers/Utils/InvoiceReceipt/Models.cs +++ b/Inspectron.Epson/PrintServer/Printers/Utils/InvoiceReceipt/Models.cs @@ -21,4 +21,5 @@ public class ReceiptItem public decimal UnitPrice { get; set; } public decimal TotalPrice { get; set; } public string TaxCategory { get; set; } + public List SubItems { get; set; } } diff --git a/Inspectron.Epson/PrintServer/Printers/Utils/InvoiceReceipt/ReceiptConverter.cs b/Inspectron.Epson/PrintServer/Printers/Utils/InvoiceReceipt/ReceiptConverter.cs index 833bdf0..ddcb72f 100644 --- a/Inspectron.Epson/PrintServer/Printers/Utils/InvoiceReceipt/ReceiptConverter.cs +++ b/Inspectron.Epson/PrintServer/Printers/Utils/InvoiceReceipt/ReceiptConverter.cs @@ -41,6 +41,15 @@ public class ReceiptConverter string itemLine = quantityDesc + new string(' ', spacesNeeded) + prices; commands.Add(new PrintCommand(itemLine)); + + // SubItems + if (item.SubItems != null) + { + foreach (var subItem in item.SubItems) + { + commands.Add(new PrintCommand($" - {subItem}")); + } + } } commands.Add(new PrintCommand(""));