From 8923ce737dd700d12ea95cf39beab93a99343eb1 Mon Sep 17 00:00:00 2001 From: efrilm Date: Thu, 6 Nov 2025 18:41:34 +0700 Subject: [PATCH] print kitchen --- .../printer_form/printer_form_bloc.dart | 6 +++ .../components/print/print_ui.dart | 51 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/lib/application/printer/printer_form/printer_form_bloc.dart b/lib/application/printer/printer_form/printer_form_bloc.dart index f971339..4b68b2c 100644 --- a/lib/application/printer/printer_form/printer_form_bloc.dart +++ b/lib/application/printer/printer_form/printer_form_bloc.dart @@ -131,6 +131,12 @@ class PrinterFormBloc extends Bloc { outlet: currentOutlet, cashierName: 'Kasir Test', ); + } else if (e.code == 'kitchen') { + printValue = await PrintUi().printKitchen( + order: Order.mockOrder(), + outlet: currentOutlet, + cashierName: 'Kasir Test', + ); } final printer = Printer.fromTest( diff --git a/lib/presentation/components/print/print_ui.dart b/lib/presentation/components/print/print_ui.dart index 2f6545f..afa452c 100644 --- a/lib/presentation/components/print/print_ui.dart +++ b/lib/presentation/components/print/print_ui.dart @@ -129,4 +129,55 @@ class PrintUi { return bytes; } + + Future> printKitchen({ + required Order order, + required Outlet outlet, + required String cashierName, + int paper = 58, + }) async { + List bytes = []; + + final profile = await CapabilityProfile.load(); + final generator = Generator( + paper == 58 ? PaperSize.mm58 : PaperSize.mm80, + profile, + ); + final builder = ReceiptComponentBuilder( + generator: generator, + paperSize: 58, + ); + + for (final item in order.orderItems) { + bytes += generator.reset(); + + bytes += builder.separator(); + bytes += builder.printerType(printerType: 'KITCHEN'); + bytes += builder.separator(); + bytes += builder.dateTime(DateTime.now()); + bytes += builder.orderInfo( + orderNumber: order.orderNumber, + customerName: order.metadata['customer_name'] ?? 'John Doe', + cashierName: cashierName, + tableNumber: order.tableNumber, + ); + + bytes += builder.separator(); + bytes += builder.emptyLines(1); + + bytes += builder.orderItem( + productName: item.productName, + quantity: item.quantity, + unitPrice: item.unitPrice.currencyFormatRpV2, + totalPrice: item.totalPrice.currencyFormatRpV2, + variantName: item.productVariantName, + notes: item.notes, + ); + + bytes += builder.separator(); + bytes += builder.footer(); + } + + return bytes; + } }