dev #1
@ -6,9 +6,11 @@ import 'package:enaklo_pos/core/extensions/string_ext.dart';
|
|||||||
import 'package:enaklo_pos/core/utils/printer_service.dart';
|
import 'package:enaklo_pos/core/utils/printer_service.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/auth_local_datasource.dart';
|
||||||
|
import 'package:enaklo_pos/data/datasources/outlet_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/data/datasources/settings_local_datasource.dart';
|
import 'package:enaklo_pos/data/datasources/settings_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/data/type/bussines_type.dart';
|
||||||
import 'package:enaklo_pos/presentation/home/models/product_quantity.dart';
|
import 'package:enaklo_pos/presentation/home/models/product_quantity.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:barcode/barcode.dart';
|
import 'package:barcode/barcode.dart';
|
||||||
@ -19,78 +21,108 @@ Future<void> onPrint(
|
|||||||
required List<ProductQuantity> productQuantity,
|
required List<ProductQuantity> productQuantity,
|
||||||
required Order order,
|
required Order order,
|
||||||
}) async {
|
}) async {
|
||||||
final checkerPrinter =
|
final outlet = await OutletLocalDatasource().get();
|
||||||
await ProductLocalDatasource.instance.getPrinterByCode('checker');
|
if (outlet.businessType == BusinessType.restaurant) {
|
||||||
final kitchenPrinter =
|
final checkerPrinter =
|
||||||
await ProductLocalDatasource.instance.getPrinterByCode('kitchen');
|
await ProductLocalDatasource.instance.getPrinterByCode('checker');
|
||||||
final barPrinter =
|
final kitchenPrinter =
|
||||||
await ProductLocalDatasource.instance.getPrinterByCode('bar');
|
await ProductLocalDatasource.instance.getPrinterByCode('kitchen');
|
||||||
|
final barPrinter =
|
||||||
|
await ProductLocalDatasource.instance.getPrinterByCode('bar');
|
||||||
|
|
||||||
final authData = await AuthLocalDataSource().getAuthData();
|
final authData = await AuthLocalDataSource().getAuthData();
|
||||||
|
|
||||||
// Checker printer
|
// Checker printer
|
||||||
if (checkerPrinter != null) {
|
if (checkerPrinter != null) {
|
||||||
try {
|
try {
|
||||||
final printValue = await PrintDataoutputs.instance.printChecker(
|
final printValue = await PrintDataoutputs.instance.printChecker(
|
||||||
productQuantity,
|
productQuantity,
|
||||||
order.tableNumber ?? "",
|
order.tableNumber ?? "",
|
||||||
order.orderNumber ?? "",
|
order.orderNumber ?? "",
|
||||||
authData.user?.name ?? "",
|
authData.user?.name ?? "",
|
||||||
checkerPrinter.paper.toIntegerFromText,
|
checkerPrinter.paper.toIntegerFromText,
|
||||||
order.orderType ?? "",
|
order.orderType ?? "",
|
||||||
);
|
);
|
||||||
|
|
||||||
await PrinterService()
|
await PrinterService()
|
||||||
// ignore: use_build_context_synchronously
|
// ignore: use_build_context_synchronously
|
||||||
.printWithPrinter(checkerPrinter, printValue, context);
|
.printWithPrinter(checkerPrinter, printValue, context);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log("Error printing checker: $e");
|
log("Error printing checker: $e");
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(content: Text('Error printing checker: $e')),
|
SnackBar(content: Text('Error printing checker: $e')),
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kitchen printer
|
||||||
|
if (kitchenPrinter != null) {
|
||||||
|
try {
|
||||||
|
final printValue = await PrintDataoutputs.instance.printKitchen(
|
||||||
|
productQuantity,
|
||||||
|
order.tableNumber!,
|
||||||
|
order.orderNumber ?? "",
|
||||||
|
authData.user?.name ?? "",
|
||||||
|
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 ?? "",
|
||||||
|
authData.user?.name ?? "",
|
||||||
|
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')),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kitchen printer
|
if (outlet.businessType == BusinessType.ticketing) {
|
||||||
if (kitchenPrinter != null) {
|
final ticketPrinter =
|
||||||
try {
|
await ProductLocalDatasource.instance.getPrinterByCode('ticket');
|
||||||
final printValue = await PrintDataoutputs.instance.printKitchen(
|
|
||||||
productQuantity,
|
|
||||||
order.tableNumber!,
|
|
||||||
order.orderNumber ?? "",
|
|
||||||
authData.user?.name ?? "",
|
|
||||||
kitchenPrinter.paper.toIntegerFromText,
|
|
||||||
order.orderType ?? "",
|
|
||||||
);
|
|
||||||
|
|
||||||
await PrinterService()
|
final barcode = await generateBarcodeAsUint8List(order.orderNumber ?? "");
|
||||||
.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 (ticketPrinter != null) {
|
||||||
if (barPrinter != null) {
|
try {
|
||||||
try {
|
final printValue = await PrintDataoutputs.instance.printTicket(
|
||||||
final printValue = await PrintDataoutputs.instance.printBar(
|
order.totalAmount ?? 0,
|
||||||
productQuantity,
|
barcode,
|
||||||
order.tableNumber ?? "",
|
ticketPrinter.paper.toIntegerFromText,
|
||||||
order.orderNumber ?? "",
|
);
|
||||||
authData.user?.name ?? "",
|
|
||||||
barPrinter.paper.toIntegerFromText,
|
|
||||||
order.orderType ?? "",
|
|
||||||
);
|
|
||||||
|
|
||||||
await PrinterService().printWithPrinter(barPrinter, printValue, context);
|
await PrinterService()
|
||||||
} catch (e) {
|
// ignore: use_build_context_synchronously
|
||||||
log("Error printing bar order: $e");
|
.printWithPrinter(ticketPrinter, printValue, context);
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
} catch (e) {
|
||||||
SnackBar(content: Text('Error printing bar order: $e')),
|
log("Error printing ticket: $e");
|
||||||
);
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(content: Text('Error printing ticket: $e')),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -106,6 +138,7 @@ Future<void> onPrintRecipt(
|
|||||||
await ProductLocalDatasource.instance.getPrinterByCode('receipt');
|
await ProductLocalDatasource.instance.getPrinterByCode('receipt');
|
||||||
final authData = await AuthLocalDataSource().getAuthData();
|
final authData = await AuthLocalDataSource().getAuthData();
|
||||||
final settings = await SettingsLocalDatasource().getTax();
|
final settings = await SettingsLocalDatasource().getTax();
|
||||||
|
final outlet = await OutletLocalDatasource().get();
|
||||||
|
|
||||||
if (receiptPrinter != null) {
|
if (receiptPrinter != null) {
|
||||||
try {
|
try {
|
||||||
@ -117,6 +150,8 @@ Future<void> onPrintRecipt(
|
|||||||
kembalian,
|
kembalian,
|
||||||
settings.value,
|
settings.value,
|
||||||
receiptPrinter.paper.toIntegerFromText,
|
receiptPrinter.paper.toIntegerFromText,
|
||||||
|
order.orderType ?? "",
|
||||||
|
outlet,
|
||||||
);
|
);
|
||||||
await PrinterService()
|
await PrinterService()
|
||||||
.printWithPrinter(receiptPrinter, printValue, context);
|
.printWithPrinter(receiptPrinter, printValue, context);
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
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/outlet_model.dart';
|
||||||
import 'package:esc_pos_utils_plus/esc_pos_utils_plus.dart';
|
import 'package:esc_pos_utils_plus/esc_pos_utils_plus.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:enaklo_pos/core/extensions/int_ext.dart';
|
import 'package:enaklo_pos/core/extensions/int_ext.dart';
|
||||||
@ -748,6 +749,8 @@ class PrintDataoutputs {
|
|||||||
int kembalian,
|
int kembalian,
|
||||||
int taxPercentage,
|
int taxPercentage,
|
||||||
int paper,
|
int paper,
|
||||||
|
String orderType,
|
||||||
|
Outlet outlet,
|
||||||
) async {
|
) async {
|
||||||
List<int> bytes = [];
|
List<int> bytes = [];
|
||||||
|
|
||||||
@ -757,7 +760,7 @@ class PrintDataoutputs {
|
|||||||
|
|
||||||
bytes += generator.reset();
|
bytes += generator.reset();
|
||||||
|
|
||||||
bytes += generator.text('Guapatlu Khas Bakmi Jambi',
|
bytes += generator.text(outlet.name ?? "",
|
||||||
styles: const PosStyles(
|
styles: const PosStyles(
|
||||||
bold: true,
|
bold: true,
|
||||||
align: PosAlign.center,
|
align: PosAlign.center,
|
||||||
@ -765,9 +768,9 @@ class PrintDataoutputs {
|
|||||||
width: PosTextSize.size1,
|
width: PosTextSize.size1,
|
||||||
));
|
));
|
||||||
|
|
||||||
bytes += generator.text('Gading Boulevard w2, No 25, Jakarta',
|
bytes += generator.text(outlet.address ?? "",
|
||||||
styles: const PosStyles(bold: false, align: PosAlign.center));
|
styles: const PosStyles(bold: false, align: PosAlign.center));
|
||||||
bytes += generator.text('085-77777-3839',
|
bytes += generator.text(outlet.phoneNumber ?? "",
|
||||||
styles: const PosStyles(bold: false, align: PosAlign.center));
|
styles: const PosStyles(bold: false, align: PosAlign.center));
|
||||||
|
|
||||||
bytes += generator.text(
|
bytes += generator.text(
|
||||||
@ -855,7 +858,7 @@ class PrintDataoutputs {
|
|||||||
? '------------------------------------------------'
|
? '------------------------------------------------'
|
||||||
: '--------------------------------',
|
: '--------------------------------',
|
||||||
styles: const PosStyles(bold: false, align: PosAlign.center));
|
styles: const PosStyles(bold: false, align: PosAlign.center));
|
||||||
bytes += generator.text('Dine In',
|
bytes += generator.text(orderType,
|
||||||
styles: const PosStyles(bold: true, align: PosAlign.center));
|
styles: const PosStyles(bold: true, align: PosAlign.center));
|
||||||
bytes += generator.text(
|
bytes += generator.text(
|
||||||
paper == 80
|
paper == 80
|
||||||
|
|||||||
@ -8,6 +8,7 @@ class OutletLocalDatasource {
|
|||||||
try {
|
try {
|
||||||
final prefs = await SharedPreferences.getInstance();
|
final prefs = await SharedPreferences.getInstance();
|
||||||
await prefs.setString('outlet', outlet.toJson());
|
await prefs.setString('outlet', outlet.toJson());
|
||||||
|
log('Outlet Local Data: ${outlet.toJson()}');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log('Error saving outlet: $e');
|
log('Error saving outlet: $e');
|
||||||
}
|
}
|
||||||
@ -22,7 +23,7 @@ class OutletLocalDatasource {
|
|||||||
final prefs = await SharedPreferences.getInstance();
|
final prefs = await SharedPreferences.getInstance();
|
||||||
final outlet = prefs.getString('outlet');
|
final outlet = prefs.getString('outlet');
|
||||||
|
|
||||||
log('Auth data: $outlet');
|
log('Outlet Local Data: $outlet');
|
||||||
|
|
||||||
return Outlet.fromJson(outlet!);
|
return Outlet.fromJson(outlet!);
|
||||||
}
|
}
|
||||||
|
|||||||
17
lib/data/type/bussines_type.dart
Normal file
17
lib/data/type/bussines_type.dart
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
enum BusinessType {
|
||||||
|
restaurant('restaurant'),
|
||||||
|
retail('retail'),
|
||||||
|
service('service'),
|
||||||
|
ticketing('ticketing'),
|
||||||
|
entertainment('entertainment');
|
||||||
|
|
||||||
|
final String value;
|
||||||
|
const BusinessType(this.value);
|
||||||
|
|
||||||
|
static BusinessType fromString(String value) {
|
||||||
|
return BusinessType.values.firstWhere(
|
||||||
|
(type) => type.value == value,
|
||||||
|
orElse: () => BusinessType.restaurant,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,5 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:enaklo_pos/data/type/bussines_type.dart';
|
||||||
|
|
||||||
class OutletResponse {
|
class OutletResponse {
|
||||||
final bool? success;
|
final bool? success;
|
||||||
final OutletData? data;
|
final OutletData? data;
|
||||||
@ -101,7 +103,7 @@ class Outlet {
|
|||||||
final String? name;
|
final String? name;
|
||||||
final String? address;
|
final String? address;
|
||||||
final String? phoneNumber;
|
final String? phoneNumber;
|
||||||
final String? businessType;
|
final BusinessType? businessType;
|
||||||
final String? currency;
|
final String? currency;
|
||||||
final int? taxRate;
|
final int? taxRate;
|
||||||
final bool? isActive;
|
final bool? isActive;
|
||||||
@ -128,7 +130,7 @@ class Outlet {
|
|||||||
name: json["name"],
|
name: json["name"],
|
||||||
address: json["address"],
|
address: json["address"],
|
||||||
phoneNumber: json["phone_number"],
|
phoneNumber: json["phone_number"],
|
||||||
businessType: json["business_type"],
|
businessType: BusinessType.fromString(json["business_type"]),
|
||||||
currency: json["currency"],
|
currency: json["currency"],
|
||||||
taxRate: json["tax_rate"],
|
taxRate: json["tax_rate"],
|
||||||
isActive: json["is_active"],
|
isActive: json["is_active"],
|
||||||
@ -146,7 +148,7 @@ class Outlet {
|
|||||||
"name": name,
|
"name": name,
|
||||||
"address": address,
|
"address": address,
|
||||||
"phone_number": phoneNumber,
|
"phone_number": phoneNumber,
|
||||||
"business_type": businessType,
|
"business_type": businessType?.value,
|
||||||
"currency": currency,
|
"currency": currency,
|
||||||
"tax_rate": taxRate,
|
"tax_rate": taxRate,
|
||||||
"is_active": isActive,
|
"is_active": isActive,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user