private static byte[] GetReceiptBytes(ReceiptData receiptData) { Assure.ArgumentNotNull(receiptData, nameof(receiptData)); var kioskAppSettings = ComponentManager.Current.GetComponent <IKioskAppSettingsContract>().State; var now = DateTime.Now; var kioskAddress = kioskAppSettings.KioskAddress; var kioskAddressParts = new[] { kioskAddress?.AddressLine2, kioskAddress?.City, kioskAddress?.AddressLine1 }; var kioskAddressString = string.Join(", ", kioskAddressParts.Where(x => !string.IsNullOrEmpty(x))); string deliveryTypeString; string[] deliveryAddressParts; switch (receiptData.DeliveryInfo?.Type) { case EkDeliveryTypeEnum.DeliveryServiceStore: deliveryTypeString = "Самовывоз из Новой Почты"; deliveryAddressParts = new[] { receiptData.DeliveryInfo?.Address?.City, // address line contains branch number receiptData.DeliveryInfo?.Address?.AddressLine1 }; break; default: case EkDeliveryTypeEnum.Courier: deliveryTypeString = "Курьер"; deliveryAddressParts = new[] { receiptData.DeliveryInfo?.Address?.City, receiptData.DeliveryInfo?.Address?.AddressLine1 }; break; } var deliveryAddressString = string.Join(", ", deliveryAddressParts.Where(x => !string.IsNullOrEmpty(x))); var productsStringBuilder = new StringBuilder(); if (receiptData.Products?.Length > 0) { for (var i = 0; i < receiptData.Products.Length; i++) { var product = receiptData.Products[i]; var totalProductPrice = product.Price * product.Quantity; productsStringBuilder.AppendLine( $@"{EscP.ALIGN_LEFT}{i + 1}. {product.Name.FirstNSymbols(100)} {product.Quantity} x {product.Price.ToAmountString(false)} = {totalProductPrice.ToAmountString(false)} {product.PriceCurrencyCode}"); } } var message = $@"{EscP.INIT}{EscP.SET_LEFT_MARGIN}{EscP.ALIGN_LEFT}{EscP.SET_B_MODE}{EscP.SET_BOLD}Номер терминала: {EscP.CLEAR_BOLD}{kioskAppSettings.KioskId} {EscP.SET_BOLD}Адрес терминала: {EscP.CLEAR_BOLD}{kioskAddressString} {EscP.SET_BOLD}Дата: {EscP.CLEAR_BOLD}{now:dd.MM.yyyy} {EscP.SET_BOLD}Время: {EscP.CLEAR_BOLD}{now:HH:mm:ss} {EscP.SET_BOLD}Номер операции: {EscP.CLEAR_BOLD}{receiptData.ReceiptNumber} {EscP.SET_A_MODE}{EscP.ALIGN_CENTER}{EscP.SET_BOLD}ЗАКАЗ ТОВАРОВ/УСЛУГ{EscP.CLEAR_BOLD}{EscP.SET_B_MODE} {productsStringBuilder}{EscP.ALIGN_LEFT}{EscP.SET_BOLD}ИТОГО: {EscP.CLEAR_BOLD}{EscP.ALIGN_RIGHT}{receiptData.TotalPrice.ToAmountString(false)} {receiptData.TotalPriceCurrencyCode} {EscP.ALIGN_LEFT}{EscP.SET_BOLD}Заказчик: {EscP.CLEAR_BOLD}{receiptData.CustomerInfo?.FullName} {EscP.SET_BOLD}Телефон: {EscP.CLEAR_BOLD}{receiptData.CustomerInfo?.Phone} {EscP.SET_BOLD}Доставка: {EscP.CLEAR_BOLD}{deliveryTypeString} {EscP.SET_BOLD}Адрес: {EscP.CLEAR_BOLD}{deliveryAddressString} {EscP.SET_A_MODE}{EscP.ALIGN_CENTER}{EscP.SET_BOLD}ИНСТРУКЦИЯ{EscP.CLEAR_BOLD}{EscP.SET_B_MODE} {EscP.ALIGN_LEFT}1. В течении 1 минуты Вы получите СМС с инструкциями по оплате. 2. Выберите и оплатите заказ удобным способом оплаты. 3. Следите за статусом заказа и доставки с помощью СМС. {EscP.SET_A_MODE}{EscP.ALIGN_CENTER}{EscP.SET_BOLD}ИЛИ ОПЛАТИТЕ В БАНКЕ ПО РЕКВИЗИТАМ{EscP.CLEAR_BOLD}{EscP.SET_B_MODE} {EscP.ALIGN_LEFT}ФОП ""Дубина Л. В."" 14000, Чернігівська обл., м. Чернігів, вул. Проспект Перемоги, 90/78 UA383052990000026009016303944 в АТ КБ ""ПРИВАТБАНК"" МФО 353586 ЄДРПОУ 2092012427 Платник єдиного податку на спрощеній системі оподаткування. Сума {receiptData.TotalPrice.ToAmountString(false)} {receiptData.TotalPriceCurrencyCode} {EscP.SET_A_MODE}{EscP.ALIGN_CENTER}{EscP.SET_BOLD}ДЯКУЄМО!{EscP.CLEAR_BOLD}{EscP.SET_B_MODE} {EscP.SET_BOLD}Телефон контакт-центра: {kioskAppSettings.SupportPhone} {EscP.FORM_FEED}"; message = message.Replace("\r", ""); // todo: REMOVE AND FIX UKR LANGUAGE message = message .Replace('І', 'I') .Replace('і', 'i') .Replace('Ї', 'I') .Replace('ї', 'i') .Replace('Є', 'E') .Replace('є', 'e'); // todo: should we make this only once? Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var cyrillicEncoding = Encoding.GetEncoding(866); var messageBytes = cyrillicEncoding.GetBytes(message); return(messageBytes); }