From f73aa619e9ddc9e207a1eb9285bf22d9310113b4 Mon Sep 17 00:00:00 2001 From: efrilm Date: Wed, 6 Aug 2025 19:52:40 +0700 Subject: [PATCH] feat: print --- lib/core/function/app_function.dart | 96 +++++++++++++++++ .../success/pages/success_order_page.dart | 99 ++--------------- .../success/pages/success_payment_page.dart | 102 ++---------------- .../pages/success_save_order_page.dart | 102 ++---------------- .../void/pages/success_void_page.dart | 11 +- 5 files changed, 115 insertions(+), 295 deletions(-) create mode 100644 lib/core/function/app_function.dart diff --git a/lib/core/function/app_function.dart b/lib/core/function/app_function.dart new file mode 100644 index 0000000..e0e99cd --- /dev/null +++ b/lib/core/function/app_function.dart @@ -0,0 +1,96 @@ +import 'dart:developer'; + +import 'package:enaklo_pos/core/extensions/string_ext.dart'; +import 'package:enaklo_pos/core/utils/printer_service.dart'; +import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart'; +import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; +import 'package:enaklo_pos/data/models/response/order_response_model.dart'; +import 'package:enaklo_pos/presentation/home/models/product_quantity.dart'; +import 'package:flutter/material.dart'; + +Future onPrint( + BuildContext context, { + required List productQuantity, + required Order order, +}) async { + final checkerPrinter = + await ProductLocalDatasource.instance.getPrinterByCode('checker'); + final kitchenPrinter = + await ProductLocalDatasource.instance.getPrinterByCode('kitchen'); + final barPrinter = + await ProductLocalDatasource.instance.getPrinterByCode('bar'); + + log("Checker printer: ${checkerPrinter?.toMap()}"); + log("Kitchen printer: ${kitchenPrinter?.toMap()}"); + log("Bar printer: ${barPrinter?.toMap()}"); + + // Checker printer + if (checkerPrinter != null) { + try { + final printValue = await PrintDataoutputs.instance.printChecker( + productQuantity + .where((e) => e.product.printerType == "checker") + .toList(), + order.tableNumber ?? "", + order.orderNumber ?? "", + 'kasir', + checkerPrinter.paper.toIntegerFromText, + order.orderType ?? "", + ); + + await PrinterService() + // ignore: use_build_context_synchronously + .printWithPrinter(checkerPrinter, printValue, context); + } catch (e) { + log("Error printing checker: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error printing checker: $e')), + ); + } + } + + // Kitchen printer + if (kitchenPrinter != null) { + try { + final printValue = await PrintDataoutputs.instance.printKitchen( + productQuantity + .where((e) => e.product.printerType == "kitchen") + .toList(), + order.tableNumber!, + order.orderNumber ?? "", + 'kasir', + kitchenPrinter.paper.toIntegerFromText, + order.orderType ?? "", + ); + + await PrinterService() + .printWithPrinter(kitchenPrinter, printValue, context); + } catch (e) { + log("Error printing kitchen order: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error printing kitchen order: $e')), + ); + } + } + + // Bar printer + if (barPrinter != null) { + try { + final printValue = await PrintDataoutputs.instance.printBar( + productQuantity.where((e) => e.product.printerType == "bar").toList(), + order.tableNumber ?? "", + order.orderNumber ?? "", + 'kasir', + barPrinter.paper.toIntegerFromText, + order.orderType ?? "", + ); + + await PrinterService().printWithPrinter(barPrinter, printValue, context); + } catch (e) { + log("Error printing bar order: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text('Error printing bar order: $e')), + ); + } + } +} diff --git a/lib/presentation/success/pages/success_order_page.dart b/lib/presentation/success/pages/success_order_page.dart index 6a5e696..dda2b69 100644 --- a/lib/presentation/success/pages/success_order_page.dart +++ b/lib/presentation/success/pages/success_order_page.dart @@ -1,14 +1,10 @@ -import 'dart:developer'; - import 'package:enaklo_pos/core/components/components.dart'; import 'package:enaklo_pos/core/components/dashed_divider.dart'; import 'package:enaklo_pos/core/constants/colors.dart'; import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; import 'package:enaklo_pos/core/extensions/date_time_ext.dart'; import 'package:enaklo_pos/core/extensions/string_ext.dart'; -import 'package:enaklo_pos/core/utils/printer_service.dart'; -import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart'; -import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; +import 'package:enaklo_pos/core/function/app_function.dart'; import 'package:enaklo_pos/data/models/response/order_response_model.dart'; import 'package:enaklo_pos/presentation/home/models/product_quantity.dart'; import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart'; @@ -173,94 +169,11 @@ class SuccessOrderPage extends StatelessWidget { Expanded( child: Button.filled( onPressed: () async { - final checkerPrinter = await ProductLocalDatasource - .instance - .getPrinterByCode('checker'); - final kitchenPrinter = await ProductLocalDatasource - .instance - .getPrinterByCode('kitchen'); - final barPrinter = await ProductLocalDatasource - .instance - .getPrinterByCode('bar'); - - log("Checker printer: ${checkerPrinter?.toMap()}"); - log("Kitchen printer: ${kitchenPrinter?.toMap()}"); - log("Bar printer: ${barPrinter?.toMap()}"); - - // Checker printer - if (checkerPrinter != null) { - try { - final printValue = - await PrintDataoutputs.instance.printChecker( - productQuantity, - order.tableNumber ?? "", - order.orderNumber ?? "", - 'kasir', - checkerPrinter.paper.toIntegerFromText, - order.orderType ?? "", - ); - - await PrinterService().printWithPrinter( - checkerPrinter, printValue, context); - } catch (e) { - log("Error printing checker: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: - Text('Error printing checker: $e')), - ); - } - } - - // Kitchen printer - if (kitchenPrinter != null) { - try { - final printValue = - await PrintDataoutputs.instance.printKitchen( - productQuantity, - order.tableNumber!, - order.orderNumber ?? "", - 'kasir', - kitchenPrinter.paper.toIntegerFromText, - order.orderType ?? "", - ); - - await PrinterService().printWithPrinter( - kitchenPrinter, printValue, context); - } catch (e) { - log("Error printing kitchen order: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Error printing kitchen order: $e')), - ); - } - } - - // Bar printer - if (barPrinter != null) { - try { - final printValue = - await PrintDataoutputs.instance.printBar( - productQuantity, - order.tableNumber ?? "", - order.orderNumber ?? "", - 'kasir', - barPrinter.paper.toIntegerFromText, - order.orderType ?? "", - ); - - await PrinterService().printWithPrinter( - barPrinter, printValue, context); - } catch (e) { - log("Error printing bar order: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: - Text('Error printing bar order: $e')), - ); - } - } + onPrint( + context, + productQuantity: productQuantity, + order: order, + ); }, label: 'Cetak', icon: Icon( diff --git a/lib/presentation/success/pages/success_payment_page.dart b/lib/presentation/success/pages/success_payment_page.dart index c50a37a..c665448 100644 --- a/lib/presentation/success/pages/success_payment_page.dart +++ b/lib/presentation/success/pages/success_payment_page.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:enaklo_pos/core/components/buttons.dart'; import 'package:enaklo_pos/core/components/dashed_divider.dart'; import 'package:enaklo_pos/core/components/spaces.dart'; @@ -7,9 +5,7 @@ import 'package:enaklo_pos/core/constants/colors.dart'; import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; import 'package:enaklo_pos/core/extensions/date_time_ext.dart'; import 'package:enaklo_pos/core/extensions/string_ext.dart'; -import 'package:enaklo_pos/core/utils/printer_service.dart'; -import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart'; -import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; +import 'package:enaklo_pos/core/function/app_function.dart'; import 'package:enaklo_pos/data/models/response/payment_response_model.dart'; import 'package:enaklo_pos/presentation/home/models/product_quantity.dart'; import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart'; @@ -184,97 +180,11 @@ class _SuccessPaymentPageState extends State { Expanded( child: Button.filled( onPressed: () async { - final checkerPrinter = - await ProductLocalDatasource.instance - .getPrinterByCode('checker'); - final kitchenPrinter = - await ProductLocalDatasource.instance - .getPrinterByCode('kitchen'); - final barPrinter = await ProductLocalDatasource - .instance - .getPrinterByCode('bar'); - - log("Checker printer: ${checkerPrinter?.toMap()}"); - log("Kitchen printer: ${kitchenPrinter?.toMap()}"); - log("Bar printer: ${barPrinter?.toMap()}"); - - // Checker printer - if (checkerPrinter != null) { - try { - final printValue = await PrintDataoutputs - .instance - .printChecker( - widget.productQuantity, - order.tableNumber ?? "", - order.orderNumber ?? "", - 'kasir', - checkerPrinter.paper.toIntegerFromText, - order.orderType ?? "", - ); - - await PrinterService().printWithPrinter( - checkerPrinter, printValue, context); - } catch (e) { - log("Error printing checker: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Error printing checker: $e')), - ); - } - } - - // Kitchen printer - if (kitchenPrinter != null) { - try { - final printValue = await PrintDataoutputs - .instance - .printKitchen( - widget.productQuantity, - order.tableNumber!, - order.orderNumber ?? "", - 'kasir', - kitchenPrinter.paper.toIntegerFromText, - order.orderType ?? "", - ); - - await PrinterService().printWithPrinter( - kitchenPrinter, printValue, context); - } catch (e) { - log("Error printing kitchen order: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Error printing kitchen order: $e')), - ); - } - } - - // Bar printer - if (barPrinter != null) { - try { - final printValue = await PrintDataoutputs - .instance - .printBar( - widget.productQuantity, - order.tableNumber ?? "", - order.orderNumber ?? "", - 'kasir', - barPrinter.paper.toIntegerFromText, - order.orderType ?? "", - ); - - await PrinterService().printWithPrinter( - barPrinter, printValue, context); - } catch (e) { - log("Error printing bar order: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Error printing bar order: $e')), - ); - } - } + onPrint( + context, + productQuantity: widget.productQuantity, + order: order, + ); }, label: 'Cetak', icon: Icon( diff --git a/lib/presentation/success/pages/success_save_order_page.dart b/lib/presentation/success/pages/success_save_order_page.dart index 9e0d889..ea48625 100644 --- a/lib/presentation/success/pages/success_save_order_page.dart +++ b/lib/presentation/success/pages/success_save_order_page.dart @@ -1,14 +1,10 @@ -import 'dart:developer'; - import 'package:enaklo_pos/core/components/components.dart'; import 'package:enaklo_pos/core/components/dashed_divider.dart'; import 'package:enaklo_pos/core/constants/colors.dart'; import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; import 'package:enaklo_pos/core/extensions/date_time_ext.dart'; import 'package:enaklo_pos/core/extensions/string_ext.dart'; -import 'package:enaklo_pos/core/utils/printer_service.dart'; -import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart'; -import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; +import 'package:enaklo_pos/core/function/app_function.dart'; import 'package:enaklo_pos/presentation/home/models/product_quantity.dart'; import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart'; import 'package:enaklo_pos/presentation/sales/blocs/order_loader/order_loader_bloc.dart'; @@ -203,97 +199,11 @@ class _SuccessSaveOrderPageState extends State { Expanded( child: Button.filled( onPressed: () async { - final checkerPrinter = - await ProductLocalDatasource.instance - .getPrinterByCode('checker'); - final kitchenPrinter = - await ProductLocalDatasource.instance - .getPrinterByCode('kitchen'); - final barPrinter = await ProductLocalDatasource - .instance - .getPrinterByCode('bar'); - - log("Checker printer: ${checkerPrinter?.toMap()}"); - log("Kitchen printer: ${kitchenPrinter?.toMap()}"); - log("Bar printer: ${barPrinter?.toMap()}"); - - // Checker printer - if (checkerPrinter != null) { - try { - final printValue = await PrintDataoutputs - .instance - .printChecker( - widget.productQuantity, - orderx.tableNumber ?? "", - orderx.orderNumber ?? "", - 'kasir', - checkerPrinter.paper.toIntegerFromText, - orderx.orderType ?? "", - ); - - await PrinterService().printWithPrinter( - checkerPrinter, printValue, context); - } catch (e) { - log("Error printing checker: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Error printing checker: $e')), - ); - } - } - - // Kitchen printer - if (kitchenPrinter != null) { - try { - final printValue = await PrintDataoutputs - .instance - .printKitchen( - widget.productQuantity, - orderx.tableNumber!, - orderx.orderNumber ?? "", - 'kasir', - kitchenPrinter.paper.toIntegerFromText, - orderx.orderType ?? "", - ); - - await PrinterService().printWithPrinter( - kitchenPrinter, printValue, context); - } catch (e) { - log("Error printing kitchen order: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Error printing kitchen order: $e')), - ); - } - } - - // Bar printer - if (barPrinter != null) { - try { - final printValue = await PrintDataoutputs - .instance - .printBar( - widget.productQuantity, - orderx.tableNumber ?? "", - orderx.orderNumber ?? "", - 'kasir', - barPrinter.paper.toIntegerFromText, - orderx.orderType ?? "", - ); - - await PrinterService().printWithPrinter( - barPrinter, printValue, context); - } catch (e) { - log("Error printing bar order: $e"); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - 'Error printing bar order: $e')), - ); - } - } + onPrint( + context, + productQuantity: widget.productQuantity, + order: orderx, + ); }, label: 'Cetak', icon: Icon( diff --git a/lib/presentation/void/pages/success_void_page.dart b/lib/presentation/void/pages/success_void_page.dart index 44f90d2..c740d9c 100644 --- a/lib/presentation/void/pages/success_void_page.dart +++ b/lib/presentation/void/pages/success_void_page.dart @@ -632,14 +632,5 @@ class _SuccessVoidPageState extends State ); } - void _printVoidReceipt() { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text('Struk void sedang dicetak...'), - backgroundColor: primaryColor, - behavior: SnackBarBehavior.floating, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), - ), - ); - } + void _printVoidReceipt() {} }