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();
final serviceChargeValue =
await settingsLocalDatasource
.getServiceCharge();
// Get the actual payment method from OrderBloc // Get the actual payment method from OrderBloc
final paymentMethod = state.maybeWhen( final paymentMethod = state.maybeWhen(
orElse: () => 'Cash', orElse: () => 'Cash',
loaded: (model, orderId) => model.paymentMethod, loaded: (model, orderId) =>
); model.paymentMethod,
);
final printValue = final printValue = await PrintDataoutputs
await PrintDataoutputs.instance.printOrderV3( .instance
widget.data, .printOrderV3(
widget.totalQty, widget.data,
widget.totalPrice, widget.totalQty,
paymentMethod, widget.totalPrice,
paymentAmount, paymentMethod,
kembalian, paymentAmount,
widget.subTotal, kembalian,
widget.totalDiscount, widget.subTotal,
widget.totalTax, widget.totalDiscount,
widget.totalService, widget.totalTax,
'kasir', widget.totalService,
widget.draftName, 'kasir',
receiptPrinter.paper.toIntegerFromText, widget.draftName,
taxPercentage: taxModel.value, receiptPrinter.paper.toIntegerFromText,
serviceChargePercentage: serviceChargeValue, taxPercentage: taxModel.value,
); serviceChargePercentage: serviceChargeValue,
);
await PrinterService().printWithPrinter( await PrinterService().printWithPrinter(
receiptPrinter, receiptPrinter, printValue, context);
printValue, } catch (e) {
context log("Error printing receipt: $e");
); ScaffoldMessenger.of(context).showSnackBar(
} catch (e) { SnackBar(
log("Error printing receipt: $e"); content:
ScaffoldMessenger.of(context).showSnackBar( Text('Error printing receipt: $e')),
SnackBar(content: Text('Error printing receipt: $e')), );
); }
} }
}
// Kitchen Printer // Kitchen Printer
if (kitchenPrinter != null && widget.isTablePaymentPage == false) { if (kitchenPrinter != null &&
try { widget.isTablePaymentPage == false) {
final printValue = await PrintDataoutputs.instance.printKitchen( try {
widget.data, final printValue = await PrintDataoutputs
'', .instance
widget.draftName, .printKitchen(
'kasir', widget.data,
kitchenPrinter.paper.toIntegerFromText, '',
orderType.value, widget.draftName,
); 'kasir',
kitchenPrinter.paper.toIntegerFromText,
orderType.value,
);
await PrinterService().printWithPrinter( await PrinterService().printWithPrinter(
kitchenPrinter, kitchenPrinter, printValue, context);
printValue, } catch (e) {
context log("Error printing kitchen order: $e");
); ScaffoldMessenger.of(context).showSnackBar(
} catch (e) { SnackBar(
log("Error printing kitchen order: $e"); content: Text(
ScaffoldMessenger.of(context).showSnackBar( 'Error printing kitchen order: $e')),
SnackBar(content: Text('Error printing kitchen order: $e')), );
); }
} }
}
// Bar printer // Bar printer
if (barPrinter != null && widget.isTablePaymentPage == false) { if (barPrinter != null &&
try { widget.isTablePaymentPage == false) {
final printValue = await PrintDataoutputs.instance.printBar( try {
widget.data, final printValue =
'', await PrintDataoutputs.instance.printBar(
widget.draftName, widget.data,
'kasir', '',
barPrinter.paper.toIntegerFromText, widget.draftName,
orderType.value, 'kasir',
); barPrinter.paper.toIntegerFromText,
orderType.value,
);
await PrinterService().printWithPrinter( await PrinterService().printWithPrinter(
barPrinter, barPrinter, printValue, context);
printValue, } catch (e) {
context log("Error printing bar order: $e");
); ScaffoldMessenger.of(context).showSnackBar(
} catch (e) { SnackBar(
log("Error printing bar order: $e"); content: Text(
ScaffoldMessenger.of(context).showSnackBar( 'Error printing bar order: $e')),
SnackBar(content: Text('Error printing bar order: $e')), );
); }
} }
}
}, },
label: 'Print', label: 'Print',
); );