File: D:/HostingSpaces/MdnDirecteur/hours.komma.cloud/app/Komma/Absences/AbsenceController.php
<?php
namespace App\Komma\Absences;
use App\Http\Controllers\Controller;
use App\Komma\HoursService;
use Carbon\Carbon;
use DebugBar\DebugBar;
use App\Komma\Absences\Absence;
use App\Komma\Cache\CacheService;
use App\Komma\Messages\MessageController;
use App\Komma\Settings\AbsenceTypes\AbsenceType;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cache;
class AbsenceController extends Controller
{
protected $messageController;
protected $homeService;
protected $cacheService;
protected $absenceService;
/**
* AbsenceController constructor.
* @param HoursService $homeService
* @param MessageController $messageController
* @param CacheService $cacheService
* @param AbsenceService $absenceService
*/
public function __construct(HoursService $homeService, MessageController $messageController, CacheService $cacheService, AbsenceService $absenceService)
{
$this->middleware('auth');
$this->messageController = $messageController;
$this->homeService = $homeService;
$this->cacheService = $cacheService;
$this->absenceService = $absenceService;
}
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function index()
{
if (\Request::get('hour')) {
$id = \Request::get('hour');
return $this->show($id);
} else {
//get cache
$cache = Cache::has('createHour') ? (object)Cache::pull('createHour') : "";
//get id's
$absenceType = $this->cacheService->fillSelectBox("absenceType", $cache);
//get all data
$data = (object)$this->homeService->home();
//absence is active
$absence = true;
//return
return view('hours.index', compact('data', 'absence', 'absenceType'));
}
}
/**
* @param $absence
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function show($id)
{
//get all data
$data = (object)$this->homeService->home();
//absence is active
$absence = true;
//find chosen absence
$getAbsence = Absence::find($id);
//return
return view('hours.index', compact('data', 'absence', 'getAbsence'));
}
/**
* @param Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function store(Request $request)
{
$this->validate($request, [
'absenceType' => 'required',
'internHours' => 'required',
'internDescription' => 'required',
]);
$user = \DB::transaction(function () use ($request) {
$user = \Request::filled('user') ? \Request::get('user') : Auth::id();
//store
$absence = new Absence();
$absence = $this->absenceService->save($request, $absence);
//message + activity
$this->messageController->saved("Verlof / Overuren", $absence);
//return
return $user;
});
// added so the hours view retains the correct date, view and/or user (admin only)
session(['date' => $request->date, 'view' => $request->view, 'user' => $request->user]);
//return
return redirect('/hours');
}
/**
* @param Request $request
* @param $absence
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function update(Request $request, $absence)
{
$this->validate($request, [
'absenceType' => 'required',
'internHours' => 'required',
'internDescription' => 'required',
]);
//update absence
$getAbsence = Absence::find($absence);
$getAbsence = $this->absenceService->save($request, $getAbsence);
//message + activity
$value = "Verlof / overuren";
$this->messageController->changed($value, $getAbsence);
//get user id
$user = $request->filled('user') ? $request->get('user') : ( !empty($absence->user_id) ? $absence->user_id : Auth::id() );
//make redirect route
$redirectRoute = '/hours';
//if ref exist
if ($request->filled('ref')) {
//get ref
$ref = $request->get('ref');
$redirectRoute = str_replace('-', '/', $ref);
}
// added so the hours view retains the correct date, view and/or user (admin only)
session(['date' => $request->date, 'view' => $request->view, 'user' => $request->user]);
//redirect
return redirect($redirectRoute);
}
/**
* @param Request $request
* @return string
*/
public function destroy($absence, Request $request)
{
$getAbsence = Absence::find($absence);
$getAbsence->delete();
//message + activity
$value = "Verlof / overuren";
$this->messageController->destroyed($value, $getAbsence);
$redirectRoute = "/hours";
if ($request->filled('ref')) {
$redirectRoute = $request->get('ref');
}
// added so the hours view retains the correct date, view and/or user (admin only)
session(['date' => $request->deleteDate, 'view' => $request->view, 'user' => $request->user]);
return redirect($redirectRoute);
}
/**
* @param $absence
* @return \Illuminate\Http\RedirectResponse
*/
public function restore($absence)
{
\DB::transaction(function () use ($absence) {
Absence::withTrashed()->find($absence)->restore();
//message + activity
$subject = Absence::find($absence);
$value = "Verlof / overuren";
$this->messageController->recovered($value, $subject);
});
return back();
}
/**
* TODO: comments toevoegen
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function getAbsenceFormData(Request $request) {
$absence = Absence::where('id', $request->absence)->first();
return response()->json([
'absence_id' => $absence->id,
'absence_type' => $absence->absence_type_id,
'value' => $absence->value,
'description' => $absence->description
]);
}
}