diff --git a/lib/application/printer/printer_form/printer_form_bloc.dart b/lib/application/printer/printer_form/printer_form_bloc.dart index fe9de51..f971339 100644 --- a/lib/application/printer/printer_form/printer_form_bloc.dart +++ b/lib/application/printer/printer_form/printer_form_bloc.dart @@ -117,11 +117,21 @@ class PrinterFormBloc extends Bloc { final currentOutlet = await _outletRepository.currentOutlet(); - final printValue = await PrintUi().printOrder( - order: Order.mockOrder(), - outlet: currentOutlet, - cashierName: 'Kasir Test', - ); + List printValue = []; + + if (e.code == "receipt") { + printValue = await PrintUi().printOrder( + order: Order.mockOrder(), + outlet: currentOutlet, + cashierName: 'Kasir Test', + ); + } else if (e.code == "checker") { + printValue = await PrintUi().printChecker( + order: Order.mockOrder(), + outlet: currentOutlet, + cashierName: 'Kasir Test', + ); + } final printer = Printer.fromTest( code: e.code, diff --git a/lib/presentation/components/print/print_ui.dart b/lib/presentation/components/print/print_ui.dart index a9894a2..2f6545f 100644 --- a/lib/presentation/components/print/print_ui.dart +++ b/lib/presentation/components/print/print_ui.dart @@ -69,4 +69,64 @@ class PrintUi { return bytes; } + + Future> printChecker({ + 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: 'CHECKER'); + + 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/components/print/receipt_component_builder.dart b/lib/presentation/components/print/receipt_component_builder.dart index 790497b..fdb8eed 100644 --- a/lib/presentation/components/print/receipt_component_builder.dart +++ b/lib/presentation/components/print/receipt_component_builder.dart @@ -136,6 +136,19 @@ class ReceiptComponentBuilder { return bytes; } + List printerType({required String printerType}) { + List bytes = []; + + bytes += textCenter( + printerType, + bold: true, + height: PosTextSize.size1, + width: PosTextSize.size1, + ); + + return bytes; + } + /// Print date and time List dateTime(DateTime dateTime) { return row2Columns( diff --git a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart index f98ad24..29079a6 100644 --- a/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart +++ b/lib/presentation/pages/main/pages/setting/sections/printer/setting_printer_checker.dart @@ -29,29 +29,47 @@ class _SettingPrinterCheckerState 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('checker'), - ); - } + 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('checker'), + ); + } - AppFlushbar.showSuccess( - context, - 'Printer checker berhasil dihapus', - ); - }, - ), - ); - }, + AppFlushbar.showSuccess( + context, + 'Printer checker 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( @@ -106,6 +124,14 @@ class _SettingPrinterCheckerState extends State { PrinterFormEvent.deleted(state.printer.id), ); }, + onTestPrint: () { + context.read().add( + PrinterFormEvent.printTest( + code: 'checker', + macAccdress: state.printer.address, + ), + ); + }, ), (f) => f.maybeMap( orElse: () => ErrorCard(