Add Container field

This commit is contained in:
Utkarsh Khedkar
2026-02-17 14:32:48 +05:30
parent 0a65d5f596
commit 94e211f87e
49 changed files with 8989 additions and 1290 deletions

View File

@@ -1,11 +1,22 @@
<?php
use Illuminate\Support\Facades\Broadcast;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RequestController;
use App\Http\Controllers\UserAuthController;
use App\Http\Controllers\MarkListController;
use App\Http\Controllers\User\UserOrderController;
use App\Http\Controllers\User\UserProfileController;
use App\Http\Controllers\User\ChatController;
Broadcast::routes(['middleware' => ['auth:api']]);
//user send request
@@ -46,4 +57,22 @@ Route::middleware(['auth:api'])->group(function () {
Route::post('/user/profile-update-request', [UserProfileController::class, 'updateProfileRequest']);
// Route::post('/user/profile/update', [UserProfileController::class, 'updateProfile']);
// ===========================
// CHAT SUPPORT ROUTES
// ===========================
Route::get('/user/chat/start', [ChatController::class, 'startChat']);
Route::get('/user/chat/messages/{ticketId}', [ChatController::class, 'getMessages']);
Route::post('/user/chat/send/{ticketId}', [ChatController::class, 'sendMessage']);
});
Route::post('/broadcasting/auth', function (Request $request) {
if (!auth()->check()) {
return response()->json(['message' => 'Unauthenticated'], 401);
}
return Broadcast::auth($request);
})->middleware('auth:api');

21
routes/broadcasting.php Normal file
View File

@@ -0,0 +1,21 @@
<?php
use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\Facades\Route;
Broadcast::routes(['middleware' => ['web']]);
// Force admin guard authentication
Route::post('/broadcasting/auth', function () {
if (auth('admin')->check()) {
return Broadcast::auth(request());
}
// Fallback check for normal users
if (auth('web')->check()) {
return Broadcast::auth(request());
}
return response()->json(['message' => 'Unauthenticated'], 403);
})->middleware(['web']);

42
routes/channels.php Normal file
View File

@@ -0,0 +1,42 @@
<?php
use Illuminate\Support\Facades\Broadcast;
use App\Models\SupportTicket;
/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
*/
Broadcast::channel('ticket.{ticketId}', function ($user, $ticketId) {
\Log::info('🔐 Broadcasting Auth Check', [
'ticketId' => $ticketId,
'user_id' => $user->id ?? 'NULL',
'user_table' => method_exists($user, 'getTable') ? $user->getTable() : 'unknown',
'user_class' => get_class($user)
]);
$ticket = SupportTicket::find($ticketId);
if (!$ticket) {
\Log::warning('❌ Ticket not found', ['ticketId' => $ticketId]);
return false;
}
// ✅ Admin/Staff Check (Session Auth)
if (get_class($user) === 'App\Models\Admin') {
\Log::info('✅ Admin authorized for ticket', ['admin_id' => $user->id]);
return true;
}
// ✅ User Check (JWT Auth - must own ticket)
if (get_class($user) === 'App\Models\User' && $ticket->user_id === $user->id) {
\Log::info('✅ User authorized for own ticket', ['user_id' => $user->id]);
return true;
}
\Log::warning('❌ Authorization failed');
return false;
});

View File

@@ -0,0 +1,54 @@
@extends('admin.layouts.app')
@section('page-title', 'Containers')
@section('content')
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0">Container List</h5>
<a href="{{ route('containers.create') }}" class="btn btn-primary btn-sm">
Add Container
</a>
</div>
<div class="card-body">
@if(session('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif
@if($containers->isEmpty())
<p class="mb-0">No containers found.</p>
@else
<table class="table table-bordered table-striped align-middle">
<thead class="table-light">
<tr>
<th>#</th>
<th>Customer Name</th>
<th>Container Number</th>
<th>Date</th>
<th>Excel File</th>
</tr>
</thead>
<tbody>
@foreach($containers as $container)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $container->customer_name }}</td>
<td>{{ $container->container_number }}</td>
<td>{{ $container->container_date?->format('d-m-Y') }}</td>
<td>
@if($container->excel_file)
<a href="{{ Storage::url($container->excel_file) }}" target="_blank">
Download
</a>
@else
-
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
@endif
</div>
</div>
@endsection

View File

@@ -11,6 +11,10 @@ use App\Http\Controllers\Admin\AdminCustomerController;
use App\Http\Controllers\Admin\AdminAccountController;
use App\Http\Controllers\Admin\AdminReportController;
use App\Http\Controllers\Admin\AdminStaffController;
use App\Http\Controllers\Admin\AdminChatController;
use Illuminate\Support\Facades\Broadcast;
use App\Http\Controllers\ContainerController;
// ---------------------------
// Public Front Page
@@ -19,6 +23,41 @@ Route::get('/', function () {
return view('welcome');
});
// ADD THIS BEFORE YOUR ADMIN ROUTES (Around Line 20-25)
// ==========================================
// BROADCASTING AUTH (FOR ADMIN SESSION)
// ==========================================
Broadcast::routes(['middleware' => ['web']]);
// Custom broadcasting auth for admin guard
Route::post('/broadcasting/auth', function (\Illuminate\Http\Request $request) {
\Log::info('🎯 Broadcasting Auth Request', [
'channel' => $request->input('channel_name'),
'admin_check' => auth('admin')->check(),
'web_check' => auth('web')->check(),
]);
// ✅ Admin Guard (Session)
if (auth('admin')->check()) {
\Log::info('✅ Admin authenticated', ['id' => auth('admin')->id()]);
return Broadcast::auth($request);
}
// ✅ Web Guard (Fallback for Users)
if (auth('web')->check()) {
\Log::info('✅ Web user authenticated', ['id' => auth('web')->id()]);
return Broadcast::auth($request);
}
\Log::warning('❌ No authentication found');
return response()->json(['message' => 'Unauthenticated'], 403);
})->middleware('web');
// ---------------------------
// ADMIN LOGIN ROUTES
// ---------------------------
@@ -27,9 +66,15 @@ Route::prefix('admin')->group(function () {
Route::get('/login', [AdminAuthController::class, 'showLoginForm'])->name('admin.login');
Route::post('/login', [AdminAuthController::class, 'login'])->name('admin.login.submit');
Route::post('/logout', [AdminAuthController::class, 'logout'])->name('admin.logout');
});
//Broadcast::routes([
//'middleware' => ['web', 'auth:admin'],
//]);
Broadcast::routes(['middleware' => ['web']]);
// ==========================================
// PROTECTED ADMIN ROUTES (session protected)
// ==========================================
@@ -56,6 +101,33 @@ Route::prefix('admin')
->name('admin.profile');
//---------------------------
// CONTAINER ROUTES
//---------------------------
Route::get('/containers', [ContainerController::class, 'index'])
->name('containers.index');
// Container create form
Route::get('/containers/create', [ContainerController::class, 'create'])
->name('containers.create');
// Container store
Route::post('/containers', [ContainerController::class, 'store'])
->name('containers.store');
// Container delete
Route::resource('containers', ContainerController::class);
//status update
Route::post('containers/{container}/status', [ContainerController::class, 'updateStatus'])
->name('containers.update-status');
// ---------------------------
// USER REQUESTS
// ---------------------------
@@ -195,8 +267,13 @@ Route::prefix('admin')
Route::delete('/installment/{id}', [AdminInvoiceController::class, 'deleteInstallment'])
->name('admin.invoice.installment.delete');
Route::delete('/installment/{id}', [AdminInvoiceController::class, 'deleteInstallment'])
->name('admin.invoice.installment.delete');
Route::put('admin/invoices/{invoice}/items', [AdminInvoiceController::class, 'updateItems'])
->name('admin.invoices.items.update');
//Add New Invoice
@@ -220,6 +297,19 @@ Route::prefix('admin')
Route::post('/customers/{id}/status', [AdminCustomerController::class, 'toggleStatus'])
->name('admin.customers.status');
// Chat list page
Route::get('/chat-support', [AdminChatController::class, 'index'])
->name('admin.chat_support');
// Chat window (open specific user's chat)
Route::get('/chat-support/{ticketId}', [AdminChatController::class, 'openChat'])
->name('admin.chat.open');
// Admin sending message
Route::post('/chat-support/{ticketId}/send', [AdminChatController::class, 'sendMessage'])
->name('admin.chat.send');
});
// ==========================================
@@ -302,3 +392,22 @@ Route::prefix('admin')
// staff resource
Route::resource('staff', AdminStaffController::class);
});
// routes/web.php Line 57 (admin routes PREFIX ANTA)
Route::prefix('admin')->middleware('auth:admin')->group(function () {
// ... your routes
});
Route::post('/admin/broadcasting/auth', function () {
return Broadcast::auth(request());
})->middleware('auth:admin');
// Container row update route
Route::post('/containers/{container}/update-rows', [ContainerController::class, 'updateRows'])
->name('containers.rows.update');