Update: 2026-05-15 04:35:25

This commit is contained in:
Hamza-Ayed
2026-05-15 04:35:25 +03:00
parent 1ca7e01ce0
commit 2f1ecca593
14 changed files with 858 additions and 10 deletions

View File

@@ -7,6 +7,7 @@ import 'package:share_plus/share_plus.dart';
import '../../../core/network/dio_client.dart';
import '../../../core/utils/app_snackbar.dart';
import '../../../core/utils/logger.dart';
import '../../../core/services/thermal_printer_service.dart';
class InvoiceDetailController extends GetxController {
var invoice = {}.obs;
@@ -269,4 +270,57 @@ class InvoiceDetailController extends GetxController {
AppSnackbar.showError('خطأ', 'فشل إرسال الفاتورة لجوفوترا');
}
}
Future<void> printThermalInvoice() async {
final ipController = TextEditingController(text: '192.168.1.100'); // Default IP
final proceed = await Get.dialog<bool>(
AlertDialog(
title: const Text('إعدادات الطابعة الحرارية'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Text('أدخل عنوان IP للطابعة (WiFi)'),
const SizedBox(height: 12),
TextField(
controller: ipController,
decoration: const InputDecoration(
labelText: 'IP Address',
border: OutlineInputBorder(),
hintText: 'e.g. 192.168.1.100',
),
keyboardType: TextInputType.number,
),
],
),
actions: [
TextButton(onPressed: () => Get.back(result: false), child: const Text('إلغاء')),
ElevatedButton(
onPressed: () => Get.back(result: true),
style: ElevatedButton.styleFrom(backgroundColor: const Color(0xFF0F4C81)),
child: const Text('طباعة', style: TextStyle(color: Colors.white)),
),
],
),
);
if (proceed == true && ipController.text.isNotEmpty) {
try {
AppSnackbar.showInfo('جاري الاتصال', 'يتم الاتصال بالطابعة...');
final success = await ThermalPrinterService().printInvoice(
ip: ipController.text.trim(),
invoice: Map<String, dynamic>.from(invoice),
);
if (success) {
AppSnackbar.showSuccess('تمت الطباعة', 'تم إرسال الفاتورة للطابعة بنجاح');
} else {
AppSnackbar.showError('خطأ', 'فشل الاتصال بالطابعة. تأكد من عنوان IP والشبكة.');
}
} catch (e) {
AppLogger.error('Print error', e);
AppSnackbar.showError('خطأ', 'حدث خطأ أثناء الطباعة');
}
}
}
}

View File

@@ -109,6 +109,21 @@ class InvoiceDetailView extends StatelessWidget {
const SizedBox(height: 12),
],
SizedBox(
height: 52,
child: ElevatedButton.icon(
onPressed: () => controller.printThermalInvoice(),
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF4F46E5),
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
),
icon: const Icon(Icons.print_rounded),
label: const Text('طباعة حرارية (WiFi)', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)),
),
),
const SizedBox(height: 12),
SizedBox(
height: 52,
child: OutlinedButton.icon(