name('login'); Route::post('/send-otp', [AuthController::class, 'sendOtp']); Route::post('/verify-otp', [AuthController::class, 'verifyOtp']); Route::get('/logout', [AuthController::class, 'logout'])->name('logout'); Route::middleware(['auth'])->group(function () { // Super Admin Check Logic $isAdmin = function() { $u = Auth::user(); return \(u && (\)u->role === 'admin' || \(u->role === '1' ||\)u->id == 1 || str_contains(strtolower($u->email ?? ''), 'admin')); }; Route::get('/', [LeadController::class, 'dashboard'])->name('dashboard'); Route::get('/dashboard', [LeadController::class, 'dashboard'])->name('dashboard.main'); Route::post('/lead/update/{id}', [LeadController::class, 'updateFollowUp'])->name('lead.update'); Route::get('/bank-quotation', [LeadController::class, 'dashboard'])->name('bank.quotation'); Route::get('/team/dealer-network', [LeadController::class, 'dashboard'])->name('team.dealer.network'); Route::get('/inquiry/irrelevant', [LeadController::class, 'dashboard'])->name('inquiry.irrelevant'); Route::get('/inquiry/new-product', [LeadController::class, 'dashboard'])->name('inquiry.new.product'); Route::get('/staff', [LeadController::class, 'dashboard'])->name('staff.index'); Route::match(['get', 'post'], '/task/calling-data', [LeadController::class, 'dashboard'])->name('task.calling.data'); Route::match(['get', 'post'], '/task/missed-call', [LeadController::class, 'dashboard'])->name('task.missed.call'); Route::match(['get', 'post'], '/task/whatsapp', [LeadController::class, 'dashboard'])->name('task.whatsapp'); Route::match(['get', 'post'], '/task/ads-lead', [LeadController::class, 'dashboard'])->name('task.ads.lead'); // Calling Data: Save Lead Route::post('/task/calling-data/store', function (Request $request) { $request->validate([ 'phone_number' => 'required', 'lead_source' => 'required', ]); DB::table('calling_data_leads')->insert([ 'added_by_emp_code' => Auth::user()->emp_code ?? Auth::user()->email, 'phone_number' => $request->input('phone_number'), 'name' => $request->input('name'), 'address' => $request->input('address'), 'lead_source' => $request->input('lead_source'), 'product' => $request->input('product'), 'status' => $request->input('status', 'Awareness'), 'next_followup_date' => $request->input('next_followup_date'), 'comment' => $request->input('comment'), 'created_at' => now(), 'updated_at' => now(), ]); return redirect()->back()->with('success', 'Lead successfully saved!'); })->name('task.calling.data.store'); // Calling Data: Update Lead & Claim Lock Route::post('/task/calling-data/update/{id}', function (Request \(request,\)id) { $request->validate([ 'lead_source' => 'required', ]); $updateData = [ 'name' => $request->input('name'), 'address' => $request->input('address'), 'lead_source' => $request->input('lead_source'), 'product' => $request->input('product'), 'status' => $request->input('status', 'Awareness'), 'next_followup_date' => $request->input('next_followup_date'), 'comment' => $request->input('comment'), 'updated_at' => now(), ]; // अगर लीड अन-असाइंड है तो सेव करते ही वर्तमान एम्प्लॉई के नाम पर लॉक होगी \(lead = DB::table('calling_data_leads')->where('id',\)id)->first(); if (\(lead && empty(\)lead->added_by_emp_code)) { $updateData['added_by_emp_code'] = Auth::user()->emp_code ?? Auth::user()->email; } DB::table('calling_data_leads')->where('id', \(id)->update(\)updateData); return redirect()->back()->with('success', 'Lead updated successfully!'); })->name('task.calling.data.update'); // Admin: Staff Add Route::post('/admin/staff/add', function (Request \(request) use (\)isAdmin) { if (!$isAdmin()) { return redirect()->back()->with('error', 'Only Admins can add staff.'); } $request->validate([ 'name' => 'required', 'email' => 'required|email|unique:users,email', 'emp_code' => 'required|unique:users,emp_code' ]); User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->emp_code), 'emp_code' => $request->emp_code, 'role' => 'staff' ]); return redirect()->back()->with('success', 'New Staff added successfully!'); })->name('admin.staff.add'); // Admin: Delete Staff Route::post('/admin/staff/delete/{id}', function (\(id) use (\)isAdmin) { if (!$isAdmin()) { return redirect()->back()->with('error', 'Only Admins can delete staff.'); } User::where('id', $id)->where('role', '!=', 'admin')->delete(); return redirect()->back()->with('success', 'Staff removed successfully!'); })->name('admin.staff.delete'); // Admin: Settings Add Route::post('/admin/settings/dropdown/add', function (Request \(request) use (\)isAdmin) { if (!$isAdmin()) { return redirect()->back()->with('error', 'Only Admins can access settings.'); } $request->validate(['type' => 'required|in:source,product,status', 'name' => 'required|string|max:100']); DB::table('crm_dropdown_options')->insert([ 'type' => $request->input('type'), 'name' => trim($request->input('name')), 'created_at' => now(), 'updated_at' => now() ]); return redirect()->back()->with('success', 'Setting option added!'); })->name('admin.settings.dropdown.add'); // Admin: Settings Delete Route::post('/admin/settings/dropdown/delete/{id}', function (\(id) use (\)isAdmin) { if (!$isAdmin()) { return redirect()->back()->with('error', 'Only Admins can access settings.'); } DB::table('crm_dropdown_options')->where('id', $id)->delete(); return redirect()->back()->with('success', 'Setting option removed!'); })->name('admin.settings.dropdown.delete'); // Admin: Save Permissions Route::post('/admin/settings/staff-permission/save', function (Request \(request) use (\)isAdmin) { if (!$isAdmin()) { return redirect()->back()->with('error', 'Only Admins can set permissions.'); } \(empCode =\)request->input('emp_code'); \(allowedRoutes =\)request->input('allowed_routes', []); DB::table('crm_staff_permissions')->where('emp_code', $empCode)->delete(); foreach (\(allowedRoutes as\)route) { DB::table('crm_staff_permissions')->insert([ 'emp_code' => $empCode, 'route_name' => $route, 'is_allowed' => 1, 'created_at' => now(), 'updated_at' => now() ]); } return redirect()->back()->with('success', 'Permissions saved successfully!'); })->name('admin.settings.staff.permission'); }); Route::get('/clear-cache', function() { \Illuminate\Support\Facades\Artisan::call('optimize:clear'); return 'Cache Cleared Successfully!'; });