@extends('layouts.app')
@section('title', 'Element 2: Recruitment and Management of Shore-Based Personnel')
@section('content')
Element 2: Recruitment and Management of Shore-Based Personnel
Competency requirements, recruitment, training records, performance monitoring, and secure personnel management
Personnel Management Dashboard
{{ $personnel->count() }}
Total shore personnel
@php
$activePersonnel = $personnel->where('status', 'active')->count();
@endphp
{{ $activePersonnel }}
Active personnel
{{ $competencyRequirements->count() }}
Competency requirements
{{ $recruitmentPipeline->where('status', 'open')->count() }}
Open positions
@php
$totalTraining = $personnel->flatMap(fn($p) => $p->trainingRecords)->count();
@endphp
{{ $totalTraining }}
Training records
{{ $performanceReviews->where('status', 'pending')->count() }}
Reviews pending
@php
$reviewsDue = $competencyReviews->where('next_review_date', '<=', now()->addDays(30))->count();
@endphp
{{ $reviewsDue }}
Reviews due (30 days)
{{ $personnel->count() }}
Securely stored records
Secure Personnel Records
Personnel Data Security Protocols
-
All personnel records encrypted at rest and in transit
-
Role-based access control for sensitive information
-
Complete audit trail of all record access and modifications
-
Secure backup and disaster recovery procedures in place
Compliance: All personnel data handling complies with data protection regulations and maritime HR standards
Periodic Competency Reviews
Competency reviews are scheduled periodically (annually or bi-annually) for all shore personnel
@php
$upcomingReviews = $competencyReviews->filter(function($r) {
return $r->next_review_date && $r->next_review_date->lte(now()->addDays(60)) && $r->next_review_date->gte(now());
})->sortBy('next_review_date');
@endphp
@if($upcomingReviews->count() > 0)
| Personnel |
Position |
Last Review |
Next Review |
Status |
@foreach($upcomingReviews as $review)
| {{ $review->personnel->name }} |
{{ $review->personnel->position }} |
{{ $review->last_review_date ? $review->last_review_date->format('M d, Y') : 'N/A' }} |
{{ $review->next_review_date->format('M d, Y') }} |
@if($review->next_review_date->lte(now()->addDays(7)))
Urgent
@elseif($review->next_review_date->lte(now()->addDays(30)))
Due Soon
@else
Scheduled
@endif
|
@endforeach
@else
No competency reviews due in the next 60 days
@endif
Competency Requirements
@if($competencyRequirements->count() > 0)
| Position |
Competency |
Level Required |
Mandatory |
Description |
@foreach($competencyRequirements as $requirement)
| {{ $requirement->position }} |
{{ $requirement->competency_name }} |
{{ ucfirst($requirement->level_required) }} |
@if($requirement->is_mandatory)
Required
@else
Optional
@endif
|
{{ $requirement->description ?? 'N/A' }} |
@endforeach
@else
No competency requirements defined yet
@endif
Recruitment Pipeline
@php
$open = $recruitmentPipeline->where('status', 'open')->count();
$screening = $recruitmentPipeline->where('status', 'screening')->count();
$interviewing = $recruitmentPipeline->where('status', 'interviewing')->count();
$offered = $recruitmentPipeline->where('status', 'offered')->count();
$closed = $recruitmentPipeline->where('status', 'closed')->count();
@endphp
{{ $screening }}
Screening
{{ $interviewing }}
Interviewing
@if($recruitmentPipeline->count() > 0)
| Position |
Department |
Required Competencies |
Posted Date |
Candidates |
Status |
@foreach($recruitmentPipeline->where('status', '!=', 'closed') as $position)
| {{ $position->position_title }} |
{{ $position->department }} |
{{ $position->required_competencies }} |
{{ $position->posted_date->format('M d, Y') }} |
{{ $position->candidates_count ?? 0 }} |
{{ ucfirst($position->status) }}
|
@endforeach
@else
No active recruitment positions
@endif
Training & Competency Records
@php
$allTraining = $personnel->flatMap(fn($p) => $p->trainingRecords);
$certifications = $allTraining->where('training_type', 'Certification')->count();
$courses = $allTraining->where('training_type', 'Course')->count();
$workshops = $allTraining->where('training_type', 'Workshop')->count();
$avgTrainingPerPerson = $personnel->count() > 0 ? round($allTraining->count() / $personnel->count(), 1) : 0;
@endphp
{{ $certifications }}
Certifications
{{ $workshops }}
Workshops
{{ $avgTrainingPerPerson }}
Avg. per Person
@if($allTraining->count() > 0)
| Personnel |
Training Name |
Type |
Completion Date |
Expiry |
Status |
@foreach($allTraining->sortByDesc('completion_date')->take(10) as $training)
| {{ $training->personnel->name }} |
{{ $training->training_name }} |
{{ $training->training_type }} |
{{ $training->completion_date->format('M d, Y') }} |
{{ $training->expiry_date ? $training->expiry_date->format('M d, Y') : 'N/A' }} |
@if($training->expiry_date && $training->expiry_date->lt(now()))
Expired
@elseif($training->expiry_date && $training->expiry_date->lte(now()->addDays(30)))
Expiring Soon
@else
Valid
@endif
|
@endforeach
@else
No training records yet
@endif
Performance & Development Monitoring
@php
$excellent = $performanceReviews->where('rating', 'excellent')->count();
$good = $performanceReviews->where('rating', 'good')->count();
$satisfactory = $performanceReviews->where('rating', 'satisfactory')->count();
$needsImprovement = $performanceReviews->where('rating', 'needs_improvement')->count();
@endphp
{{ $excellent }}
Excellent
{{ $satisfactory }}
Satisfactory
{{ $needsImprovement }}
Needs Improvement
@if($performanceReviews->count() > 0)
| Personnel |
Review Period |
Rating |
Reviewer |
Development Plan |
Status |
@foreach($performanceReviews->sortByDesc('review_date') as $review)
| {{ $review->personnel->name }} |
{{ $review->review_period }} |
{{ ucfirst(str_replace('_', ' ', $review->rating)) }}
|
{{ $review->reviewer }} |
{{ $review->has_development_plan ? 'Yes' : 'No' }} |
{{ ucfirst($review->status) }}
|
@endforeach
@else
No performance reviews yet
@endif
Personnel Profiles
@if($personnel->count() > 0)
@foreach($personnel as $person)
{{ ucfirst(str_replace('_', ' ', $person->status)) }}
{{ $person->name }}
{{ $person->position }}
{{ $person->department }}
{{ $person->trainingRecords->count() }} Training Records
Hired: {{ $person->hire_date->format('M Y') }}
@endforeach
@else
No personnel found
@endif
Define Competency Requirement
@endsection