HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
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
        ]);
    }
}