Revert "merge 1"

This reverts commit 0bc6c20a6d.
This commit is contained in:
2022-10-24 01:03:43 +01:00
parent 0bc6c20a6d
commit 0c463d1f10
166 changed files with 1849 additions and 4266 deletions

View File

@@ -6,9 +6,7 @@ use App\Absence;
use App\Exceptions\AbsenceNotActionableException;
use App\Http\Requests\StoreAbsenceRequest;
use App\Http\Requests\UpdateAbsenceRequest;
use App\Services\AbsenceService;
use App\User;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Carbon;
@@ -17,12 +15,28 @@ use Illuminate\Support\Facades\Auth;
class AbsenceController extends Controller
{
private AbsenceService $absenceService;
/**
* Determines whether someone already has an active leave of absence request
*
* @param User $user The user to check
* @return bool Their status
*/
private function hasActiveRequest(Authenticatable $user): bool {
public function __construct (AbsenceService $absenceService) {
$absences = Absence::where('requesterID', $user->id)->get();
$this->absenceService = $absenceService;
foreach ($absences as $absence) {
// Or we could adjust the query (using a model scope) to only return valid absences;
// If there are any, refuse to store more, but this approach also works
// A model scope that only returns cancelled, declined and ended absences could also be implemented for future use
if (in_array($absence->getRawOriginal('status'), ['PENDING', 'APPROVED']))
{
return true;
}
}
return false;
}
/**
@@ -43,7 +57,7 @@ class AbsenceController extends Controller
* Display a listing of absences belonging to the current user.
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
* @throws AuthorizationException
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function showUserAbsences()
{
@@ -62,14 +76,14 @@ class AbsenceController extends Controller
/**
* Show the form for creating a new absence request.
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
* @return \Illuminate\Http\Response
*/
public function create()
{
$this->authorize('create', Absence::class);
return view('dashboard.absences.create')
->with('activeRequest', $this->absenceService->hasActiveRequest(Auth::user()));
->with('activeRequest', $this->hasActiveRequest(Auth::user()));
}
/**
@@ -82,13 +96,21 @@ class AbsenceController extends Controller
{
$this->authorize('create', Absence::class);
if ($this->absenceService->hasActiveRequest(Auth::user())) {
if ($this->hasActiveRequest(Auth::user())) {
return redirect()
->back()
->with('error', __('You already have an active request. Cancel it or let it expire first.'));
}
$absence = $this->absenceService->createAbsence(Auth::user(), $request);
$absence = Absence::create([
'requesterID' => Auth::user()->id,
'start' => $request->start_date,
'predicted_end' => $request->predicted_end,
'available_assist' => $request->available_assist == "on",
'reason' => $request->reason,
'status' => 'PENDING',
]);
return redirect()
->to(route('absences.show', ['absence' => $absence->id]))
@@ -98,8 +120,7 @@ class AbsenceController extends Controller
/**
* Display the specified absence request.
*
* @param \App\Absence $absence
* @throws AuthorizationException
* @param \App\Absence $absence
*/
public function show(Absence $absence)
{
@@ -117,7 +138,7 @@ class AbsenceController extends Controller
*
* @param Absence $absence
* @return RedirectResponse
* @throws AuthorizationException
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function approveAbsence(Absence $absence): RedirectResponse
{
@@ -125,7 +146,7 @@ class AbsenceController extends Controller
try
{
$this->absenceService->approveAbsence($absence);
$absence->setApproved();
}
catch (AbsenceNotActionableException $notActionableException)
{
@@ -145,7 +166,7 @@ class AbsenceController extends Controller
*
* @param Absence $absence
* @return RedirectResponse
* @throws AuthorizationException
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function declineAbsence(Absence $absence): RedirectResponse
{
@@ -153,7 +174,7 @@ class AbsenceController extends Controller
try
{
$this->absenceService->declineAbsence($absence);
$absence->setDeclined();
} catch (AbsenceNotActionableException $notActionableException)
{
return redirect()
@@ -172,7 +193,7 @@ class AbsenceController extends Controller
*
* @param Absence $absence
* @return \Illuminate\Http\RedirectResponse
* @throws AuthorizationException
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function cancelAbsence(Absence $absence): \Illuminate\Http\RedirectResponse
{
@@ -180,7 +201,7 @@ class AbsenceController extends Controller
try
{
$this->absenceService->cancelAbsence($absence);
$absence->setCancelled();
}
catch (AbsenceNotActionableException $notActionableException)
{
@@ -204,7 +225,7 @@ class AbsenceController extends Controller
{
$this->authorize('delete', $absence);
if ($this->absenceService->removeAbsence($absence)) {
if ($absence->delete()) {
return redirect()
->to(route('absences.index'))
->with('success', __('Absence request deleted.'));