Compare commits

...

2 Commits

Author SHA1 Message Date
efrilm
e462326495 feat: cetak 2025-08-04 11:57:50 +07:00
efrilm
c906d5ebe5 feat: update void dialog 2025-08-04 11:40:27 +07:00
6 changed files with 226 additions and 24 deletions

View File

@ -133,9 +133,12 @@ class _PaymentAddOrderDialogState extends State<PaymentAddOrderDialog> {
state.maybeWhen( state.maybeWhen(
orElse: () {}, orElse: () {},
success: (data) { success: (data) {
context.pushReplacement(SuccessSaveOrderPage( context.pushReplacement(
order: data, SuccessSaveOrderPage(
)); productQuantity: widget.items,
order: data,
),
);
}, },
error: (message) => AppFlushbar.showError(context, message), error: (message) => AppFlushbar.showError(context, message),
); );

View File

@ -145,6 +145,7 @@ class _PaymentSaveDialogState extends State<PaymentSaveDialog> {
orElse: () {}, orElse: () {},
success: (data) { success: (data) {
context.pushReplacement(SuccessSaveOrderPage( context.pushReplacement(SuccessSaveOrderPage(
productQuantity: widget.items,
order: data, order: data,
)); ));
}, },

View File

@ -906,6 +906,7 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
success: (data) { success: (data) {
context context
.pushReplacement(SuccessOrderPage( .pushReplacement(SuccessOrderPage(
productQuantity: items,
order: data, order: data,
)); ));
}, },

View File

@ -90,24 +90,27 @@ class _VoidDialogState extends State<VoidDialog> {
], ],
), ),
if (widget.selectedItems.isNotEmpty) if (widget.selectedItems.isNotEmpty)
Column( Padding(
crossAxisAlignment: CrossAxisAlignment.start, padding: const EdgeInsets.only(top: 16.0),
children: [ child: Column(
Text( crossAxisAlignment: CrossAxisAlignment.start,
'Pesanan yang akan di void', children: [
style: const TextStyle( Text(
fontSize: 14, 'Pesanan yang akan di void',
fontWeight: FontWeight.w600, style: const TextStyle(
color: AppColors.black, fontSize: 14,
fontWeight: FontWeight.w600,
color: AppColors.black,
),
), ),
), SpaceHeight(12),
SpaceHeight(12), Column(
Column( children: widget.selectedItems
children: widget.selectedItems .map((item) => _item(context, item))
.map((item) => _item(context, item)) .toList(),
.toList(), ),
), ],
], ),
), ),
SpaceHeight(16), SpaceHeight(16),
CustomTextField( CustomTextField(

View File

@ -1,16 +1,24 @@
import 'dart:developer';
import 'package:enaklo_pos/core/components/components.dart'; import 'package:enaklo_pos/core/components/components.dart';
import 'package:enaklo_pos/core/components/dashed_divider.dart'; import 'package:enaklo_pos/core/components/dashed_divider.dart';
import 'package:enaklo_pos/core/constants/colors.dart'; import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart'; import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:enaklo_pos/core/extensions/string_ext.dart'; import 'package:enaklo_pos/core/extensions/string_ext.dart';
import 'package:enaklo_pos/core/utils/printer_service.dart';
import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart';
import 'package:enaklo_pos/data/datasources/product_local_datasource.dart';
import 'package:enaklo_pos/data/models/response/order_response_model.dart'; import 'package:enaklo_pos/data/models/response/order_response_model.dart';
import 'package:enaklo_pos/presentation/home/models/product_quantity.dart';
import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart'; import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class SuccessOrderPage extends StatelessWidget { class SuccessOrderPage extends StatelessWidget {
final List<ProductQuantity> productQuantity;
final Order order; final Order order;
const SuccessOrderPage({super.key, required this.order}); const SuccessOrderPage(
{super.key, required this.order, required this.productQuantity});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -164,7 +172,96 @@ class SuccessOrderPage extends StatelessWidget {
SpaceWidth(12), SpaceWidth(12),
Expanded( Expanded(
child: Button.filled( child: Button.filled(
onPressed: () {}, onPressed: () async {
final checkerPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('checker');
final kitchenPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('kitchen');
final barPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('bar');
log("Checker printer: ${checkerPrinter?.toMap()}");
log("Kitchen printer: ${kitchenPrinter?.toMap()}");
log("Bar printer: ${barPrinter?.toMap()}");
// Checker printer
if (checkerPrinter != null) {
try {
final printValue =
await PrintDataoutputs.instance.printChecker(
productQuantity,
order.tableNumber ?? "",
order.orderNumber ?? "",
'kasir',
checkerPrinter.paper.toIntegerFromText,
order.orderType ?? "",
);
await PrinterService().printWithPrinter(
checkerPrinter, printValue, context);
} catch (e) {
log("Error printing checker: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content:
Text('Error printing checker: $e')),
);
}
}
// Kitchen printer
if (kitchenPrinter != null) {
try {
final printValue =
await PrintDataoutputs.instance.printKitchen(
productQuantity,
order.tableNumber!,
order.orderNumber ?? "",
'kasir',
kitchenPrinter.paper.toIntegerFromText,
order.orderType ?? "",
);
await PrinterService().printWithPrinter(
kitchenPrinter, printValue, context);
} catch (e) {
log("Error printing kitchen order: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Error printing kitchen order: $e')),
);
}
}
// Bar printer
if (barPrinter != null) {
try {
final printValue =
await PrintDataoutputs.instance.printBar(
productQuantity,
order.tableNumber ?? "",
order.orderNumber ?? "",
'kasir',
barPrinter.paper.toIntegerFromText,
order.orderType ?? "",
);
await PrinterService().printWithPrinter(
barPrinter, printValue, context);
} catch (e) {
log("Error printing bar order: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content:
Text('Error printing bar order: $e')),
);
}
}
},
label: 'Cetak', label: 'Cetak',
icon: Icon( icon: Icon(
Icons.print, Icons.print,

View File

@ -1,16 +1,24 @@
import 'dart:developer';
import 'package:enaklo_pos/core/components/components.dart'; import 'package:enaklo_pos/core/components/components.dart';
import 'package:enaklo_pos/core/components/dashed_divider.dart'; import 'package:enaklo_pos/core/components/dashed_divider.dart';
import 'package:enaklo_pos/core/constants/colors.dart'; import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:enaklo_pos/core/extensions/date_time_ext.dart'; import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
import 'package:enaklo_pos/core/extensions/string_ext.dart'; import 'package:enaklo_pos/core/extensions/string_ext.dart';
import 'package:enaklo_pos/core/utils/printer_service.dart';
import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart';
import 'package:enaklo_pos/data/datasources/product_local_datasource.dart';
import 'package:enaklo_pos/data/models/response/order_response_model.dart'; import 'package:enaklo_pos/data/models/response/order_response_model.dart';
import 'package:enaklo_pos/presentation/home/models/product_quantity.dart';
import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart'; import 'package:enaklo_pos/presentation/home/pages/dashboard_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class SuccessSaveOrderPage extends StatelessWidget { class SuccessSaveOrderPage extends StatelessWidget {
final List<ProductQuantity> productQuantity;
final Order order; final Order order;
const SuccessSaveOrderPage({super.key, required this.order}); const SuccessSaveOrderPage(
{super.key, required this.order, required this.productQuantity});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -160,7 +168,96 @@ class SuccessSaveOrderPage extends StatelessWidget {
SpaceWidth(12), SpaceWidth(12),
Expanded( Expanded(
child: Button.filled( child: Button.filled(
onPressed: () {}, onPressed: () async {
final checkerPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('checker');
final kitchenPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('kitchen');
final barPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('bar');
log("Checker printer: ${checkerPrinter?.toMap()}");
log("Kitchen printer: ${kitchenPrinter?.toMap()}");
log("Bar printer: ${barPrinter?.toMap()}");
// Checker printer
if (checkerPrinter != null) {
try {
final printValue =
await PrintDataoutputs.instance.printChecker(
productQuantity,
order.tableNumber ?? "",
order.orderNumber ?? "",
'kasir',
checkerPrinter.paper.toIntegerFromText,
order.orderType ?? "",
);
await PrinterService().printWithPrinter(
checkerPrinter, printValue, context);
} catch (e) {
log("Error printing checker: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content:
Text('Error printing checker: $e')),
);
}
}
// Kitchen printer
if (kitchenPrinter != null) {
try {
final printValue =
await PrintDataoutputs.instance.printKitchen(
productQuantity,
order.tableNumber!,
order.orderNumber ?? "",
'kasir',
kitchenPrinter.paper.toIntegerFromText,
order.orderType ?? "",
);
await PrinterService().printWithPrinter(
kitchenPrinter, printValue, context);
} catch (e) {
log("Error printing kitchen order: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Error printing kitchen order: $e')),
);
}
}
// Bar printer
if (barPrinter != null) {
try {
final printValue =
await PrintDataoutputs.instance.printBar(
productQuantity,
order.tableNumber ?? "",
order.orderNumber ?? "",
'kasir',
barPrinter.paper.toIntegerFromText,
order.orderType ?? "",
);
await PrinterService().printWithPrinter(
barPrinter, printValue, context);
} catch (e) {
log("Error printing bar order: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content:
Text('Error printing bar order: $e')),
);
}
}
},
label: 'Cetak', label: 'Cetak',
icon: Icon( icon: Icon(
Icons.print, Icons.print,