feat: add loa requests
This commit adds a feature that allows users to request periods of inactivity from their managers. This is effectively known as a leave of absence. The commit also introduces new permissions and migrations, therefore, you'll need to adapt your database according to these changes.
This commit is contained in:
170
resources/views/dashboard/absences/view.blade.php
Executable file
170
resources/views/dashboard/absences/view.blade.php
Executable file
@@ -0,0 +1,170 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', config('app.name') . ' | ' . __('Member absence review'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>{{__('Human Resources')}} / {{ __('Staff') }} / {{__('View absence')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@section('js')
|
||||
|
||||
<x-global-errors></x-global-errors>
|
||||
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col">
|
||||
@csrf
|
||||
|
||||
<div class="card card-secondary">
|
||||
|
||||
<div class="card-header">
|
||||
<h4 class="card-title">{{ __('Leave of absence') }}</h4>
|
||||
<div class="card-tools">
|
||||
|
||||
@can('admin.manageAbsences')
|
||||
@if (Auth::user()->is($absence->requester))
|
||||
<span rel="spanTxtTooltip" class="badge-warning badge" data-toggle="tooltip" data-placement="top" title="{{ __('While you have the necessary permissions to manage all absence requests, you may not approve nor deny your own requests, however, you may still delete them.') }}"><i class="fas fa-exclamation-triangle"></i> {{ __('Your request') }}</span>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
@switch($absence->status)
|
||||
@case('Pending')
|
||||
<span rel="spanTxtTooltip" data-toggle="tooltip" data-placement="top" title="{{ __('Waiting review by an admin') }}" class="badge badge-primary"><i class="fas fa-hourglass"></i> {{ $absence->status }}</span>
|
||||
@break
|
||||
@case('Approved')
|
||||
<span rel="spanTxtTooltip" data-toggle="tooltip" data-placement="top" title="{{ __('Approved by an admin') }}" class="badge badge-success"><i class="fas fa-clipboard-check"></i> {{ $absence->status }}</span>
|
||||
@break
|
||||
@case('Declined')
|
||||
@case('Cancelled')
|
||||
<span rel="spanTxtTooltip" data-toggle="tooltip" data-placement="top" title="{{ __('Declined by an admin or withdrawn by the requester') }}" class="badge badge-danger"><i class="fas fa-ban"></i> {{ $absence->status }}</span>
|
||||
@break
|
||||
@case('Ended')
|
||||
<span rel="spanTxtTooltip" data-toggle="tooltip" data-placement="top" title="{{ __('This request reached its predicted end date') }}" class="badge badge-warning"><i class="fas fa-calendar-check"></i> {{ $absence->status }}</span>
|
||||
@break
|
||||
@default
|
||||
<span class="badge badge-danger"><i class="fas fa-bolt"></i> {{ __('Unavailable!') }}</span>
|
||||
|
||||
@endswitch
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<h3><i class="fas fa-info-circle"></i> {{ __('Request details') }}</h3>
|
||||
<hr>
|
||||
|
||||
<label for="submittedDate"><i class="fas fa-paper-plane"></i> {{ __('Submitted at') }}</label>
|
||||
<p id="submittedDate">{{ \Carbon\Carbon::parse($absence->created_at)->ago() }}</p>
|
||||
|
||||
<label for="timeframe"><i class="fas fa-calendar-alt"></i> {{__('Requested time period')}}</label>
|
||||
<p id="timeframe">{{ $absence->start }} — {{ $absence->predicted_end }} {{ __('(:totalDays days)', ['totalDays' => $totalDays]) }}</p>
|
||||
|
||||
<label for="available"><i class="fas fa-user-cog"></i> {{ __('Available to chat?') }}</label>
|
||||
@if($absence->available_assist == "1")
|
||||
<span id="available" class="badge badge-success"><i class="fas fa-check"></i> {{ __('Available') }}</span>
|
||||
@else
|
||||
<span id="available" class="badge badge-warning"><i class="fas fa-user-slash"></i> {{ __('Not available') }}</span>
|
||||
@endif
|
||||
|
||||
<p class="text-muted text-sm"><i class="fas fa-info-circle"></i> {{ __('This indicates whether the requesting user will be able to respond to emails, DMs, etc, during their absence.') }}</p>
|
||||
|
||||
<label for="reason"><i class="fas fa-clipboard"></i> {{ __('Request reason') }}</label>
|
||||
<input type="text" class="form-control" disabled value="{{ $absence->reason }}">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card-footer text-center">
|
||||
@can('admin.manageAbsences')
|
||||
|
||||
@if(!Auth::user()->is($absence->requester) && $absence->isActionable())
|
||||
<form class="d-inline" name="approveRequestFrm" method="post" action="{{ route('approveAbsence', ['absence' => $absence->id]) }}">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
<x-button id="approveRequestBtn" size="sm" type="submit" color="success" icon="fas fa-check-double">
|
||||
{{ __('Approve request') }}
|
||||
</x-button>
|
||||
</form>
|
||||
|
||||
<form class="d-inline" name="denyRequestFrm" method="post" action="{{ route('declineAbsence', ['absence' => $absence->id]) }}">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
<x-button id="denyRequestBtn" size="sm" type="submit" color="danger" icon="fas fa-ban">
|
||||
{{ __('Deny request') }}
|
||||
</x-button>
|
||||
</form>
|
||||
|
||||
@endif
|
||||
|
||||
<form class="d-inline" name="deleteAbsence" method="post" action="{{ route('absences.destroy', ['absence' => $absence->id]) }}">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<x-button id="deleteRequestBtn" size="sm" type="submit" color="danger" icon="fas fa-trash">
|
||||
{{ __('Delete request') }}
|
||||
</x-button>
|
||||
</form>
|
||||
@endcan
|
||||
|
||||
@if (Auth::user()->is($absence->requester) && $absence->isActionable(true))
|
||||
@can('reviewer.withdrawAbsence')
|
||||
<form class="d-inline" name="cancelRequest" method="post" action="{{ route('cancelAbsence', ['absence' => $absence->id]) }}">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
<x-button id="retractRequestBtn" size="sm" type="submit" color="warning" icon="fas fa-undo">
|
||||
{{ __('Retract request') }}
|
||||
</x-button>
|
||||
</form>
|
||||
@endcan
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col">
|
||||
|
||||
<div class="card card-widget widget-user">
|
||||
<div class="widget-user-header bg-secondary">
|
||||
<h3 class="widget-user-username">{{ $absence->requester->name }} </h3>
|
||||
<h5 class="widget-user-desc">{{ $absence->requester->email }}</h5>
|
||||
</div>
|
||||
<div class="widget-user-image">
|
||||
@if($absence->requester->profile->avatarPreference == 'gravatar')
|
||||
<img class="profile-user-img elevation-2 img-fluid img-circle" src="https://gravatar.com/avatar/{{md5($absence->requester->email)}}" alt="User profile picture">
|
||||
@else
|
||||
<img class="profile-user-img elevation-2 img-fluid img-circle" src="https://crafatar.com/avatars/{{$absence->requester->uuid}}" alt="User profile picture">
|
||||
@endif
|
||||
|
||||
|
||||
</div>
|
||||
<div class="card-footer text-center">
|
||||
@foreach ($absence->requester->roles as $role)
|
||||
<span class="badge badge-secondary mr-2">{{ucfirst($role->name)}}</span>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="row mt-3">
|
||||
<div class="col text-center">
|
||||
<x-button type="submit" id="backToAbsences" color="secondary" icon="fas fa-angle-double-left" link="{{ route('absences.index') }}">
|
||||
{{ __('Back to Absence list') }}
|
||||
</x-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@stop
|
||||
|
||||
@section('footer')
|
||||
@include('breadcrumbs.dashboard.footer')
|
||||
@stop
|
Reference in New Issue
Block a user