Compare commits

..

2 Commits

Author SHA1 Message Date
Efril
6ac88b92ae fix add order item 2026-04-26 22:27:44 +07:00
Efril
9e4e2ebbd1 fix printer fc 2026-04-26 22:15:50 +07:00
3 changed files with 28 additions and 2 deletions

View File

@ -31,6 +31,7 @@ class PrinterRepository implements IPrinterRepository {
); );
final Map<String, Lock> _locks = {}; final Map<String, Lock> _locks = {};
final Lock _globalPrintLock = Lock();
String? _connectedMac; String? _connectedMac;
Lock _getLock(String address) { Lock _getLock(String address) {
@ -454,6 +455,7 @@ class PrinterRepository implements IPrinterRepository {
Future<Either<PrinterFailure, Unit>> printStruckOrder({ Future<Either<PrinterFailure, Unit>> printStruckOrder({
required Order order, required Order order,
}) async { }) 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();
@ -526,12 +528,14 @@ class PrinterRepository implements IPrinterRepository {
const PrinterFailure.dynamicErrorMessage('Error printing order'), const PrinterFailure.dynamicErrorMessage('Error printing order'),
); );
} }
}); // end _globalPrintLock.synchronized
} }
@override @override
Future<Either<PrinterFailure, Unit>> printStruckSaveOrder({ Future<Either<PrinterFailure, Unit>> printStruckSaveOrder({
required Order order, required Order order,
}) async { }) 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();
@ -595,42 +599,51 @@ class PrinterRepository implements IPrinterRepository {
const PrinterFailure.dynamicErrorMessage('Error printing save order'), const PrinterFailure.dynamicErrorMessage('Error printing save order'),
); );
} }
}); // end _globalPrintLock.synchronized
} }
@override @override
Future<Either<PrinterFailure, Unit>> printStruckCashier({ Future<Either<PrinterFailure, Unit>> printStruckCashier({
required Order order, required Order order,
}) async { }) 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);
});
} }
@override @override
Future<Either<PrinterFailure, Unit>> printStruckVoid({ Future<Either<PrinterFailure, Unit>> printStruckVoid({
required Order order, required Order order,
}) async { }) 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);
});
} }
@override @override
Future<Either<PrinterFailure, Unit>> printStruckSplitBill({ Future<Either<PrinterFailure, Unit>> printStruckSplitBill({
required Order order, required Order order,
}) async { }) 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);
});
} }
@override @override
Future<Either<PrinterFailure, Unit>> printStruckPayment({ Future<Either<PrinterFailure, Unit>> printStruckPayment({
required Order order, required Order order,
}) async { }) 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);
});
} }
Future<Either<PrinterFailure, Unit>> _printReceipt({ Future<Either<PrinterFailure, Unit>> _printReceipt({
@ -1040,7 +1053,7 @@ class PrinterRepository implements IPrinterRepository {
final chunk = data.sublist(i, end); final chunk = data.sublist(i, end);
bool result = await PrintBluetoothThermal.writeBytes(chunk); bool result = await PrintBluetoothThermal.writeBytes(chunk);
if (!result) return false; if (!result) return false;
await Future.delayed(const Duration(milliseconds: 30)); await Future.delayed(const Duration(milliseconds: 100));
} }
return true; return true;
} }
@ -1049,26 +1062,32 @@ class PrinterRepository implements IPrinterRepository {
Future<Either<PrinterFailure, Unit>> printStruckBar({ Future<Either<PrinterFailure, Unit>> printStruckBar({
required Order order, required Order order,
}) async { }) 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);
});
} }
@override @override
Future<Either<PrinterFailure, Unit>> printStruckChecker({ Future<Either<PrinterFailure, Unit>> printStruckChecker({
required Order order, required Order order,
}) async { }) 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);
});
} }
@override @override
Future<Either<PrinterFailure, Unit>> printStruckKitchen({ Future<Either<PrinterFailure, Unit>> printStruckKitchen({
required Order order, required Order order,
}) async { }) 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);
});
} }
} }

View File

@ -70,6 +70,9 @@ class CheckoutPage extends StatelessWidget implements AutoRouteWrapper {
(f) => AppFlushbar.showOrderFailureToast(context, f), (f) => AppFlushbar.showOrderFailureToast(context, f),
(order) { (order) {
if (context.mounted) { if (context.mounted) {
context.read<CheckoutFormBloc>().add(
CheckoutFormEvent.orderAddedItems(order),
);
context.router.replace(const SuccessAddItemOrderRoute()); context.router.replace(const SuccessAddItemOrderRoute());
} }
}, },

View File

@ -188,10 +188,14 @@ class SuccessAddItemOrderLeftPanel extends StatelessWidget {
Expanded( Expanded(
child: AppElevatedButton.filled( child: AppElevatedButton.filled(
onPressed: () { onPressed: () {
print("onPressed");
print(checkoutState.orderAdded);
final order = checkoutState.orderAdded;
if (order == null) return;
context.read<PrintStruckBloc>().add( context.read<PrintStruckBloc>().add(
PrintStruckEvent.order( PrintStruckEvent.order(
Order.fromLastOrder( Order.fromLastOrder(
checkoutState.orderAdded!, order,
checkoutState.items, checkoutState.items,
), ),
), ),