feat: get table

This commit is contained in:
efrilm
2025-08-03 23:53:06 +07:00
parent 8431b07057
commit 6afd62b617
14 changed files with 769 additions and 478 deletions
@@ -117,7 +117,7 @@ class _PaymentSaveDialogState extends State<PaymentSaveDialog> {
(TableModel value) =>
DropdownMenuItem<TableModel>(
value: value,
child: Text(value.tableName),
child: Text(value.tableName ?? ""),
),
)
.toList(),
@@ -829,7 +829,8 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
DropdownMenuItem<
TableModel>(
value: value,
child: Text(value.tableName),
child: Text(
value.tableName ?? ""),
),
)
.toList(),
@@ -1192,28 +1193,28 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
savedDraftOrder: (orderDraftId) {
log("PRICEVALUE: ${priceValue}");
final newTabel = TableModel(
id: widget.isTable
? widget.table!.id
: selectTable?.id,
tableName: widget.isTable
? widget.table!.tableName
: selectTable?.tableName ??
'0',
status: 'occupied',
paymentAmount: priceValue,
orderId: orderDraftId,
startTime: DateTime.now()
.toIso8601String(),
position: widget.isTable
? widget.table!.position
: selectTable!.position);
log('new tabel: ${newTabel.toMap()}');
context
.read<StatusTableBloc>()
.add(StatusTableEvent.statusTabel(
newTabel,
));
// final newTabel = TableModel(
// id: widget.isTable
// ? widget.table!.id
// : selectTable?.id,
// tableName: widget.isTable
// ? widget.table!.tableName
// : selectTable?.tableName ??
// '0',
// status: 'occupied',
// paymentAmount: priceValue,
// orderId: orderDraftId,
// startTime: DateTime.now()
// .toIso8601String(),
// position: widget.isTable
// ? widget.table!.position
// : selectTable!.position);
// log('new tabel: ${newTabel.toMap()}');
// context
// .read<StatusTableBloc>()
// .add(StatusTableEvent.statusTabel(
// newTabel,
// ));
});
},
child:
@@ -1357,16 +1358,16 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
if (widget.isTable) {
log("discountAmountValue: $totalDiscount");
context.read<CheckoutBloc>().add(
CheckoutEvent
.saveDraftOrder(
widget.isTable == true
? widget.table!.id!
: selectTable!.id!,
customerController.text,
totalDiscount.toInt(),
),
);
// context.read<CheckoutBloc>().add(
// CheckoutEvent
// .saveDraftOrder(
// widget.isTable == true
// ? widget.table!.id!
// : selectTable!.id!,
// customerController.text,
// totalDiscount.toInt(),
// ),
// );
await showDialog(
context: context,
barrierDismissible: false,
@@ -1515,120 +1516,120 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
// Tambahkan ke pesanan meja yang sudah ada
if (selectTable != null) {
// Ambil draft order yang sudah ada
final existingDraftOrder =
await ProductLocalDatasource
.instance
.getDraftOrderById(
selectTable
?.orderId ??
0);
// final existingDraftOrder =
// await ProductLocalDatasource
// .instance
// .getDraftOrderById(
// selectTable
// ?.orderId ??
// 0);
if (existingDraftOrder !=
null) {
// Convert items ke DraftOrderItem
final newDraftItems = items
.map((item) =>
DraftOrderItem(
product:
item.product,
quantity:
item.quantity,
))
.toList();
// if (existingDraftOrder !=
// null) {
// // Convert items ke DraftOrderItem
// final newDraftItems = items
// .map((item) =>
// DraftOrderItem(
// product:
// item.product,
// quantity:
// item.quantity,
// ))
// .toList();
// Gabungkan dengan pesanan yang sudah ada
final updatedItems = [
...existingDraftOrder
.orders,
...newDraftItems
];
// // Gabungkan dengan pesanan yang sudah ada
// final updatedItems = [
// ...existingDraftOrder
// .orders,
// ...newDraftItems
// ];
final updatedDraftOrder =
existingDraftOrder
.copyWith(
orders: updatedItems,
totalQuantity:
updatedItems.fold<int>(
0,
(sum, item) =>
sum +
item.quantity),
subTotal: updatedItems.fold<
int>(
0,
(sum, item) =>
sum +
(item.product
.price ??
0) *
item.quantity),
);
// final updatedDraftOrder =
// existingDraftOrder
// .copyWith(
// orders: updatedItems,
// totalQuantity:
// updatedItems.fold<int>(
// 0,
// (sum, item) =>
// sum +
// item.quantity),
// subTotal: updatedItems.fold<
// int>(
// 0,
// (sum, item) =>
// sum +
// (item.product
// .price ??
// 0) *
// item.quantity),
// );
// Update draft order
await ProductLocalDatasource
.instance
.updateDraftOrder(
updatedDraftOrder);
// // Update draft order
// await ProductLocalDatasource
// .instance
// .updateDraftOrder(
// updatedDraftOrder);
// Tampilkan dialog sukses
await showDialog(
context: context,
barrierDismissible: false,
builder: (context) =>
SaveOrderDialog(
data: items,
totalQty: totalQty,
totalPrice:
totalPriceFinal,
totalTax:
finalTax.toInt(),
totalDiscount:
totalDiscount.toInt(),
subTotal:
subTotal.toInt(),
normalPrice: price,
table: selectTable!,
draftName:
customerController
.text,
),
);
} else {
// Jika tidak ada draft order, buat baru
context
.read<CheckoutBloc>()
.add(
CheckoutEvent
.saveDraftOrder(
selectTable!.id!,
customerController
.text,
totalDiscount.toInt(),
),
);
await showDialog(
context: context,
barrierDismissible: false,
builder: (context) =>
SaveOrderDialog(
data: items,
totalQty: totalQty,
totalPrice:
totalPriceFinal,
totalTax:
finalTax.toInt(),
totalDiscount:
totalDiscount.toInt(),
subTotal:
subTotal.toInt(),
normalPrice: price,
table: selectTable!,
draftName:
customerController
.text,
),
);
}
// // Tampilkan dialog sukses
// await showDialog(
// context: context,
// barrierDismissible: false,
// builder: (context) =>
// SaveOrderDialog(
// data: items,
// totalQty: totalQty,
// totalPrice:
// totalPriceFinal,
// totalTax:
// finalTax.toInt(),
// totalDiscount:
// totalDiscount.toInt(),
// subTotal:
// subTotal.toInt(),
// normalPrice: price,
// table: selectTable!,
// draftName:
// customerController
// .text,
// ),
// );
// } else {
// // Jika tidak ada draft order, buat baru
// context
// .read<CheckoutBloc>()
// .add(
// CheckoutEvent
// .saveDraftOrder(
// selectTable!.id!,
// customerController
// .text,
// totalDiscount.toInt(),
// ),
// );
// await showDialog(
// context: context,
// barrierDismissible: false,
// builder: (context) =>
// SaveOrderDialog(
// data: items,
// totalQty: totalQty,
// totalPrice:
// totalPriceFinal,
// totalTax:
// finalTax.toInt(),
// totalDiscount:
// totalDiscount.toInt(),
// subTotal:
// subTotal.toInt(),
// normalPrice: price,
// table: selectTable!,
// draftName:
// customerController
// .text,
// ),
// );
// }
} else {
ScaffoldMessenger.of(context)
.showSnackBar(
@@ -1640,16 +1641,16 @@ class _ConfirmPaymentPageState extends State<ConfirmPaymentPage> {
);
}
} else {
context.read<CheckoutBloc>().add(
CheckoutEvent
.saveDraftOrder(
widget.isTable == true
? widget.table!.id!
: selectTable!.id!,
customerController.text,
totalDiscount.toInt(),
),
);
// context.read<CheckoutBloc>().add(
// CheckoutEvent
// .saveDraftOrder(
// widget.isTable == true
// ? widget.table!.id!
// : selectTable!.id!,
// customerController.text,
// totalDiscount.toInt(),
// ),
// );
await showDialog(
context: context,
barrierDismissible: false,
@@ -97,98 +97,108 @@ class _SaveOrderDialogState extends State<SaveOrderDialog> {
builder: (context, state) {
final orderType = state.maybeWhen(
orElse: () => OrderType.dineIn,
loaded: (items, discountModel, discount, discountAmount, tax, serviceCharge, totalQuantity, totalPrice, draftName, orderType) => orderType,
loaded: (items,
discountModel,
discount,
discountAmount,
tax,
serviceCharge,
totalQuantity,
totalPrice,
draftName,
orderType) =>
orderType,
);
return Button.filled(
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(
widget.data,
widget.table.tableName,
widget.draftName,
'kasir',
checkerPrinter.paper.toIntegerFromText,
orderType.value);
await PrinterService().printWithPrinter(
checkerPrinter,
printValue,
context
);
} catch (e) {
log("Error printing checker: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error printing checker: $e')),
);
}
}
final checkerPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('checker');
final kitchenPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('kitchen');
final barPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('bar');
// Kitchen printer
if (kitchenPrinter != null) {
try {
final printValue = await PrintDataoutputs.instance.printKitchen(
widget.data,
widget.table.tableName,
widget.draftName,
'kasir',
kitchenPrinter.paper.toIntegerFromText,
orderType.value,
);
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')),
);
}
}
log("Checker printer: ${checkerPrinter?.toMap()}");
log("Kitchen printer: ${kitchenPrinter?.toMap()}");
log("Bar printer: ${barPrinter?.toMap()}");
// Bar printer
if (barPrinter != null) {
try {
final printValue = await PrintDataoutputs.instance.printBar(
widget.data,
widget.table.tableName,
widget.draftName,
'kasir',
barPrinter.paper.toIntegerFromText,
orderType.value,
);
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')),
);
}
}
// Checker printer
if (checkerPrinter != null) {
try {
final printValue = await PrintDataoutputs.instance
.printChecker(
widget.data,
widget.table.tableName!,
widget.draftName,
'kasir',
checkerPrinter.paper.toIntegerFromText,
orderType.value);
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(
widget.data,
widget.table.tableName!,
widget.draftName,
'kasir',
kitchenPrinter.paper.toIntegerFromText,
orderType.value,
);
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(
widget.data,
widget.table.tableName!,
widget.draftName,
'kasir',
barPrinter.paper.toIntegerFromText,
orderType.value,
);
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: 'Print Checker',
);