diff --git a/lib/application/printer/printer_form/printer_form_bloc.dart b/lib/application/printer/printer_form/printer_form_bloc.dart index 4b68b2c..d634a05 100644 --- a/lib/application/printer/printer_form/printer_form_bloc.dart +++ b/lib/application/printer/printer_form/printer_form_bloc.dart @@ -137,6 +137,12 @@ class PrinterFormBloc extends Bloc { outlet: currentOutlet, cashierName: 'Kasir Test', ); + } else if (e.code == 'bar') { + printValue = await PrintUi().printBar( + 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 afa452c..ee97e86 100644 --- a/lib/presentation/components/print/print_ui.dart +++ b/lib/presentation/components/print/print_ui.dart @@ -180,4 +180,64 @@ class PrintUi { return bytes; } + + Future> printBar({ + 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, + ); + + bytes += generator.reset(); + + bytes += builder.header( + outletName: outlet.name, + address: outlet.address, + phoneNumber: outlet.phoneNumber, + ); + + bytes += builder.printerType(printerType: 'BAR'); + + bytes += builder.separator(); + + bytes += builder.dateTime(DateTime.now()); + bytes += builder.orderInfo( + orderNumber: order.orderNumber, + customerName: order.metadata['customer_name'] ?? 'John Doe', + cashierName: cashierName, + paymentMethod: order.payments.last.paymentMethodName, + tableNumber: order.tableNumber, + ); + + bytes += builder.orderType(order.orderType); + + bytes += builder.emptyLines(1); + + for (final item in order.orderItems) { + 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; + } } diff --git a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_bar.dart b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_bar.dart index 6eb6007..c31b2e6 100644 --- a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_bar.dart +++ b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_bar.dart @@ -29,26 +29,47 @@ class _SettingPrinterBarState extends State { @override Widget build(BuildContext context) { - return BlocListener( - listenWhen: (p, c) => - p.failureOrDeleteSuccess != c.failureOrDeleteSuccess, - listener: (context, state) { - state.failureOrDeleteSuccess.fold( - () => null, - (either) => either.fold( - (f) => AppFlushbar.showPrinterFailureToast(context, f), - (_) { - if (context.mounted) { - context.read().add( - const PrinterLoaderEvent.getByCode('bar'), - ); - } + return MultiBlocListener( + listeners: [ + BlocListener( + listenWhen: (p, c) => + p.failureOrDeleteSuccess != c.failureOrDeleteSuccess, + listener: (context, state) { + state.failureOrDeleteSuccess.fold( + () => null, + (either) => either.fold( + (f) => AppFlushbar.showPrinterFailureToast(context, f), + (_) { + if (context.mounted) { + context.read().add( + const PrinterLoaderEvent.getByCode('bar'), + ); + } - AppFlushbar.showSuccess(context, 'Printer bar berhasil dihapus'); - }, - ), - ); - }, + AppFlushbar.showSuccess( + context, + 'Printer bar berhasil dihapus', + ); + }, + ), + ); + }, + ), + BlocListener( + listenWhen: (p, c) => p.failureOrPrintTest != c.failureOrPrintTest, + listener: (context, state) { + state.failureOrPrintTest.fold( + () => null, + (either) => either.fold( + (f) => AppFlushbar.showPrinterFailureToast(context, f), + (either) { + AppFlushbar.showSuccess(context, 'Printer test berhasil'); + }, + ), + ); + }, + ), + ], child: Material( color: AppColor.background, child: SingleChildScrollView( @@ -103,6 +124,14 @@ class _SettingPrinterBarState extends State { PrinterFormEvent.deleted(state.printer.id), ); }, + onTestPrint: () { + context.read().add( + PrinterFormEvent.printTest( + code: 'bar', + macAccdress: state.printer.address, + ), + ); + }, ), (f) => f.maybeMap( orElse: () => ErrorCard(