feat: refactor

This commit is contained in:
efrilm 2025-08-06 18:12:27 +07:00
parent 561aec371d
commit a46a2cfa7c
7 changed files with 134 additions and 133 deletions

View File

@ -1,4 +1,3 @@
import 'dart:async';
import 'dart:developer'; import 'dart:developer';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';

View File

@ -1,5 +1,3 @@
import 'dart:developer';
import 'package:bloc/bloc.dart'; import 'package:bloc/bloc.dart';
import 'package:enaklo_pos/data/datasources/user_remote_datasource.dart'; import 'package:enaklo_pos/data/datasources/user_remote_datasource.dart';
import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:freezed_annotation/freezed_annotation.dart';

View File

@ -13,8 +13,6 @@ import 'package:intl/intl.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/presentation/home/bloc/qris/qris_bloc.dart'; import 'package:enaklo_pos/presentation/home/bloc/qris/qris_bloc.dart';
import 'package:enaklo_pos/presentation/home/widgets/success_payment_dialog.dart'; import 'package:enaklo_pos/presentation/home/widgets/success_payment_dialog.dart';
import 'package:enaklo_pos/presentation/setting/bloc/sync_order/sync_order_bloc.dart';
import 'package:print_bluetooth_thermal/print_bluetooth_thermal.dart';
import 'package:widgets_to_image/widgets_to_image.dart'; import 'package:widgets_to_image/widgets_to_image.dart';
import 'package:enaklo_pos/core/utils/printer_service.dart'; import 'package:enaklo_pos/core/utils/printer_service.dart';
@ -230,24 +228,25 @@ class _PaymentQrisDialogState extends State<PaymentQrisDialog> {
ElevatedButton( ElevatedButton(
onPressed: () async { onPressed: () async {
try { try {
final sizeReceipt = await AuthLocalDataSource().getSizeReceipt(); final sizeReceipt =
await AuthLocalDataSource().getSizeReceipt();
final bytes = await controller.capture(); final bytes = await controller.capture();
final printValue = await PrintDataoutputs.instance final printValue = await PrintDataoutputs.instance
.printQRIS(widget.price, bytes!, int.parse(sizeReceipt)); .printQRIS(
widget.price, bytes!, int.parse(sizeReceipt));
// Get the receipt printer to print QRIS // Get the receipt printer to print QRIS
final receiptPrinter = await ProductLocalDatasource.instance final receiptPrinter = await ProductLocalDatasource
.instance
.getPrinterByCode('receipt'); .getPrinterByCode('receipt');
if (receiptPrinter != null) { if (receiptPrinter != null) {
await PrinterService().printWithPrinter( await PrinterService().printWithPrinter(
receiptPrinter, receiptPrinter, printValue, context);
printValue,
context
);
} else { } else {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('No receipt printer configured')), SnackBar(
content: Text('No receipt printer configured')),
); );
} }
} catch (e) { } catch (e) {

View File

@ -11,13 +11,11 @@ import 'package:enaklo_pos/data/models/response/table_model.dart';
import 'package:enaklo_pos/presentation/home/bloc/get_table_status/get_table_status_bloc.dart'; import 'package:enaklo_pos/presentation/home/bloc/get_table_status/get_table_status_bloc.dart';
import 'package:enaklo_pos/presentation/home/bloc/order/order_bloc.dart'; import 'package:enaklo_pos/presentation/home/bloc/order/order_bloc.dart';
import 'package:enaklo_pos/presentation/home/bloc/payment_methods/payment_methods_bloc.dart'; import 'package:enaklo_pos/presentation/home/bloc/payment_methods/payment_methods_bloc.dart';
import 'package:enaklo_pos/presentation/home/bloc/status_table/status_table_bloc.dart';
import 'package:enaklo_pos/presentation/home/models/product_quantity.dart'; import 'package:enaklo_pos/presentation/home/models/product_quantity.dart';
import 'package:enaklo_pos/presentation/home/models/order_type.dart'; import 'package:enaklo_pos/presentation/home/models/order_type.dart';
import 'package:enaklo_pos/presentation/home/widgets/save_order_dialog.dart'; import 'package:enaklo_pos/presentation/home/widgets/save_order_dialog.dart';
import 'package:enaklo_pos/data/models/response/payment_methods_response_model.dart'; import 'package:enaklo_pos/data/models/response/payment_methods_response_model.dart';
import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; import 'package:enaklo_pos/data/datasources/product_local_datasource.dart';
import 'package:enaklo_pos/presentation/table/models/draft_order_item.dart';
import '../../../core/components/buttons.dart'; import '../../../core/components/buttons.dart';
import '../../../core/components/spaces.dart'; import '../../../core/components/spaces.dart';

View File

@ -16,7 +16,6 @@ import 'package:enaklo_pos/presentation/report/pages/report_page.dart';
import 'package:enaklo_pos/presentation/setting/bloc/sync_order/sync_order_bloc.dart'; import 'package:enaklo_pos/presentation/setting/bloc/sync_order/sync_order_bloc.dart';
import 'package:enaklo_pos/presentation/setting/pages/printer_configuration_page.dart'; import 'package:enaklo_pos/presentation/setting/pages/printer_configuration_page.dart';
import 'package:enaklo_pos/presentation/setting/pages/settings_page.dart'; import 'package:enaklo_pos/presentation/setting/pages/settings_page.dart';
import 'package:enaklo_pos/presentation/table/pages/new_table_management_page.dart';
import '../../../core/assets/assets.gen.dart'; import '../../../core/assets/assets.gen.dart';
import '../../auth/bloc/logout/logout_bloc.dart'; import '../../auth/bloc/logout/logout_bloc.dart';

View File

@ -2,15 +2,9 @@ import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_esc_pos_network/flutter_esc_pos_network.dart';
import 'package:enaklo_pos/core/extensions/string_ext.dart'; import 'package:enaklo_pos/core/extensions/string_ext.dart';
import 'package:enaklo_pos/data/datasources/auth_local_datasource.dart';
import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; import 'package:enaklo_pos/data/datasources/product_local_datasource.dart';
import 'package:intl/intl.dart';
import 'package:print_bluetooth_thermal/print_bluetooth_thermal.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/int_ext.dart';
import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart'; import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart';
import 'package:enaklo_pos/data/models/response/table_model.dart'; import 'package:enaklo_pos/data/models/response/table_model.dart';
import 'package:enaklo_pos/presentation/home/models/product_quantity.dart'; import 'package:enaklo_pos/presentation/home/models/product_quantity.dart';
@ -20,7 +14,6 @@ import '../../../core/components/buttons.dart';
import '../../../core/components/spaces.dart'; import '../../../core/components/spaces.dart';
import '../../table/blocs/get_table/get_table_bloc.dart'; import '../../table/blocs/get_table/get_table_bloc.dart';
import '../bloc/checkout/checkout_bloc.dart'; import '../bloc/checkout/checkout_bloc.dart';
import '../bloc/order/order_bloc.dart';
import '../models/order_type.dart'; import '../models/order_type.dart';
import 'package:enaklo_pos/core/utils/printer_service.dart'; import 'package:enaklo_pos/core/utils/printer_service.dart';

View File

@ -3,16 +3,12 @@ import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_esc_pos_network/flutter_esc_pos_network.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:print_bluetooth_thermal/print_bluetooth_thermal.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/int_ext.dart'; import 'package:enaklo_pos/core/extensions/int_ext.dart';
import 'package:enaklo_pos/core/extensions/string_ext.dart'; import 'package:enaklo_pos/core/extensions/string_ext.dart';
import 'package:enaklo_pos/data/dataoutputs/laman_print.dart';
import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart'; import 'package:enaklo_pos/data/dataoutputs/print_dataoutputs.dart';
import 'package:enaklo_pos/data/datasources/auth_local_datasource.dart';
import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; import 'package:enaklo_pos/data/datasources/product_local_datasource.dart';
import 'package:enaklo_pos/presentation/home/models/product_quantity.dart'; import 'package:enaklo_pos/presentation/home/models/product_quantity.dart';
import 'package:enaklo_pos/presentation/home/models/order_type.dart'; import 'package:enaklo_pos/presentation/home/models/order_type.dart';
@ -101,7 +97,7 @@ class _SuccessPaymentDialogState extends State<SuccessPaymentDialog> {
const SpaceHeight(5.0), const SpaceHeight(5.0),
BlocBuilder<OrderBloc, OrderState>( BlocBuilder<OrderBloc, OrderState>(
builder: (context, state) { builder: (context, state) {
final total = state.maybeWhen( state.maybeWhen(
orElse: () => 0, orElse: () => 0,
loaded: (model, orderId) => model.total, loaded: (model, orderId) => model.total,
); );
@ -201,118 +197,137 @@ class _SuccessPaymentDialogState extends State<SuccessPaymentDialog> {
); );
final kembalian = paymentAmount - widget.totalPrice; final kembalian = paymentAmount - widget.totalPrice;
return BlocBuilder<CheckoutBloc, CheckoutState>( return BlocBuilder<CheckoutBloc, CheckoutState>(
builder: (context, checkoutState) { builder: (context, checkoutState) {
final orderType = checkoutState.maybeWhen( final orderType = checkoutState.maybeWhen(
orElse: () => OrderType.dineIn, 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( return Button.filled(
onPressed: () async { onPressed: () async {
final receiptPrinter = await ProductLocalDatasource final receiptPrinter =
.instance await ProductLocalDatasource.instance
.getPrinterByCode('receipt'); .getPrinterByCode('receipt');
final kitchenPrinter = await ProductLocalDatasource final kitchenPrinter =
.instance await ProductLocalDatasource.instance
.getPrinterByCode('kitchen'); .getPrinterByCode('kitchen');
final barPrinter = await ProductLocalDatasource.instance final barPrinter = await ProductLocalDatasource
.getPrinterByCode('bar'); .instance
.getPrinterByCode('bar');
// Receipt Printer // Receipt Printer
if (receiptPrinter != null) { if (receiptPrinter != null) {
try { try {
final settingsLocalDatasource = SettingsLocalDatasource(); final settingsLocalDatasource =
final taxModel = await settingsLocalDatasource.getTax(); SettingsLocalDatasource();
final serviceChargeValue = await settingsLocalDatasource.getServiceCharge(); final taxModel =
await settingsLocalDatasource.getTax();
// Get the actual payment method from OrderBloc final serviceChargeValue =
final paymentMethod = state.maybeWhen( await settingsLocalDatasource
orElse: () => 'Cash', .getServiceCharge();
loaded: (model, orderId) => model.paymentMethod,
);
final printValue =
await PrintDataoutputs.instance.printOrderV3(
widget.data,
widget.totalQty,
widget.totalPrice,
paymentMethod,
paymentAmount,
kembalian,
widget.subTotal,
widget.totalDiscount,
widget.totalTax,
widget.totalService,
'kasir',
widget.draftName,
receiptPrinter.paper.toIntegerFromText,
taxPercentage: taxModel.value,
serviceChargePercentage: serviceChargeValue,
);
await PrinterService().printWithPrinter(
receiptPrinter,
printValue,
context
);
} catch (e) {
log("Error printing receipt: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error printing receipt: $e')),
);
}
}
// Kitchen Printer // Get the actual payment method from OrderBloc
if (kitchenPrinter != null && widget.isTablePaymentPage == false) { final paymentMethod = state.maybeWhen(
try { orElse: () => 'Cash',
final printValue = await PrintDataoutputs.instance.printKitchen( loaded: (model, orderId) =>
widget.data, model.paymentMethod,
'', );
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 final printValue = await PrintDataoutputs
if (barPrinter != null && widget.isTablePaymentPage == false) { .instance
try { .printOrderV3(
final printValue = await PrintDataoutputs.instance.printBar( widget.data,
widget.data, widget.totalQty,
'', widget.totalPrice,
widget.draftName, paymentMethod,
'kasir', paymentAmount,
barPrinter.paper.toIntegerFromText, kembalian,
orderType.value, widget.subTotal,
); widget.totalDiscount,
widget.totalTax,
await PrinterService().printWithPrinter( widget.totalService,
barPrinter, 'kasir',
printValue, widget.draftName,
context receiptPrinter.paper.toIntegerFromText,
); taxPercentage: taxModel.value,
} catch (e) { serviceChargePercentage: serviceChargeValue,
log("Error printing bar order: $e"); );
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error printing bar order: $e')), await PrinterService().printWithPrinter(
); receiptPrinter, printValue, context);
} } catch (e) {
} log("Error printing receipt: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content:
Text('Error printing receipt: $e')),
);
}
}
// Kitchen Printer
if (kitchenPrinter != null &&
widget.isTablePaymentPage == false) {
try {
final printValue = await PrintDataoutputs
.instance
.printKitchen(
widget.data,
'',
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 &&
widget.isTablePaymentPage == false) {
try {
final printValue =
await PrintDataoutputs.instance.printBar(
widget.data,
'',
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', label: 'Print',
); );