Files
Siro/siro_admin/lib/controller/admin/withdrawal_controller.dart
T

93 lines
2.9 KiB
Dart

import 'dart:convert';
import 'package:get/get.dart';
import 'package:siro_admin/constant/links.dart';
import 'package:siro_admin/controller/functions/crud.dart';
import 'package:siro_admin/views/widgets/snackbar.dart';
import '../../print.dart';
/// طلبات سحب أرصدة السائقين (جدول driver_withdrawal_requests على خادم
/// المدفوعات). لم تكن لها واجهة إطلاقاً قبل هذا: السائق يرسل الطلب فيُخزَّن
/// وتُرسل رسالة واتساب لحظية، ثم لا يقرأ الجدول أحد.
class WithdrawalController extends GetxController {
bool isLoading = true;
List<dynamic> requests = [];
Map<String, dynamic> totals = {};
String filter = 'pending';
/// المعرّف قيد المعالجة — لتعطيل أزرار الصف أثناء الطلب ومنع النقر المزدوج
int? busyId;
@override
void onInit() {
super.onInit();
fetchRequests();
}
Future<void> changeFilter(String next) async {
if (filter == next) return;
filter = next;
await fetchRequests();
}
Future<void> fetchRequests() async {
isLoading = true;
update();
try {
var res = await CRUD().getWallet(
link: AppLink.withdrawalRequests,
payload: {'action': 'list', 'status': filter},
);
if (res != 'failure' && res != null) {
var d = res is String ? jsonDecode(res) : res;
if (d['status'] == 'success' && d['data'] is Map) {
requests = d['data']['requests'] ?? [];
totals = Map<String, dynamic>.from(d['data']['totals'] ?? {});
} else {
mySnackbarError('${d['message'] ?? 'تعذّر جلب طلبات السحب'}');
}
}
} catch (e) {
Log.print('Error fetching withdrawal requests: $e');
mySnackbarError('$e');
}
isLoading = false;
update();
}
/// تغيير الحالة يتطلّب super_admin على الخادم؛ الخادم يرفض أيضاً أي انتقال
/// غير مسموح (مثل إعادة فتح طلب مرفوض) بـ 409، فنعرض رسالته كما هي.
Future<void> updateStatus(int id, String status) async {
busyId = id;
update();
try {
var res = await CRUD().getWallet(
link: AppLink.withdrawalRequests,
payload: {
'action': 'update_status',
'id': id.toString(),
'status': status,
},
);
if (res != 'failure' && res != null) {
var d = res is String ? jsonDecode(res) : res;
if (d['status'] == 'success') {
mySnackbarSuccess('تم تحديث حالة الطلب');
busyId = null;
await fetchRequests();
return;
}
mySnackbarError('${d['message'] ?? 'تعذّر تحديث الحالة'}');
}
} catch (e) {
Log.print('Error updating withdrawal status: $e');
mySnackbarError('$e');
}
busyId = null;
update();
}
}