work on moving customers from tahesab 5

This commit is contained in:
2026-06-29 01:13:53 +03:30
parent 8ac18c6f03
commit 8fa3df94ca
@@ -117,16 +117,19 @@ class TahesabController extends Controller
->toArray();
$tahesabOnlyList = [];
$debugSample = [];
foreach ($tahesabCustomers as $item) {
if (! is_array($item)) continue;
if (count($debugSample) < 3) $debugSample[] = $item; // نمونهٔ خام برای تشخیص نام فیلدها
$code = $item['Code'] ?? null;
if ($code !== null && isset($panelCodes[(string) $code])) continue;
$tel = ltrim((string) ($item['Tel'] ?? ''), '0');
$phone = $this->extractTahesabPhone($item);
$tel = ltrim($phone, '0');
if ($tel && isset($panelMobiles[$tel])) continue;
$tahesabOnlyList[] = [
'code' => $item['Code'] ?? null,
'name' => $item['Name'] ?? '',
'tel' => $item['Tel'] ?? '',
'tel' => $phone,
'gid' => $item['GID'] ?? null,
'group' => $item['GoroupName'] ?? '',
];
@@ -141,7 +144,7 @@ class TahesabController extends Controller
];
}
return response()->json([
$payload = [
'panel_total' => $panelTotal,
'panel_registered' => $panelRegistered,
'panel_only' => $panelOnly,
@@ -149,7 +152,35 @@ class TahesabController extends Controller
'tahesab_only_count' => $tahesabOnlyCount,
'panel_only_list' => $panelOnlyList,
'tahesab_only_list' => $tahesabOnlyResult,
]);
];
// برای تشخیص نام دقیق فیلدها: ?include_tahesab=1&raw=1
if ($request->boolean('include_tahesab') && $request->boolean('raw')) {
$payload['tahesab_debug_sample'] = $debugSample ?? [];
}
return response()->json($payload);
}
/** شماره تماس را از هر کلید محتمل در رکورد مشتری ته‌حساب استخراج می‌کند */
private function extractTahesabPhone(array $item): string
{
$candidates = ['Mobile', 'CellPhone', 'Cell', 'Tel', 'Tell', 'Phone', 'MobileNo', 'Telephone', 'Mobile1'];
foreach ($candidates as $key) {
if (isset($item[$key]) && trim((string) $item[$key]) !== '') {
return trim((string) $item[$key]);
}
}
// جستجوی عمومی: هر کلیدی که شامل mobile/tel/phone/cell باشد و مقدار داشته باشد
foreach ($item as $k => $v) {
if ($v === null || trim((string) $v) === '') continue;
$lk = strtolower((string) $k);
if (str_contains($lk, 'mobile') || str_contains($lk, 'tel')
|| str_contains($lk, 'phone') || str_contains($lk, 'cell')) {
return trim((string) $v);
}
}
return '';
}
public function syncPanelToTahesab(): \Illuminate\Http\JsonResponse
@@ -199,8 +230,26 @@ class TahesabController extends Controller
$tel = trim((string) ($item['tel'] ?? ''));
$mobile = $tel !== '' ? '0' . ltrim($tel, '0') : '';
// اگر مشتری با همین کد قبلاً ثبت شده، عملیات موفق در نظر گرفته می‌شود (idempotent)
if (Customer::whereNull('deleted_at')->where('moshtari_code', $item['code'])->exists()) {
$fullName = trim($item['name']);
// اگر مشتری با همین کد قبلاً ثبت شده: فیلدهای ناقص (نام/موبایل/رمز) را تکمیل کن
$existing = Customer::whereNull('deleted_at')->where('moshtari_code', $item['code'])->first();
if ($existing) {
$changed = false;
if (($existing->name === null || $existing->name === '') && $fullName !== '') {
$existing->fname = $fullName;
$existing->lname = (string) ($existing->lname ?? '');
$existing->name = $fullName; // mutator name را از fname+lname می‌سازد
$changed = true;
}
if (($existing->mobile === null || $existing->mobile === '') && $mobile !== '') {
$existing->mobile = $mobile;
if (empty($existing->password)) {
$existing->password = $mobile; // رمز = شماره موبایل
}
$changed = true;
}
if ($changed) $existing->save();
$success++;
continue;
}
@@ -215,8 +264,6 @@ class TahesabController extends Controller
} while (Customer::where('referral_id', $referralId)->exists());
try {
$fullName = trim($item['name']);
// توجه: مدل Customer یک mutator روی name دارد که name را از fname+lname می‌سازد
// و مقدار مستقیم name را نادیده می‌گیرد. پس باید fname را قبل از name ست کنیم.
$customer = new Customer();