إضافة الهوية الجديدة Tripz
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
# Tripz — لوحة المستأجر (My Hub)
|
||||
لوحة إدارة **لكل مستأجر**: سائقوه، مشغّلوه، تعرفته، تقاريره، فاتورته. راجع docs/02 (admin) و docs/05.
|
||||
الحالة: placeholder — تُبنى في P1/P2.
|
||||
@@ -1,164 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="ar" dir="rtl">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Tripz — لوحة الأدمن</title>
|
||||
<!--
|
||||
لوحة أدمن المستأجر (docs/22 — N4). SPA مكتفية ذاتياً (vanilla JS + fetch).
|
||||
المصادقة: هاتف + OTP (نفس تدفّق الموبايل) → JWT بدور admin/dispatcher.
|
||||
كل الحماية على السيرفر (RolesGuard). هذه واجهة فقط.
|
||||
-->
|
||||
<style>
|
||||
:root { --bg:#0f1420; --card:#1a2130; --line:#2a3346; --fg:#e6ebf5; --mut:#8b97ad; --acc:#4f8cff; --ok:#2ecc71; --warn:#f39c12; --bad:#e74c3c; }
|
||||
* { box-sizing:border-box; }
|
||||
body { margin:0; font-family:system-ui,'Segoe UI',Tahoma,sans-serif; background:var(--bg); color:var(--fg); }
|
||||
header { padding:14px 22px; border-bottom:1px solid var(--line); display:flex; align-items:center; gap:14px; }
|
||||
header h1 { font-size:17px; margin:0; }
|
||||
nav { display:flex; gap:6px; padding:0 22px; border-bottom:1px solid var(--line); }
|
||||
nav button { background:none; border:0; color:var(--mut); padding:12px 14px; cursor:pointer; font-size:14px; border-bottom:2px solid transparent; }
|
||||
nav button.on { color:var(--fg); border-bottom-color:var(--acc); }
|
||||
.wrap { max-width:1200px; margin:0 auto; padding:22px; }
|
||||
.card { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:18px; margin-bottom:18px; }
|
||||
table { width:100%; border-collapse:collapse; }
|
||||
th,td { text-align:right; padding:9px 10px; border-bottom:1px solid var(--line); font-size:13px; }
|
||||
th { color:var(--mut); font-weight:600; font-size:12px; }
|
||||
button.act { background:var(--acc); color:#fff; border:0; border-radius:6px; padding:6px 12px; font-size:13px; cursor:pointer; }
|
||||
button.act.ok { background:var(--ok); } button.act.bad { background:var(--bad); }
|
||||
input,select { padding:9px 11px; background:var(--bg); border:1px solid var(--line); border-radius:8px; color:var(--fg); font-size:14px; }
|
||||
.badge { padding:2px 8px; border-radius:6px; font-size:11px; }
|
||||
.b-pending { background:rgba(243,156,18,.15); color:var(--warn); }
|
||||
.b-approved,.b-paid,.b-completed { background:rgba(46,204,113,.15); color:var(--ok); }
|
||||
.b-rejected,.b-failed,.b-cancelled { background:rgba(231,76,60,.15); color:var(--bad); }
|
||||
.muted { color:var(--mut); font-size:13px; }
|
||||
.toast { position:fixed; bottom:20px; left:50%; transform:translateX(-50%); padding:12px 20px; border-radius:8px; opacity:0; transition:opacity .2s; }
|
||||
.toast.ok{background:var(--ok)} .toast.bad{background:var(--bad)} .toast.show{opacity:1}
|
||||
dialog { background:var(--card); color:var(--fg); border:1px solid var(--line); border-radius:12px; padding:24px; max-width:420px; width:90%; }
|
||||
dialog::backdrop { background:rgba(0,0,0,.6); }
|
||||
dialog input { width:100%; margin-top:8px; }
|
||||
.flex { display:flex; gap:10px; align-items:center; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>🚕 Tripz — لوحة الأدمن</h1>
|
||||
<span class="muted" id="who"></span>
|
||||
<span style="flex:1"></span>
|
||||
<button class="act bad" id="logout" style="display:none">خروج</button>
|
||||
</header>
|
||||
<nav id="nav" style="display:none">
|
||||
<button data-tab="drivers" class="on">السائقون</button>
|
||||
<button data-tab="trips">الرحلات</button>
|
||||
<button data-tab="docs">الوثائق</button>
|
||||
<button data-tab="payouts">السحوبات</button>
|
||||
</nav>
|
||||
<div class="wrap" id="main" style="display:none">
|
||||
<div class="card"><div id="tabBody"><span class="muted">…</span></div></div>
|
||||
</div>
|
||||
|
||||
<div class="toast" id="toast"></div>
|
||||
|
||||
<dialog id="loginDlg">
|
||||
<h2 style="margin-top:0">دخول الأدمن</h2>
|
||||
<p class="muted">هاتف + رمز تحقّق (OTP).</p>
|
||||
<input id="phone" placeholder="07xxxxxxxx" />
|
||||
<div id="otpStep" style="display:none">
|
||||
<input id="otp" placeholder="الرمز (1234 في وضع التطوير)" />
|
||||
</div>
|
||||
<div class="flex" style="margin-top:16px; justify-content:flex-start">
|
||||
<button class="act" id="sendOtp">إرسال الرمز</button>
|
||||
<button class="act ok" id="verify" style="display:none">دخول</button>
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<script>
|
||||
const API = location.origin.includes('localhost') ? 'http://localhost:4010/api' : '/api';
|
||||
const TENANT = new URLSearchParams(location.search).get('tenant') || 'siro';
|
||||
let TOKEN = sessionStorage.getItem('tripz_admin_token') || '';
|
||||
let tab = 'drivers';
|
||||
|
||||
const toast = (m, ok = true) => { const t = document.getElementById('toast'); t.textContent = m; t.className = `toast show ${ok?'ok':'bad'}`; setTimeout(()=>t.className='toast',2600); };
|
||||
|
||||
async function api(method, path, body) {
|
||||
const res = await fetch(API + path, {
|
||||
method,
|
||||
headers: { 'Content-Type':'application/json', 'x-tenant-id':TENANT, ...(TOKEN?{Authorization:`Bearer ${TOKEN}`}:{}) },
|
||||
body: body ? JSON.stringify(body) : undefined,
|
||||
});
|
||||
if (res.status === 401 || res.status === 403) { if(path.startsWith('/drivers/admin')) openLogin(); }
|
||||
const json = await res.json().catch(()=>({}));
|
||||
if (!res.ok) throw new Error(json.message || `HTTP ${res.status}`);
|
||||
return json;
|
||||
}
|
||||
|
||||
function openLogin(){ document.getElementById('loginDlg').showModal(); }
|
||||
document.getElementById('sendOtp').onclick = async () => {
|
||||
const phone = document.getElementById('phone').value.trim();
|
||||
try { const r = await api('POST','/auth/send-otp',{phone}); toast(r.dev_code?`رمز التطوير: ${r.dev_code}`:'أُرسل الرمز');
|
||||
document.getElementById('otpStep').style.display=''; document.getElementById('verify').style.display=''; }
|
||||
catch(e){ toast(e.message,false); }
|
||||
};
|
||||
document.getElementById('verify').onclick = async () => {
|
||||
try {
|
||||
const r = await api('POST','/auth/verify-otp',{ phone:document.getElementById('phone').value.trim(), code:document.getElementById('otp').value.trim() });
|
||||
if (!['admin','dispatcher'].includes(r.user?.role)) { toast('هذا الحساب ليس أدمن',false); return; }
|
||||
TOKEN = r.access_token; sessionStorage.setItem('tripz_admin_token',TOKEN);
|
||||
document.getElementById('loginDlg').close(); boot();
|
||||
} catch(e){ toast(e.message,false); }
|
||||
};
|
||||
document.getElementById('logout').onclick = () => { sessionStorage.removeItem('tripz_admin_token'); location.reload(); };
|
||||
|
||||
document.querySelectorAll('#nav button').forEach(b => b.onclick = () => {
|
||||
document.querySelectorAll('#nav button').forEach(x=>x.classList.remove('on'));
|
||||
b.classList.add('on'); tab = b.dataset.tab; render();
|
||||
});
|
||||
|
||||
const badge = (s) => `<span class="badge b-${s}">${s}</span>`;
|
||||
|
||||
async function render() {
|
||||
const body = document.getElementById('tabBody'); body.innerHTML = '<span class="muted">…</span>';
|
||||
try {
|
||||
if (tab === 'drivers') {
|
||||
const ds = await api('GET','/drivers/admin/list');
|
||||
body.innerHTML = table(['السائق','الفئة','الحالة','متصل',''], ds.map(d=>[
|
||||
d.id.slice(0,8), d.service_class, badge(d.verification_status), d.is_online?'🟢':'⚪',
|
||||
d.verification_status==='pending'?`<button class="act ok" onclick="approve('${d.id}')">اعتماد</button>`:'' ]));
|
||||
} else if (tab === 'trips') {
|
||||
const ts = await api('GET','/trips/admin/list');
|
||||
body.innerHTML = table(['الرحلة','الحالة','الأجرة','المسافة'], ts.map(t=>[
|
||||
t.id.slice(0,8), badge(t.status), t.final_fare??t.quoted_fare??'-', (t.distance_km??'-')+' كم' ]));
|
||||
} else if (tab === 'docs') {
|
||||
const dd = await api('GET','/admin/documents/pending');
|
||||
body.innerHTML = table(['السائق','النوع','الوجه',''], (dd||[]).map(x=>[
|
||||
x.driver_id.slice(0,8), x.type, x.side,
|
||||
`<button class="act ok" onclick="reviewDoc('${x.id}','approved')">قبول</button>
|
||||
<button class="act bad" onclick="reviewDoc('${x.id}','rejected')">رفض</button>` ]));
|
||||
} else if (tab === 'payouts') {
|
||||
const ps = await api('GET','/payouts/admin/list?status=requested');
|
||||
body.innerHTML = table(['السائق','المبلغ','القناة','الحالة',''], ps.map(p=>[
|
||||
p.driver_user_id.slice(0,8), `${p.amount} ${p.currency}`, p.channel, badge(p.status),
|
||||
`<button class="act ok" onclick="payout('${p.id}','complete')">تحويل</button>
|
||||
<button class="act bad" onclick="payout('${p.id}','fail')">فشل</button>` ]));
|
||||
}
|
||||
} catch(e){ body.innerHTML = `<span class="muted">${e.message}</span>`; }
|
||||
}
|
||||
function table(cols, rows){
|
||||
return `<table><thead><tr>${cols.map(c=>`<th>${c}</th>`).join('')}</tr></thead><tbody>${
|
||||
rows.length?rows.map(r=>`<tr>${r.map(c=>`<td>${c}</td>`).join('')}</tr>`).join(''):`<tr><td colspan="${cols.length}" class="muted">لا بيانات</td></tr>`}</tbody></table>`;
|
||||
}
|
||||
window.approve = async(id)=>{ try{await api('PATCH',`/drivers/${id}/approve`,{});toast('اعتُمد');render();}catch(e){toast(e.message,false);} };
|
||||
window.reviewDoc = async(id,s)=>{ try{await api('PATCH',`/admin/documents/${id}/review`,{status:s});toast('تمّت المراجعة');render();}catch(e){toast(e.message,false);} };
|
||||
window.payout = async(id,act)=>{ try{await api('PATCH',`/payouts/${id}/${act}`,{});toast('تمّ');render();}catch(e){toast(e.message,false);} };
|
||||
|
||||
function boot(){
|
||||
if (!TOKEN){ openLogin(); return; }
|
||||
document.getElementById('nav').style.display='flex';
|
||||
document.getElementById('main').style.display='block';
|
||||
document.getElementById('logout').style.display='';
|
||||
document.getElementById('who').textContent = `المستأجر: ${TENANT}`;
|
||||
render();
|
||||
}
|
||||
boot();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,4 +1,4 @@
|
||||
# siro_admin
|
||||
# tripz_admin
|
||||
|
||||
A new Flutter project.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Analyzing siro_admin...
|
||||
Analyzing tripz_admin...
|
||||
|
||||
warning - lib/controller/admin/quality_controller.dart:1:8 - Unused import: 'package:flutter/material.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/controller/admin/register_captain_controller.dart:2:8 - Unused import: 'dart:ffi'. Try removing the import directive. - unused_import
|
||||
@@ -41,10 +41,10 @@ warning - lib/views/admin/enceypt/encrypt.dart:16:16 - The value of the field 'a
|
||||
warning - lib/views/admin/enceypt/encrypt.dart:19:16 - The value of the field 'accentDecryptDim' isn't used. Try removing the field, or using it. - unused_field
|
||||
warning - lib/views/admin/enceypt/fingerprint_migration.dart:20:8 - Unused import: 'dart:convert'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/enceypt/fingerprint_migration.dart:22:8 - Unused import: 'package:http/http.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/enceypt/fingerprint_migration.dart:23:8 - Unused import: 'package:siro_admin/controller/functions/encrypt_decrypt.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/enceypt/fingerprint_migration.dart:23:8 - Unused import: 'package:tripz_admin/controller/functions/encrypt_decrypt.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/enceypt/fingerprint_migration.dart:25:8 - Unused import: '../../../constant/char_map.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/error/error/error_page.dart:2:8 - Unused import: 'package:siro_admin/constant/colors.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/packages.dart:6:8 - Unused import: 'package:siro_admin/views/widgets/my_textField.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/error/error/error_page.dart:2:8 - Unused import: 'package:tripz_admin/constant/colors.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/packages.dart:6:8 - Unused import: 'package:tripz_admin/views/widgets/my_textField.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/passenger/passenger_details_page.dart:14:8 - Unused import: 'form_passenger.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/rides/ride_lookup_page.dart:1150:12 - The value of the local variable 'displayPhone' isn't used. Try removing the variable or using it. - unused_local_variable
|
||||
warning - lib/views/admin/rides/rides.dart:10:7 - This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: Rides.rideAdminController - must_be_immutable
|
||||
@@ -54,7 +54,7 @@ warning - lib/views/admin/static/advanced_analytics_page.dart:6:8 - Unused impor
|
||||
warning - lib/views/admin/static/notes_driver_page.dart:3:8 - Unused import: 'package:intl/intl.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/admin/static/static.dart:29:11 - The value of the local variable 'controller' isn't used. Try removing the variable or using it. - unused_local_variable
|
||||
warning - lib/views/admin/wallet/wallet.dart:10:7 - This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: Wallet.walletAdminController - must_be_immutable
|
||||
warning - lib/views/auth/login_page.dart:3:8 - Unused import: 'package:siro_admin/env/env.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/auth/login_page.dart:3:8 - Unused import: 'package:tripz_admin/env/env.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/auth/login_page.dart:5:8 - Unused import: '../../controller/auth/login_controller.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/auth/login_page.dart:7:8 - Unused import: '../../controller/functions/crud.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/views/auth/login_page.dart:8:8 - Unused import: '../../print.dart'. Try removing the import directive. - unused_import
|
||||
|
||||
@@ -14,7 +14,7 @@ if (keystorePropertiesFile.exists()) {
|
||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||
}
|
||||
android {
|
||||
namespace = "com.siro.siro_admin"
|
||||
namespace = "com.tripz.tripz_admin"
|
||||
compileSdk = flutter.compileSdkVersion
|
||||
ndkVersion = "27.0.12077973"
|
||||
|
||||
@@ -40,7 +40,7 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId = "com.siro.siro_admin"
|
||||
applicationId = "com.tripz.tripz_admin"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||
minSdk = 30
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
android:maxSdkVersion="28" />
|
||||
|
||||
<application
|
||||
android:label="Siro Admin"
|
||||
android:label="Tripz Admin"
|
||||
android:name="${applicationName}"
|
||||
android:allowBackup="false"
|
||||
android:fullBackupContent="false"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.10.2) # 3.10.2 is fine, but no need to go as high as 3.31.5
|
||||
project(siro_admin) # Good
|
||||
project(tripz_admin) # Good
|
||||
|
||||
# Add your C++ source file(s) to create a SHARED library.
|
||||
add_library(native-lib SHARED native-lib.cpp)
|
||||
|
||||
@@ -158,7 +158,7 @@ bool checkLoadedModules()
|
||||
//}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL
|
||||
Java_com_siro_siro_1admin_RootDetection_isNativeRooted(JNIEnv *env, jobject /* this */)
|
||||
Java_com_tripz_tripz_1admin_RootDetection_isNativeRooted(JNIEnv *env, jobject /* this */)
|
||||
{
|
||||
|
||||
if (isRooted())
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package com.siro.siro_admin
|
||||
package com.tripz.tripz_admin
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.Intent
|
||||
@@ -17,8 +17,8 @@ import java.util.Timer
|
||||
import kotlin.concurrent.schedule
|
||||
|
||||
class MainActivity : FlutterFragmentActivity() {
|
||||
private val SECURITY_CHANNEL = "com.siro.siro_admin/security"
|
||||
private val APP_CONTROL_CHANNEL = "com.siro.siro_admin/app_control"
|
||||
private val SECURITY_CHANNEL = "com.tripz.tripz_admin/security"
|
||||
private val APP_CONTROL_CHANNEL = "com.tripz.tripz_admin/app_control"
|
||||
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
super.configureFlutterEngine(flutterEngine)
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.siro.siro_service
|
||||
package com.tripz.tripz_admin
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Intent
|
||||
@@ -24,7 +24,7 @@ class MyApplication : Application() {
|
||||
|
||||
MethodChannel(
|
||||
flutterEngine.dartExecutor.binaryMessenger,
|
||||
"com.siro.siro_service/app_lifecycle"
|
||||
"com.tripz.tripz_admin/app_lifecycle"
|
||||
)
|
||||
.setMethodCallHandler { call, result ->
|
||||
if (call.method == "bringAppToForeground") {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.siro.siro_admin
|
||||
package com.tripz.tripz_admin
|
||||
|
||||
object RootDetection {
|
||||
init {
|
||||
@@ -7,8 +7,8 @@
|
||||
</base-config>
|
||||
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">intaleq.xyz</domain>
|
||||
<domain includeSubdomains="true">siromove.com</domain>
|
||||
<domain includeSubdomains="true">tripz.xyz</domain>
|
||||
<domain includeSubdomains="true">tripzmove.com</domain>
|
||||
|
||||
<pin-set expiration="2028-01-01">
|
||||
<!-- Primary: ISRG Root X1 (RSA) -->
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"flutter":{"platforms":{"android":{"default":{"projectId":"siro-a6957","appId":"1:825988584191:android:caa30eaac3524de51632ca","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"siro-a6957","appId":"1:825988584191:ios:8426fcf68fcc470e1632ca","uploadDebugSymbols":true,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"siro-a6957","configurations":{"android":"1:825988584191:android:caa30eaac3524de51632ca","ios":"1:825988584191:ios:8426fcf68fcc470e1632ca"}}}}}}
|
||||
{"flutter":{"platforms":{"android":{"default":{"projectId":"tripz-a6957","appId":"1:825988584191:android:caa30eaac3524de51632ca","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"tripz-a6957","appId":"1:825988584191:ios:8426fcf68fcc470e1632ca","uploadDebugSymbols":true,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"tripz-a6957","configurations":{"android":"1:825988584191:android:caa30eaac3524de51632ca","ios":"1:825988584191:ios:8426fcf68fcc470e1632ca"}}}}}}
|
||||
@@ -521,7 +521,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
@@ -538,7 +538,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -556,7 +556,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -572,7 +572,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -705,7 +705,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -729,7 +729,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Siro Admin</string>
|
||||
<string>Tripz Admin</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>siro_admin</string>
|
||||
<string>tripz_admin</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
||||
@@ -5,7 +5,7 @@ class AppInformation {
|
||||
static const String linkedInProfile =
|
||||
'https://www.linkedin.com/in/hamza-ayed/';
|
||||
static const String website = 'https://mobile-app.store';
|
||||
static const String email = 'support@intaleqapp.com';
|
||||
static const String email = 'support@tripzapp.com';
|
||||
static const String complaintPrompt =
|
||||
'for this data for complaint from driver or passenger i collect all data i want you analyze this complaint and show what is reason and what is solution .this data collected from many table to find solution if payment in visa not complete and if ride status is finished it will be paymnet in payment table if ride status is not finished there is no need to pay and payment table is null for this ride and if paymentFromPaymentTable not null and visa type not cash the payment sucssessed . if ratingpassenger is low or passengr rating drivers low grade then dont mine of this passenger ,look at driver too like passengerratingdriver with rating or ratingtopassenger .in json add status of complaint and message to passenger and message to driver and message to call center write in arabic in json output with key in english .for output please just json i want';
|
||||
static const String addd = 'BlBlNl';
|
||||
|
||||
@@ -3,7 +3,7 @@ import '../main.dart';
|
||||
|
||||
class AppLink {
|
||||
static String seferPaymentServer =
|
||||
'https://walletintaleq.intaleq.xyz/v1/main';
|
||||
'https://wallettripz.tripz.xyz/v1/main';
|
||||
static final String tripzPaymentServer0 = seferPaymentServer;
|
||||
static final String tripzPaymentServer = '$seferPaymentServer/ride';
|
||||
static final String tripzAlexandriaServer = Env.seferAlexandriaServer;
|
||||
@@ -17,43 +17,43 @@ class AppLink {
|
||||
static String get server {
|
||||
switch (currentCountry) {
|
||||
case 'Syria':
|
||||
return 'https://api-syria.siromove.com/siro_v3';
|
||||
return 'https://api-syria.tripzmove.com/tripz_v3';
|
||||
case 'Egypt':
|
||||
return 'https://api-egypt.siromove.com/siro_v3';
|
||||
return 'https://api-egypt.tripzmove.com/tripz_v3';
|
||||
case 'Jordan':
|
||||
return 'https://jordan-siro.intaleqapp.com/backend';
|
||||
return 'https://jordan-tripz.tripzapp.com/backend';
|
||||
default:
|
||||
return 'https://api.siromove.com/siro_v3';
|
||||
return 'https://api.tripzmove.com/tripz_v3';
|
||||
}
|
||||
}
|
||||
|
||||
static String get endPoint => server;
|
||||
static String get syria => 'https://api-syria.siromove.com/siro';
|
||||
static String get syria => 'https://api-syria.tripzmove.com/tripz';
|
||||
|
||||
static String get paymentServer {
|
||||
switch (currentCountry) {
|
||||
case 'Syria':
|
||||
return 'https://wallet-syria.siromove.com/v1/main';
|
||||
return 'https://wallet-syria.tripzmove.com/v1/main';
|
||||
case 'Egypt':
|
||||
return 'https://wallet-egypt.siromove.com/v1/main';
|
||||
return 'https://wallet-egypt.tripzmove.com/v1/main';
|
||||
case 'Jordan':
|
||||
// TODO: Change to new subdomain when fully migrated
|
||||
return 'https://walletintaleq.intaleq.xyz/v2/main';
|
||||
return 'https://wallettripz.tripz.xyz/v2/main';
|
||||
default:
|
||||
return 'https://wallet.siromove.com/v1/main';
|
||||
return 'https://wallet.tripzmove.com/v1/main';
|
||||
}
|
||||
}
|
||||
|
||||
static String get locationServer {
|
||||
switch (currentCountry) {
|
||||
case 'Syria':
|
||||
return 'https://location-syria.siromove.com/siro/ride/location';
|
||||
return 'https://location-syria.tripzmove.com/tripz/ride/location';
|
||||
case 'Egypt':
|
||||
return 'https://location-egypt.siromove.com/siro/ride/location';
|
||||
return 'https://location-egypt.tripzmove.com/tripz/ride/location';
|
||||
case 'Jordan':
|
||||
return 'https://jordan-siro.intaleqapp.com/loction_server/siro/ride/location';
|
||||
return 'https://jordan-tripz.tripzapp.com/loction_server/tripz/ride/location';
|
||||
default:
|
||||
return 'https://location.siromove.com/siro/ride/location';
|
||||
return 'https://location.tripzmove.com/tripz/ride/location';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,42 +62,42 @@ class AppLink {
|
||||
static String get mapSaasRoute {
|
||||
switch (currentCountry) {
|
||||
case 'Syria':
|
||||
return 'https://map-syria.siromove.com/api/maps/route';
|
||||
return 'https://map-syria.tripzmove.com/api/maps/route';
|
||||
case 'Egypt':
|
||||
return 'https://map-egypt.siromove.com/api/maps/route';
|
||||
return 'https://map-egypt.tripzmove.com/api/maps/route';
|
||||
case 'Jordan':
|
||||
// TODO: Change to new subdomain when fully migrated
|
||||
return 'https://map-saas.intaleqapp.com/api/maps/route';
|
||||
return 'https://map-saas.tripzapp.com/api/maps/route';
|
||||
default:
|
||||
return 'https://map-saas.intaleqapp.com/api/maps/route';
|
||||
return 'https://map-saas.tripzapp.com/api/maps/route';
|
||||
}
|
||||
}
|
||||
|
||||
static String get mapSaasPlaces {
|
||||
switch (currentCountry) {
|
||||
case 'Syria':
|
||||
return 'https://map-syria.siromove.com/api/geocoding/places';
|
||||
return 'https://map-syria.tripzmove.com/api/geocoding/places';
|
||||
case 'Egypt':
|
||||
return 'https://map-egypt.siromove.com/api/geocoding/places';
|
||||
return 'https://map-egypt.tripzmove.com/api/geocoding/places';
|
||||
case 'Jordan':
|
||||
// TODO: Change to new subdomain when fully migrated
|
||||
return 'https://map-saas.intaleqapp.com/api/geocoding/places';
|
||||
return 'https://map-saas.tripzapp.com/api/geocoding/places';
|
||||
default:
|
||||
return 'https://map-saas.intaleqapp.com/api/geocoding/places';
|
||||
return 'https://map-saas.tripzapp.com/api/geocoding/places';
|
||||
}
|
||||
}
|
||||
|
||||
static String get routeApiBaseUrl {
|
||||
switch (currentCountry) {
|
||||
case 'Syria':
|
||||
return 'https://routes-syria.siromove.com/route/v1/driving';
|
||||
return 'https://routes-syria.tripzmove.com/route/v1/driving';
|
||||
case 'Egypt':
|
||||
return 'https://routes-egypt.siromove.com/route/v1/driving';
|
||||
return 'https://routes-egypt.tripzmove.com/route/v1/driving';
|
||||
case 'Jordan':
|
||||
// TODO: Change to new subdomain when fully migrated
|
||||
return 'https://routesjo.intaleq.xyz';
|
||||
return 'https://routesjo.tripz.xyz';
|
||||
default:
|
||||
return 'https://routes.siromove.com/route/v1/driving';
|
||||
return 'https://routes.tripzmove.com/route/v1/driving';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -392,7 +392,7 @@ class AppLink {
|
||||
"$server/Admin/marketing/ai_price_prediction.php";
|
||||
static String saveDriverDestination =
|
||||
"$server/ride/location/save_driver_destination.php";
|
||||
static String paymentServerV2 = 'https://walletintaleq.intaleq.xyz/v2/main';
|
||||
static String paymentServerV2 = 'https://wallettripz.tripz.xyz/v2/main';
|
||||
static String realtimeDashboardV2 = "$server/Admin/v2/realtime_dashboard.php";
|
||||
static String smartAlertsV2 = "$server/Admin/v2/smart_alerts.php";
|
||||
static String growthV2 = "$server/Admin/v2/analytics/growth.php";
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
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:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import '../../print.dart';
|
||||
|
||||
class AnalyticsV2Controller extends GetxController {
|
||||
|
||||
@@ -2,9 +2,9 @@ import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:siro_admin/controller/functions/crud.dart';
|
||||
import 'package:siro_admin/controller/auth/otp_helper.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/controller/auth/otp_helper.dart';
|
||||
|
||||
import '../../constant/box_name.dart';
|
||||
import '../../main.dart';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'dart:async';
|
||||
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:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import '../../print.dart';
|
||||
|
||||
class DashboardV2Controller extends GetxController {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
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:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import '../../print.dart';
|
||||
|
||||
class FinancialV2Controller extends GetxController {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
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:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import '../../print.dart';
|
||||
|
||||
class LiveAnalyticsController extends GetxController {
|
||||
|
||||
@@ -11,7 +11,7 @@ class MarketingController extends GetxController {
|
||||
// --- Dynamic Dashboard Configurations ---
|
||||
String selectedCountry = 'All'; // 'All', 'SY', 'JO', 'EG', 'IQ'
|
||||
bool isAutopilotEnabled = true;
|
||||
String systemPrompt = "أنت المحلل الذكي لتطبيق Siro لخدمات نقل الركاب. قمنا برصد قراءات أسعار المنافسين لتقديم عروض وحملات تسويقية ملائمة ومخصصة.";
|
||||
String systemPrompt = "أنت المحلل الذكي لتطبيق Tripz لخدمات نقل الركاب. قمنا برصد قراءات أسعار المنافسين لتقديم عروض وحملات تسويقية ملائمة ومخصصة.";
|
||||
|
||||
// --- AI API Token & Cost Telemetry ---
|
||||
int apiRequestsCount = 0;
|
||||
@@ -21,7 +21,7 @@ class MarketingController extends GetxController {
|
||||
// --- Price Comparison Data ---
|
||||
List hourlyPriceData = [];
|
||||
List pciRegions = [];
|
||||
Map siroBasePrices = {};
|
||||
Map tripzBasePrices = {};
|
||||
|
||||
// --- Country Selection Handler ---
|
||||
void changeCountry(String countryCode) {
|
||||
@@ -142,8 +142,8 @@ class MarketingController extends GetxController {
|
||||
if (data is Map) {
|
||||
hourlyPriceData = data['hourly_competitor_prices'] ?? [];
|
||||
pciRegions = data['pci_regions'] ?? [];
|
||||
siroBasePrices = data['siro_base_prices'] is Map
|
||||
? data['siro_base_prices'] as Map
|
||||
tripzBasePrices = data['tripz_base_prices'] is Map
|
||||
? data['tripz_base_prices'] as Map
|
||||
: {};
|
||||
update();
|
||||
}
|
||||
@@ -229,7 +229,7 @@ class MarketingController extends GetxController {
|
||||
|
||||
// --- Heatmap State ---
|
||||
List heatmapData = [];
|
||||
double currentSiroPriceHeatmap = 0.0;
|
||||
double currentTripzPriceHeatmap = 0.0;
|
||||
|
||||
Future<void> fetchPriceGapHeatmap() async {
|
||||
try {
|
||||
@@ -248,7 +248,7 @@ class MarketingController extends GetxController {
|
||||
final data = res['message'];
|
||||
if (data is Map) {
|
||||
heatmapData = data['heatmap_data'] ?? [];
|
||||
currentSiroPriceHeatmap = (data['current_siro_price_per_km'] ?? 0.0).toDouble();
|
||||
currentTripzPriceHeatmap = (data['current_tripz_price_per_km'] ?? 0.0).toDouble();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
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 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/views/widgets/snackbar.dart';
|
||||
import '../../print.dart';
|
||||
|
||||
class SecurityV2Controller extends GetxController {
|
||||
|
||||
@@ -5,8 +5,8 @@ import 'package:flutter/material.dart';
|
||||
import 'package:jwt_decoder/jwt_decoder.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:siro_admin/controller/functions/device_info.dart';
|
||||
import 'package:siro_admin/views/auth/login_page.dart';
|
||||
import 'package:tripz_admin/controller/functions/device_info.dart';
|
||||
import 'package:tripz_admin/views/auth/login_page.dart';
|
||||
|
||||
import '../../constant/box_name.dart';
|
||||
import '../../constant/links.dart';
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:siro_admin/controller/functions/crud.dart';
|
||||
import 'package:siro_admin/main.dart';
|
||||
import 'package:siro_admin/views/widgets/snackbar.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/main.dart';
|
||||
import 'package:tripz_admin/views/widgets/snackbar.dart';
|
||||
|
||||
class AdminRegisterController extends GetxController {
|
||||
final nameCtrl = TextEditingController();
|
||||
|
||||
@@ -3,9 +3,9 @@ import 'dart:math';
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
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 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/views/widgets/snackbar.dart';
|
||||
|
||||
class EmployeeController extends GetxController {
|
||||
List employee = [];
|
||||
|
||||
@@ -5,7 +5,7 @@ import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:secure_string_operations/secure_string_operations.dart';
|
||||
import 'package:siro_admin/constant/info.dart';
|
||||
import 'package:tripz_admin/constant/info.dart';
|
||||
|
||||
import '../../constant/api_key.dart';
|
||||
import '../../constant/box_name.dart';
|
||||
|
||||
@@ -6,7 +6,7 @@ import 'package:get/get.dart';
|
||||
|
||||
class SecurityChecks {
|
||||
static const platform = MethodChannel(
|
||||
'com.siro.siro_admin/security'); // Choose a unique channel name
|
||||
'com.tripz.tripz_admin/security'); // Choose a unique channel name
|
||||
|
||||
static Future<bool> isDeviceCompromised() async {
|
||||
try {
|
||||
|
||||
@@ -9,11 +9,11 @@ class SslPinning {
|
||||
SslPinning._();
|
||||
|
||||
static final Map<String, List<String>> _pins = {
|
||||
'intaleq.xyz': [
|
||||
'tripz.xyz': [
|
||||
'/tNRUeeLxUhQU5gbgdpVWC6QBGAqc/ujg8Kcf0wQiAM=',
|
||||
'Hlx/0EWNDH5Xkt2KzvqxUzbw0vvEsyZSlibialSyGqI=',
|
||||
],
|
||||
'siromove.com': [
|
||||
'tripzmove.com': [
|
||||
'C5+lpZ7tcVwmwQIMcRtPbsQtWLABXhQzejna0wHESsl=',
|
||||
'diGVwiVYbubAI3RW4hB9xU8e/CH2GnkuvVFZE8zmgzI=',
|
||||
],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
|
||||
|
||||
// --- Models ---
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// transit_admin_controller.dart — تحكم شاشات مواصلاتي (لوحة إدارة سيرو)
|
||||
// transit_admin_controller.dart — تحكم شاشات مواصلاتي (لوحة إدارة تريبز)
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'transit_admin_models.dart';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// transit_admin_models.dart — نماذج بيانات مواصلاتي (لوحة إدارة سيرو)
|
||||
// transit_admin_models.dart — نماذج بيانات مواصلاتي (لوحة إدارة تريبز)
|
||||
|
||||
class TransitOrgSummary {
|
||||
final int id;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// transit_admin_service.dart — طبقة الاتصال بـ backend/Admin/transit (لوحة إدارة سيرو)
|
||||
// transit_admin_service.dart — طبقة الاتصال بـ backend/Admin/transit (لوحة إدارة تريبز)
|
||||
import '../functions/crud.dart';
|
||||
import '../../constant/links.dart';
|
||||
import 'transit_admin_models.dart';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:siro_admin/controller/functions/encrypt_decrypt.dart';
|
||||
import 'package:siro_admin/constant/info.dart';
|
||||
import 'package:tripz_admin/controller/functions/encrypt_decrypt.dart';
|
||||
import 'package:tripz_admin/constant/info.dart';
|
||||
|
||||
void main() {
|
||||
String testJwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiYWRtaW4ifQ.signature";
|
||||
|
||||
Vendored
-2
@@ -9,8 +9,6 @@ abstract class Env {
|
||||
|
||||
@EnviedField(varName: 'initializationVector', obfuscate: true)
|
||||
static final String initializationVector = _Env.initializationVector;
|
||||
@EnviedField(varName: 'ALLOWED_ADMIN_PHONES', obfuscate: true)
|
||||
static final String ALLOWED_ADMIN_PHONES = _Env.ALLOWED_ADMIN_PHONES;
|
||||
|
||||
@EnviedField(varName: 'passnpassenger', obfuscate: true)
|
||||
static final String passnpassenger = _Env.passnpassenger;
|
||||
|
||||
@@ -53,15 +53,15 @@ class DefaultFirebaseOptions {
|
||||
apiKey: 'AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8',
|
||||
appId: '1:825988584191:android:caa30eaac3524de51632ca',
|
||||
messagingSenderId: '825988584191',
|
||||
projectId: 'siro-a6957',
|
||||
storageBucket: 'siro-a6957.firebasestorage.app',
|
||||
projectId: 'tripz-a6957',
|
||||
storageBucket: 'tripz-a6957.firebasestorage.app',
|
||||
);
|
||||
static const FirebaseOptions ios = FirebaseOptions(
|
||||
apiKey: 'AIzaSyDk6x6KZUY0IQtxoCMXX0F7N_yik8O19eA',
|
||||
appId: '1:825988584191:ios:8426fcf68fcc470e1632ca',
|
||||
messagingSenderId: '825988584191',
|
||||
projectId: 'siro-a6957',
|
||||
storageBucket: 'siro-a6957.firebasestorage.app',
|
||||
iosBundleId: 'com.siro.admin',
|
||||
projectId: 'tripz-a6957',
|
||||
storageBucket: 'tripz-a6957.firebasestorage.app',
|
||||
iosBundleId: 'com.tripz.admin',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ class MainApp extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return GetMaterialApp(
|
||||
debugShowCheckedModeBanner: false,
|
||||
title: 'Siro Admin',
|
||||
title: 'Tripz Admin',
|
||||
locale: const Locale('ar'),
|
||||
fallbackLocale: const Locale('en'),
|
||||
themeMode: ThemeMode.system,
|
||||
|
||||
@@ -4,9 +4,9 @@ import 'package:fl_chart/fl_chart.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/views/admin/drivers/driver_gift_check_page.dart';
|
||||
import 'package:siro_admin/views/admin/drivers/driver_tracker_screen.dart';
|
||||
import 'package:siro_admin/views/admin/quality/blacklist_page.dart';
|
||||
import 'package:tripz_admin/views/admin/drivers/driver_gift_check_page.dart';
|
||||
import 'package:tripz_admin/views/admin/drivers/driver_tracker_screen.dart';
|
||||
import 'package:tripz_admin/views/admin/quality/blacklist_page.dart';
|
||||
|
||||
import '../../constant/box_name.dart';
|
||||
import '../../controller/admin/dashboard_controller.dart';
|
||||
@@ -36,10 +36,10 @@ import 'static/advanced_analytics_page.dart';
|
||||
import 'financial/financial_v2_page.dart';
|
||||
import 'security/audit_logs_page.dart';
|
||||
import 'analytics/live_analytics_page.dart';
|
||||
import 'package:siro_admin/views/widgets/responsive_layout.dart';
|
||||
import 'package:siro_admin/views/widgets/web_sidebar.dart';
|
||||
import 'package:tripz_admin/views/widgets/responsive_layout.dart';
|
||||
import 'package:tripz_admin/views/widgets/web_sidebar.dart';
|
||||
import '../transit/org_list_page.dart';
|
||||
import 'package:siro_admin/views/widgets/glass_container.dart';
|
||||
import 'package:tripz_admin/views/widgets/glass_container.dart';
|
||||
|
||||
class AdminHomePage extends StatefulWidget {
|
||||
const AdminHomePage({super.key});
|
||||
@@ -329,7 +329,7 @@ class _AdminHomePageState extends State<AdminHomePage>
|
||||
colors: [cs.primary, cs.tertiary],
|
||||
).createShader(bounds),
|
||||
child: const Text(
|
||||
'Siro Admin',
|
||||
'Tripz Admin',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w700,
|
||||
@@ -1148,7 +1148,7 @@ class _AdminHomePageState extends State<AdminHomePage>
|
||||
ActionItem('السائقون', Icons.drive_eta_rounded, const Color(0xFFF59E0B),
|
||||
() => Get.to(() => CaptainsPage())),
|
||||
ActionItem('المراقب', Icons.track_changes_rounded, const Color(0xFFEF4444),
|
||||
() => Get.to(() => SiroTrackerScreen())),
|
||||
() => Get.to(() => TripzTrackerScreen())),
|
||||
],
|
||||
),
|
||||
ActionCategory(
|
||||
|
||||
@@ -502,7 +502,7 @@ class _MapTabState extends State<_MapTab> with AutomaticKeepAliveClientMixin {
|
||||
urlTemplate:
|
||||
'https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png',
|
||||
subdomains: const ['a', 'b', 'c', 'd'],
|
||||
userAgentPackageName: 'com.siromove.admin',
|
||||
userAgentPackageName: 'com.tripzmove.admin',
|
||||
),
|
||||
CircleLayer(circles: markers),
|
||||
],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/views/admin/captain/register_captain.dart';
|
||||
import 'package:siro_admin/views/widgets/my_scafold.dart';
|
||||
import 'package:tripz_admin/views/admin/captain/register_captain.dart';
|
||||
import 'package:tripz_admin/views/widgets/my_scafold.dart';
|
||||
|
||||
import '../../../constant/colors.dart';
|
||||
import '../../../controller/admin/register_captain_controller.dart';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import '../../../constant/links.dart';
|
||||
import '../../../controller/admin/captain_admin_controller.dart';
|
||||
import '../../widgets/elevated_btn.dart';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/admin/register_captain_controller.dart';
|
||||
import 'package:tripz_admin/controller/admin/register_captain_controller.dart';
|
||||
import '../../../../constant/colors.dart';
|
||||
import '../../../../constant/links.dart';
|
||||
import '../../../../constant/style.dart';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/drivers/driver_not_active_controller.dart';
|
||||
import 'package:tripz_admin/controller/drivers/driver_not_active_controller.dart';
|
||||
import 'driver_details_not_active_page.dart';
|
||||
|
||||
class DriversPendingPage extends StatelessWidget {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/admin/dashboard_v2_controller.dart';
|
||||
import 'package:tripz_admin/controller/admin/dashboard_v2_controller.dart';
|
||||
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
|
||||
import 'package:siro_admin/views/widgets/glass_container.dart';
|
||||
import 'package:tripz_admin/views/widgets/glass_container.dart';
|
||||
|
||||
class DashboardV2Widget extends StatelessWidget {
|
||||
const DashboardV2Widget({super.key});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart'; // For Get.width if needed, and .tr
|
||||
import 'package:siro_admin/constant/colors.dart'; // Assuming AppColor is here
|
||||
import 'package:siro_admin/constant/style.dart'; // Assuming AppStyle is here
|
||||
import 'package:tripz_admin/constant/colors.dart'; // Assuming AppColor is here
|
||||
import 'package:tripz_admin/constant/style.dart'; // Assuming AppStyle is here
|
||||
|
||||
class DashboardStatCard extends StatelessWidget {
|
||||
final String title;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:siro_admin/controller/functions/crud.dart';
|
||||
import 'package:siro_admin/controller/functions/wallet.dart';
|
||||
import 'package:siro_admin/views/widgets/my_scafold.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/controller/functions/wallet.dart';
|
||||
import 'package:tripz_admin/views/widgets/my_scafold.dart';
|
||||
|
||||
import '../../../controller/drivers/driverthebest.dart';
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/functions/crud.dart';
|
||||
import 'package:siro_admin/controller/functions/wallet.dart';
|
||||
import 'package:siro_admin/views/widgets/snackbar.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/controller/functions/wallet.dart';
|
||||
import 'package:tripz_admin/views/widgets/snackbar.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
|
||||
class DriverGiftCheckerController extends GetxController {
|
||||
final TextEditingController phoneController = TextEditingController();
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart'; // Ensure get_storage is in pubspec.yaml
|
||||
import 'package:siro_admin/controller/functions/wallet.dart';
|
||||
import 'package:siro_admin/views/widgets/snackbar.dart';
|
||||
import 'package:tripz_admin/controller/functions/wallet.dart';
|
||||
import 'package:tripz_admin/views/widgets/snackbar.dart';
|
||||
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
|
||||
// --- New Controller to handle the specific JSON URL ---
|
||||
class DriverCacheController extends GetxController {
|
||||
|
||||
@@ -5,21 +5,21 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
import '../../../constant/box_name.dart';
|
||||
import '../../../controller/functions/crud.dart';
|
||||
import '../../../main.dart';
|
||||
|
||||
class SiroTrackerScreen extends StatefulWidget {
|
||||
const SiroTrackerScreen({super.key});
|
||||
class TripzTrackerScreen extends StatefulWidget {
|
||||
const TripzTrackerScreen({super.key});
|
||||
|
||||
@override
|
||||
State<SiroTrackerScreen> createState() => _SiroTrackerScreenState();
|
||||
State<TripzTrackerScreen> createState() => _TripzTrackerScreenState();
|
||||
}
|
||||
|
||||
class _SiroTrackerScreenState extends State<SiroTrackerScreen>
|
||||
class _TripzTrackerScreenState extends State<TripzTrackerScreen>
|
||||
with TickerProviderStateMixin {
|
||||
final MapController _mapController = MapController();
|
||||
List<Marker> _markers = [];
|
||||
@@ -516,7 +516,7 @@ class _SiroTrackerScreenState extends State<SiroTrackerScreen>
|
||||
children: [
|
||||
TileLayer(
|
||||
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
userAgentPackageName: 'com.siromove.admin',
|
||||
userAgentPackageName: 'com.tripzmove.admin',
|
||||
),
|
||||
MarkerLayer(markers: _markers),
|
||||
],
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:siro_admin/controller/functions/crud.dart';
|
||||
import 'package:siro_admin/controller/functions/wallet.dart';
|
||||
import 'package:siro_admin/views/widgets/my_scafold.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/controller/functions/wallet.dart';
|
||||
import 'package:tripz_admin/views/widgets/my_scafold.dart';
|
||||
|
||||
import '../../../controller/drivers/driverthebest.dart';
|
||||
|
||||
|
||||
@@ -3,9 +3,9 @@ import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:latlong2/latlong.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 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/views/widgets/snackbar.dart';
|
||||
|
||||
class DriverLocation {
|
||||
final double latitude;
|
||||
@@ -405,7 +405,7 @@ class RideMonitorScreen extends StatelessWidget {
|
||||
children: [
|
||||
TileLayer(
|
||||
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
userAgentPackageName: 'com.siromove.admin',
|
||||
userAgentPackageName: 'com.tripzmove.admin',
|
||||
),
|
||||
if (controller.routePolyline.isNotEmpty)
|
||||
PolylineLayer(
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:siro_admin/controller/employee_controller/employee_controller.dart';
|
||||
import 'package:siro_admin/controller/functions/upload_image copy.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/employee_controller/employee_controller.dart';
|
||||
import 'package:tripz_admin/controller/functions/upload_image copy.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
class EmployeePage extends StatelessWidget {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:siro_admin/controller/functions/crud.dart';
|
||||
import 'package:siro_admin/main.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/main.dart';
|
||||
|
||||
import '../../../constant/box_name.dart';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:siro_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
|
||||
class ErrorLog {
|
||||
final String id;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/admin/financial_v2_controller.dart';
|
||||
import 'package:tripz_admin/controller/admin/financial_v2_controller.dart';
|
||||
|
||||
class FinancialV2Page extends StatelessWidget {
|
||||
const FinancialV2Page({super.key});
|
||||
|
||||
@@ -3,7 +3,7 @@ import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
|
||||
class HeatmapPage extends StatefulWidget {
|
||||
const HeatmapPage({super.key});
|
||||
@@ -251,7 +251,7 @@ class _HeatmapPageState extends State<HeatmapPage> {
|
||||
children: [
|
||||
TileLayer(
|
||||
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
userAgentPackageName: 'com.siromove.admin',
|
||||
userAgentPackageName: 'com.tripzmove.admin',
|
||||
),
|
||||
CircleLayer(circles: _markers),
|
||||
],
|
||||
|
||||
@@ -43,7 +43,7 @@ class MarketingPage extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Text('أتمتة التسويق الذكي (Siro AI Marketing)', style: TextStyle(color: cs.onSurface, fontSize: 18, fontWeight: FontWeight.w700)),
|
||||
Text('أتمتة التسويق الذكي (Tripz AI Marketing)', style: TextStyle(color: cs.onSurface, fontSize: 18, fontWeight: FontWeight.w700)),
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -260,9 +260,9 @@ class MarketingPage extends StatelessWidget {
|
||||
|
||||
Widget _buildComparisonChart(MarketingController c, ColorScheme cs) {
|
||||
final hourlyData = c.hourlyPriceData;
|
||||
final siroBase = c.siroBasePrices;
|
||||
final double siroSpeedPrice = (siroBase['speedPrice'] != null)
|
||||
? double.tryParse(siroBase['speedPrice'].toString()) ?? 0.0
|
||||
final tripzBase = c.tripzBasePrices;
|
||||
final double tripzSpeedPrice = (tripzBase['speedPrice'] != null)
|
||||
? double.tryParse(tripzBase['speedPrice'].toString()) ?? 0.0
|
||||
: 0.0;
|
||||
|
||||
List<FlSpot> competitorSpots = [];
|
||||
@@ -280,10 +280,10 @@ class MarketingPage extends StatelessWidget {
|
||||
final double maxY = competitorSpots.fold<double>(0, (p, s) => s.y > p ? s.y : p);
|
||||
final double chartMaxY = maxY > 0 ? maxY * 1.3 : 10;
|
||||
|
||||
List<FlSpot> siroSpots = [];
|
||||
if (siroSpeedPrice > 0) {
|
||||
List<FlSpot> tripzSpots = [];
|
||||
if (tripzSpeedPrice > 0) {
|
||||
for (int i = 0; i < hourlyData.length; i++) {
|
||||
siroSpots.add(FlSpot(i.toDouble(), siroSpeedPrice));
|
||||
tripzSpots.add(FlSpot(i.toDouble(), tripzSpeedPrice));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,8 +306,8 @@ class MarketingPage extends StatelessWidget {
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
hourlyData.isNotEmpty
|
||||
? 'مقارنة أسعار Siro مقابل متوسط المنافسين لآخر ${hourlyData.length} ساعة'
|
||||
: 'مقارنة أسعار Siro مقابل متوسط المنافسين لآخر 24 ساعة',
|
||||
? 'مقارنة أسعار Tripz مقابل متوسط المنافسين لآخر ${hourlyData.length} ساعة'
|
||||
: 'مقارنة أسعار Tripz مقابل متوسط المنافسين لآخر 24 ساعة',
|
||||
style: TextStyle(fontSize: 10, color: cs.onSurfaceVariant),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
@@ -352,9 +352,9 @@ class MarketingPage extends StatelessWidget {
|
||||
minY: 0,
|
||||
maxY: chartMaxY,
|
||||
lineBarsData: [
|
||||
if (siroSpots.length > 1)
|
||||
if (tripzSpots.length > 1)
|
||||
LineChartBarData(
|
||||
spots: siroSpots,
|
||||
spots: tripzSpots,
|
||||
isCurved: true,
|
||||
color: cs.primary,
|
||||
barWidth: 3,
|
||||
@@ -902,7 +902,7 @@ class MarketingPage extends StatelessWidget {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text('توقعات الذكاء الاصطناعي (Siro AI Prediction)', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 13, color: cs.tertiary)),
|
||||
Text('توقعات الذكاء الاصطناعي (Tripz AI Prediction)', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 13, color: cs.tertiary)),
|
||||
const SizedBox(height: 6),
|
||||
Text(
|
||||
c.aiPredictionMessage!,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'dart:convert';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:siro_admin/controller/functions/crud.dart';
|
||||
import 'package:siro_admin/views/widgets/snackbar.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/controller/functions/crud.dart';
|
||||
import 'package:tripz_admin/views/widgets/snackbar.dart';
|
||||
|
||||
import '../../print.dart';
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
import '../../../controller/functions/crud.dart';
|
||||
import '../../../constant/box_name.dart';
|
||||
@@ -999,7 +999,7 @@ class _RideMapMonitorScreenState extends State<RideMapMonitorScreen> {
|
||||
children: [
|
||||
TileLayer(
|
||||
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
userAgentPackageName: 'com.siromove.admin',
|
||||
userAgentPackageName: 'com.tripzmove.admin',
|
||||
),
|
||||
// Route Polyline
|
||||
if (startPos != null && endPos != null)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/admin/security_v2_controller.dart';
|
||||
import 'package:tripz_admin/controller/admin/security_v2_controller.dart';
|
||||
|
||||
class AuditLogsPage extends StatelessWidget {
|
||||
const AuditLogsPage({super.key});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:fl_chart/fl_chart.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/admin/analytics_v2_controller.dart';
|
||||
import 'package:tripz_admin/controller/admin/analytics_v2_controller.dart';
|
||||
|
||||
class AdvancedAnalyticsPage extends StatelessWidget {
|
||||
const AdvancedAnalyticsPage({super.key});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/functions/launch.dart';
|
||||
import 'package:tripz_admin/controller/functions/launch.dart';
|
||||
|
||||
import '../../../controller/admin/static_controller.dart';
|
||||
import '../../widgets/mycircular.dart';
|
||||
|
||||
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart' hide TextDirection;
|
||||
import 'package:siro_admin/controller/admin/static_controller.dart';
|
||||
import 'package:tripz_admin/controller/admin/static_controller.dart';
|
||||
import 'notes_driver_page.dart';
|
||||
|
||||
class StaticDash extends StatelessWidget {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/controller/auth/register_controller.dart';
|
||||
import 'package:tripz_admin/controller/auth/register_controller.dart';
|
||||
|
||||
class _C {
|
||||
static const bg = Color(0xFF0A0D14);
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:siro_admin/constant/links.dart';
|
||||
import 'package:tripz_admin/constant/links.dart';
|
||||
|
||||
import '../../constant/box_name.dart';
|
||||
import '../../constant/info.dart';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// org_admins_page.dart — متابعة إدارة المؤسسة وإضافة المشرفين (لوحة إدارة سيرو)
|
||||
// org_admins_page.dart — متابعة إدارة المؤسسة وإضافة المشرفين (لوحة إدارة تريبز)
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// org_create_page.dart — إضافة مؤسسة جديدة (لوحة إدارة سيرو)
|
||||
// org_create_page.dart — إضافة مؤسسة جديدة (لوحة إدارة تريبز)
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// org_details_page.dart — تفاصيل وتحليلات مؤسسة (لوحة إدارة سيرو)
|
||||
// org_details_page.dart — تفاصيل وتحليلات مؤسسة (لوحة إدارة تريبز)
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// route_approval_page.dart — اعتماد خطوط مواصلاتي المسودة (لوحة سيرو آدمن)
|
||||
// route_approval_page.dart — اعتماد خطوط مواصلاتي المسودة (لوحة تريبز آدمن)
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:siro_admin/main.dart';
|
||||
import 'package:siro_admin/constant/box_name.dart';
|
||||
import 'package:siro_admin/views/admin/captain/captain.dart';
|
||||
import 'package:siro_admin/views/admin/passenger/passenger.dart';
|
||||
import 'package:siro_admin/views/admin/drivers/driver_tracker_screen.dart';
|
||||
import 'package:siro_admin/views/transit/org_list_page.dart';
|
||||
import 'package:siro_admin/views/admin/static/static.dart';
|
||||
import 'package:siro_admin/controller/admin/static_controller.dart';
|
||||
import 'package:siro_admin/views/admin/drivers/monitor_ride.dart';
|
||||
import 'package:siro_admin/views/admin/rides/ride_lookup_page.dart';
|
||||
import 'package:siro_admin/views/admin/packages.dart';
|
||||
import 'package:siro_admin/views/admin/wallet/wallet.dart';
|
||||
import 'package:siro_admin/views/admin/captain/syrian_driver_not_active.dart';
|
||||
import 'package:siro_admin/views/admin/drivers/driver_gift_check_page.dart';
|
||||
import 'package:siro_admin/views/admin/quality/blacklist_page.dart';
|
||||
import 'package:siro_admin/views/admin/employee/employee_page.dart';
|
||||
import 'package:siro_admin/views/admin/server/monitor_server_page.dart';
|
||||
import 'package:siro_admin/views/admin/error/error/error_page.dart';
|
||||
import 'package:siro_admin/views/invoice/invoice_list_page.dart';
|
||||
import 'package:siro_admin/views/admin/staff/add_staff_page.dart';
|
||||
import 'package:siro_admin/views/admin/staff/pending_admins_page.dart';
|
||||
import 'package:siro_admin/views/admin/static/advanced_analytics_page.dart';
|
||||
import 'package:siro_admin/views/admin/financial/financial_v2_page.dart';
|
||||
import 'package:siro_admin/views/admin/security/audit_logs_page.dart';
|
||||
import 'package:siro_admin/views/admin/analytics/live_analytics_page.dart';
|
||||
import 'package:tripz_admin/main.dart';
|
||||
import 'package:tripz_admin/constant/box_name.dart';
|
||||
import 'package:tripz_admin/views/admin/captain/captain.dart';
|
||||
import 'package:tripz_admin/views/admin/passenger/passenger.dart';
|
||||
import 'package:tripz_admin/views/admin/drivers/driver_tracker_screen.dart';
|
||||
import 'package:tripz_admin/views/transit/org_list_page.dart';
|
||||
import 'package:tripz_admin/views/admin/static/static.dart';
|
||||
import 'package:tripz_admin/controller/admin/static_controller.dart';
|
||||
import 'package:tripz_admin/views/admin/drivers/monitor_ride.dart';
|
||||
import 'package:tripz_admin/views/admin/rides/ride_lookup_page.dart';
|
||||
import 'package:tripz_admin/views/admin/packages.dart';
|
||||
import 'package:tripz_admin/views/admin/wallet/wallet.dart';
|
||||
import 'package:tripz_admin/views/admin/captain/syrian_driver_not_active.dart';
|
||||
import 'package:tripz_admin/views/admin/drivers/driver_gift_check_page.dart';
|
||||
import 'package:tripz_admin/views/admin/quality/blacklist_page.dart';
|
||||
import 'package:tripz_admin/views/admin/employee/employee_page.dart';
|
||||
import 'package:tripz_admin/views/admin/server/monitor_server_page.dart';
|
||||
import 'package:tripz_admin/views/admin/error/error/error_page.dart';
|
||||
import 'package:tripz_admin/views/invoice/invoice_list_page.dart';
|
||||
import 'package:tripz_admin/views/admin/staff/add_staff_page.dart';
|
||||
import 'package:tripz_admin/views/admin/staff/pending_admins_page.dart';
|
||||
import 'package:tripz_admin/views/admin/static/advanced_analytics_page.dart';
|
||||
import 'package:tripz_admin/views/admin/financial/financial_v2_page.dart';
|
||||
import 'package:tripz_admin/views/admin/security/audit_logs_page.dart';
|
||||
import 'package:tripz_admin/views/admin/analytics/live_analytics_page.dart';
|
||||
|
||||
class WebSidebar extends StatelessWidget {
|
||||
final int selectedIndex;
|
||||
@@ -158,7 +158,7 @@ class WebSidebar extends StatelessWidget {
|
||||
title: 'تتبع الكباتن (المراقب)',
|
||||
icon: Icons.track_changes_rounded,
|
||||
index: 3,
|
||||
onTap: () => Get.to(() => SiroTrackerScreen()),
|
||||
onTap: () => Get.to(() => TripzTrackerScreen()),
|
||||
),
|
||||
|
||||
_buildSectionHeader(context, 'نظام مواصلاتي'),
|
||||
@@ -321,7 +321,7 @@ class WebSidebar extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'SIRO ADMIN',
|
||||
'TRIPZ ADMIN',
|
||||
style: TextStyle(
|
||||
color: cs.onSurface,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
||||
@@ -4,10 +4,10 @@ project(runner LANGUAGES CXX)
|
||||
|
||||
# The name of the executable created for the application. Change this to change
|
||||
# the on-disk name of your application.
|
||||
set(BINARY_NAME "siro_admin")
|
||||
set(BINARY_NAME "tripz_admin")
|
||||
# The unique GTK application identifier for this application. See:
|
||||
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
|
||||
set(APPLICATION_ID "com.siro.siro_admin")
|
||||
set(APPLICATION_ID "com.tripz.tripz_admin")
|
||||
|
||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||
# versions of CMake.
|
||||
|
||||
@@ -45,11 +45,11 @@ static void my_application_activate(GApplication* application) {
|
||||
if (use_header_bar) {
|
||||
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
|
||||
gtk_widget_show(GTK_WIDGET(header_bar));
|
||||
gtk_header_bar_set_title(header_bar, "siro_admin");
|
||||
gtk_header_bar_set_title(header_bar, "tripz_admin");
|
||||
gtk_header_bar_set_show_close_button(header_bar, TRUE);
|
||||
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
|
||||
} else {
|
||||
gtk_window_set_title(window, "siro_admin");
|
||||
gtk_window_set_title(window, "tripz_admin");
|
||||
}
|
||||
|
||||
gtk_window_set_default_size(window, 1280, 720);
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
||||
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
|
||||
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
|
||||
33CC10ED2044A3C60003C045 /* siro_admin.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = siro_admin.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
33CC10ED2044A3C60003C045 /* tripz_admin.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tripz_admin.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
|
||||
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
@@ -144,7 +144,7 @@
|
||||
33CC10EE2044A3C60003C045 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
33CC10ED2044A3C60003C045 /* siro_admin.app */,
|
||||
33CC10ED2044A3C60003C045 /* tripz_admin.app */,
|
||||
331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
@@ -250,7 +250,7 @@
|
||||
);
|
||||
name = Runner;
|
||||
productName = Runner;
|
||||
productReference = 33CC10ED2044A3C60003C045 /* siro_admin.app */;
|
||||
productReference = 33CC10ED2044A3C60003C045 /* tripz_admin.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
@@ -497,10 +497,10 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/siro_admin.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/siro_admin";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/tripz_admin.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/tripz_admin";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -512,10 +512,10 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/siro_admin.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/siro_admin";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/tripz_admin.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/tripz_admin";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@@ -527,10 +527,10 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/siro_admin.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/siro_admin";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/tripz_admin.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/tripz_admin";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "siro_admin.app"
|
||||
BuildableName = "tripz_admin.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
@@ -31,7 +31,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "siro_admin.app"
|
||||
BuildableName = "tripz_admin.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
@@ -66,7 +66,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "siro_admin.app"
|
||||
BuildableName = "tripz_admin.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
@@ -83,7 +83,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "siro_admin.app"
|
||||
BuildableName = "tripz_admin.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
// 'flutter create' template.
|
||||
|
||||
// The application's name. By default this is also the title of the Flutter window.
|
||||
PRODUCT_NAME = siro_admin
|
||||
PRODUCT_NAME = tripz_admin
|
||||
|
||||
// The application's bundle identifier
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.siro.siroAdmin
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tripz.tripzAdmin
|
||||
|
||||
// The copyright displayed in application information
|
||||
PRODUCT_COPYRIGHT = Copyright © 2025 com.siro. All rights reserved.
|
||||
PRODUCT_COPYRIGHT = Copyright © 2025 com.tripz. All rights reserved.
|
||||
|
||||
@@ -892,10 +892,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
|
||||
sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.19"
|
||||
version: "0.12.18"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -908,10 +908,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
|
||||
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.18.0"
|
||||
version: "1.17.0"
|
||||
mgrs_dart:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1232,10 +1232,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
|
||||
sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.11"
|
||||
version: "0.7.9"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -1413,5 +1413,5 @@ packages:
|
||||
source: hosted
|
||||
version: "3.1.3"
|
||||
sdks:
|
||||
dart: ">=3.10.0-0 <4.0.0"
|
||||
dart: ">=3.9.0-0 <4.0.0"
|
||||
flutter: ">=3.32.0"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: siro_admin
|
||||
name: tripz_admin
|
||||
description: "A new Flutter project."
|
||||
# The following line prevents the package from being accidentally published to
|
||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||
|
||||
@@ -23,13 +23,13 @@
|
||||
<!-- iOS meta tags & icons -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="apple-mobile-web-app-title" content="siro_admin">
|
||||
<meta name="apple-mobile-web-app-title" content="tripz_admin">
|
||||
<link rel="apple-touch-icon" href="icons/Icon-192.png">
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/png" href="favicon.png"/>
|
||||
|
||||
<title>siro_admin</title>
|
||||
<title>tripz_admin</title>
|
||||
<link rel="manifest" href="manifest.json">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "siro_admin",
|
||||
"short_name": "siro_admin",
|
||||
"name": "tripz_admin",
|
||||
"short_name": "tripz_admin",
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"background_color": "#ffffff",
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Project-level configuration.
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
project(siro_admin LANGUAGES CXX)
|
||||
project(tripz_admin LANGUAGES CXX)
|
||||
|
||||
# The name of the executable created for the application. Change this to change
|
||||
# the on-disk name of your application.
|
||||
set(BINARY_NAME "siro_admin")
|
||||
set(BINARY_NAME "tripz_admin")
|
||||
|
||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||
# versions of CMake.
|
||||
|
||||
@@ -89,13 +89,13 @@ BEGIN
|
||||
BEGIN
|
||||
BLOCK "040904e4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "com.siro" "\0"
|
||||
VALUE "FileDescription", "siro_admin" "\0"
|
||||
VALUE "CompanyName", "com.tripz" "\0"
|
||||
VALUE "FileDescription", "tripz_admin" "\0"
|
||||
VALUE "FileVersion", VERSION_AS_STRING "\0"
|
||||
VALUE "InternalName", "siro_admin" "\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2026 com.siro. All rights reserved." "\0"
|
||||
VALUE "OriginalFilename", "siro_admin.exe" "\0"
|
||||
VALUE "ProductName", "siro_admin" "\0"
|
||||
VALUE "InternalName", "tripz_admin" "\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2026 com.tripz. All rights reserved." "\0"
|
||||
VALUE "OriginalFilename", "tripz_admin.exe" "\0"
|
||||
VALUE "ProductName", "tripz_admin" "\0"
|
||||
VALUE "ProductVersion", VERSION_AS_STRING "\0"
|
||||
END
|
||||
END
|
||||
|
||||
@@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||
FlutterWindow window(project);
|
||||
Win32Window::Point origin(10, 10);
|
||||
Win32Window::Size size(1280, 720);
|
||||
if (!window.Create(L"siro_admin", origin, size)) {
|
||||
if (!window.Create(L"tripz_admin", origin, size)) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
window.SetQuitOnClose(true);
|
||||
|
||||
@@ -1,128 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="ar" dir="rtl">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Tripz — خدمة العملاء</title>
|
||||
<!--
|
||||
لوحة خدمة العملاء (docs/22 — N5). SPA مكتفية ذاتياً. المصادقة هاتف+OTP →
|
||||
JWT بدور dispatcher/admin. بحث مستخدم برقمه (يُطبَّع ويُبحث بالفهرس الأعمى
|
||||
على السيرفر) + عرض رحلاته + تفاصيل رحلة بالمعرّف. الحماية على السيرفر.
|
||||
-->
|
||||
<style>
|
||||
:root { --bg:#0f1420; --card:#1a2130; --line:#2a3346; --fg:#e6ebf5; --mut:#8b97ad; --acc:#4f8cff; --ok:#2ecc71; --bad:#e74c3c; }
|
||||
* { box-sizing:border-box; }
|
||||
body { margin:0; font-family:system-ui,'Segoe UI',Tahoma,sans-serif; background:var(--bg); color:var(--fg); }
|
||||
header { padding:14px 22px; border-bottom:1px solid var(--line); display:flex; align-items:center; gap:14px; }
|
||||
header h1 { font-size:17px; margin:0; }
|
||||
.wrap { max-width:900px; margin:0 auto; padding:22px; }
|
||||
.card { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:18px; margin-bottom:18px; }
|
||||
.card h2 { margin:0 0 14px; font-size:14px; color:var(--mut); font-weight:600; }
|
||||
input { padding:9px 11px; background:var(--bg); border:1px solid var(--line); border-radius:8px; color:var(--fg); font-size:14px; }
|
||||
button.act { background:var(--acc); color:#fff; border:0; border-radius:6px; padding:9px 16px; font-size:14px; cursor:pointer; }
|
||||
table { width:100%; border-collapse:collapse; }
|
||||
th,td { text-align:right; padding:9px 10px; border-bottom:1px solid var(--line); font-size:13px; }
|
||||
th { color:var(--mut); font-weight:600; font-size:12px; }
|
||||
.badge { padding:2px 8px; border-radius:6px; font-size:11px; }
|
||||
.b-paid,.b-completed{background:rgba(46,204,113,.15);color:var(--ok)} .b-cancelled{background:rgba(231,76,60,.15);color:var(--bad)}
|
||||
.muted { color:var(--mut); font-size:13px; }
|
||||
.kv { display:grid; grid-template-columns:auto 1fr; gap:6px 14px; font-size:14px; }
|
||||
.kv b { color:var(--mut); font-weight:600; }
|
||||
.flex { display:flex; gap:10px; }
|
||||
.toast { position:fixed; bottom:20px; left:50%; transform:translateX(-50%); padding:12px 20px; border-radius:8px; opacity:0; transition:opacity .2s; }
|
||||
.toast.ok{background:var(--ok)} .toast.bad{background:var(--bad)} .toast.show{opacity:1}
|
||||
dialog { background:var(--card); color:var(--fg); border:1px solid var(--line); border-radius:12px; padding:24px; max-width:420px; width:90%; }
|
||||
dialog::backdrop{background:rgba(0,0,0,.6)} dialog input{width:100%;margin-top:8px}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>🎧 Tripz — خدمة العملاء</h1>
|
||||
<span class="muted" id="who"></span>
|
||||
<span style="flex:1"></span>
|
||||
<button class="act" id="logout" style="display:none" style="background:var(--bad)">خروج</button>
|
||||
</header>
|
||||
<div class="wrap" id="main" style="display:none">
|
||||
<div class="card">
|
||||
<h2>بحث عن مستخدم برقم الهاتف</h2>
|
||||
<div class="flex"><input id="q" placeholder="07xxxxxxxx" style="flex:1" /><button class="act" id="searchBtn">بحث</button></div>
|
||||
<div id="userResult" style="margin-top:14px"></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>تفاصيل رحلة بالمعرّف</h2>
|
||||
<div class="flex"><input id="tid" placeholder="trip id" style="flex:1" /><button class="act" id="tripBtn">عرض</button></div>
|
||||
<div id="tripResult" style="margin-top:14px"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toast" id="toast"></div>
|
||||
<dialog id="loginDlg">
|
||||
<h2 style="margin-top:0">دخول خدمة العملاء</h2>
|
||||
<p class="muted">هاتف + رمز تحقّق.</p>
|
||||
<input id="phone" placeholder="07xxxxxxxx" />
|
||||
<div id="otpStep" style="display:none"><input id="otp" placeholder="الرمز (1234 تطوير)" /></div>
|
||||
<div class="flex" style="margin-top:16px"><button class="act" id="sendOtp">إرسال الرمز</button><button class="act" id="verify" style="display:none;background:var(--ok)">دخول</button></div>
|
||||
</dialog>
|
||||
|
||||
<script>
|
||||
const API = location.origin.includes('localhost') ? 'http://localhost:4010/api' : '/api';
|
||||
const TENANT = new URLSearchParams(location.search).get('tenant') || 'siro';
|
||||
let TOKEN = sessionStorage.getItem('tripz_cs_token') || '';
|
||||
const toast=(m,ok=true)=>{const t=document.getElementById('toast');t.textContent=m;t.className=`toast show ${ok?'ok':'bad'}`;setTimeout(()=>t.className='toast',2600);};
|
||||
|
||||
async function api(method, path, body){
|
||||
const res = await fetch(API+path,{method,headers:{'Content-Type':'application/json','x-tenant-id':TENANT,...(TOKEN?{Authorization:`Bearer ${TOKEN}`}:{})},body:body?JSON.stringify(body):undefined});
|
||||
const json = await res.json().catch(()=>({}));
|
||||
if(!res.ok) throw new Error(json.message||`HTTP ${res.status}`);
|
||||
return json;
|
||||
}
|
||||
const badge=(s)=>`<span class="badge b-${s}">${s}</span>`;
|
||||
|
||||
document.getElementById('searchBtn').onclick = async () => {
|
||||
const box = document.getElementById('userResult'); box.innerHTML='<span class="muted">…</span>';
|
||||
try {
|
||||
const u = await api('GET',`/admin/users/search?phone=${encodeURIComponent(document.getElementById('q').value.trim())}`);
|
||||
if(!u){ box.innerHTML='<span class="muted">لا مستخدم بهذا الرقم</span>'; return; }
|
||||
const trips = await api('GET',`/trips/admin/list?rider=${u.id}`);
|
||||
box.innerHTML = `<div class="kv"><b>المعرّف</b><span>${u.id}</span><b>الهاتف</b><span>${u.phone}</span>
|
||||
<b>الدور</b><span>${u.role}</span><b>التقييم</b><span>${u.rating??'-'}</span><b>الحالة</b><span>${u.status}</span></div>
|
||||
<h2 style="margin-top:16px">رحلاته (${trips.length})</h2>
|
||||
<table><thead><tr><th>الرحلة</th><th>الحالة</th><th>الأجرة</th></tr></thead><tbody>${
|
||||
trips.length?trips.map(t=>`<tr><td>${t.id.slice(0,8)}</td><td>${badge(t.status)}</td><td>${t.final_fare??t.quoted_fare??'-'}</td></tr>`).join(''):'<tr><td colspan=3 class="muted">لا رحلات</td></tr>'}</tbody></table>`;
|
||||
} catch(e){ box.innerHTML=`<span class="muted">${e.message}</span>`; }
|
||||
};
|
||||
|
||||
document.getElementById('tripBtn').onclick = async () => {
|
||||
const box = document.getElementById('tripResult'); box.innerHTML='<span class="muted">…</span>';
|
||||
try {
|
||||
const t = await api('GET',`/trips/${document.getElementById('tid').value.trim()}`);
|
||||
if(!t||!t.id){ box.innerHTML='<span class="muted">لا رحلة بهذا المعرّف</span>'; return; }
|
||||
box.innerHTML = `<div class="kv"><b>الحالة</b><span>${badge(t.status)}</span><b>الأجرة</b><span>${t.final_fare??t.quoted_fare??'-'} ${t.currency||''}</span>
|
||||
<b>المسافة</b><span>${t.distance_km??'-'} كم</span><b>وسيلة الدفع</b><span>${t.payment_method}</span>
|
||||
<b>أُلغيت من</b><span>${t.cancelled_by||'-'}</span><b>رسم الإلغاء</b><span>${t.cancel_fee??'-'}</span></div>`;
|
||||
} catch(e){ box.innerHTML=`<span class="muted">${e.message}</span>`; }
|
||||
};
|
||||
|
||||
function openLogin(){ document.getElementById('loginDlg').showModal(); }
|
||||
document.getElementById('sendOtp').onclick = async () => {
|
||||
try{ const r=await api('POST','/auth/send-otp',{phone:document.getElementById('phone').value.trim()}); toast(r.dev_code?`رمز: ${r.dev_code}`:'أُرسل الرمز');
|
||||
document.getElementById('otpStep').style.display=''; document.getElementById('verify').style.display=''; }catch(e){toast(e.message,false);}
|
||||
};
|
||||
document.getElementById('verify').onclick = async () => {
|
||||
try{ const r=await api('POST','/auth/verify-otp',{phone:document.getElementById('phone').value.trim(),code:document.getElementById('otp').value.trim()});
|
||||
if(!['admin','dispatcher'].includes(r.user?.role)){toast('ليس حساب خدمة عملاء',false);return;}
|
||||
TOKEN=r.access_token; sessionStorage.setItem('tripz_cs_token',TOKEN); document.getElementById('loginDlg').close(); boot();
|
||||
}catch(e){toast(e.message,false);}
|
||||
};
|
||||
document.getElementById('logout').onclick = ()=>{ sessionStorage.removeItem('tripz_cs_token'); location.reload(); };
|
||||
|
||||
function boot(){
|
||||
if(!TOKEN){ openLogin(); return; }
|
||||
document.getElementById('main').style.display='block';
|
||||
document.getElementById('logout').style.display='';
|
||||
document.getElementById('who').textContent=`المستأجر: ${TENANT}`;
|
||||
}
|
||||
boot();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,4 +1,4 @@
|
||||
# siro_service
|
||||
# tripz_service
|
||||
|
||||
A new Flutter project.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Analyzing siro_service...
|
||||
Analyzing tripz_service...
|
||||
|
||||
warning - lib/constant/links.dart:3:8 - Unused import: 'box_name.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/controller/best_driver_controllers.dart:1:8 - Unused import: 'dart:convert'. Try removing the import directive. - unused_import
|
||||
@@ -105,7 +105,7 @@ warning - lib/controller/login_controller.dart:1:8 - Unused import: 'dart:conver
|
||||
warning - lib/controller/mainController/pages/add_car.dart:12:8 - Unused import: '../../functions/encrypt_decrypt.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/controller/mainController/pages/alexandria_besr_driver.dart:6:8 - Unused import: '../../functions/encrypt_decrypt.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/controller/mainController/pages/best_driver_page.dart:1:8 - Unused import: 'dart:convert'. Try removing the import directive. - unused_import
|
||||
warning - lib/controller/mainController/pages/best_driver_page.dart:5:8 - Unused import: 'package:siro_service/controller/functions/encrypt_decrypt.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/controller/mainController/pages/best_driver_page.dart:5:8 - Unused import: 'package:tripz_service/controller/functions/encrypt_decrypt.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/controller/mainController/pages/edit_car_plate.dart:7:8 - Unused import: '../../functions/encrypt_decrypt.dart'. Try removing the import directive. - unused_import
|
||||
warning - lib/controller/mainController/pages/edit_car_plate.dart:9:8 - Duplicate import. Try removing all but one import of the library. - duplicate_import
|
||||
warning - lib/controller/mainController/pages/edit_car_plate.dart:10:8 - Duplicate import. Try removing all but one import of the library. - duplicate_import
|
||||
|
||||
@@ -26,12 +26,12 @@ if (keystorePropertiesFile.exists()) {
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "com.siro.siro_service"
|
||||
namespace = "com.tripz.tripz_service"
|
||||
compileSdk = 36
|
||||
ndkVersion = "28.2.13676358"
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "com.siro.siro_service"
|
||||
applicationId = "com.tripz.tripz_service"
|
||||
minSdk = 30
|
||||
targetSdk = 36
|
||||
versionCode = 1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.10.2) # 3.10.2 is fine, but no need to go as high as 3.31.5
|
||||
project(siro_service) # Good
|
||||
project(tripz_service) # Good
|
||||
|
||||
# Add your C++ source file(s) to create a SHARED library.
|
||||
add_library(native-lib SHARED native-lib.cpp)
|
||||
|
||||
@@ -158,7 +158,7 @@ bool checkLoadedModules()
|
||||
//}
|
||||
|
||||
extern "C" JNIEXPORT jboolean JNICALL
|
||||
Java_com_siro_siro_1service_RootDetection_isNativeRooted(JNIEnv *env, jobject /* this */)
|
||||
Java_com_tripz_tripz_1service_RootDetection_isNativeRooted(JNIEnv *env, jobject /* this */)
|
||||
{
|
||||
|
||||
if (isRooted())
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package com.siro.siro_service
|
||||
package com.tripz.tripz_service
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.Intent
|
||||
@@ -17,8 +17,8 @@ import java.util.Timer
|
||||
import kotlin.concurrent.schedule
|
||||
|
||||
class MainActivity : FlutterFragmentActivity() {
|
||||
private val SECURITY_CHANNEL = "com.siro.siro_service/security"
|
||||
private val APP_CONTROL_CHANNEL = "com.siro.siro_service/app_control"
|
||||
private val SECURITY_CHANNEL = "com.tripz.tripz_service/security"
|
||||
private val APP_CONTROL_CHANNEL = "com.tripz.tripz_service/app_control"
|
||||
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
super.configureFlutterEngine(flutterEngine)
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.siro.siro_admin
|
||||
package com.tripz.tripz_service
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Intent
|
||||
@@ -24,7 +24,7 @@ class MyApplication : Application() {
|
||||
|
||||
MethodChannel(
|
||||
flutterEngine.dartExecutor.binaryMessenger,
|
||||
"com.siro.siro_admin/app_lifecycle"
|
||||
"com.tripz.tripz_service/app_lifecycle"
|
||||
)
|
||||
.setMethodCallHandler { call, result ->
|
||||
if (call.method == "bringAppToForeground") {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.siro.siro_service
|
||||
package com.tripz.tripz_service
|
||||
|
||||
object RootDetection {
|
||||
init {
|
||||
@@ -7,8 +7,8 @@
|
||||
</base-config>
|
||||
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">intaleq.xyz</domain>
|
||||
<domain includeSubdomains="true">siromove.com</domain>
|
||||
<domain includeSubdomains="true">tripz.xyz</domain>
|
||||
<domain includeSubdomains="true">tripzmove.com</domain>
|
||||
|
||||
<pin-set expiration="2028-01-01">
|
||||
<!-- Primary: ISRG Root X1 (RSA) -->
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"flutter":{"platforms":{"android":{"default":{"projectId":"siro-a6957","appId":"1:825988584191:android:be08180beef7d65e1632ca","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"siro-a6957","appId":"1:825988584191:ios:9d50158dc7a09e851632ca","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"siro-a6957","configurations":{"android":"1:825988584191:android:be08180beef7d65e1632ca","ios":"1:825988584191:ios:9d50158dc7a09e851632ca"}}}}}}
|
||||
{"flutter":{"platforms":{"android":{"default":{"projectId":"tripz-a6957","appId":"1:825988584191:android:be08180beef7d65e1632ca","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"tripz-a6957","appId":"1:825988584191:ios:9d50158dc7a09e851632ca","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"tripz-a6957","configurations":{"android":"1:825988584191:android:be08180beef7d65e1632ca","ios":"1:825988584191:ios:9d50158dc7a09e851632ca"}}}}}}
|
||||
@@ -500,7 +500,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceSiro;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceTripz;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
@@ -517,7 +517,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceSiro.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceTripz.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -535,7 +535,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceSiro.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceTripz.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -551,7 +551,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceSiro.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceTripz.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -683,7 +683,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceSiro;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceTripz;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -706,7 +706,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceSiro;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.serviceTripz;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
||||
@@ -8,7 +8,7 @@ import UIKit
|
||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
||||
) -> Bool {
|
||||
let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
|
||||
let securityChannel = FlutterMethodChannel(name: "com.siro.siro_service/security",
|
||||
let securityChannel = FlutterMethodChannel(name: "com.tripz.tripz_service/security",
|
||||
binaryMessenger: controller.binaryMessenger)
|
||||
|
||||
securityChannel.setMethodCallHandler({
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Siro Service</string>
|
||||
<string>Tripz Service</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@@ -13,7 +13,7 @@
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>siro_service</string>
|
||||
<string>tripz_service</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
||||
@@ -5,7 +5,7 @@ class AppInformation {
|
||||
static const String linkedInProfile =
|
||||
'https://www.linkedin.com/in/hamza-ayed/';
|
||||
static const String website = 'https://mobile-app.store';
|
||||
static const String email = 'support@intaleqapp.com';
|
||||
static const String email = 'support@tripzapp.com';
|
||||
static const String complaintPrompt =
|
||||
'for this data for complaint from driver or passenger i collect all data i want you analyze this complaint and show what is reason and what is solution .this data collected from many table to find solution if payment in visa not complete and if ride status is finished it will be paymnet in payment table if ride status is not finished there is no need to pay and payment table is null for this ride and if paymentFromPaymentTable not null and visa type not cash the payment sucssessed . if ratingpassenger is low or passengr rating drivers low grade then dont mine of this passenger ,look at driver too like passengerratingdriver with rating or ratingtopassenger .in json add status of complaint and message to passenger and message to driver and message to call center write in arabic in json output with key in english .for output please just json i want';
|
||||
static const String addd = 'BlBlNl';
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user