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/data/dataoutputs/print_dataoutputs.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/settings_local_datasource.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:flutter/material.dart';
|
||||
import 'package:barcode/barcode.dart';
|
||||
@ -19,6 +21,8 @@ Future<void> onPrint(
|
||||
required List<ProductQuantity> productQuantity,
|
||||
required Order order,
|
||||
}) async {
|
||||
final outlet = await OutletLocalDatasource().get();
|
||||
if (outlet.businessType == BusinessType.restaurant) {
|
||||
final checkerPrinter =
|
||||
await ProductLocalDatasource.instance.getPrinterByCode('checker');
|
||||
final kitchenPrinter =
|
||||
@ -85,7 +89,8 @@ Future<void> onPrint(
|
||||
order.orderType ?? "",
|
||||
);
|
||||
|
||||
await PrinterService().printWithPrinter(barPrinter, printValue, context);
|
||||
await PrinterService()
|
||||
.printWithPrinter(barPrinter, printValue, context);
|
||||
} catch (e) {
|
||||
log("Error printing bar order: $e");
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
@ -95,6 +100,33 @@ Future<void> onPrint(
|
||||
}
|
||||
}
|
||||
|
||||
if (outlet.businessType == BusinessType.ticketing) {
|
||||
final ticketPrinter =
|
||||
await ProductLocalDatasource.instance.getPrinterByCode('ticket');
|
||||
|
||||
final barcode = await generateBarcodeAsUint8List(order.orderNumber ?? "");
|
||||
|
||||
if (ticketPrinter != null) {
|
||||
try {
|
||||
final printValue = await PrintDataoutputs.instance.printTicket(
|
||||
order.totalAmount ?? 0,
|
||||
barcode,
|
||||
ticketPrinter.paper.toIntegerFromText,
|
||||
);
|
||||
|
||||
await PrinterService()
|
||||
// ignore: use_build_context_synchronously
|
||||
.printWithPrinter(ticketPrinter, printValue, context);
|
||||
} catch (e) {
|
||||
log("Error printing ticket: $e");
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Error printing ticket: $e')),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> onPrintRecipt(
|
||||
context, {
|
||||
required Order order,
|
||||
@ -106,6 +138,7 @@ Future<void> onPrintRecipt(
|
||||
await ProductLocalDatasource.instance.getPrinterByCode('receipt');
|
||||
final authData = await AuthLocalDataSource().getAuthData();
|
||||
final settings = await SettingsLocalDatasource().getTax();
|
||||
final outlet = await OutletLocalDatasource().get();
|
||||
|
||||
if (receiptPrinter != null) {
|
||||
try {
|
||||
@ -117,6 +150,8 @@ Future<void> onPrintRecipt(
|
||||
kembalian,
|
||||
settings.value,
|
||||
receiptPrinter.paper.toIntegerFromText,
|
||||
order.orderType ?? "",
|
||||
outlet,
|
||||
);
|
||||
await PrinterService()
|
||||
.printWithPrinter(receiptPrinter, printValue, context);
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import 'dart:math';
|
||||
|
||||
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:flutter/services.dart';
|
||||
import 'package:enaklo_pos/core/extensions/int_ext.dart';
|
||||
@ -748,6 +749,8 @@ class PrintDataoutputs {
|
||||
int kembalian,
|
||||
int taxPercentage,
|
||||
int paper,
|
||||
String orderType,
|
||||
Outlet outlet,
|
||||
) async {
|
||||
List<int> bytes = [];
|
||||
|
||||
@ -757,7 +760,7 @@ class PrintDataoutputs {
|
||||
|
||||
bytes += generator.reset();
|
||||
|
||||
bytes += generator.text('Guapatlu Khas Bakmi Jambi',
|
||||
bytes += generator.text(outlet.name ?? "",
|
||||
styles: const PosStyles(
|
||||
bold: true,
|
||||
align: PosAlign.center,
|
||||
@ -765,9 +768,9 @@ class PrintDataoutputs {
|
||||
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));
|
||||
bytes += generator.text('085-77777-3839',
|
||||
bytes += generator.text(outlet.phoneNumber ?? "",
|
||||
styles: const PosStyles(bold: false, align: PosAlign.center));
|
||||
|
||||
bytes += generator.text(
|
||||
@ -855,7 +858,7 @@ class PrintDataoutputs {
|
||||
? '------------------------------------------------'
|
||||
: '--------------------------------',
|
||||
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));
|
||||
bytes += generator.text(
|
||||
paper == 80
|
||||
|
||||
@ -8,6 +8,7 @@ class OutletLocalDatasource {
|
||||
try {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString('outlet', outlet.toJson());
|
||||
log('Outlet Local Data: ${outlet.toJson()}');
|
||||
} catch (e) {
|
||||
log('Error saving outlet: $e');
|
||||
}
|
||||
@ -22,7 +23,7 @@ class OutletLocalDatasource {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final outlet = prefs.getString('outlet');
|
||||
|
||||
log('Auth data: $outlet');
|
||||
log('Outlet Local Data: $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 'package:enaklo_pos/data/type/bussines_type.dart';
|
||||
|
||||
class OutletResponse {
|
||||
final bool? success;
|
||||
final OutletData? data;
|
||||
@ -101,7 +103,7 @@ class Outlet {
|
||||
final String? name;
|
||||
final String? address;
|
||||
final String? phoneNumber;
|
||||
final String? businessType;
|
||||
final BusinessType? businessType;
|
||||
final String? currency;
|
||||
final int? taxRate;
|
||||
final bool? isActive;
|
||||
@ -128,7 +130,7 @@ class Outlet {
|
||||
name: json["name"],
|
||||
address: json["address"],
|
||||
phoneNumber: json["phone_number"],
|
||||
businessType: json["business_type"],
|
||||
businessType: BusinessType.fromString(json["business_type"]),
|
||||
currency: json["currency"],
|
||||
taxRate: json["tax_rate"],
|
||||
isActive: json["is_active"],
|
||||
@ -146,7 +148,7 @@ class Outlet {
|
||||
"name": name,
|
||||
"address": address,
|
||||
"phone_number": phoneNumber,
|
||||
"business_type": businessType,
|
||||
"business_type": businessType?.value,
|
||||
"currency": currency,
|
||||
"tax_rate": taxRate,
|
||||
"is_active": isActive,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user