feat: sort order printer

This commit is contained in:
Efril
2026-07-22 14:56:38 +07:00
parent eb031d4c2a
commit 1ff144a1a2
@@ -460,78 +460,78 @@ class PrinterRepository implements IPrinterRepository {
required Order order, required Order order,
}) async { }) async {
return await _globalPrintLock.synchronized(() async { return await _globalPrintLock.synchronized(() async {
try { try {
final outlet = await _outletLocalDatasource.currentOutlet(); final outlet = await _outletLocalDatasource.currentOutlet();
final user = await _authLocalDataProvider.currentUser(); final user = await _authLocalDataProvider.currentUser();
// Struck for customer // Struck for customer
if (order.totalPaid > 0) { if (order.totalPaid > 0) {
final result = await _printReceipt( 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, order: order,
outlet: outlet, outlet: outlet,
cashieName: user.name, cashieName: user.name,
); );
if (result.isLeft()) return result; // Jika gagal, return error if (cashierResult.isLeft()) return cashierResult;
}
// Struck for cashier // Struck for checker
final cashierResult = await _printCashier( final checkerResult = await _printChecker(
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(
order: order, order: order,
outlet: outlet, outlet: outlet,
cashieName: user.name, cashieName: user.name,
); );
if (kitchenResult.isLeft()) return kitchenResult; if (checkerResult.isLeft()) return checkerResult;
}
// Struck for bar if exist product bar // Struck for bar if exist product bar
final itemsBar = order.orderItems.where( final itemsKitchen = order.orderItems.where(
(item) => item.printerType == 'bar', (item) => item.printerType == 'kitchen',
); );
if (itemsBar.isNotEmpty) { if (itemsKitchen.isNotEmpty) {
final barResult = await _printBar( final kitchenResult = await _printKitchen(
order: order, order: order,
outlet: outlet, outlet: outlet,
cashieName: user.name, 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 }); // end _globalPrintLock.synchronized
} }
@@ -540,69 +540,69 @@ class PrinterRepository implements IPrinterRepository {
required Order order, required Order order,
}) async { }) async {
return await _globalPrintLock.synchronized(() async { return await _globalPrintLock.synchronized(() async {
try { try {
final outlet = await _outletLocalDatasource.currentOutlet(); final outlet = await _outletLocalDatasource.currentOutlet();
final user = await _authLocalDataProvider.currentUser(); final user = await _authLocalDataProvider.currentUser();
// Struck for cashier // Struck for cashier
final cashierResult = await _printCashier( 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(
order: order, order: order,
outlet: outlet, outlet: outlet,
cashieName: user.name, cashieName: user.name,
); );
if (kitchenResult.isLeft()) return kitchenResult; if (cashierResult.isLeft()) return cashierResult;
}
// Struck for bar if exist product bar // Struck for checker
final itemsBar = order.orderItems.where( final checkerResult = await _printChecker(
(item) => item.printerType == 'bar',
);
if (itemsBar.isNotEmpty) {
final barResult = await _printBar(
order: order, order: order,
outlet: outlet, outlet: outlet,
cashieName: user.name, 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 }); // end _globalPrintLock.synchronized
} }
@@ -611,9 +611,9 @@ class PrinterRepository implements IPrinterRepository {
required Order order, required Order order,
}) async { }) async {
return await _globalPrintLock.synchronized(() async { return await _globalPrintLock.synchronized(() async {
final outlet = await _outletLocalDatasource.currentOutlet(); final outlet = await _outletLocalDatasource.currentOutlet();
final user = await _authLocalDataProvider.currentUser(); final user = await _authLocalDataProvider.currentUser();
return _printCashier(order: order, outlet: outlet, cashieName: user.name); return _printCashier(order: order, outlet: outlet, cashieName: user.name);
}); });
} }
@@ -622,9 +622,9 @@ class PrinterRepository implements IPrinterRepository {
required Order order, required Order order,
}) async { }) async {
return await _globalPrintLock.synchronized(() async { return await _globalPrintLock.synchronized(() async {
final outlet = await _outletLocalDatasource.currentOutlet(); final outlet = await _outletLocalDatasource.currentOutlet();
final user = await _authLocalDataProvider.currentUser(); final user = await _authLocalDataProvider.currentUser();
return _printVoid(order: order, outlet: outlet, cashieName: user.name); return _printVoid(order: order, outlet: outlet, cashieName: user.name);
}); });
} }
@@ -633,9 +633,13 @@ class PrinterRepository implements IPrinterRepository {
required Order order, required Order order,
}) async { }) async {
return await _globalPrintLock.synchronized(() async { return await _globalPrintLock.synchronized(() async {
final outlet = await _outletLocalDatasource.currentOutlet(); final outlet = await _outletLocalDatasource.currentOutlet();
final user = await _authLocalDataProvider.currentUser(); final user = await _authLocalDataProvider.currentUser();
return _printSplitBill(order: order, outlet: outlet, cashieName: user.name); return _printSplitBill(
order: order,
outlet: outlet,
cashieName: user.name,
);
}); });
} }
@@ -644,9 +648,9 @@ class PrinterRepository implements IPrinterRepository {
required Order order, required Order order,
}) async { }) async {
return await _globalPrintLock.synchronized(() async { return await _globalPrintLock.synchronized(() async {
final outlet = await _outletLocalDatasource.currentOutlet(); final outlet = await _outletLocalDatasource.currentOutlet();
final user = await _authLocalDataProvider.currentUser(); final user = await _authLocalDataProvider.currentUser();
return _printReceipt(order: order, outlet: outlet, cashieName: user.name); return _printReceipt(order: order, outlet: outlet, cashieName: user.name);
}); });
} }
@@ -1075,9 +1079,9 @@ class PrinterRepository implements IPrinterRepository {
required Order order, required Order order,
}) async { }) async {
return await _globalPrintLock.synchronized(() async { return await _globalPrintLock.synchronized(() async {
final outlet = await _outletLocalDatasource.currentOutlet(); final outlet = await _outletLocalDatasource.currentOutlet();
final user = await _authLocalDataProvider.currentUser(); final user = await _authLocalDataProvider.currentUser();
return _printBar(order: order, outlet: outlet, cashieName: user.name); return _printBar(order: order, outlet: outlet, cashieName: user.name);
}); });
} }
@@ -1086,9 +1090,9 @@ class PrinterRepository implements IPrinterRepository {
required Order order, required Order order,
}) async { }) async {
return await _globalPrintLock.synchronized(() async { return await _globalPrintLock.synchronized(() async {
final outlet = await _outletLocalDatasource.currentOutlet(); final outlet = await _outletLocalDatasource.currentOutlet();
final user = await _authLocalDataProvider.currentUser(); final user = await _authLocalDataProvider.currentUser();
return _printChecker(order: order, outlet: outlet, cashieName: user.name); return _printChecker(order: order, outlet: outlet, cashieName: user.name);
}); });
} }
@@ -1097,9 +1101,9 @@ class PrinterRepository implements IPrinterRepository {
required Order order, required Order order,
}) async { }) async {
return await _globalPrintLock.synchronized(() async { return await _globalPrintLock.synchronized(() async {
final outlet = await _outletLocalDatasource.currentOutlet(); final outlet = await _outletLocalDatasource.currentOutlet();
final user = await _authLocalDataProvider.currentUser(); final user = await _authLocalDataProvider.currentUser();
return _printKitchen(order: order, outlet: outlet, cashieName: user.name); return _printKitchen(order: order, outlet: outlet, cashieName: user.name);
}); });
} }
} }