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/SBogers10/hours.komma.pro/app/Komma/Search/SearchController.php
<?php

namespace App\Komma\Search;

use App\Http\Controllers\Controller;
use App\Komma\Companies\Company;
use App\Komma\Projects\Project;
use App\Komma\Projects\ProjectService;
use App\Komma\Settings\ProjectTemplates\ProjectTemplate;
use App\Komma\Settings\Subprojecttemplates\SubprojectTemplate;
use App\Komma\Subprojects\Subproject;
use App\Komma\Subprojects\SubprojectService;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class SearchController extends Controller
{
    /**
     * TODO: comments toevoegen
     * @var SearchService
     */
    private $searchService;
    private $projectService;
    private $subprojectService;

    public function __construct(SearchService $searchService, ProjectService $projectService, SubprojectService $subprojectService)
    {
        $this->middleware('auth');
        $this->searchService = $searchService;
        $this->projectService = $projectService;
        $this->subprojectService = $subprojectService;
    }


    /**
     * @param Request $request
     * @return bool|\Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
     */
    public function registerProgressData(Request $request)
    {
        // Make sure its an ajax call
        if (!$request->ajax()) return false;

        $getProject = Project::with([
            'Subprojects',
            'Subprojects.SubprojectTemplate',
            'Subprojects.Tasks',
            'Subprojects.Tasks.TaskTemplate',
            'Subprojects.Tasks.Hours',
        ])->where('archived', '0')
            ->find($request->project);

        if (!empty($request->subproject)) {
            //find subproject
            $getSubproject = $getProject->Subprojects->find($request->subproject);
            //get hours of subproject
            $subprojectHours = (object)$this->subprojectService->getSumSubprojectHours($getSubproject);

            if(!empty($getSubproject->budget)){
                return response(view('partials.generalElements.progressBar', [
                    'hours' => array_sum($subprojectHours->subprojectHours),
                    'hoursNotBil' => array_sum($subprojectHours->subprojectHoursNotBil),
                    'budget' => $getSubproject->budget,
                    'hoursNoBudget' => 0
                ])->render());
            }
            else{
                return response("
                    <div class=\"progress\">
                        <div class=\"progress-bar progress-bar-warning progress-bar-striped\"
                             style=\"width: 100%\">
                                 Onbeperkt
                        </div>
                    </div>
                    ");
            }

        } else {
            //get budgets of project
            $budgets = (object)$this->projectService->getBudgets($getProject);

            return response(view('partials.generalElements.progressBar', [
                'hours' => $budgets->projectHours['hoursInBudget'],
                'hoursNotBil' => $budgets->projectHours['hoursBudgetNotBil'],
                'budget' => $budgets->Budget,
                'hoursNoBudget' => $budgets->projectHours['totalHoursNoBudget'],
                'hoursNoBudgetNotBil' => $budgets->projectHours['hoursNoBudgetNotBil'],
                'hoursNoBudgetBil' => $budgets->projectHours['hoursNoBudgetBil'],
                'isProject' => true
            ])->render());
        }

    }


    /**
     * @param Request $request
     * @return bool|\Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
     */
    public function registerData(Request $request)
    {
        // Make sure its an ajax call
        if (!$request->ajax()) return false;

        if ($request->table == "tasks") {
            $searchValue = Subproject::find($request->search)->TaskTemplates;
        } else {
            // Fetch output from search result
            if (!$searchValue = $this->searchService->search(
                $request->table,
                $request->searchColumn,
                $request->search
            )
            ) ;
        }

        // Generate output
        $output = '<option></option>';
        foreach ($searchValue as $key => $value) {
            if (!isset($value->{$request->getColumn})) continue;

            if ($request->table == "tasks") {
                $optionID = $value->pivot->id;
            } else {
                $optionID = $value->id;
            }

            $output .= '<option value="' . $optionID . '">' . $value->{$request->getColumn} . '</option>';
        }

        return response($output);
    }


    /**
     * @param Request $request
     * @return bool|\Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
     */
    public function chosenOptionData(Request $request)
    {
        // Make sure its an ajax call
        if (!$request->ajax()) return false;

        // Fetch output from search result
        if (!$searchValue = $this->searchService->chosenOptionData(
            $request->table,
            $request->search
        )
        ) ;
        $searchValue = (array)$searchValue[0];

        if ($request->filled('relatedTable')) {
            $searchValue = (array)$this->searchService->chosenOptionDataRelatedTable($request->relatedTable, $searchValue[$request->RelatedColumn])[0];
        }

        return response($searchValue[$request->column]);
    }


    /**
     * @param Request $request
     * @return bool|\Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
     */
    public function getSubprojectsForBudgets(Request $request)
    {
        // Make sure its an ajax call
        if (!$request->ajax()) return false;

        //create empty variable
        $output = '';
        $outputSelect = '<option value="" selected>Kies om toe te voegen</option>';
        //find project template
        $projectTemplate = ProjectTemplate::find($request->id);
        $company = Company::find($request->company_id);

        $projectTemplateSubprojectTemplates = $projectTemplate->SubprojectTemplates->sortBy('name');
        $i = 0;
        //loop trough subproject templates of project template
        foreach ($projectTemplateSubprojectTemplates as $subprojectTemplate) {
            $subprojectBudget = !empty($subprojectTemplate->budget) ? $subprojectTemplate->budget : 0;
            //create response data
            $output .= '    
            <div class="form-group row">
                <div class="col-md-4 control-label" style="padding-top: 5px;">' . $subprojectTemplate->name . '</div>
                <div class="col-md-2">
                    <input type="hidden" name="subprojects['.$i.'][name]" value="' . $subprojectTemplate->name . '"> 
                    <input type="number" step="0.25" min="0" class="form-control subprojectsBudgets spinner" name="subprojects['.$i.'][budget]" placeholder="' . $subprojectBudget . '" '.($subprojectBudget > 0 ? 'value="'.$subprojectBudget.'"' : '').'" autofocus>
                </div>
                <div class="col-md-2">
                    <input name="subprojects['.$i.'][hourlyRate]" id="hourlyRate" type="number" step="0.01" min="0" class="form-control spinner" value="'.$company->hourly_rate.'">
                </div>
                <div class="col-md-3">
                    <label class="control-label" style="padding-top: 5px;">
                        <input type="radio" name="subprojects['.$i.'][billable]" value="1" '. ($subprojectTemplate->standard_billable == 1 ? "checked" : "") .'> Ja
                    </label>
                    &nbsp;
                    <label class="control-label" style="padding-top: 5px;">
                        <input type="radio" name="subprojects['.$i.'][billable]" value="0" '. ($subprojectTemplate->standard_billable == 0 ? "checked" : "") .'> Nee
                    </label>
                </div>
                <div class="col-md-1" style="padding-top: 5px;">
                    <span onclick="removeSubproject(this)" class="glyphicon glyphicon-trash"></span>
                </div>
            </div>
            ';
            $i++;
        }

        //get all subproject templates
        $subprojectTemplates = SubprojectTemplate::all()->sortBy('name');

        foreach ($subprojectTemplates as $subprojectTemplate) {
            if ($subprojectTemplate->name != "~standaard deelproject~") $outputSelect .= '<option id="subprojectTemplate-' . $subprojectTemplate->id . '" value="' . $subprojectTemplate->id . '">' . $subprojectTemplate->name . '</option>';
        }

        //if output is empty
        if (empty($output)) {
            //create response data
            $output = '<div class=" form-group row">
                            <div class="col-md-12">
                                <label>Er zijn geen budgetten om in te stellen.</label>
                            </div>
                        </div>';
        }

        Cache::add('outputMakeProject', $output, 5);
        Cache::add('outputSelectMakeProject', $outputSelect, 5);
        //return response
        return response(compact('output', 'outputSelect'));
    }


    /**
     * @param Request $request
     * @return bool|\Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
     */
    public function getRelatedTasks(Request $request)
    {
        // Make sure its an ajax call
        if (!$request->ajax()) return false;

        $taskTemplateIds = [];

        $subproject = SubprojectTemplate::find($request->id);

        foreach ($subproject->TaskTemplates as $taskTemplate) {
            $taskTemplateIds[] = $taskTemplate->id;
        }

        return response($taskTemplateIds);
    }

}