diff --git a/backend/Admin/v2/quality/blacklist_manager.php b/backend/Admin/v2/quality/blacklist_manager.php index 40a55bee..6b4d706e 100644 --- a/backend/Admin/v2/quality/blacklist_manager.php +++ b/backend/Admin/v2/quality/blacklist_manager.php @@ -1,7 +1,7 @@ > countries = [ @@ -16,6 +16,12 @@ class KazanController extends GetxController { {'code': 'egypt', 'name': 'مصر', 'flag': '🇪🇬'}, ]; + String get selectedCountryCode => + countries.firstWhere( + (c) => c['name'] == selectedCountry.value, + orElse: () => countries.first, + )['code']!; + @override void onInit() { super.onInit(); @@ -30,7 +36,7 @@ class KazanController extends GetxController { Future getKazan() async { isLoading.value = true; try { - final countryParam = selectedCountry.value.toLowerCase(); + final countryParam = selectedCountryCode; var response = await _crud.get(link: "${AppLink.getKazanPercent}?country=$countryParam"); if (response != null && response != 'failure' && response != 'token_expired') { var decoded = response is String ? jsonDecode(response) : response; diff --git a/siro_admin/lib/views/invoice/add_invoice_page.dart b/siro_admin/lib/views/invoice/add_invoice_page.dart index 291391a3..42ddb048 100644 --- a/siro_admin/lib/views/invoice/add_invoice_page.dart +++ b/siro_admin/lib/views/invoice/add_invoice_page.dart @@ -47,12 +47,13 @@ class _AddInvoicePageState extends State { setState(() => _isLoading = true); try { - // إعداد الترويسة (Headers) - final headers = { - 'Authorization': - 'Bearer ${r(box.read(BoxName.jwt)).split(AppInformation.addd)[0]}', - 'X-HMAC-Auth': '${box.read(BoxName.hmac)}', - }; + final rawJwt = box.read(BoxName.jwt); + if (rawJwt == null) { + mySnackbarError('الرجاء تسجيل الدخول أولاً'); + return; + } + final token = r(rawJwt.toString()).split(AppInformation.addd)[0]; + final fingerprint = box.read(BoxName.fingerPrint) ?? ''; final uri = Uri.parse(AppLink.addInvoice); final request = http.MultipartRequest('POST', uri) @@ -60,9 +61,9 @@ class _AddInvoicePageState extends State { ..fields['amount'] = amount ..fields['name'] = itemName ..fields['date'] = date - ..headers.addAll(headers); + ..headers['Authorization'] = 'Bearer $token' + ..headers['X-Device-FP'] = fingerprint; - // إضافة الصورة إذا وجدت if (_imageFile != null) { final multipartFile = await http.MultipartFile.fromPath( 'image', @@ -71,25 +72,24 @@ class _AddInvoicePageState extends State { request.files.add(multipartFile); } - final response = await request.send(); - final respStr = await response.stream.bytesToString(); + final streamed = await request.send(); + final respStr = await streamed.stream.bytesToString(); - // محاولة تحليل الاستجابة Map data; try { data = jsonDecode(respStr); } catch (e) { - data = {'status': 'error', 'message': 'Invalid server response'}; + data = { + 'status': 'error', + 'message': 'خطأ في تحليل استجابة السيرفر: $respStr' + }; } if (data['status'] == 'success') { mySnackbarSuccess('تم حفظ الفاتورة بنجاح'); - _itemNameController.clear(); _amountController.clear(); setState(() => _imageFile = null); - - // تأخير بسيط قبل العودة لتحديث الصفحة السابقة Future.delayed(const Duration(seconds: 1), () { Get.back(result: true); });