discount
This commit is contained in:
@@ -44,6 +44,10 @@ public class PrinterDiscoveryBackgroundTask
|
|||||||
// Run immediately on start
|
// Run immediately on start
|
||||||
await DiscoverAndNotifyAsync();
|
await DiscoverAndNotifyAsync();
|
||||||
|
|
||||||
|
// Scan once for now, then exit
|
||||||
|
// By Reini, because we are loosing connection on frequent scans
|
||||||
|
return;
|
||||||
|
|
||||||
// Then run periodically
|
// Then run periodically
|
||||||
while (!cancellationToken.IsCancellationRequested)
|
while (!cancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -34,7 +34,15 @@ var config = new EpsonPrintServiceConfiguration
|
|||||||
Console.WriteLine($"Restaurant: {config.RestaurantId}");
|
Console.WriteLine($"Restaurant: {config.RestaurantId}");
|
||||||
Console.WriteLine($"API URL: {config.ApiUrl}");
|
Console.WriteLine($"API URL: {config.ApiUrl}");
|
||||||
|
|
||||||
kernel.Bind<IDiscoveryService>().To<DiscoveryService>().InSingletonScope();
|
//kernel.Bind<IDiscoveryService>().To<DiscoveryService>().InSingletonScope();
|
||||||
|
|
||||||
|
var discovery = new PreconfiguredDiscoveryService();
|
||||||
|
discovery.AddPrinter("192.168.50.176", "TM-T30III", port: 9100);
|
||||||
|
discovery.AddPrinter("192.168.50.60", "TM-T30III", port: 9100);
|
||||||
|
discovery.AddPrinter("192.168.50.61", "TM-T30III", port: 9100);
|
||||||
|
discovery.AddPrinter("192.168.50.80", "TM-U220II", port: 9100);
|
||||||
|
kernel.Bind<IDiscoveryService>().ToConstant(discovery);
|
||||||
|
|
||||||
kernel.Bind<HttpClient>().ToConstant(new HttpClient { Timeout = TimeSpan.FromSeconds(30) }).InSingletonScope();
|
kernel.Bind<HttpClient>().ToConstant(new HttpClient { Timeout = TimeSpan.FromSeconds(30) }).InSingletonScope();
|
||||||
|
|
||||||
|
|
||||||
@@ -65,6 +73,9 @@ kernel.Bind<HeartbeatBackgroundTask>().ToSelf().InSingletonScope();
|
|||||||
|
|
||||||
var printLoop = kernel.Get<PrintLoop>();
|
var printLoop = kernel.Get<PrintLoop>();
|
||||||
var printServer = kernel.Get<PrintServer>();
|
var printServer = kernel.Get<PrintServer>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var discoveryTask = kernel.Get<PrinterDiscoveryBackgroundTask>();
|
var discoveryTask = kernel.Get<PrinterDiscoveryBackgroundTask>();
|
||||||
var heartbeatTask = kernel.Get<HeartbeatBackgroundTask>();
|
var heartbeatTask = kernel.Get<HeartbeatBackgroundTask>();
|
||||||
|
|
||||||
|
|||||||
@@ -10,19 +10,19 @@ using System.Text.Json;
|
|||||||
// ============================================================================
|
// ============================================================================
|
||||||
// FINAL RECEIPT - HTML PRINTER
|
// FINAL RECEIPT - HTML PRINTER
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
//var receipt = TestHelpers.BuildSampleFinalReceipt(true);
|
var receipt = TestHelpers.BuildSampleFinalReceipt(true);
|
||||||
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
|
var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
|
||||||
|
|
||||||
//var converter = new FinalReceiptConverter(lineWidth: 48, bigFontLineWidth: 24);
|
var converter = new FinalReceiptConverter(lineWidth: 48, bigFontLineWidth: 24);
|
||||||
//var printCommands = converter.Convert(serializedReceipt);
|
var printCommands = converter.Convert(serializedReceipt);
|
||||||
|
|
||||||
//TestHelpers.PrintCommandsToConsole(printCommands);
|
TestHelpers.PrintCommandsToConsole(printCommands);
|
||||||
|
|
||||||
//var printer = await TestHelpers.CreateHtmlPrinterAsync();
|
var printer = await TestHelpers.CreateHtmlPrinterAsync();
|
||||||
//await TestHelpers.PrintCommandsToHtmlPrinterAsync(
|
await TestHelpers.PrintCommandsToHtmlPrinterAsync(
|
||||||
// printer,
|
printer,
|
||||||
// printCommands,
|
printCommands,
|
||||||
// logoPath: "ristorante-klinglers.ch-logo_white_bg.png");
|
logoPath: "ristorante-klinglers.ch-logo_white_bg.png");
|
||||||
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -43,20 +43,20 @@ using System.Text.Json;
|
|||||||
// ============================================================================
|
// ============================================================================
|
||||||
// INVOICE RECEIPT - HTML PRINTER
|
// INVOICE RECEIPT - HTML PRINTER
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
var receipt = TestHelpers.BuildSampleInvoiceReceipt();
|
//var receipt = TestHelpers.BuildSampleInvoiceReceipt();
|
||||||
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
|
////var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
|
||||||
var fileContent = File.ReadAllText("invoice.json");
|
//var fileContent = File.ReadAllText("invoice.json");
|
||||||
var serializedReceipt = JsonSerializer.Deserialize<string>(fileContent);
|
//var serializedReceipt = JsonSerializer.Deserialize<string>(fileContent);
|
||||||
var converter = new InvoiceReceiptConverter(lineWidth: 48, bigFontLineWidth: 24);
|
//var converter = new InvoiceReceiptConverter(lineWidth: 48, bigFontLineWidth: 24);
|
||||||
var printCommands = converter.Convert(serializedReceipt);
|
//var printCommands = converter.Convert(serializedReceipt);
|
||||||
|
|
||||||
TestHelpers.PrintCommandsToConsole(printCommands);
|
//TestHelpers.PrintCommandsToConsole(printCommands);
|
||||||
|
|
||||||
var printer = await TestHelpers.CreateHtmlPrinterAsync();
|
//var printer = await TestHelpers.CreateHtmlPrinterAsync();
|
||||||
await TestHelpers.PrintCommandsToHtmlPrinterAsync(
|
//await TestHelpers.PrintCommandsToHtmlPrinterAsync(
|
||||||
printer,
|
// printer,
|
||||||
printCommands,
|
// printCommands,
|
||||||
logoPath: "ristorante-klinglers.ch-logo_white_bg.png");
|
// logoPath: "ristorante-klinglers.ch-logo_white_bg.png");
|
||||||
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|||||||
@@ -112,7 +112,10 @@ public static class TestHelpers
|
|||||||
},
|
},
|
||||||
DiscountInfo = new DiscountInfo()
|
DiscountInfo = new DiscountInfo()
|
||||||
{
|
{
|
||||||
|
Amount = -50.00m,
|
||||||
|
Currency = "CHF",
|
||||||
|
Description = "Fine Dine",
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
56
Inspectron.Epson/PreconfiguredDiscoveryService.cs
Normal file
56
Inspectron.Epson/PreconfiguredDiscoveryService.cs
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
namespace Inspectron.Epson;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Discovery service that returns preconfigured printers instead of performing network discovery
|
||||||
|
/// </summary>
|
||||||
|
public class PreconfiguredDiscoveryService : IDiscoveryService
|
||||||
|
{
|
||||||
|
private readonly List<DiscoveredPrinter> _printers = new();
|
||||||
|
|
||||||
|
public void AddPrinter(string ipAddress, string? modelName = null, int port = 9100)
|
||||||
|
{
|
||||||
|
_printers.Add(new DiscoveredPrinter
|
||||||
|
{
|
||||||
|
IPAddress = ipAddress,
|
||||||
|
ModelName = modelName ?? "Unknown",
|
||||||
|
Port = port,
|
||||||
|
DiscoveredAt = DateTime.UtcNow
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemovePrinter(string ipAddress)
|
||||||
|
{
|
||||||
|
_printers.RemoveAll(p => p.IPAddress == ipAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearPrinters()
|
||||||
|
{
|
||||||
|
_printers.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<List<DiscoveredPrinter>> DiscoverPrintersAsync(
|
||||||
|
TimeSpan? timeout = null,
|
||||||
|
Action<DiscoveredPrinter>? onPrinterDiscovered = null)
|
||||||
|
{
|
||||||
|
var results = _printers.Select(p => new DiscoveredPrinter
|
||||||
|
{
|
||||||
|
IPAddress = p.IPAddress,
|
||||||
|
ModelName = p.ModelName,
|
||||||
|
Port = p.Port,
|
||||||
|
MACAddress = p.MACAddress,
|
||||||
|
ServiceUrl = p.ServiceUrl,
|
||||||
|
ServiceType = p.ServiceType,
|
||||||
|
Lifetime = p.Lifetime,
|
||||||
|
RawResponse = p.RawResponse,
|
||||||
|
DiscoveredAt = DateTime.UtcNow
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
if (onPrinterDiscovered != null)
|
||||||
|
{
|
||||||
|
foreach (var printer in results)
|
||||||
|
onPrinterDiscovered(printer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(results);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,6 +27,7 @@ public class SignalRPrintJobSource: IPrintJobSource
|
|||||||
|
|
||||||
// Register handlers BEFORE starting connection
|
// Register handlers BEFORE starting connection
|
||||||
_connection.On<PrintJobFromSignalR>("PrintJob", OnPrintJobReceived);
|
_connection.On<PrintJobFromSignalR>("PrintJob", OnPrintJobReceived);
|
||||||
|
|
||||||
|
|
||||||
_connection.Reconnecting += OnReconnecting;
|
_connection.Reconnecting += OnReconnecting;
|
||||||
_connection.Reconnected += OnReconnected;
|
_connection.Reconnected += OnReconnected;
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ public class BarReceiptConverter
|
|||||||
private static void PrintDish(Dish drink, List<PrintCommand> commands)
|
private static void PrintDish(Dish drink, List<PrintCommand> commands)
|
||||||
{
|
{
|
||||||
string drinkLine = $"{drink.Number}x {drink.Name}";
|
string drinkLine = $"{drink.Number}x {drink.Name}";
|
||||||
commands.Add(new PrintCommand(drinkLine));
|
commands.Add(new PrintCommand(drinkLine,isBig:true));
|
||||||
// Modifications
|
// Modifications
|
||||||
if (drink.Modifications != null && (drink.Modifications.Removed.Any() || drink.Modifications.Added.Any()))
|
if (drink.Modifications != null && (drink.Modifications.Removed.Any() || drink.Modifications.Added.Any()))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -35,8 +35,7 @@ public class DiscountInfo
|
|||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
public decimal Amount { get; set; }
|
public decimal Amount { get; set; }
|
||||||
public string Currency { get; set; }
|
public string Currency { get; set; }
|
||||||
public decimal? AmountInAlternateCurrency { get; set; }
|
|
||||||
public string AlternateCurrency { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class FinalReceiptItem
|
public class FinalReceiptItem
|
||||||
|
|||||||
@@ -64,6 +64,8 @@ public class ReceiptConverter
|
|||||||
commands.Add(new PrintCommand("---------".PadLeft(_lineWidth)));
|
commands.Add(new PrintCommand("---------".PadLeft(_lineWidth)));
|
||||||
commands.Add(new PrintCommand("")); //Reini
|
commands.Add(new PrintCommand("")); //Reini
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Total
|
// Total
|
||||||
string totalLine = $"Summe: {finalReceipt.Total:F2} {finalReceipt.Currency}";
|
string totalLine = $"Summe: {finalReceipt.Total:F2} {finalReceipt.Currency}";
|
||||||
commands.Add(new PrintCommand(Center(totalLine, true), true, true));
|
commands.Add(new PrintCommand(Center(totalLine, true), true, true));
|
||||||
@@ -78,12 +80,12 @@ public class ReceiptConverter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Discount
|
// Discount
|
||||||
//if (finalReceipt.DiscountInfo != null && finalReceipt.DiscountInfo.Amount > 0)
|
if (finalReceipt.DiscountInfo != null)
|
||||||
//{
|
{
|
||||||
|
|
||||||
// commands.Add(new PrintCommand(finalReceipt.DiscountInfo.Description.PadLeft(_lineWidth/2)));
|
commands.Add(new PrintCommand(finalReceipt.DiscountInfo.Description.PadRight(_lineWidth / 2) + (finalReceipt.DiscountInfo.Amount.ToString("F2") + " " + finalReceipt.DiscountInfo.Currency).PadLeft(_lineWidth / 2)));
|
||||||
// commands.Add(new PrintCommand(""));
|
commands.Add(new PrintCommand(""));
|
||||||
//}
|
}
|
||||||
|
|
||||||
// Split payments
|
// Split payments
|
||||||
if (finalReceipt.SplitPayments != null && finalReceipt.SplitPayments.Count > 0)
|
if (finalReceipt.SplitPayments != null && finalReceipt.SplitPayments.Count > 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user