Update: 2026-05-08 01:27:14
This commit is contained in:
@@ -67,7 +67,7 @@ class InvoiceDetailController extends GetxController {
|
||||
try {
|
||||
final res = await DioClient()
|
||||
.client
|
||||
.post('invoices/approve', data: {'invoice_id': invoiceId});
|
||||
.post('invoices/approve', data: {'id': invoiceId});
|
||||
if (res.data['success'] == true) {
|
||||
AppSnackbar.showSuccess('تم الاعتماد', 'تم اعتماد الفاتورة بنجاح');
|
||||
fetchInvoiceDetails();
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user