Update: 2026-08-08 12:58:16
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
// fuel_admin_controller.dart — تحكم شاشات محفظة الوقود (لوحة إدارة سيرو)
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'fuel_admin_models.dart';
|
||||
import 'fuel_admin_service.dart';
|
||||
|
||||
class FuelAdminController extends GetxController {
|
||||
bool isLoading = false;
|
||||
List<FuelStation> stations = [];
|
||||
|
||||
/// حالة المنتج — لا حالة الشاشة. الشاشة تعمل دائماً؛ المنتج قد يكون
|
||||
/// مُجهَّزاً وغير مُشغَّل حتى يتم الاتفاق مع سلسلة المحطات.
|
||||
bool productActive = false;
|
||||
|
||||
String searchQuery = '';
|
||||
bool isSaving = false;
|
||||
|
||||
bool isLoadingDrawdowns = false;
|
||||
FuelDrawdownsPage? drawdowns;
|
||||
|
||||
String? lastError;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
fetchStations();
|
||||
}
|
||||
|
||||
Future<void> fetchStations() async {
|
||||
isLoading = true;
|
||||
update();
|
||||
|
||||
final res = await FuelAdminService.listStations(search: searchQuery);
|
||||
if (res.success && res.data != null) {
|
||||
stations = res.data!.stations;
|
||||
productActive = res.data!.productActive;
|
||||
lastError = null;
|
||||
} else {
|
||||
lastError = res.message;
|
||||
}
|
||||
|
||||
isLoading = false;
|
||||
update();
|
||||
}
|
||||
|
||||
/// يُرجع المفتاح الجديد عند الإنشاء، أو null عند التعديل/الفشل.
|
||||
///
|
||||
/// المفتاح يظهر مرة واحدة فقط — مخزَّن مُهشَّراً على الخادم ولا سبيل
|
||||
/// لاستعادته. الشاشة مسؤولة عن عرضه فوراً قبل أي انتقال.
|
||||
Future<String?> saveStation({
|
||||
int? stationId,
|
||||
required String nameAr,
|
||||
String? chainName,
|
||||
String? city,
|
||||
String? address,
|
||||
double? lat,
|
||||
double? lng,
|
||||
String? phone,
|
||||
required double discountPercent,
|
||||
required bool isActive,
|
||||
}) async {
|
||||
isSaving = true;
|
||||
update();
|
||||
|
||||
final res = await FuelAdminService.saveStation(
|
||||
stationId: stationId,
|
||||
nameAr: nameAr,
|
||||
chainName: chainName,
|
||||
city: city,
|
||||
address: address,
|
||||
lat: lat,
|
||||
lng: lng,
|
||||
phone: phone,
|
||||
discountPercent: discountPercent,
|
||||
isActive: isActive,
|
||||
);
|
||||
|
||||
isSaving = false;
|
||||
lastError = res.success ? null : res.message;
|
||||
update();
|
||||
|
||||
if (!res.success) return null;
|
||||
|
||||
await fetchStations();
|
||||
return res.data?['api_key']?.toString();
|
||||
}
|
||||
|
||||
Future<String?> rotateKey(int stationId) async {
|
||||
final res = await FuelAdminService.rotateKey(stationId);
|
||||
if (!res.success) {
|
||||
lastError = res.message;
|
||||
update();
|
||||
return null;
|
||||
}
|
||||
return res.data?['api_key']?.toString();
|
||||
}
|
||||
|
||||
/// تشغيل المنتج أو إيقافه. الخادم يرفض التشغيل بلا محطة فعّالة واحدة —
|
||||
/// سائق يفعّل محفظته ثم لا يجد أين يصرف قسيمته تجربةٌ تُفقد الثقة.
|
||||
Future<bool> toggleProduct(bool value) async {
|
||||
final res = await FuelAdminService.toggleProduct(value);
|
||||
if (res.success) {
|
||||
productActive = res.data ?? value;
|
||||
lastError = null;
|
||||
update();
|
||||
return true;
|
||||
}
|
||||
lastError = res.message;
|
||||
update();
|
||||
return false;
|
||||
}
|
||||
|
||||
Future<void> fetchDrawdowns({int? stationId, String? status}) async {
|
||||
isLoadingDrawdowns = true;
|
||||
update();
|
||||
|
||||
final res =
|
||||
await FuelAdminService.listDrawdowns(stationId: stationId, status: status);
|
||||
if (res.success) {
|
||||
drawdowns = res.data;
|
||||
lastError = null;
|
||||
} else {
|
||||
lastError = res.message;
|
||||
}
|
||||
|
||||
isLoadingDrawdowns = false;
|
||||
update();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user