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>
<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);
}
}