From c024091531e902aa7a88d8b1ecb3e1c925bf5ac8 Mon Sep 17 00:00:00 2001 From: adonis Date: Sun, 28 Jun 2026 19:13:35 +0330 Subject: [PATCH] added some feature for accounting and price 7 --- .../Controllers/Admin/TahesabController.php | 55 +++++++++++++++++++ routes/admin.php | 2 + 2 files changed, 57 insertions(+) diff --git a/app/Http/Controllers/Admin/TahesabController.php b/app/Http/Controllers/Admin/TahesabController.php index 480c582..5d43761 100644 --- a/app/Http/Controllers/Admin/TahesabController.php +++ b/app/Http/Controllers/Admin/TahesabController.php @@ -56,6 +56,61 @@ class TahesabController extends Controller return response()->json($tahesab); } + public function customerSyncStatus(Request $request): \Illuminate\Http\JsonResponse + { + $total = Customer::whereNull('deleted_at')->count(); + $registered = Customer::whereNull('deleted_at')->whereNotNull('moshtari_code')->count(); + $unregistered = $total - $registered; + + $query = Customer::whereNull('deleted_at')->whereNull('moshtari_code') + ->select('id', 'name', 'mobile', 'created_at'); + + if ($search = $request->input('search')) { + $query->where(function ($q) use ($search) { + $q->where('name', 'like', "%{$search}%") + ->orWhere('mobile', 'like', "%{$search}%"); + }); + } + + $list = $query->orderBy('id')->paginate(20); + + return response()->json([ + 'total' => $total, + 'registered' => $registered, + 'unregistered'=> $unregistered, + 'list' => $list, + ]); + } + + public function syncPanelToTahesab(): \Illuminate\Http\JsonResponse + { + $customers = Customer::whereNull('deleted_at') + ->whereNull('moshtari_code') + ->select('id', 'name', 'mobile') + ->get(); + + $success = 0; + $failed = 0; + $errors = []; + + foreach ($customers as $customer) { + $result = $this->sync()->registerCustomer($customer); + if ($result['ok'] ?? false) { + $success++; + } else { + $failed++; + $errors[] = ['name' => $customer->name, 'mobile' => $customer->mobile, 'error' => $result['message'] ?? '']; + } + } + + return response()->json([ + 'ok' => true, + 'success' => $success, + 'failed' => $failed, + 'errors' => $errors, + ]); + } + public function retrySanad($id) { $tahesab = Tahesab::with('customer')->findOrFail($id); diff --git a/routes/admin.php b/routes/admin.php index ebdce6d..a65f525 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -153,6 +153,8 @@ Route::middleware('auth:user')->group(function (){ Route::post('wallet/tahesab', [TahesabController::class, 'wallet']); Route::post('tahesab/table', [TahesabController::class, 'table']); + Route::get('tahesab/customer-sync/status', [TahesabController::class, 'customerSyncStatus']); + Route::post('tahesab/customer-sync/panel-to-tahesab', [TahesabController::class, 'syncPanelToTahesab']); Route::get('tahesab/{id}', [TahesabController::class, 'show']); Route::post('tahesab/{id}/retry', [TahesabController::class, 'retrySanad']); Route::post('customer/{id}/tahesab/register', [TahesabController::class, 'registerCustomer']);