Update: 2026-05-08 01:27:14

This commit is contained in:
Hamza-Ayed
2026-05-08 01:27:14 +03:00
parent 928e8e27e3
commit 23813fee95
6 changed files with 227 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
import 'package:get/get.dart';
import '../../../core/network/dio_client.dart';
import '../../../core/utils/app_snackbar.dart';
import '../../../core/utils/logger.dart';
class InvoicesController extends GetxController {
@@ -9,6 +10,10 @@ class InvoicesController extends GetxController {
var searchQuery = ''.obs;
var isSearching = false.obs;
// Multi-select
var isSelecting = false.obs;
var selectedIds = <String>{}.obs;
@override
void onInit() {
super.onInit();
@@ -49,6 +54,53 @@ class InvoicesController extends GetxController {
if (!isSearching.value) searchQuery.value = '';
}
// ── Multi-select ──
void toggleSelectMode() {
isSelecting.value = !isSelecting.value;
if (!isSelecting.value) selectedIds.clear();
}
void toggleSelection(String id) {
if (selectedIds.contains(id)) {
selectedIds.remove(id);
} else {
selectedIds.add(id);
}
}
void selectAllExtracted() {
selectedIds.clear();
for (final inv in filteredInvoices) {
if (inv['status'] == 'extracted') {
selectedIds.add(inv['id']);
}
}
}
Future<void> bulkApprove() async {
if (selectedIds.isEmpty) {
AppSnackbar.showWarning('تنبيه', 'يرجى اختيار فاتورة واحدة على الأقل');
return;
}
try {
final res = await DioClient().client.post('invoices/bulk-approve', data: {
'ids': selectedIds.toList(),
});
if (res.data['success'] == true) {
final count = res.data['data']?['approved_count'] ?? 0;
AppSnackbar.showSuccess('تم الاعتماد', 'تم اعتماد $count فاتورة بنجاح');
selectedIds.clear();
isSelecting.value = false;
await loadInvoices();
}
} catch (e) {
AppLogger.error('Failed to bulk approve', e);
AppSnackbar.showError('خطأ', 'فشل اعتماد الفواتير');
}
}
Future<void> loadInvoices() async {
try {
isLoading.value = true;