diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index fc8a88c..e92ef4d 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -4,6 +4,9 @@ namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\AuthenticatesUsers; +use App\Mail\LoginOtpMail; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Facades\Mail; class LoginController extends Controller { @@ -37,4 +40,36 @@ class LoginController extends Controller $this->middleware('guest')->except('logout'); $this->middleware('auth')->only('logout'); } + public function authenticate(Request $request) + { + $request->validate([ + 'email' => 'required|email', + 'password' => 'required', + ]); + + $staff = StaffMember::where('email', $request->email)->where('status', 'ACTIVE')->first(); + + // 1. Check if staff exists and password is correct + if ($staff && Hash::check($request->password, $staff->password)) { + + // 2. Generate 6-digit OTP + $otp = rand(100000, 999999); + + // 3. Save to database with 10-minute expiration + $staff->update([ + 'otp_code' => $otp, + 'otp_expires_at' => now()->addMinutes(10) + ]); + + // 4. Send Email + Mail::to($staff->email)->send(new LoginOtpMail($otp)); + + // 5. Store staff ID in session + session(['otp_staff_id' => $staff->id]); + + return redirect()->route('otp.verify'); + } + + return back()->withErrors(['email' => 'Invalid credentials or inactive account.']); + } } diff --git a/app/Http/Controllers/OfficeLocationController.php b/app/Http/Controllers/OfficeLocationController.php new file mode 100644 index 0000000..7ecdb39 --- /dev/null +++ b/app/Http/Controllers/OfficeLocationController.php @@ -0,0 +1,118 @@ +orderBy('created_at', 'desc') + ->paginate(9); + + $staffMembers = StaffMember::where('status', 'ACTIVE')->orderBy('name')->get(); + + $countries = DB::table('countries')->orderBy('en_short_name', 'asc')->get(); + + return view('offices.index', compact('locations', 'staffMembers', 'countries')); + } + + public function store(Request $request) + { + $validated = $request->validate([ + 'country' => 'required|string|max:191', + 'city' => 'required|string|max:191', + 'physical_address' => 'nullable|string', + 'postal_address' => 'nullable|string|max:191', + 'zip_code' => 'nullable|string|max:15', + 'office_phone' => 'nullable|string|max:20', + 'country_manager_id' => 'nullable|integer', + ]); + + OfficeLocation::create($validated); + + return response()->json(['success' => true, 'message' => 'Office location added successfully!']); + } + + public function update(Request $request, $id) + { + $location = OfficeLocation::findOrFail($id); + + $validated = $request->validate([ + 'country' => 'required|string|max:191', + 'city' => 'required|string|max:191', + 'physical_address' => 'nullable|string', + 'postal_address' => 'nullable|string|max:191', + 'zip_code' => 'nullable|string|max:15', + 'office_phone' => 'nullable|string|max:20', + 'country_manager_id' => 'nullable|integer', + ]); + + $location->update($validated); + + return response()->json(['success' => true, 'message' => 'Office location updated successfully!']); + } + + public function destroy($id) + { + OfficeLocation::findOrFail($id)->delete(); + return response()->json(['success' => true, 'message' => 'Office location removed.']); + } + + // --- ADD THESE METHODS TO OfficeLocationController.php --- + + public function showDocuments($id) + { + $location = OfficeLocation::with('documents')->findOrFail($id); + return view('offices.documents', compact('location')); + } + + public function storeDocument(Request $request, $id) + { + $location = OfficeLocation::findOrFail($id); + + $validated = $request->validate([ + 'name' => 'required|string|max:191', + 'file' => 'required|file|mimes:pdf,jpg,jpeg,png,doc,docx|max:10240', + 'validity_period' => 'required|string', + // Require a date UNLESS the period is 'On Demand' + 'next_renewal_date' => 'nullable|required_unless:validity_period,On Demand|date' + ]); + + $file = $request->file('file'); + $filename = time() . '_' . preg_replace('/\s+/', '_', $file->getClientOriginalName()); + $filePath = $file->storeAs("office_documents/{$location->id}", $filename, 'public'); + + // Get current staff ID + $staff = \App\Models\StaffMember::where('email', auth()->user()->email)->first(); + + \App\Models\OfficeLocationDocument::create([ + 'office_location_id' => $location->id, + 'name' => $request->name, + 'file_path' => $filePath, + 'file_extension' => $file->getClientOriginalExtension(), + 'validity_period' => $request->validity_period, + 'next_renewal_date' => $request->validity_period === 'On Demand' ? null : $request->next_renewal_date, + 'uploaded_by' => $staff ? $staff->id : null, + ]); + + return response()->json(['success' => true, 'message' => 'Document archived successfully!']); + } + + public function destroyDocument($docId) + { + $document = \App\Models\OfficeLocationDocument::findOrFail($docId); + + if ($document->file_path && \Illuminate\Support\Facades\Storage::disk('public')->exists($document->file_path)) { + \Illuminate\Support\Facades\Storage::disk('public')->delete($document->file_path); + } + + $document->delete(); + return response()->json(['success' => true, 'message' => 'Document deleted.']); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/OtpController.php b/app/Http/Controllers/OtpController.php new file mode 100644 index 0000000..4bc1589 --- /dev/null +++ b/app/Http/Controllers/OtpController.php @@ -0,0 +1,69 @@ +has('otp_staff_id')) { + return redirect()->route('login'); + } + return view('auth.otp-verify'); + } + + public function verify(Request $request) + { + $request->validate(['otp' => 'required|numeric|digits:6']); + + $staff = StaffMember::findOrFail(session('otp_staff_id')); + + // Check if OTP matches and is not expired + if ($staff->otp_code == $request->otp && now()->lessThanOrEqualTo($staff->otp_expires_at)) { + + // Clear the OTP data + $staff->update([ + 'otp_code' => null, + 'otp_expires_at' => null + ]); + + // Log the staff member in + // NOTE: If using a specific guard, use Auth::guard('staff')->login($staff); + Auth::login($staff); + + // Clear the temp session + session()->forget('otp_staff_id'); + + return redirect()->intended('/'); + } + + return back()->withErrors(['otp' => 'The verification code is invalid or has expired.']); + } + public function resend(Request $request) + { + // Ensure the session still exists + if (!session()->has('otp_staff_id')) { + return redirect()->route('login')->withErrors(['email' => 'Session expired. Please log in again.']); + } + + $staff = StaffMember::findOrFail(session('otp_staff_id')); + + // Generate a new 6-digit OTP + $otp = rand(100000, 999999); + + // Update database with new code and fresh 10-minute expiration + $staff->update([ + 'otp_code' => $otp, + 'otp_expires_at' => now()->addMinutes(10) + ]); + + // Send the new code via email + Mail::to($staff->email)->send(new LoginOtpMail($otp)); + + return back()->with('success', 'A new verification code has been sent to your email.'); + } +} diff --git a/app/Mail/LoginOtpMail.php b/app/Mail/LoginOtpMail.php new file mode 100644 index 0000000..e58e0cc --- /dev/null +++ b/app/Mail/LoginOtpMail.php @@ -0,0 +1,25 @@ +otp = $otp; + } + + public function build() + { + return $this->subject('Your Login Verification Code') + ->markdown('emails.auth.otp'); + } +} \ No newline at end of file diff --git a/app/Models/OfficeLocation.php b/app/Models/OfficeLocation.php index 62f240d..d2b25f6 100644 --- a/app/Models/OfficeLocation.php +++ b/app/Models/OfficeLocation.php @@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Model; class OfficeLocation extends Model { protected $guarded = array('id'); + protected $table = 'office_locations'; public function created_by_info(){ return $this->hasOne('App\Models\StaffMember', 'id', 'user_id'); @@ -15,4 +16,17 @@ class OfficeLocation extends Model // return $this->hasOne('App\Models\StaffMember', 'id', 'country_manager_id'); return $this->hasOne('App\Models\StaffMember', 'id', 'country_manager_id'); } + + + + public function manager() + { + return $this->belongsTo(StaffMember::class, 'country_manager_id'); + } + + + public function documents() + { + return $this->hasMany(OfficeLocationDocument::class, 'office_location_id'); + } } diff --git a/app/Models/OfficeLocationDocument.php b/app/Models/OfficeLocationDocument.php new file mode 100644 index 0000000..465d72c --- /dev/null +++ b/app/Models/OfficeLocationDocument.php @@ -0,0 +1,16 @@ +belongsTo(OfficeLocation::class, 'office_location_id'); + } +} \ No newline at end of file diff --git a/resources/views/auth/otp-verify.blade.php b/resources/views/auth/otp-verify.blade.php new file mode 100644 index 0000000..d84b5f8 --- /dev/null +++ b/resources/views/auth/otp-verify.blade.php @@ -0,0 +1,48 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
+ +

Two-Step Verification

+

We've sent a 6-digit code to your email. Please enter it below to securely log in.

+ + + @if (session('success')) + + @endif + + +
+ @csrf +
+ + @error('otp') +
{{ $message }}
+ @enderror +
+ +
+ + +
+

Didn't receive the code?

+
+ @csrf + +
+
+ +
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/emails/auth/otp.blade.php b/resources/views/emails/auth/otp.blade.php new file mode 100644 index 0000000..1870737 --- /dev/null +++ b/resources/views/emails/auth/otp.blade.php @@ -0,0 +1,10 @@ +@component('mail::message') +# Verification Code + +Your one-time login code is: **{{ $otp }}** + +This code will expire in 10 minutes. Do not share this with anyone. + +Thanks,
+{{ config('app.name') }} +@endcomponent \ No newline at end of file diff --git a/resources/views/layouts/partials/sidebar.blade.php b/resources/views/layouts/partials/sidebar.blade.php index 0426b2f..1fb4813 100644 --- a/resources/views/layouts/partials/sidebar.blade.php +++ b/resources/views/layouts/partials/sidebar.blade.php @@ -14,7 +14,7 @@ - Dashboard + Dashboard @@ -39,6 +39,9 @@ + + Office Locations + Staff Directory diff --git a/resources/views/offices/documents.blade.php b/resources/views/offices/documents.blade.php new file mode 100644 index 0000000..694b0ea --- /dev/null +++ b/resources/views/offices/documents.blade.php @@ -0,0 +1,209 @@ +@extends('layouts.masterbeta') + +@section('title', 'Click ERP - Office Documents') + +@section('breadcrumbs') + + + Offices + + {{ $location->city }} Documents +@endsection + +@section('content') +
+
+

{{ $location->city }}, {{ $location->country }}

+

Manage compliance files, leases, and local registrations.

+
+ +
+ +
+
+ + + + + + + + + + + + @forelse($location->documents as $doc) + + + + + + + + @empty + + + + @endforelse + +
Document NameFormatValidity PeriodNext RenewalActions
{{ $doc->name }}{{ $doc->file_extension }} + {{ $doc->validity_period }} + + @if($doc->validity_period === 'On Demand') + N/A + @else + @php + // Highlight if renewal is approaching within 30 days or past due + $isUrgent = $doc->next_renewal_date && \Carbon\Carbon::parse($doc->next_renewal_date)->isPast() || \Carbon\Carbon::parse($doc->next_renewal_date)->diffInDays(now()) <= 30; + @endphp + + @if($isUrgent) @endif + {{ $doc->next_renewal_date ? \Carbon\Carbon::parse($doc->next_renewal_date)->format('M d, Y') : 'Not Set' }} + + @endif + + + + + +
No regional documents uploaded yet.
+
+
+@endsection + +@push('modals') + + +@endpush + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/offices/index.blade.php b/resources/views/offices/index.blade.php new file mode 100644 index 0000000..278ef61 --- /dev/null +++ b/resources/views/offices/index.blade.php @@ -0,0 +1,233 @@ +@extends('layouts.masterbeta') + +@section('title', 'Click ERP - Office Locations') +@push('styles') + + + +@endpush + +@section('breadcrumbs') + + + Office Locations +@endsection + +@section('content') +
+
+

Global Offices

+

Manage regional branches and compliance documents.

+
+ +
+ +
+ @forelse($locations as $office) +
+
+
+
+
+ {{ $office->city ?? 'N/A' }}, {{ $office->country }} +
+ +
+ +
+
{{ $office->physical_address ?? 'Address not set' }}
+
{{ $office->office_phone ?? 'Phone not set' }}
+
+ +
+
COUNTRY MANAGER
+
+ + {{ $office->manager->name ?? 'Not Assigned' }} +
+
+ + + +
+
+
+ @empty +
+
No office locations configured yet.
+
+ @endforelse +
+
+ {{ $locations->links('pagination::bootstrap-5') }} +
+@endsection + +@push('modals') + + +@endpush + +@push('scripts') + + +@endpush \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 5f9758e..b24e10e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -9,8 +9,12 @@ Route::get('test', function () { //bd8f75cc-0f63-4707-9a2e-361800a0d94c -Auth::routes(); - +Auth::routes([ + 'register' => false, +]); +Route::get('/verify-otp', [App\Http\Controllers\OtpController::class, 'show'])->name('otp.verify'); +Route::post('/verify-otp', [App\Http\Controllers\OtpController::class, 'verify'])->name('otp.verify.post'); +Route::post('/resend-otp', [App\Http\Controllers\OtpController::class, 'resend'])->name('otp.resend'); Route::middleware(['auth'])->group(function () { @@ -78,6 +82,17 @@ Route::middleware(['auth'])->group(function () { Route::post('/store', [App\Http\Controllers\DocumentsController::class, 'store'])->name('store'); Route::delete('/{id}', [App\Http\Controllers\DocumentsController::class, 'destroy'])->name('destroy'); }); + + Route::prefix('offices')->name('offices.')->group(function () { + Route::get('/', [App\Http\Controllers\OfficeLocationController::class, 'index'])->name('index'); + Route::post('/store', [App\Http\Controllers\OfficeLocationController::class, 'store'])->name('store'); + Route::put('/{id}', [App\Http\Controllers\OfficeLocationController::class, 'update'])->name('update'); + Route::delete('/{id}', [App\Http\Controllers\OfficeLocationController::class, 'destroy'])->name('destroy'); + + Route::get('/{id}/documents', [App\Http\Controllers\OfficeLocationController::class, 'showDocuments'])->name('documents'); + Route::post('/{id}/documents/store', [App\Http\Controllers\OfficeLocationController::class, 'storeDocument'])->name('documents.store'); + Route::delete('/documents/delete/{docId}', [App\Http\Controllers\OfficeLocationController::class, 'destroyDocument'])->name('documents.destroy'); + }); Route::get('/api/services', [App\Http\Controllers\ServicesController::class, 'getServicesJson']); Route::get('/api/countries', [App\Http\Controllers\HelperController::class, 'getCountriesJson']); diff --git a/storage/laravel-2026-08-24.log b/storage/laravel-2026-08-24.log new file mode 100644 index 0000000..103adb0 --- /dev/null +++ b/storage/laravel-2026-08-24.log @@ -0,0 +1,140 @@ +[2026-08-24 09:18:26] production.ERROR: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'remember_token' in 'field list' (Connection: mysql, SQL: update `staff_members` set `remember_token` = QQb7JC5lgnQvtn3wWpARI3zfttnNknSRmwOIF9RmnR4vP55DarNxkcvvIHOR where `id` = 20) {"userId":20,"exception":"[object] (Illuminate\\Database\\QueryException(code: 42S22): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'remember_token' in 'field list' (Connection: mysql, SQL: update `staff_members` set `remember_token` = QQb7JC5lgnQvtn3wWpARI3zfttnNknSRmwOIF9RmnR4vP55DarNxkcvvIHOR where `id` = 20) at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php:825) +[stacktrace] +#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(779): Illuminate\\Database\\Connection->runQueryCallback('update `staff_m...', Array, Object(Closure)) +#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(584): Illuminate\\Database\\Connection->run('update `staff_m...', Array, Object(Closure)) +#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(536): Illuminate\\Database\\Connection->affectingStatement('update `staff_m...', Array) +#3 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3830): Illuminate\\Database\\Connection->update('update `staff_m...', Array) +#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1175): Illuminate\\Database\\Query\\Builder->update(Object(Illuminate\\Support\\Collection)) +#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1239): Illuminate\\Database\\Eloquent\\Builder->update(Array) +#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1156): Illuminate\\Database\\Eloquent\\Model->performUpdate(Object(Illuminate\\Database\\Eloquent\\Builder)) +#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php(101): Illuminate\\Database\\Eloquent\\Model->save() +#8 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(701): Illuminate\\Auth\\EloquentUserProvider->updateRememberToken(Object(App\\Models\\StaffMember), Object(SensitiveParameterValue)) +#9 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(591): Illuminate\\Auth\\SessionGuard->cycleRememberToken(Object(App\\Models\\StaffMember)) +#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(556): Illuminate\\Auth\\SessionGuard->ensureRememberTokenIsSet(Object(App\\Models\\StaffMember)) +#11 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(423): Illuminate\\Auth\\SessionGuard->login(Object(App\\Models\\StaffMember), true) +#12 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Timebox.php(34): Illuminate\\Auth\\SessionGuard->Illuminate\\Auth\\{closure}(Object(Illuminate\\Support\\Timebox)) +#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(412): Illuminate\\Support\\Timebox->call(Object(Closure), 200000) +#14 /var/www/html/vendor/laravel/ui/auth-backend/AuthenticatesUsers.php(86): Illuminate\\Auth\\SessionGuard->attempt(Array, true) +#15 /var/www/html/vendor/laravel/ui/auth-backend/AuthenticatesUsers.php(46): App\\Http\\Controllers\\Auth\\LoginController->attemptLogin(Object(Illuminate\\Http\\Request)) +#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\Auth\\LoginController->login(Object(Illuminate\\Http\\Request)) +#17 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\\Routing\\Controller->callAction('login', Array) +#18 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(266): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\Auth\\LoginController), 'login') +#19 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\\Routing\\Route->runController() +#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(808): Illuminate\\Routing\\Route->run() +#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) +#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/RedirectIfAuthenticated.php(35): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Auth\\Middleware\\RedirectIfAuthenticated->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(51): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(88): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#28 /var/www/html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#30 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest(Object(Illuminate\\Http\\Request), Object(Illuminate\\Session\\Store), Object(Closure)) +#32 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#34 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#35 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(75): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#36 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#37 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#38 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(807): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) +#39 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(786): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request)) +#40 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(750): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route)) +#41 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(739): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request)) +#42 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(201): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request)) +#43 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request)) +#44 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#45 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#46 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#47 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#48 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#49 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#50 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#51 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#52 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#53 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#54 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#55 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#56 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#57 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#58 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#59 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#60 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#61 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) +#62 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(145): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request)) +#63 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1220): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request)) +#64 /var/www/html/index.php(17): Illuminate\\Foundation\\Application->handleRequest(Object(Illuminate\\Http\\Request)) +#65 {main} + +[previous exception] [object] (PDOException(code: 42S22): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'remember_token' in 'field list' at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php:592) +[stacktrace] +#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(592): PDO->prepare('update `staff_m...') +#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(812): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}('update `staff_m...', Array) +#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(779): Illuminate\\Database\\Connection->runQueryCallback('update `staff_m...', Array, Object(Closure)) +#3 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(584): Illuminate\\Database\\Connection->run('update `staff_m...', Array, Object(Closure)) +#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(536): Illuminate\\Database\\Connection->affectingStatement('update `staff_m...', Array) +#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3830): Illuminate\\Database\\Connection->update('update `staff_m...', Array) +#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1175): Illuminate\\Database\\Query\\Builder->update(Object(Illuminate\\Support\\Collection)) +#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1239): Illuminate\\Database\\Eloquent\\Builder->update(Array) +#8 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1156): Illuminate\\Database\\Eloquent\\Model->performUpdate(Object(Illuminate\\Database\\Eloquent\\Builder)) +#9 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php(101): Illuminate\\Database\\Eloquent\\Model->save() +#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(701): Illuminate\\Auth\\EloquentUserProvider->updateRememberToken(Object(App\\Models\\StaffMember), Object(SensitiveParameterValue)) +#11 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(591): Illuminate\\Auth\\SessionGuard->cycleRememberToken(Object(App\\Models\\StaffMember)) +#12 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(556): Illuminate\\Auth\\SessionGuard->ensureRememberTokenIsSet(Object(App\\Models\\StaffMember)) +#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(423): Illuminate\\Auth\\SessionGuard->login(Object(App\\Models\\StaffMember), true) +#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Timebox.php(34): Illuminate\\Auth\\SessionGuard->Illuminate\\Auth\\{closure}(Object(Illuminate\\Support\\Timebox)) +#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php(412): Illuminate\\Support\\Timebox->call(Object(Closure), 200000) +#16 /var/www/html/vendor/laravel/ui/auth-backend/AuthenticatesUsers.php(86): Illuminate\\Auth\\SessionGuard->attempt(Array, true) +#17 /var/www/html/vendor/laravel/ui/auth-backend/AuthenticatesUsers.php(46): App\\Http\\Controllers\\Auth\\LoginController->attemptLogin(Object(Illuminate\\Http\\Request)) +#18 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\Auth\\LoginController->login(Object(Illuminate\\Http\\Request)) +#19 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\\Routing\\Controller->callAction('login', Array) +#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(266): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\Auth\\LoginController), 'login') +#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\\Routing\\Route->runController() +#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(808): Illuminate\\Routing\\Route->run() +#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) +#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/RedirectIfAuthenticated.php(35): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Auth\\Middleware\\RedirectIfAuthenticated->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(51): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#28 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(88): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#30 /var/www/html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#32 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest(Object(Illuminate\\Http\\Request), Object(Illuminate\\Session\\Store), Object(Closure)) +#34 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#35 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#36 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#37 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(75): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#38 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#39 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#40 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(807): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) +#41 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(786): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request)) +#42 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(750): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route)) +#43 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(739): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request)) +#44 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(201): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request)) +#45 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request)) +#46 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#47 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#48 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#49 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#50 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#51 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#52 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#53 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#54 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#55 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#56 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#57 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#58 /var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#59 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#60 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#61 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks->handle(Object(Illuminate\\Http\\Request), Object(Closure)) +#62 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) +#63 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) +#64 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(145): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request)) +#65 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(1220): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request)) +#66 /var/www/html/index.php(17): Illuminate\\Foundation\\Application->handleRequest(Object(Illuminate\\Http\\Request)) +#67 {main} +"}