private async Task PrintPaperReceipt(CashRegisterReceipt receipt)
        {
            // prepare request object
            RegisterCashRegisterReceiptRequest receiptRequest = new RegisterCashRegisterReceiptRequest(receipt);

            // and register receipt
            RegisterReceiptResult result = await client.RegisterReceiptAsync(receiptRequest, CancellationToken.None);
        }
 private void HandleReceiptRegistrationResult(RegisterReceiptResult result)
 {
     if (result.IsSuccessful == true)
     {
         string message = $"Receipt was registered in ONLINE mode, with unique ID: " + result.Response.Data.Id;
         Console.WriteLine(message);
     }
     else if (result.IsSuccessful == null)
     {
         string message = $"Receipt was registered in OFFLINE mode, no ID is available. As replacement for ID, OKP is used: {result.Request.Data.OKP}";
         Console.WriteLine(message);
     }
     else if (result.IsSuccessful == false)
     {
         string message = $"eKasa system rejected our request for receipt registration. Error #{result.Error.Code}: {result.Error.Message}";
         Console.WriteLine(message);
     }
 }
        private async Task PrintPdfReceipt(CashRegisterReceipt receipt)
        {
            // there are no options available for pdf printer.

            // prepare print context object without additional options.
            RegisterReceiptPrintContext printContext = RegisterReceiptPrintContext.CreatePdf();

            // wrap receipt to request
            RegisterCashRegisterReceiptRequest receiptRequest = new RegisterCashRegisterReceiptRequest(receipt);

            // and register receipt
            RegisterReceiptResult result = await client.RegisterReceiptAsync(receiptRequest, printContext, CancellationToken.None);

            // PDF file is created now.
            // by default, its location is : "C:/ProgramData/NineDigit/Portos.eKasa/receipts"

            this.HandleReceiptRegistrationResult(result);
        }
        private async Task PrintPaperReceiptWithCustomOptions(CashRegisterReceipt receipt)
        {
            // we can override default client configuration with these options:
            PosPrintingOptions printOptions = new PosPrintingOptions()
            {
                // this will override the "configuration.Printers.Pos.Drawer.Enabled" for this specific receipt.
                OpenDrawer = false,
                // this will override the "configuration.Printers.Pos.Logo.Enabled" for this specific receipt.
                PrintLogo = true,
                // this will override the "configuration.Printers.Pos.Logo.MemoryAddress" for this specific receipt.
                LogoMemoryAddress = 2
            };

            // prepare print context object from printer name and printing options
            RegisterReceiptPrintContext printContext = RegisterReceiptPrintContext.CreatePos(printOptions);

            // wrap receipt to request
            RegisterCashRegisterReceiptRequest receiptRequest = new RegisterCashRegisterReceiptRequest(receipt);

            // and register receipt
            RegisterReceiptResult result = await client.RegisterReceiptAsync(receiptRequest, printContext, CancellationToken.None);

            this.HandleReceiptRegistrationResult(result);
        }