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/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/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 0000000..0a36ff8 Binary files /dev/null and b/public/invoices/invoice-INV-2025-000016.pdf differ diff --git a/public/invoices/invoice-INV-2025-000030.pdf b/public/invoices/invoice-INV-2025-000030.pdf index 2f12f72..8eab796 100644 Binary files a/public/invoices/invoice-INV-2025-000030.pdf and b/public/invoices/invoice-INV-2025-000030.pdf differ 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') + + +
+ Monitor customer conversations with real-time updates +
Total Conversations
+Active Tickets
+Resolved Tickets
++ Customer conversations will appear here with real-time notifications. +
+