diff --git a/lib/infrastructure/printer/repositories/printer_repository.dart b/lib/infrastructure/printer/repositories/printer_repository.dart index c8cb3b6..e1a4305 100644 --- a/lib/infrastructure/printer/repositories/printer_repository.dart +++ b/lib/infrastructure/printer/repositories/printer_repository.dart @@ -460,78 +460,78 @@ class PrinterRepository implements IPrinterRepository { required Order order, }) async { return await _globalPrintLock.synchronized(() async { - try { - final outlet = await _outletLocalDatasource.currentOutlet(); - final user = await _authLocalDataProvider.currentUser(); + try { + final outlet = await _outletLocalDatasource.currentOutlet(); + final user = await _authLocalDataProvider.currentUser(); - // Struck for customer - if (order.totalPaid > 0) { - final result = await _printReceipt( + // Struck for customer + if (order.totalPaid > 0) { + final result = await _printReceipt( + order: order, + outlet: outlet, + cashieName: user.name, + ); + if (result.isLeft()) return result; // Jika gagal, return error + } + + // Struck for cashier + final cashierResult = await _printCashier( order: order, outlet: outlet, cashieName: user.name, ); - if (result.isLeft()) return result; // Jika gagal, return error - } + if (cashierResult.isLeft()) return cashierResult; - // Struck for cashier - final cashierResult = await _printCashier( - order: order, - outlet: outlet, - cashieName: user.name, - ); - if (cashierResult.isLeft()) return cashierResult; - - // Struck for bar if exist product bar - final itemsKitchen = order.orderItems.where( - (item) => item.printerType == 'kitchen', - ); - - if (itemsKitchen.isNotEmpty) { - final kitchenResult = await _printKitchen( + // Struck for checker + final checkerResult = await _printChecker( order: order, outlet: outlet, cashieName: user.name, ); - if (kitchenResult.isLeft()) return kitchenResult; - } + if (checkerResult.isLeft()) return checkerResult; - // Struck for bar if exist product bar - final itemsBar = order.orderItems.where( - (item) => item.printerType == 'bar', - ); - - if (itemsBar.isNotEmpty) { - final barResult = await _printBar( - 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) { + final barResult = await _printBar( + order: order, + outlet: outlet, + cashieName: user.name, + ); + if (barResult.isLeft()) return barResult; + } + + return right(unit); + } catch (e, stackTrace) { + FirebaseCrashlytics.instance.recordError( + 'Print Struck Order Error: $e', + stackTrace, + reason: + 'Print struck order error / Printer not setting in printer page', + information: ['Order ID: ${order.id}'], + ); + log("Error printing struck order", name: _logName, error: e); + return left( + const PrinterFailure.dynamicErrorMessage('Error printing order'), ); - 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( - 'Print Struck Order Error: $e', - stackTrace, - reason: - 'Print struck order error / Printer not setting in printer page', - information: ['Order ID: ${order.id}'], - ); - log("Error printing struck order", name: _logName, error: e); - return left( - const PrinterFailure.dynamicErrorMessage('Error printing order'), - ); - } }); // end _globalPrintLock.synchronized } @@ -540,69 +540,69 @@ class PrinterRepository implements IPrinterRepository { required Order order, }) async { return await _globalPrintLock.synchronized(() async { - try { - final outlet = await _outletLocalDatasource.currentOutlet(); - final user = await _authLocalDataProvider.currentUser(); + try { + final outlet = await _outletLocalDatasource.currentOutlet(); + final user = await _authLocalDataProvider.currentUser(); - // Struck for cashier - final cashierResult = await _printCashier( - order: order, - outlet: outlet, - cashieName: user.name, - ); - if (cashierResult.isLeft()) return cashierResult; - - // Struck for kitchen - // Struck for bar if exist product bar - final itemsKitchen = order.orderItems.where( - (item) => item.printerType == 'kitchen', - ); - - if (itemsKitchen.isNotEmpty) { - final kitchenResult = await _printKitchen( + // Struck for cashier + final cashierResult = await _printCashier( order: order, outlet: outlet, cashieName: user.name, ); - if (kitchenResult.isLeft()) return kitchenResult; - } + if (cashierResult.isLeft()) return cashierResult; - // Struck for bar if exist product bar - final itemsBar = order.orderItems.where( - (item) => item.printerType == 'bar', - ); - - if (itemsBar.isNotEmpty) { - final barResult = await _printBar( + // Struck for checker + final checkerResult = await _printChecker( order: order, outlet: outlet, cashieName: user.name, ); - if (barResult.isLeft()) return barResult; + if (checkerResult.isLeft()) return checkerResult; + + // Struck for kitchen + // 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) { + final barResult = await _printBar( + order: order, + outlet: outlet, + cashieName: user.name, + ); + if (barResult.isLeft()) return barResult; + } + + return right(unit); + } catch (e, stackTrace) { + FirebaseCrashlytics.instance.recordError( + 'Print Struck Save Order Error: $e', + stackTrace, + reason: + 'Print struck save order error / Printer not setting in printer page', + information: ['Order ID: ${order.id}'], + ); + log("Error printing struck save order", name: _logName, error: e); + return left( + const PrinterFailure.dynamicErrorMessage('Error printing save order'), + ); } - - // 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( - 'Print Struck Save Order Error: $e', - stackTrace, - reason: - 'Print struck save order error / Printer not setting in printer page', - information: ['Order ID: ${order.id}'], - ); - log("Error printing struck save order", name: _logName, error: e); - return left( - const PrinterFailure.dynamicErrorMessage('Error printing save order'), - ); - } }); // end _globalPrintLock.synchronized } @@ -611,9 +611,9 @@ class PrinterRepository implements IPrinterRepository { required Order order, }) async { return await _globalPrintLock.synchronized(() async { - final outlet = await _outletLocalDatasource.currentOutlet(); - final user = await _authLocalDataProvider.currentUser(); - return _printCashier(order: order, outlet: outlet, cashieName: user.name); + final outlet = await _outletLocalDatasource.currentOutlet(); + final user = await _authLocalDataProvider.currentUser(); + return _printCashier(order: order, outlet: outlet, cashieName: user.name); }); } @@ -622,9 +622,9 @@ class PrinterRepository implements IPrinterRepository { required Order order, }) async { return await _globalPrintLock.synchronized(() async { - final outlet = await _outletLocalDatasource.currentOutlet(); - final user = await _authLocalDataProvider.currentUser(); - return _printVoid(order: order, outlet: outlet, cashieName: user.name); + final outlet = await _outletLocalDatasource.currentOutlet(); + final user = await _authLocalDataProvider.currentUser(); + return _printVoid(order: order, outlet: outlet, cashieName: user.name); }); } @@ -633,9 +633,13 @@ class PrinterRepository implements IPrinterRepository { required Order order, }) async { return await _globalPrintLock.synchronized(() async { - final outlet = await _outletLocalDatasource.currentOutlet(); - final user = await _authLocalDataProvider.currentUser(); - return _printSplitBill(order: order, outlet: outlet, cashieName: user.name); + final outlet = await _outletLocalDatasource.currentOutlet(); + final user = await _authLocalDataProvider.currentUser(); + return _printSplitBill( + order: order, + outlet: outlet, + cashieName: user.name, + ); }); } @@ -644,9 +648,9 @@ class PrinterRepository implements IPrinterRepository { required Order order, }) async { return await _globalPrintLock.synchronized(() async { - final outlet = await _outletLocalDatasource.currentOutlet(); - final user = await _authLocalDataProvider.currentUser(); - return _printReceipt(order: order, outlet: outlet, cashieName: user.name); + final outlet = await _outletLocalDatasource.currentOutlet(); + final user = await _authLocalDataProvider.currentUser(); + return _printReceipt(order: order, outlet: outlet, cashieName: user.name); }); } @@ -1075,9 +1079,9 @@ class PrinterRepository implements IPrinterRepository { required Order order, }) async { return await _globalPrintLock.synchronized(() async { - final outlet = await _outletLocalDatasource.currentOutlet(); - final user = await _authLocalDataProvider.currentUser(); - return _printBar(order: order, outlet: outlet, cashieName: user.name); + final outlet = await _outletLocalDatasource.currentOutlet(); + final user = await _authLocalDataProvider.currentUser(); + return _printBar(order: order, outlet: outlet, cashieName: user.name); }); } @@ -1086,9 +1090,9 @@ class PrinterRepository implements IPrinterRepository { required Order order, }) async { return await _globalPrintLock.synchronized(() async { - final outlet = await _outletLocalDatasource.currentOutlet(); - final user = await _authLocalDataProvider.currentUser(); - return _printChecker(order: order, outlet: outlet, cashieName: user.name); + final outlet = await _outletLocalDatasource.currentOutlet(); + final user = await _authLocalDataProvider.currentUser(); + return _printChecker(order: order, outlet: outlet, cashieName: user.name); }); } @@ -1097,9 +1101,9 @@ class PrinterRepository implements IPrinterRepository { required Order order, }) async { return await _globalPrintLock.synchronized(() async { - final outlet = await _outletLocalDatasource.currentOutlet(); - final user = await _authLocalDataProvider.currentUser(); - return _printKitchen(order: order, outlet: outlet, cashieName: user.name); + final outlet = await _outletLocalDatasource.currentOutlet(); + final user = await _authLocalDataProvider.currentUser(); + return _printKitchen(order: order, outlet: outlet, cashieName: user.name); }); } }