diff --git a/lib/presentation/home/dialog/payment_add_order_dialog.dart b/lib/presentation/home/dialog/payment_add_order_dialog.dart index 1ef57ee..e7f837f 100644 --- a/lib/presentation/home/dialog/payment_add_order_dialog.dart +++ b/lib/presentation/home/dialog/payment_add_order_dialog.dart @@ -133,9 +133,12 @@ class _PaymentAddOrderDialogState extends State { state.maybeWhen( orElse: () {}, success: (data) { - context.pushReplacement(SuccessSaveOrderPage( - order: data, - )); + context.pushReplacement( + SuccessSaveOrderPage( + productQuantity: widget.items, + order: data, + ), + ); }, error: (message) => AppFlushbar.showError(context, message), ); diff --git a/lib/presentation/home/dialog/payment_save_dialog.dart b/lib/presentation/home/dialog/payment_save_dialog.dart index 56b043c..e4f6532 100644 --- a/lib/presentation/home/dialog/payment_save_dialog.dart +++ b/lib/presentation/home/dialog/payment_save_dialog.dart @@ -145,6 +145,7 @@ class _PaymentSaveDialogState extends State { orElse: () {}, success: (data) { context.pushReplacement(SuccessSaveOrderPage( + productQuantity: widget.items, order: data, )); }, diff --git a/lib/presentation/home/pages/confirm_payment_page.dart b/lib/presentation/home/pages/confirm_payment_page.dart index 76f4450..5201220 100644 --- a/lib/presentation/home/pages/confirm_payment_page.dart +++ b/lib/presentation/home/pages/confirm_payment_page.dart @@ -906,6 +906,7 @@ class _ConfirmPaymentPageState extends State { success: (data) { context .pushReplacement(SuccessOrderPage( + productQuantity: items, order: data, )); }, diff --git a/lib/presentation/success/pages/success_order_page.dart b/lib/presentation/success/pages/success_order_page.dart index 028c4ce..6a5e696 100644 --- a/lib/presentation/success/pages/success_order_page.dart +++ b/lib/presentation/success/pages/success_order_page.dart @@ -1,16 +1,24 @@ +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/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'; import 'package:flutter/material.dart'; class SuccessOrderPage extends StatelessWidget { + final List productQuantity; final Order order; - const SuccessOrderPage({super.key, required this.order}); + const SuccessOrderPage( + {super.key, required this.order, required this.productQuantity}); @override Widget build(BuildContext context) { @@ -164,7 +172,96 @@ class SuccessOrderPage extends StatelessWidget { SpaceWidth(12), Expanded( child: Button.filled( - onPressed: () {}, + 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')), + ); + } + } + }, label: 'Cetak', icon: Icon( Icons.print, diff --git a/lib/presentation/success/pages/success_save_order_page.dart b/lib/presentation/success/pages/success_save_order_page.dart index c01e902..9680c47 100644 --- a/lib/presentation/success/pages/success_save_order_page.dart +++ b/lib/presentation/success/pages/success_save_order_page.dart @@ -1,16 +1,24 @@ +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/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'; import 'package:flutter/material.dart'; class SuccessSaveOrderPage extends StatelessWidget { + final List productQuantity; final Order order; - const SuccessSaveOrderPage({super.key, required this.order}); + const SuccessSaveOrderPage( + {super.key, required this.order, required this.productQuantity}); @override Widget build(BuildContext context) { @@ -160,7 +168,96 @@ class SuccessSaveOrderPage extends StatelessWidget { SpaceWidth(12), Expanded( child: Button.filled( - onPressed: () {}, + 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')), + ); + } + } + }, label: 'Cetak', icon: Icon( Icons.print,