This commit is contained in:
Phuoc Nguyen
2025-11-04 18:10:54 +07:00
parent 1cfdd2c0c6
commit 2ff639fc42
2 changed files with 96 additions and 49 deletions

View File

@@ -38,11 +38,11 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
mobile_scanner: 9157936403f5a0644ca3779a38ff8404c5434a93 mobile_scanner: 77265f3dc8d580810e91849d4a0811a90467ed5e
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
printing: 54ff03f28fe9ba3aa93358afb80a8595a071dd07 printing: 233e1b73bd1f4a05615548e9b5a324c98588640b
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e

View File

@@ -21,39 +21,42 @@ class SunmiService {
String? barcodeData, String? barcodeData,
}) async { }) async {
try { try {
// Check if printer is bound
final bool? isBound = await SunmiPrinter.bindingPrinter();
if (isBound != true) {
throw Exception('Sunmi printer not available');
}
// Format current date // Format current date
final dt = DateFormat('dd/MM/yyyy HH:mm').format(DateTime.now()); final dt = DateFormat('dd/MM/yyyy HH:mm').format(DateTime.now());
// Reset printer
await SunmiPrinter.initPrinter();
await SunmiPrinter.resetFontSize();
// Title - PHIẾU XUẤT KHO // Title - PHIẾU XUẤT KHO
await SunmiPrinter.setAlignment(SunmiPrintAlign.CENTER); await SunmiPrinter.printText(
await SunmiPrinter.bold(); 'PHIEU XUAT KHO',
await SunmiPrinter.setCustomFontSize(30); style: SunmiTextStyle(
await SunmiPrinter.printText('PHIEU XUAT KHO'); align: SunmiPrintAlign.CENTER,
await SunmiPrinter.resetBold(); bold: true,
await SunmiPrinter.setCustomFontSize(24); fontSize: 48,
),
);
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Company name // Company name
await SunmiPrinter.printText('Cong ty TNHH Co Khi Chinh Xac Minh Thu'); await SunmiPrinter.printText(
await SunmiPrinter.resetFontSize(); 'Cong ty TNHH Co Khi Chinh Xac Minh Thu',
style: SunmiTextStyle(
align: SunmiPrintAlign.CENTER,
fontSize: 32,
),
);
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Warehouse name // Warehouse name
await SunmiPrinter.printText(warehouseName); await SunmiPrinter.printText(
warehouseName,
style: SunmiTextStyle(align: SunmiPrintAlign.CENTER),
);
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Date // Date
await SunmiPrinter.printText('Ngay: $dt'); await SunmiPrinter.printText(
'Ngay: $dt',
style: SunmiTextStyle(align: SunmiPrintAlign.CENTER),
);
await SunmiPrinter.lineWrap(2); await SunmiPrinter.lineWrap(2);
// Separator line // Separator line
@@ -61,26 +64,41 @@ class SunmiService {
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Product information // Product information
await SunmiPrinter.setAlignment(SunmiPrintAlign.LEFT); await SunmiPrinter.printText(
await SunmiPrinter.bold(); 'THONG TIN SAN PHAM',
await SunmiPrinter.printText('THONG TIN SAN PHAM'); style: SunmiTextStyle(
await SunmiPrinter.resetBold(); align: SunmiPrintAlign.LEFT,
bold: true,
),
);
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// ProductId // ProductId
await SunmiPrinter.printText('ProductId: $productId'); await SunmiPrinter.printText(
'ProductId: $productId',
style: SunmiTextStyle(align: SunmiPrintAlign.LEFT),
);
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Product Code // Product Code
await SunmiPrinter.printText('Ma san pham: $productCode'); await SunmiPrinter.printText(
'Ma san pham: $productCode',
style: SunmiTextStyle(align: SunmiPrintAlign.LEFT),
);
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Product Name // Product Name
await SunmiPrinter.printText('Ten san pham: $productName'); await SunmiPrinter.printText(
'Ten san pham: $productName',
style: SunmiTextStyle(align: SunmiPrintAlign.LEFT),
);
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Stage Name // Stage Name
await SunmiPrinter.printText('Cong doan: ${stageName ?? '-'}'); await SunmiPrinter.printText(
'Cong doan: ${stageName ?? '-'}',
style: SunmiTextStyle(align: SunmiPrintAlign.LEFT),
);
await SunmiPrinter.lineWrap(2); await SunmiPrinter.lineWrap(2);
// Separator line // Separator line
@@ -88,23 +106,37 @@ class SunmiService {
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Quantities // Quantities
await SunmiPrinter.bold(); await SunmiPrinter.printText(
await SunmiPrinter.printText('SO LUONG'); 'SO LUONG',
await SunmiPrinter.resetBold(); style: SunmiTextStyle(
align: SunmiPrintAlign.LEFT,
bold: true,
),
);
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Table header // Table header
await SunmiPrinter.setAlignment(SunmiPrintAlign.LEFT); await SunmiPrinter.printText(
await SunmiPrinter.printText('Loai KG PCS'); 'Loai KG PCS',
style: SunmiTextStyle(align: SunmiPrintAlign.LEFT),
);
await SunmiPrinter.line(); await SunmiPrinter.line();
// Passed quantity (Hàng đạt) // Passed quantity (Hàng đạt)
final passedLine = 'Hang dat ${passedKg.toStringAsFixed(2).padLeft(7)} ${passedPcs.toString().padLeft(5)}'; final passedLine =
await SunmiPrinter.printText(passedLine); 'Hang dat ${passedKg.toStringAsFixed(2).padLeft(7)} ${passedPcs.toString().padLeft(5)}';
await SunmiPrinter.printText(
passedLine,
style: SunmiTextStyle(align: SunmiPrintAlign.LEFT),
);
// Issued quantity (Hàng lỗi) // Issued quantity (Hàng lỗi)
final issuedLine = 'Hang loi ${issuedKg.toStringAsFixed(2).padLeft(7)} ${issuedPcs.toString().padLeft(5)}'; final issuedLine =
await SunmiPrinter.printText(issuedLine); 'Hang loi ${issuedKg.toStringAsFixed(2).padLeft(7)} ${issuedPcs.toString().padLeft(5)}';
await SunmiPrinter.printText(
issuedLine,
style: SunmiTextStyle(align: SunmiPrintAlign.LEFT),
);
await SunmiPrinter.lineWrap(2); await SunmiPrinter.lineWrap(2);
// Separator line // Separator line
@@ -112,29 +144,44 @@ class SunmiService {
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Responsible person // Responsible person
await SunmiPrinter.printText('Nhan vien kho: ${responsibleName ?? '-'}'); await SunmiPrinter.printText(
'Nhan vien kho: ${responsibleName ?? '-'}',
style: SunmiTextStyle(align: SunmiPrintAlign.LEFT),
);
await SunmiPrinter.lineWrap(1); await SunmiPrinter.lineWrap(1);
// Receiver // Receiver
await SunmiPrinter.printText('Nhan vien tiep nhan: ${receiverName ?? '-'}'); await SunmiPrinter.printText(
'Nhan vien tiep nhan: ${receiverName ?? '-'}',
style: SunmiTextStyle(align: SunmiPrintAlign.LEFT),
);
await SunmiPrinter.lineWrap(2); await SunmiPrinter.lineWrap(2);
// Barcode // Barcode
if (barcodeData != null && barcodeData.isNotEmpty) { if (barcodeData != null && barcodeData.isNotEmpty) {
await SunmiPrinter.line(); await SunmiPrinter.line();
await SunmiPrinter.setAlignment(SunmiPrintAlign.CENTER); await SunmiPrinter.printBarCode(
await SunmiPrinter.printBarCode(barcodeData); barcodeData,
style: SunmiBarcodeStyle(
type: SunmiBarcodeType.CODE128,
textPos: SunmiBarcodeTextPos.TEXT_UNDER,
height: 100,
align: SunmiPrintAlign.CENTER,
),
);
await SunmiPrinter.lineWrap(2); await SunmiPrinter.lineWrap(2);
} }
// Footer // Footer
await SunmiPrinter.line(); await SunmiPrinter.line();
await SunmiPrinter.setAlignment(SunmiPrintAlign.CENTER); await SunmiPrinter.printText(
await SunmiPrinter.printText('Nguoi nhan'); 'Nguoi nhan',
style: SunmiTextStyle(align: SunmiPrintAlign.CENTER),
);
await SunmiPrinter.lineWrap(4); await SunmiPrinter.lineWrap(4);
// Cut paper // Cut paper
await SunmiPrinter.cut(); await SunmiPrinter.cutPaper();
// Show success message // Show success message
if (context.mounted) { if (context.mounted) {