From fc9a401a8c867672af6143fe67bfe5d9ec49a6d7274d86cdd24c57c5f3689a91 Mon Sep 17 00:00:00 2001 From: Utkarsh Khedkar Date: Fri, 19 Dec 2025 11:00:34 +0530 Subject: [PATCH 1/2] changes --- .../Controllers/Admin/ShipmentController.php | 76 + resources/views/admin/chat_support.blade.php | 651 ++++++- resources/views/admin/chat_window.blade.php | 1064 +++++++++-- resources/views/admin/dashboard.blade.php | 8 + resources/views/admin/orders_show.blade.php | 110 +- resources/views/admin/shipments.blade.php | 11 +- resources/views/admin/staff/create.blade.php | 1313 +++++++++++-- resources/views/admin/staff/edit.blade.php | 1022 +++++++++-- resources/views/admin/staff/index.blade.php | 941 +++++++++- resources/views/admin/view_shipment.blade.php | 1631 ++++++++++++++++- routes/web.php | 16 +- 11 files changed, 6113 insertions(+), 730 deletions(-) diff --git a/app/Http/Controllers/Admin/ShipmentController.php b/app/Http/Controllers/Admin/ShipmentController.php index 0eab511..6feffef 100644 --- a/app/Http/Controllers/Admin/ShipmentController.php +++ b/app/Http/Controllers/Admin/ShipmentController.php @@ -224,5 +224,81 @@ class ShipmentController extends Controller return view('admin.view_shipment', compact('shipment', 'dummyData')); } + // App\Models\Shipment.php + +public function orders() +{ + return $this->belongsToMany(\App\Models\Order::class, 'shipment_items', 'shipment_id', 'order_id'); +} + +public function removeOrder(Shipment $shipment, Order $order) +{ + // Remove row from pivot table shipment_items + ShipmentItem::where('shipment_id', $shipment->id) + ->where('order_id', $order->id) + ->delete(); // removes link shipment <-> order [web:41][web:45] + + // Recalculate totals on this shipment (optional but recommended) + $orders = Order::whereIn( + 'id', + ShipmentItem::where('shipment_id', $shipment->id)->pluck('order_id') + )->get(); + + $shipment->total_ctn = $orders->sum('ctn'); + $shipment->total_qty = $orders->sum('qty'); + $shipment->total_ttl_qty = $orders->sum('ttl_qty'); + $shipment->total_cbm = $orders->sum('cbm'); + $shipment->total_ttl_cbm = $orders->sum('ttl_cbm'); + $shipment->total_kg = $orders->sum('kg'); + $shipment->total_ttl_kg = $orders->sum('ttl_kg'); + $shipment->total_amount = $orders->sum('ttl_amount'); + $shipment->save(); + + // Redirect back to preview page where your blade is loaded + return redirect() + ->route('admin.shipments.dummy', $shipment->id) + ->with('success', 'Order removed from shipment successfully.'); +} + +public function addOrders(Request $request, Shipment $shipment) +{ + $request->validate([ + 'order_ids' => 'required|array|min:1', + ]); + + // फक्त न वापरलेले orders घ्या + $orders = Order::whereIn('id', $request->order_ids)->get(); + + foreach ($orders as $order) { + // pivot मध्ये insert + ShipmentItem::create([ + 'shipment_id' => $shipment->id, + 'order_id' => $order->id, + 'order_ctn' => $order->ctn, + 'order_qty' => $order->qty, + 'order_ttl_qty' => $order->ttl_qty, + 'order_ttl_amount' => $order->ttl_amount, + 'order_ttl_kg' => $order->ttl_kg, + ]); + } + + // totals + $orderIds = ShipmentItem::where('shipment_id', $shipment->id)->pluck('order_id'); + $allOrders = Order::whereIn('id', $orderIds)->get(); + + $shipment->total_ctn = $allOrders->sum('ctn'); + $shipment->total_qty = $allOrders->sum('qty'); + $shipment->total_ttl_qty = $allOrders->sum('ttl_qty'); + $shipment->total_cbm = $allOrders->sum('cbm'); + $shipment->total_ttl_cbm = $allOrders->sum('ttl_cbm'); + $shipment->total_kg = $allOrders->sum('kg'); + $shipment->total_ttl_kg = $allOrders->sum('ttl_kg'); + $shipment->total_amount = $allOrders->sum('ttl_amount'); + $shipment->save(); + + return redirect() + ->route('admin.shipments.dummy', $shipment->id) + ->with('success', 'Orders added to shipment successfully.'); +} } \ No newline at end of file diff --git a/resources/views/admin/chat_support.blade.php b/resources/views/admin/chat_support.blade.php index 9add999..623fa65 100644 --- a/resources/views/admin/chat_support.blade.php +++ b/resources/views/admin/chat_support.blade.php @@ -1,96 +1,605 @@ @extends('admin.layouts.app') -@section('page-title', 'Chat Support') +@section('page-title', 'Chat Support Dashboard') @section('content') + + +
+ +
+

Live Chat Dashboard

+

+ Monitor customer conversations with real-time updates +

- - - @endforeach - - - @endif - + +
+
+
💬
+
+

{{ $tickets->count() }}

+

Total Conversations

+
+
+
📈
+
+

{{ $tickets->where('status', 'open')->count() }}

+

Active Tickets

+
+
+
+
+
+

{{ $tickets->where('status', 'closed')->count() }}

+

Resolved Tickets

+
+
+
+ + +
+
+
+

+ 📋 Active Conversations + {{ $tickets->count() }} +

+
+
+ + @if($tickets->count() === 0) + +
+
💬
+

No Active Conversations

+

+ Customer conversations will appear here with real-time notifications. +

+
Ready for support requests
+
+ @else + +
+ @foreach($tickets as $ticket) +
+ @if($ticket->unread_count > 0) +
+ @endif + +
+
+ {{ strtoupper(substr($ticket->user->customer_name ?? $ticket->user->name, 0, 1)) }} +
+
+
+ {{ $ticket->user->customer_name ?? $ticket->user->name }} + @if($ticket->unread_count > 0) + + {{ $ticket->unread_count }} + + @endif +
+ + @php + $lastMsg = $ticket->messages()->latest()->first(); + @endphp + +
+ @if($lastMsg) + @if($lastMsg->message) + {{ Str::limit($lastMsg->message, 55) }} + @elseif(Str::startsWith($lastMsg->file_type, 'image')) + 📷 Photo shared + @else + 📎 File attached + @endif + @else + Conversation started + @endif +
+ + @if($lastMsg) +
+ + + + + {{ $lastMsg->created_at->diffForHumans() }} +
+ @endif +
+
#{{ $ticket->id }}
+
+ + +
+ @endforeach +
+ @endif
+@endsection + @section('scripts') -@endsection - - - -@endsection +@endsection \ No newline at end of file diff --git a/resources/views/admin/chat_window.blade.php b/resources/views/admin/chat_window.blade.php index 2dec287..d908aa8 100644 --- a/resources/views/admin/chat_window.blade.php +++ b/resources/views/admin/chat_window.blade.php @@ -3,132 +3,828 @@ @section('page-title', 'Chat With ' . ($ticket->user->customer_name ?? $ticket->user->name)) @section('content') - -
- -
-

- Chat With: {{ $ticket->user->customer_name ?? $ticket->user->name }} -

- - {{ ucfirst($ticket->status) }} - -
- -
- - @foreach($messages as $msg) -
- - {{-- TEXT --}} - @if($msg->message) -
{{ $msg->message }}
- @endif - - {{-- FILE --}} - @if($msg->file_path) - - @php - $isImage = Str::startsWith($msg->file_type, 'image'); - $isVideo = Str::startsWith($msg->file_type, 'video'); - @endphp - - {{-- IMAGE --}} - @if($isImage) - - - {{-- VIDEO --}} - @elseif($isVideo) - - - {{-- PDF / EXCEL / OTHER --}} - @else - - 📎 View Attachment - - @endif - - @endif - - - - {{ $msg->created_at->format('d M h:i A') }} - +
+
+
+
+ +
+ + {{ ucfirst($ticket->status) }} + + + + + + Back + +
- @endforeach +
-
+ {{-- Messages --}} +
+
+ @foreach($messages as $msg) +
+ @if($msg->message) +
{{ $msg->message }}
+ @endif -
-
-
- - - + @if($msg->file_path) + @php + $isImage = Str::startsWith($msg->file_type, 'image'); + $isVideo = Str::startsWith($msg->file_type, 'video'); + $isPdf = Str::endsWith($msg->file_path, '.pdf'); + $isDocument = in_array(Str::lower(Str::afterLast($msg->file_path, '.')), ['doc', 'docx', 'txt']); + $fileName = basename($msg->file_path); + + // Get file size from storage if possible + $fileSize = 'N/A'; + try { + $fullPath = storage_path('app/public/' . $msg->file_path); + if (file_exists($fullPath)) { + $size = filesize($fullPath); + if ($size < 1024) { + $fileSize = $size . ' B'; + } elseif ($size < 1048576) { + $fileSize = round($size / 1024, 1) . ' KB'; + } else { + $fileSize = round($size / 1048576, 1) . ' MB'; + } + } + } catch (Exception $e) { + $fileSize = 'Unknown'; + } + + // Determine file class + if ($isImage) { + $fileClass = 'image-file'; + $fileIcon = '🖼️'; + } elseif ($isVideo) { + $fileClass = 'video-file'; + $fileIcon = '🎬'; + } elseif ($isPdf) { + $fileClass = 'pdf-file'; + $fileIcon = '📄'; + } elseif ($isDocument) { + $fileClass = 'document-file'; + $fileIcon = '📝'; + } else { + $fileClass = 'other-file'; + $fileIcon = '📎'; + } + @endphp + +
+ @if($isImage) + {{ $fileName }} + @elseif($isVideo) + + @endif + + +
+ {{ $fileIcon }} +
+
+
{{ $fileName }}
+
{{ $fileSize }}
+
+
+ + + +
+
+
+ @endif + + + {{ $msg->created_at->format('d M h:i A') }} + +
+ @endforeach + +
+ + + +
+
+
+ + {{-- Input --}} +
+
+ + +
+
+ + +
+ + +
+
+ +
-
- @endsection - @section('scripts') - - - - -@endsection +@endsection \ No newline at end of file diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index f2d54a5..4113081 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -333,6 +333,13 @@ body, .container-fluid { border-color: #f59e0b !important; } +.badge-loading { + background: linear-gradient(135deg, #e3f2fd, #90caf9) !important; + color: #1565c0 !important; + border-color: #2196f3 !important; + width: 110px; +} + /* In Transit Status - SAME SIZE WITH TRUCK ICON */ .badge-in_transit { background: linear-gradient(135deg, #dbeafe, #93c5fd) !important; @@ -1101,6 +1108,7 @@ body, .container-fluid { break-inside: avoid; } } +
diff --git a/resources/views/admin/orders_show.blade.php b/resources/views/admin/orders_show.blade.php index d430814..ca2b532 100644 --- a/resources/views/admin/orders_show.blade.php +++ b/resources/views/admin/orders_show.blade.php @@ -13,47 +13,54 @@

Order Details

+ @php + $status = strtolower($order->status ?? ''); + @endphp + Detailed view of this shipment order
{{-- ADD ITEM --}} @can('order.create') - + @if($status === 'pending') + + @endif @endcan +
+
+ {{-- Edit Order --}} + @if($status === 'pending') + + @endif - {{-- EDIT ORDER --}} --> - + {{-- Delete Order --}} + @if($status === 'pending') +
+ @csrf + @method('DELETE') + +
+ @endif +
- - - +
@@ -190,32 +197,33 @@ {{ $item->ttl_kg }} {{ $item->shop_no }} - + + @if($status === 'pending') + {{-- EDIT BUTTON --}} + @can('order.edit') + + @endcan - {{-- EDIT BUTTON --}} - @can('order.edit') - - @endcan + {{-- DELETE BUTTON --}} + @can('order.delete') +
+ @csrf + @method('DELETE') + +
+ @endcan + @endif + - @can('order.delete') - {{-- DELETE BUTTON --}} -
- @csrf - @method('DELETE') - -
- @endcan - @endforeach @@ -617,7 +625,7 @@ function fillFormFromDeleted(item) { box-shadow: 0 4px 15px 0 rgba(102, 126, 234, 0.3); position: relative; overflow: hidden; - margin-right: -800px; + margin-right: -650px; } .btn-add-item:hover { diff --git a/resources/views/admin/shipments.blade.php b/resources/views/admin/shipments.blade.php index 4fa2ad0..b3565a9 100644 --- a/resources/views/admin/shipments.blade.php +++ b/resources/views/admin/shipments.blade.php @@ -1297,9 +1297,10 @@ {{ \Carbon\Carbon::parse($ship->shipment_date)->format('d M Y') }} - + @@ -1596,13 +1597,13 @@ function renderTable() { ${new Date(shipment.shipment_date).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' })} - - +
-
-
- - {{-- Stage 2 --}} -
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
- - {{-- Stage 3 --}} -
-
- - -
If left blank employee id will be used.
-
- -
- - -
- -
- - -
-
- - {{-- Stage 4 --}} -
-
Permissions
- - @foreach($permissions as $group => $groupPerms) -
-
-
{{ ucfirst($group) }}
-
- + +
+ +
+
+
👨‍💼
+

Add New Staff Member

+

Complete all the steps below to add a new staff member to your team

-
- -
- @foreach($groupPerms as $perm) - - @endforeach -
- @endforeach -
- - -
+ +
+
+
1
+
Personal
+
+
+
2
+
Professional
+
+
+
3
+
Account
+
+
+
4
+
Permissions
+
+
+ + + @if($errors->any()) +
+
+ ⚠️ + Please fix the following errors +
+
    + @foreach($errors->all() as $err) +
  • {{ $err }}
  • + @endforeach +
+
+ @endif + + + @csrf + + +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + +
+ + +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ + +
+
+ +
+ + +
+
+ + +
+ + +
+
+
+ + +
+ ℹ️ + If left blank, username will be generated from employee ID +
+
+ +
+ + +
+
+
+
+ 🔒 + Minimum 8 characters with letters and numbers +
+
+ +
+ + +
+
+ + +
+ + +
+
+

🔐 Set Access Permissions

+

Select the permissions you want to grant to this staff member.

+
+ +
+ @foreach($permissions as $group => $groupPerms) +
+
+

{{ ucfirst($group) }}

+ +
+
+ @foreach($groupPerms as $perm) + + @endforeach +
+
+ @endforeach +
+ + +
+
-
-@endsection +@endsection \ No newline at end of file diff --git a/resources/views/admin/staff/edit.blade.php b/resources/views/admin/staff/edit.blade.php index d6fc451..09bb26a 100644 --- a/resources/views/admin/staff/edit.blade.php +++ b/resources/views/admin/staff/edit.blade.php @@ -1,156 +1,896 @@ @extends('admin.layouts.app') -@section('page-title', 'Account Dashboard') +@section('page-title', 'Edit Staff') @section('content') -
-

Edit Staff — {{ $staff->display_name ?? $staff->name }}

- - @if($errors->any()) -
- There were some problems with your input: -
    - @foreach($errors->all() as $err) -
  • {{ $err }}
  • - @endforeach -
-
- @endif - -
- @csrf - @method('PUT') - -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- -
- - -
- -
- - -
- -
- -
Permissions
- - @foreach($permissions as $group => $groupPerms) -
-
-
{{ ucfirst($group) }}
-
- -
+
+ +
+ +
+
+
+ {{ strtoupper(substr($staff->name, 0, 2)) }} +
+
+

Edit Staff Profile

+
{{ $staff->name }}
+
{{ $staff->employee_id }}
-
- @foreach($groupPerms as $perm) - - @endforeach -
-
- @endforeach + + @if($errors->any()) +
+
+ ⚠️ + There were some problems with your input +
+
    + @foreach($errors->all() as $err) +
  • {{ $err }}
  • + @endforeach +
+
+ @endif -
- Cancel - + + @csrf + @method('PUT') + + +
+
+
👤
+

Personal Information

+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + +
+
+
💼
+

Professional Information

+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ + +
+
+
+
+ + +
+
+
🔐
+

Account Information

+
+
+
+ + +
+ +
+ + +
+
+
+
+ +
+ + +
+
+
+ + +
+
+
📝
+

Additional Information

+
+
+
+ + +
+
+
+ + +
+
+
🔑
+

Permissions & Access

+
+ +
+ @foreach($permissions as $group => $groupPerms) +
+
+

{{ ucfirst($group) }}

+ +
+
+ @foreach($groupPerms as $perm) + + @endforeach +
+
+ @endforeach +
+
+ + +
+ + + Cancel + + +
+
-
-@endsection +@endsection \ No newline at end of file diff --git a/resources/views/admin/staff/index.blade.php b/resources/views/admin/staff/index.blade.php index 479014d..184a2a2 100644 --- a/resources/views/admin/staff/index.blade.php +++ b/resources/views/admin/staff/index.blade.php @@ -1,65 +1,896 @@ @extends('admin.layouts.app') -@section('page-title', 'Account Dashboard') +@section('page-title', 'Staff Management Dashboard') @section('content') -
-

Staff

- Add Staff +
+ + @if(session('success')) +
+ {{ session('success') }} +
+ @endif + + {{-- Stats Cards --}} +
+
+
+ 👥 +
+
+

{{ $staff->count() }}

+

Total Staff

+
+
+
+
+ ✅ +
+
+

{{ $staff->where('status', 'active')->count() }}

+

Active Staff

+
+
+
+
+ 👑 +
+
+

{{ $staff->unique('role')->count() }}

+

Unique Roles

+
+
+
+ + {{-- Search Bar --}} +
+ 🔍 + +
+ +
+ + + + Add Staff + +
+ + {{-- Staff Table --}} +
+
+
Staff Management
+
+ +
+
+ + + + + + + + + + + + + + + + @php + $totalStaff = count($staff); + @endphp + @forelse($staff as $s) + + + + + + + + + + + @empty + + + + @endforelse + +
#Employee IDNameEmailPhoneRoleStatusActions
{{ $totalStaff - $loop->index }} + {{ $s->employee_id }} + +
+
+ {{ strtoupper(substr($s->name, 0, 1)) }} +
+ {{ $s->name }} +
+
{{ $s->email }}{{ $s->phone ?? '-' }} + @if($s->role) + {{ $s->role }} + @else + - + @endif + + + {{ ucfirst($s->status) }} + + +
+ + + Edit + +
+ @csrf + @method('DELETE') + +
+
+
+
+ No staff members found +
+
+
+ + {{-- Pagination --}} +
+
+ Showing 1 to {{ $staff->count() }} of {{ $staff->count() }} entries +
+
+ +
+ +
+ +
+
+
+
-
- @if(session('success')) -
{{ session('success') }}
- @endif + +@endsection \ No newline at end of file diff --git a/resources/views/admin/view_shipment.blade.php b/resources/views/admin/view_shipment.blade.php index f46f1cc..143f233 100644 --- a/resources/views/admin/view_shipment.blade.php +++ b/resources/views/admin/view_shipment.blade.php @@ -3,32 +3,964 @@ @section('page-title', 'Shipment Preview') @section('content') + + +
+
+
+

- Shipment Preview: {{ $shipment->shipment_id }} -

+ Shipment Details - {{ $shipment->shipment_id }} + + + {{-- SHOW BUTTON ONLY FOR PENDING --}} + @if($shipment->status === 'pending') + + @endif
-
- - -
- {{ $dummyData['title'] }}
- Generated On: {{ $dummyData['generated_on'] }}
- Note: {{ $dummyData['note'] }} -
- - -
Shipment Details
- +
+ + Shipment Information +
+
+ - - + + @@ -40,89 +972,608 @@ - + -
Shipment ID{{ $shipment->shipment_id }}Shipment ID{{ $shipment->shipment_id }}
Origin
Status{{ ucfirst($shipment->status) }} + @php + $statusColors = [ + 'pending' => 'warning', + 'loading' => 'info', + 'in_transit' => 'primary', + 'dispatched' => 'success', + 'delivered' => 'success', + ]; + $statusColor = $statusColors[$shipment->status] ?? 'secondary'; + @endphp + + {{ ucfirst(str_replace('_', ' ', $shipment->status)) }} + +
Date {{ \Carbon\Carbon::parse($shipment->shipment_date)->format('d M Y') }}
+ + - -
Orders Contained in Shipment
+
+ + Orders Contained in Shipment +
- @if($shipment->orders->isEmpty()) -

No orders found.

- @else -
- - - - - - - - - - - - - - - @foreach($shipment->orders as $order) - - - - - - - - - - - @endforeach + @if($shipment->orders->isEmpty()) +
+ + No orders found in this shipment. +
+ @else +
+
Order IDOriginDestinationCTNQTYTTL/QTYKGAmount
{{ $order->order_id }}{{ $order->origin }}{{ $order->destination }}{{ $order->ctn }}{{ $order->qty }}{{ $order->ttl_qty }}{{ $order->ttl_kg }}₹{{ number_format($order->ttl_amount, 2) }}
+ + + + + + + + + + + + + + + + + -
Order IDOriginDestinationMark NoDescriptionCTNQTYTTL/QTYKGTTL/KGAmountRemove
+ +
+ +
+
+ Showing 1 to 0 of + 0 entries
- @endif +
+ +
+
+ +
+
+ @endif - -
Shipment Totals
- - - - - - - - - - - - - - - - - - - - - - - - - -
Total CTN{{ $shipment->total_ctn }}
Total Quantity{{ $shipment->total_qty }}
Total TTL Quantity{{ $shipment->total_ttl_qty }}
Total CBM{{ $shipment->total_cbm }}
Total KG{{ $shipment->total_kg }}
Total Amount - ₹{{ number_format($shipment->total_amount, 2) }} -
+
+ + Shipment Totals +
+
+
+ + + + + + + + + + + + + + + +
Total CTN{{ $shipment->total_ctn }}
Total QTY{{ $shipment->total_qty }}
Total TTL QTY{{ $shipment->total_ttl_qty }}
+
+
+ + + + + + + + + + + + + + + +
Total CBM{{ $shipment->total_cbm }}
Total KG{{ $shipment->total_kg }}
Total TTL KG{{ $shipment->total_ttl_kg }}
+
+
- - ← Back to Shipments +
+
+ + Total Amount: + ₹{{ number_format($shipment->total_amount, 2) }} +
+
+ +
-@endsection + + + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 6f8c487..eb68c01 100644 --- a/routes/web.php +++ b/routes/web.php @@ -175,11 +175,21 @@ Route::prefix('admin') // Shipment Delete Route::delete('/shipments/{id}', [ShipmentController::class, 'destroy']) ->name('admin.shipments.destroy'); + + Route::get('/shipment/dummy/{id}', [ShipmentController::class, 'dummy']) + ->name('admin.shipments.dummy'); + // web.php + Route::delete('/shipments/{shipment}/orders/{order}', + [ShipmentController::class, 'removeOrder'] + )->name('admin.shipments.removeOrder'); + + Route::post('/shipments/{shipment}/add-orders', + [ShipmentController::class, 'addOrders'] + )->name('admin.shipments.addOrders'); Route::get('/shipment/dummy/{id}', [ShipmentController::class, 'dummy']) ->name('admin.shipments.dummy'); - // --------------------------- // INVOICES // --------------------------- @@ -207,8 +217,8 @@ Route::prefix('admin') ->name('admin.invoice.installment.delete'); - // //Add New Invoice - // Route::get('/admin/invoices/create', [InvoiceController::class, 'create'])->name('admin.invoices.create'); + //Add New Invoice + Route::get('/admin/invoices/create', [InvoiceController::class, 'create'])->name('admin.invoices.create'); // --------------------------- From c4097ecbded7fa7396633b2ed77184ba2aa487a93d3a5b18944ef0ff0beb1d69 Mon Sep 17 00:00:00 2001 From: Abhishek Mali Date: Fri, 19 Dec 2025 16:08:34 +0530 Subject: [PATCH 2/2] employee update --- .../Admin/AdminStaffController.php | 22 +- .../Admin/UserRequestController.php | 7 +- app/Models/Admin.php | 2 +- public/invoices/invoice-INV-2025-000016.pdf | Bin 0 -> 62596 bytes public/invoices/invoice-INV-2025-000030.pdf | Bin 59946 -> 59971 bytes resources/views/admin/layouts/app.blade.php | 32 ++- .../admin/profile_update_requests.blade.php | 270 ++++++++++++------ resources/views/admin/requests.blade.php | 47 ++- resources/views/admin/staff/create.blade.php | 3 +- 9 files changed, 283 insertions(+), 100 deletions(-) create mode 100644 public/invoices/invoice-INV-2025-000016.pdf diff --git a/app/Http/Controllers/Admin/AdminStaffController.php b/app/Http/Controllers/Admin/AdminStaffController.php index 020239e..f7d8ddb 100644 --- a/app/Http/Controllers/Admin/AdminStaffController.php +++ b/app/Http/Controllers/Admin/AdminStaffController.php @@ -55,6 +55,7 @@ class AdminStaffController extends Controller DB::beginTransaction(); try { + // 1️⃣ Create staff WITHOUT employee_id (ID not available yet) $admin = Admin::create([ 'name' => $request->name, 'email' => $request->email, @@ -69,23 +70,33 @@ class AdminStaffController extends Controller 'status' => $request->status, 'additional_info' => $request->additional_info, - 'username' => $request->username, + // username may be NULL here + 'username' => $request->username ?: null, 'password' => Hash::make($request->password), 'type' => 'staff', ]); - // Generate EMPLOYEE ID using admin ID (safe) + // 2️⃣ Generate EMPLOYEE ID $employeeId = 'EMP' . str_pad($admin->id, 4, '0', STR_PAD_LEFT); - $admin->update(['employee_id' => $employeeId]); - // Assign permissions (if any) + // 3️⃣ Auto-generate username if left blank + $username = $request->username ?: strtolower($employeeId); + + // 4️⃣ Update employee_id + username together + $admin->update([ + 'employee_id' => $employeeId, + 'username' => $username, + ]); + + // 5️⃣ Assign permissions (if any) if ($request->permissions) { $admin->givePermissionTo($request->permissions); } DB::commit(); - return redirect()->route('admin.staff.index') + return redirect() + ->route('admin.staff.index') ->with('success', 'Staff created successfully.'); } catch (\Exception $e) { @@ -94,6 +105,7 @@ class AdminStaffController extends Controller } } + public function edit($id) { $staff = Admin::where('type', 'staff')->findOrFail($id); diff --git a/app/Http/Controllers/Admin/UserRequestController.php b/app/Http/Controllers/Admin/UserRequestController.php index e09c56f..eb977c6 100644 --- a/app/Http/Controllers/Admin/UserRequestController.php +++ b/app/Http/Controllers/Admin/UserRequestController.php @@ -15,7 +15,12 @@ class UserRequestController extends Controller public function index() { $requests = CustomerRequest::orderBy('id', 'desc')->get(); - return view('admin.requests', compact('requests')); + $pendingProfileUpdates = \App\Models\UpdateRequest::where('status', 'pending')->count(); + + return view('admin.requests', compact( + 'requests', + 'pendingProfileUpdates' + )); } // Approve user request diff --git a/app/Models/Admin.php b/app/Models/Admin.php index 118f371..c897aeb 100644 --- a/app/Models/Admin.php +++ b/app/Models/Admin.php @@ -18,7 +18,7 @@ class Admin extends Authenticatable 'name', 'email', 'password', 'username', 'phone', 'emergency_phone', 'address', 'role', 'department', 'designation', 'joining_date', - 'status', 'additional_info', 'type', // admin/staff indicator + 'status', 'additional_info', 'type','employee_id', // admin/staff indicator ]; protected $hidden = [ diff --git a/public/invoices/invoice-INV-2025-000016.pdf b/public/invoices/invoice-INV-2025-000016.pdf new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..0a36ff84b5c9f04fc409239d1e8f19dc30da068f986413ae90b84a9a20aaf23e GIT binary patch literal 62596 zcmeFZ1yG$&(=Uhx4HAM&IKcwJ-QC?KxVv+Z;7;)1?hqgZ4NeH|7CgAS6Py6|IsEh9 zS9kaO?yap`TeTE(=9!u9nV#TYgv=mfZwCe>bOy0PrsC&EHnlT>>;uyLvmbFw8?dPp zh(X-O5Ns-HYHV);Y){tI&Kzt3VrF6E0+^h^PNs&o$nF`3TH4Np_1HZuzR$Q*M>JI| zgLx`_taQ1gdE+PReqO%r4;1c?Ga3)4kM0pDdn{k((ll_B8Xz^jqgW3U!(3U@X?2Dr zt0=IV`!R0q^gC_iVpfz*nmSeAd!H~qK~|olMD6TW^?PguC8oq?=J_WkrT(8GJ@X*k z@jyxI{SfQ);+G6^%;OXXb(*)7YbB}Rsw#ea&CSA2I|;JUD^hJDH!|0GI0TD5hTg5F&w-mJNvIZ+w=6L;yT4rdp9g5R6HmVpf(Z??xp zn(?M>6399;W#gyyx(DK>!%-DY&h$FrTYkL4kpbsT^mm$+5xkY-kxsS3M$fMm*T{db zNyp7s`8l*Ji!OHf$dDu6=psC{FyUyCUHfuf=Mqi-i=cs?8!wi zXmmV`j*16ur#-#Nkt28ry}kP}WqY%)-nx*<$i%kO?

A^$n)#O#9Mra*1V;?@JNh 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 literal 0 HcmV?d00001 diff --git a/public/invoices/invoice-INV-2025-000030.pdf b/public/invoices/invoice-INV-2025-000030.pdf index 2f12f724c5a473ae78e5d426f16a91bdbc086dca9c44fed8d4b229f98a4c3ad5..593eead8e9ed08965a2a6b26afc9abc65923fecde54f0dbe344a42333cc14b49 100644 GIT binary patch delta 3793 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 RotOXu5(hAei)$Kb{RaXPj8gyr delta 3791 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 @@ -285,12 +311,12 @@ @endcan - {{-- Profile Update Requests --}} + {{-- Staff (NO PERMISSION REQUIRED) --}} diff --git a/resources/views/admin/profile_update_requests.blade.php b/resources/views/admin/profile_update_requests.blade.php index 4797665..e6938ce 100644 --- a/resources/views/admin/profile_update_requests.blade.php +++ b/resources/views/admin/profile_update_requests.blade.php @@ -5,107 +5,207 @@ @section('content')

- @php - $perPage = 5; - $currentPage = request()->get('page', 1); - $currentPage = max(1, (int)$currentPage); - $total = $requests->count(); - $totalPages = ceil($total / $perPage); - $currentItems = $requests->slice(($currentPage - 1) * $perPage, $perPage); - @endphp +@php + $perPage = 5; + $currentPage = request()->get('page', 1); + $currentPage = max(1, (int)$currentPage); + $total = $requests->count(); + $currentItems = $requests->slice(($currentPage - 1) * $perPage, $perPage); +@endphp - + + +

Profile Update Requests ({{ $total }})

+ +@foreach($currentItems as $index => $req) +@php + $user = $req->user; + $newData = is_array($req->data) ? $req->data : json_decode($req->data, true); +@endphp + +
+ + + + + +
+ @foreach(['customer_name','company_name','email'] as $field) + @php + $old = $user->$field ?? '—'; + $new = $newData[$field] ?? $old; + @endphp +
+
{{ ucfirst(str_replace('_',' ', $field)) }}
+
Old: {{ $old }}
+
New: {{ $new }}
+
+ @endforeach +
+ + +
+ @foreach(['mobile_no','address','pincode'] as $field) + + @php + $old = $user->$field ?? '—'; + $new = $newData[$field] ?? $old; + @endphp +
+
{{ ucfirst(str_replace('_',' ', $field)) }}
+
Old: {{ $old }}
+
New: {{ $new }}
+
+ @endforeach +
+ +
+@endforeach +
@endsection diff --git a/resources/views/admin/requests.blade.php b/resources/views/admin/requests.blade.php index cab3f38..a4e598b 100644 --- a/resources/views/admin/requests.blade.php +++ b/resources/views/admin/requests.blade.php @@ -307,13 +307,54 @@ justify-content: center; } } +/* ============================================== + PROFILE UPDATE REQUEST BUTTON BADGE FIX +============================================== */ + +/* Ensure button is positioning context */ +a.btn.btn-primary.position-relative { + position: relative; + margin-right: 10px; +} + +/* Fix badge inside Profile Update Requests button */ +a.btn.btn-primary.position-relative .badge { + width: 30px !important; + height: 30px !important; + min-width: 30px !important; + padding: 0 !important; + font-size: 14px !important; + line-height: 30px !important; + border-radius: 50% !important; + display: inline-flex !important; + align-items: center; + justify-content: center; + animation: none !important; + box-shadow: 0 0 0 2px #ffffff; + +} + +
-

User Requests (Total: {{ $total }})

- -
+

User Requests (Total: {{ $total }})

+ + @can('request.update_profile') + + + Profile Update Requests + + @if($pendingProfileUpdates > 0) + + {{ $pendingProfileUpdates }} + + @endif + + @endcan +
+
diff --git a/resources/views/admin/staff/create.blade.php b/resources/views/admin/staff/create.blade.php index 1eb7fe0..a91e221 100644 --- a/resources/views/admin/staff/create.blade.php +++ b/resources/views/admin/staff/create.blade.php @@ -849,8 +849,7 @@ name="username" value="{{ old('username') }}" class="form-input" - placeholder="Leave blank to generate automatically" - required> + placeholder="Leave blank to generate automatically">
ℹ️ If left blank, username will be generated from employee ID