@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)
@foreach($upcomingReviews as $review) @endforeach
Personnel Position Last Review Next Review Status
{{ $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
@else

No competency reviews due in the next 60 days

@endif

Competency Requirements

@if($competencyRequirements->count() > 0)
@foreach($competencyRequirements as $requirement) @endforeach
Position Competency Level Required Mandatory Description
{{ $requirement->position }} {{ $requirement->competency_name }} {{ ucfirst($requirement->level_required) }} @if($requirement->is_mandatory) Required @else Optional @endif {{ $requirement->description ?? 'N/A' }}
@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

{{ $open }}

Open

{{ $screening }}

Screening

{{ $interviewing }}

Interviewing

{{ $offered }}

Offered

{{ $closed }}

Closed

@if($recruitmentPipeline->count() > 0)
@foreach($recruitmentPipeline->where('status', '!=', 'closed') as $position) @endforeach
Position Department Required Competencies Posted Date Candidates Status
{{ $position->position_title }} {{ $position->department }} {{ $position->required_competencies }} {{ $position->posted_date->format('M d, Y') }} {{ $position->candidates_count ?? 0 }} {{ ucfirst($position->status) }}
@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

{{ $courses }}

Courses

{{ $workshops }}

Workshops

{{ $avgTrainingPerPerson }}

Avg. per Person

@if($allTraining->count() > 0)
@foreach($allTraining->sortByDesc('completion_date')->take(10) as $training) @endforeach
Personnel Training Name Type Completion Date Expiry Status
{{ $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
@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

{{ $good }}

Good

{{ $satisfactory }}

Satisfactory

{{ $needsImprovement }}

Needs Improvement

@if($performanceReviews->count() > 0)
@foreach($performanceReviews->sortByDesc('review_date') as $review) @endforeach
Personnel Review Period Rating Reviewer Development Plan Status
{{ $review->personnel->name }} {{ $review->review_period }} {{ ucfirst(str_replace('_', ' ', $review->rating)) }} {{ $review->reviewer }} {{ $review->has_development_plan ? 'Yes' : 'No' }} {{ ucfirst($review->status) }}
@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
@endsection