print checker
This commit is contained in:
parent
bf7a5708f5
commit
c0cf63a176
@ -117,11 +117,21 @@ class PrinterFormBloc extends Bloc<PrinterFormEvent, PrinterFormState> {
|
||||
|
||||
final currentOutlet = await _outletRepository.currentOutlet();
|
||||
|
||||
final printValue = await PrintUi().printOrder(
|
||||
order: Order.mockOrder(),
|
||||
outlet: currentOutlet,
|
||||
cashierName: 'Kasir Test',
|
||||
);
|
||||
List<int> printValue = [];
|
||||
|
||||
if (e.code == "receipt") {
|
||||
printValue = await PrintUi().printOrder(
|
||||
order: Order.mockOrder(),
|
||||
outlet: currentOutlet,
|
||||
cashierName: 'Kasir Test',
|
||||
);
|
||||
} else if (e.code == "checker") {
|
||||
printValue = await PrintUi().printChecker(
|
||||
order: Order.mockOrder(),
|
||||
outlet: currentOutlet,
|
||||
cashierName: 'Kasir Test',
|
||||
);
|
||||
}
|
||||
|
||||
final printer = Printer.fromTest(
|
||||
code: e.code,
|
||||
|
||||
@ -69,4 +69,64 @@ class PrintUi {
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
Future<List<int>> printChecker({
|
||||
required Order order,
|
||||
required Outlet outlet,
|
||||
required String cashierName,
|
||||
int paper = 58,
|
||||
}) async {
|
||||
List<int> bytes = [];
|
||||
|
||||
final profile = await CapabilityProfile.load();
|
||||
final generator = Generator(
|
||||
paper == 58 ? PaperSize.mm58 : PaperSize.mm80,
|
||||
profile,
|
||||
);
|
||||
final builder = ReceiptComponentBuilder(
|
||||
generator: generator,
|
||||
paperSize: 58,
|
||||
);
|
||||
|
||||
bytes += generator.reset();
|
||||
|
||||
bytes += builder.header(
|
||||
outletName: outlet.name,
|
||||
address: outlet.address,
|
||||
phoneNumber: outlet.phoneNumber,
|
||||
);
|
||||
|
||||
bytes += builder.printerType(printerType: 'CHECKER');
|
||||
|
||||
bytes += builder.separator();
|
||||
|
||||
bytes += builder.dateTime(DateTime.now());
|
||||
bytes += builder.orderInfo(
|
||||
orderNumber: order.orderNumber,
|
||||
customerName: order.metadata['customer_name'] ?? 'John Doe',
|
||||
cashierName: cashierName,
|
||||
paymentMethod: order.payments.last.paymentMethodName,
|
||||
tableNumber: order.tableNumber,
|
||||
);
|
||||
|
||||
bytes += builder.orderType(order.orderType);
|
||||
|
||||
bytes += builder.emptyLines(1);
|
||||
|
||||
for (final item in order.orderItems) {
|
||||
bytes += builder.orderItem(
|
||||
productName: item.productName,
|
||||
quantity: item.quantity,
|
||||
unitPrice: item.unitPrice.currencyFormatRpV2,
|
||||
totalPrice: item.totalPrice.currencyFormatRpV2,
|
||||
variantName: item.productVariantName,
|
||||
notes: item.notes,
|
||||
);
|
||||
}
|
||||
|
||||
bytes += builder.separator();
|
||||
bytes += builder.footer();
|
||||
|
||||
return bytes;
|
||||
}
|
||||
}
|
||||
|
||||
@ -136,6 +136,19 @@ class ReceiptComponentBuilder {
|
||||
return bytes;
|
||||
}
|
||||
|
||||
List<int> printerType({required String printerType}) {
|
||||
List<int> bytes = [];
|
||||
|
||||
bytes += textCenter(
|
||||
printerType,
|
||||
bold: true,
|
||||
height: PosTextSize.size1,
|
||||
width: PosTextSize.size1,
|
||||
);
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/// Print date and time
|
||||
List<int> dateTime(DateTime dateTime) {
|
||||
return row2Columns(
|
||||
|
||||
@ -29,29 +29,47 @@ class _SettingPrinterCheckerState extends State<SettingPrinterChecker> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocListener<PrinterFormBloc, PrinterFormState>(
|
||||
listenWhen: (p, c) =>
|
||||
p.failureOrDeleteSuccess != c.failureOrDeleteSuccess,
|
||||
listener: (context, state) {
|
||||
state.failureOrDeleteSuccess.fold(
|
||||
() => null,
|
||||
(either) => either.fold(
|
||||
(f) => AppFlushbar.showPrinterFailureToast(context, f),
|
||||
(_) {
|
||||
if (context.mounted) {
|
||||
context.read<PrinterLoaderBloc>().add(
|
||||
const PrinterLoaderEvent.getByCode('checker'),
|
||||
);
|
||||
}
|
||||
return MultiBlocListener(
|
||||
listeners: [
|
||||
BlocListener<PrinterFormBloc, PrinterFormState>(
|
||||
listenWhen: (p, c) =>
|
||||
p.failureOrDeleteSuccess != c.failureOrDeleteSuccess,
|
||||
listener: (context, state) {
|
||||
state.failureOrDeleteSuccess.fold(
|
||||
() => null,
|
||||
(either) => either.fold(
|
||||
(f) => AppFlushbar.showPrinterFailureToast(context, f),
|
||||
(_) {
|
||||
if (context.mounted) {
|
||||
context.read<PrinterLoaderBloc>().add(
|
||||
const PrinterLoaderEvent.getByCode('checker'),
|
||||
);
|
||||
}
|
||||
|
||||
AppFlushbar.showSuccess(
|
||||
context,
|
||||
'Printer checker berhasil dihapus',
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
AppFlushbar.showSuccess(
|
||||
context,
|
||||
'Printer checker berhasil dihapus',
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
BlocListener<PrinterFormBloc, PrinterFormState>(
|
||||
listenWhen: (p, c) => p.failureOrPrintTest != c.failureOrPrintTest,
|
||||
listener: (context, state) {
|
||||
state.failureOrPrintTest.fold(
|
||||
() => null,
|
||||
(either) => either.fold(
|
||||
(f) => AppFlushbar.showPrinterFailureToast(context, f),
|
||||
(either) {
|
||||
AppFlushbar.showSuccess(context, 'Printer test berhasil');
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
child: Material(
|
||||
color: AppColor.background,
|
||||
child: SingleChildScrollView(
|
||||
@ -106,6 +124,14 @@ class _SettingPrinterCheckerState extends State<SettingPrinterChecker> {
|
||||
PrinterFormEvent.deleted(state.printer.id),
|
||||
);
|
||||
},
|
||||
onTestPrint: () {
|
||||
context.read<PrinterFormBloc>().add(
|
||||
PrinterFormEvent.printTest(
|
||||
code: 'checker',
|
||||
macAccdress: state.printer.address,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
(f) => f.maybeMap(
|
||||
orElse: () => ErrorCard(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user