From e3b9444a08eb8b29ec2bdd6335876d8b416454c8 Mon Sep 17 00:00:00 2001 From: efrilm Date: Thu, 13 Nov 2025 15:57:43 +0700 Subject: [PATCH] fix printer --- .../repositories/printer_repository.dart | 96 ++++++++++++++----- 1 file changed, 70 insertions(+), 26 deletions(-) diff --git a/lib/infrastructure/printer/repositories/printer_repository.dart b/lib/infrastructure/printer/repositories/printer_repository.dart index 5389f1c..f055e29 100644 --- a/lib/infrastructure/printer/repositories/printer_repository.dart +++ b/lib/infrastructure/printer/repositories/printer_repository.dart @@ -429,21 +429,19 @@ class PrinterRepository implements IPrinterRepository { ); if (cashierResult.isLeft()) return cashierResult; - // Struck for kitchen - final kitchenResult = await _printKitchen( - order: order, - outlet: outlet, - cashieName: user.name, + // Struck for bar if exist product bar + final itemsKitchen = order.orderItems.where( + (item) => item.printerType == 'kitchen', ); - if (kitchenResult.isLeft()) return kitchenResult; - // Struck for checker - final checkerResult = await _printChecker( - order: order, - outlet: outlet, - cashieName: user.name, - ); - if (checkerResult.isLeft()) return checkerResult; + if (itemsKitchen.isNotEmpty) { + final kitchenResult = await _printKitchen( + order: order, + outlet: outlet, + cashieName: user.name, + ); + if (kitchenResult.isLeft()) return kitchenResult; + } // Struck for bar if exist product bar final itemsBar = order.orderItems.where( @@ -459,6 +457,14 @@ class PrinterRepository implements IPrinterRepository { if (barResult.isLeft()) return barResult; } + // Struck for checker + final checkerResult = await _printChecker( + order: order, + outlet: outlet, + cashieName: user.name, + ); + if (checkerResult.isLeft()) return checkerResult; + return right(unit); } catch (e, stackTrace) { FirebaseCrashlytics.instance.recordError( @@ -484,20 +490,50 @@ class PrinterRepository implements IPrinterRepository { final user = await _authLocalDataProvider.currentUser(); // Struck for cashier - _printCashier(order: order, outlet: outlet, cashieName: user.name); + final cashierResult = await _printCashier( + order: order, + outlet: outlet, + cashieName: user.name, + ); + if (cashierResult.isLeft()) return cashierResult; + // Struck for kitchen - _printKitchen(order: order, outlet: outlet, cashieName: user.name); - // Struck for checker - _printChecker(order: order, outlet: outlet, cashieName: user.name); + // Struck for bar if exist product bar + final itemsKitchen = order.orderItems.where( + (item) => item.printerType == 'kitchen', + ); + + if (itemsKitchen.isNotEmpty) { + final kitchenResult = await _printKitchen( + order: order, + outlet: outlet, + cashieName: user.name, + ); + if (kitchenResult.isLeft()) return kitchenResult; + } + // Struck for bar if exist product bar final itemsBar = order.orderItems.where( (item) => item.printerType == 'bar', ); if (itemsBar.isNotEmpty) { - _printBar(order: order, outlet: outlet, cashieName: user.name); + final barResult = await _printBar( + order: order, + outlet: outlet, + cashieName: user.name, + ); + if (barResult.isLeft()) return barResult; } + // Struck for checker + final checkerResult = await _printChecker( + order: order, + outlet: outlet, + cashieName: user.name, + ); + if (checkerResult.isLeft()) return checkerResult; + return right(unit); } catch (e, stackTrace) { FirebaseCrashlytics.instance.recordError( @@ -672,15 +708,23 @@ class PrinterRepository implements IPrinterRepository { ); if (kitchenPrinter.hasData) { try { - final printer = kitchenPrinter.data!.toDomain(); + final productKitchen = order.orderItems + .where((item) => item.printerType == 'kitchen') + .toList(); - final printValue = await PrintUi().printKitchen( - order: order, - outlet: outlet, - cashierName: cashieName, - ); + if (productKitchen.isNotEmpty) { + final printer = kitchenPrinter.data!.toDomain(); - await printStruct(printer, printValue); + final printValue = await PrintUi().printKitchen( + order: order.copyWith(orderItems: productKitchen), + outlet: outlet, + cashierName: cashieName, + ); + + await printStruct(printer, printValue); + } else { + log('Product with printer type bar not found', name: _logName); + } log('Finished printed kitchen', name: _logName); @@ -789,7 +833,7 @@ class PrinterRepository implements IPrinterRepository { final printer = barPrinter.data!.toDomain(); final printValue = await PrintUi().printBar( - order: order, + order: order.copyWith(orderItems: productBar), outlet: outlet, cashierName: cashieName, );