File: D:/HostingSpaces/MdnDirecteur/hours.komma.cloud/resources/views/subprojects/show.blade.php
@extends('app')
@section('pageTitle')
{{$subproject->Project->name}} / {{$subproject->name}} | Urensysteem Komma
@endsection
@section('content')
<div class="container subprojectOverview">
<div class="row">
@if (\Session::has('message'))
@if(!empty(Session::get('message')['url']))
<div class="alert alert-info">
{{ Session::get('message')['message'] }}
<a class="pull-right btn btn-default"
href="{{url(Session::get('message')['url']) . '?' . http_build_query(['selected' => Session::get('selected'), 'delete' => !empty(Session::get('message')['delete']) ? Session::get('message')['delete'] : false, 'subproject' => $subproject->id, 'ref' => $_SERVER['REQUEST_URI']])}}"
style="margin-top: -7px">Herstel</a>
</div>
@else
<div class="alert alert-info">{{ Session::get('message') }}</div>
@endif
@endif
<div class="panel panel-default">
<div class="panel-body">
<div class="col-md-12">
<div class="col-lg-9">
<h1>
<a href="/projecten/{{$subproject->Project->id}}">{{$subproject->Project->name}}</a>/<br/>
@if($subproject->locked == 1)
<span class="glyphicon glyphicon-lock" data-toggle="tooltip" title="Locked"></span>
@endif
{{$subproject->name}}</h1>
</div>
<div class="col-lg-3">
{{-- FIXME: CORRECT PERMISSION ? --}}
@if($subproject->Project->archived != '1' && ($subproject->locked == 0 || Auth::user()->can('recalculate_project')))
<a href="/subprojecten/{{$subproject->id}}/edit"
class="btn btn-primary pull-right" style="margin-top: 18px;" dusk="editSubproject">Bewerk
deelproject</a>
@endif
</div>
</div>
<div class="col-lg-12 subproject-filters">
<div class="col-md-3">
<label>Begin datum</label>
<input type="text" id="datepicker" name="begin"
value="{{$begin ?? $subproject->created_at->toDateString()}}"
class="form-control beginDate">
</div>
<div class="col-md-3">
<label>Eind datum</label>
<input type="text" id="datepicker2" name="end"
value="{{$end ?? today()->toDateString()}}"
class="form-control endDate">
</div>
<div class="col-md-3" style="margin-top: 27px;">
<select name="projectWorker" id="projectWorker" class="form-control selectpicker"
data-live-search="true" title="Kies een projectlid">
@if(!empty($user))
<option value="{{$user}}" selected>{{$user}}</option>
@foreach($workers as $projectWorker => $projectWorkersHours)
@if($user != $projectWorker)
<option value="{{$projectWorker}}">{{$projectWorker}}</option>
@endif
@endforeach
@else
<option selected disabled></option>
@foreach($workers as $projectWorker => $projectWorkersHours)
<option value="{{$projectWorker}}">{{$projectWorker}}</option>
@endforeach
@endif
</select>
</div>
<div class="col-md-1">
<a href="/subprojecten/{{$subproject->id}}" class="btn btn-primary"
style="margin-top: 27px; margin-left: 10px;">Reset alles</a>
</div>
<div class="col-md-2">
@can('download_excel')
<a href="{{route('excel.subProject', ['subProject' => $subproject, 'begin' => $begin ?? $subproject->created_at->toDateString(), 'end' => $end ?? today()->toDateString()])}}"
class="pull-right excelExport" style="margin-top: 32px;">
<img src="/images/excel.png"> Download Excel
</a>
@endcan
</div>
</div>
<div class="col-lg-12" sid="{{$subproject->id}}">
<div class="col-md-6">
<h4>
<b>Process:</b> {{array_sum($allSubprojectHours->totalBillWithBudget)+array_sum($allSubprojectHours->totalNotBillWithBudget)+array_sum($allSubprojectHours->totalExceedsSubProject)}}
@if($subproject->budget > 0)/ {{$subproject->budget}} @endif</h4>
</div>
<div class="col-md-6" style="text-align: right;">
@if($subproject->budget > 0)
<h4><b>Resterend budget:</b>
<span style="margin-top: 4px; color: {{ ($subproject->budget - (array_sum($allSubprojectHours->totalBillWithBudget)+array_sum($allSubprojectHours->totalNotBillWithBudget)+array_sum($allSubprojectHours->totalExceedsSubProject))) > 0 ? '#2ab27b' : 'red' }}; ">
{{ $subproject->budget - (array_sum($allSubprojectHours->totalBillWithBudget)+array_sum($allSubprojectHours->totalNotBillWithBudget)+array_sum($allSubprojectHours->totalExceedsSubProject)) }}
</span></h4>
@endif
</div>
<div class="col-md-12">
@include('partials.generalElements.progressBar',[
'hoursNoBudget' => array_sum($allSubprojectHours->totalBillWithoutBudget)+array_sum($allSubprojectHours->totalNotBillWithoutBudget),
'budget' => $subproject->budget,
'hoursLeftInBudget' => $subproject->budget - (array_sum($allSubprojectHours->totalBillWithBudget)+array_sum($allSubprojectHours->totalNotBillWithBudget)+array_sum($allSubprojectHours->totalExceedsSubProject)),
'barWidth' => $subproject->budget > 0 ? (100 / $subproject->budget) * (array_sum($allSubprojectHours->totalBillWithBudget)+array_sum($allSubprojectHours->totalNotBillWithBudget)+array_sum($allSubprojectHours->totalExceedsSubProject)) : 100,
'isProject' => true
])
</div>
</div>
<div class="col-md-12 stats">
<div class="col-md-6 left">
<h3>Geschreven uren</h3>
<div class="col-md-8">Facturabel</div>
<div class="col-md-4 pull-right"> {{array_sum($allSubprojectHours->totalBillWithBudget) + array_sum($allSubprojectHours->totalBillWithoutBudget)}} </div>
<div class="col-md-8">
<div class="col-md-8"> Begroot</div>
<div class="col-md-4">{{array_sum($allSubprojectHours->totalBillWithBudget)}}</div>
<div class="col-md-8"> Nacalculatie</div>
<div class="col-md-4">{{array_sum($allSubprojectHours->totalBillWithoutBudget)}}</div>
</div>
<div class="col-md-8">Niet facturabel</div>
<div class="col-md-4 pull-right"> {{array_sum($allSubprojectHours->totalNotBillWithBudget) + array_sum($allSubprojectHours->totalNotBillWithoutBudget)+array_sum($allSubprojectHours->totalExceedsSubProject) }} </div>
<div class="col-md-8">
<div class="col-md-8"> Bewust met budget</div>
<div class="col-md-4">{{array_sum($allSubprojectHours->totalNotBillWithBudget)}}</div>
<div class="col-md-8"> Bewust zonder budget</div>
<div class="col-md-4">{{array_sum($allSubprojectHours->totalNotBillWithoutBudget)}}</div>
<div class="col-md-8"> Budgetoverschrijding</div>
<div class="col-md-4">{{array_sum($allSubprojectHours->totalExceedsSubProject)}}</div>
</div>
</div>
<div class="col-md-6 right">
<h3>Facturatie</h3>
<div class="col-md-8">Budget</div>
<div class="col-md-4 pull-right"> {{$subproject->billable == 1 ? $subproject->budget : 0}} </div>
<div class="col-md-8">Nacalculatie</div>
<div class="col-md-4 pull-right"> {{array_sum($allSubprojectHours->totalBillWithoutBudget)}} </div>
<div class="col-md-11"><span class="line"></span></div>
<div class="col-md-1 value"><span class="plus">+</span></div>
<div class="col-md-8">Totaal</div>
<div class="col-md-4 pull-right"> {{ ($subproject->billable == 1 ? $subproject->budget : 0)+array_sum($allSubprojectHours->totalBillWithoutBudget)}} </div>
<div class="col-md-8">Uurprijs</div>
<div class="col-md-4 pull-right">
€ {{number_format((float) $subproject->hourly_rate, 2, '.', '')}} </div>
<div class="col-md-8">Berekend bedrag</div>
<div class="col-md-4 pull-right">
€ {{ number_format((float)$subproject->hourly_rate*( ($subproject->billable == 1 ? $subproject->budget : 0) +array_sum($allSubprojectHours->totalBillWithoutBudget)), 2, '.', '')}} </div>
</div>
</div>
<div class="col-md-12 tasks">
<h2 class="pull-left col-lg-8">Taken</h2>
{{-- FIXME: CORRECT PERMISSION ? --}}
@if($subproject->Project->archived != '1' && ($subproject->locked == 0 || Auth::user()->can('recalculate_project')))
<button type="button" name="addTask" data-toggle=modal data-backdrop="static"
data-target="#addTasksModal"
onclick="loadPopup('/taken/create/{{$subproject->id}}?ref=subprojecten-{{$subproject->id}}','#addTasksModal');"
class="btn btn-primary pull-right">+ Taken koppelen
</button>
@endif
@foreach($subproject->TaskTemplates as $task)
<div class="col-md-6">
<div class="project">
<ul class="nav nav-justified tasks">
<li style="top: -3px; left: 5px; position: relative;">
{{$task->name}}
</li>
<li>
<span class="label label-default pull-right">{{$allSubprojectHours->totalBillWithBudget[$task->name] + $allSubprojectHours->totalNotBillWithBudget[$task->name] + $allSubprojectHours->totalExceedsSubProject[$task->name]}}
uur</span>
</li>
<li>
{{-- FIXME: CORRECT PERMISSION ? --}}
@if($subproject->Project->archived != '1' && ($subproject->locked == 0 || Auth::user()->can('recalculate_project')))
<form action="/taken/{{ $task->pivot->id }}" method="POST" id="delete-form-taak-{{ $task->pivot->id }}" class="pull-right">
@csrf
@method('DELETE')
{!! Btn::delete($task->pivot->id, $name = "taak") !!}
</form>
@endif
</li>
</ul>
</div>
</div>
@endforeach
</div>
<section class="col-md-12 subproject-hours">
<div class="col-lg-12">
<div class="title">
<h2>Urenoverzicht</h2>
<div class="pagination-amount pull-right">Aantal per pagina: <select
name="paginationAmount">
<option value="10" {{\Request::has('pa') && \Request::get('pa') == 10 ? 'selected' : 'selected'}}>
10
</option>
<option value="50" {{\Request::has('pa') && \Request::get('pa') == 50 ? 'selected' : ''}}>
50
</option>
<option value="100" {{\Request::has('pa') && \Request::get('pa') == 100 ? 'selected' : ''}}>
100
</option>
<option value="all" {{\Request::has('pa') && \Request::get('pa') == 'all' ? 'selected' : ''}}>
all
</option>
</select>
</div>
</div>
<div class="content">
<table class="table table-striped" id="tblData">
<thead>
<tr>
{{-- FIXME: CORRECT PERMISSION ? --}}
@if( ($subproject->Project->archived != '1') && ($subproject->locked == 0 || Auth::user()->can('recalculate_project')) )
<th>
@if(Auth::user()->can('change_all_hours'))
<input type="checkbox" id="multiSelectAll"/>
@endif
</th>
<th></th>
@can('split_hours')
<th></th>
@endcan
@endif
<th>Naam</th>
<th>Aantal</th>
<th>Taak</th>
<th>Omschrijving</th>
<th width="100px">Datum</th>
<th>Facturabel</th>
<th>Gefactureerd</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($hours as $hour)
<tr style="display: table-row;">
{{-- FIXME: CORRECT PERMISSION ? --}}
@if( ($subproject->Project->archived != '1') && ($subproject->locked == 0 || Auth::user()->can('recalculate_project')) )
<td class="nombore">
@if($hour->user_id == Auth::user()->id || Auth::user()->can('change_all_hours'))
<label>
<div class="slider" id="{{$hour->id}}">
<input id="checkboxSelect" type="checkbox" class="test">
</div>
</label>
@endif
</td>
<td>
@if($hour->user_id == \Auth::id() || \Auth::user()->can('change_all_hours'))
{!! Btn::edit($hour, $name = "uur", $chosenSubproject, $projectSubprojects) !!}
<form style="display: inline-block;" action="{{route('postHours')}}" method="post">
<label>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="hour" value="{{$hour->id}}">
<input type="hidden" name="user" value="{{$hour->user_id}}">
<input type="hidden" name="view" value="day">
<input type="hidden" name="date" value="{{$hour->date}}">
<span class="glyphicon glyphicon-link" data-toggle="tooltip" title="Bekijk"></span>
<input type="submit" style="display: none;">
</label>
</form>
@endif
</td>
@can('split_hours')
<td>
{!! Btn::split($hour, $subproject) !!}
</td>
@endcan
@endif
<td>{{$hour->User->name}}</td>
<td>{{$hour->value}} uur</td>
<td>{{$hour->Task->TaskTemplate->name}}</td>
<td>{{ \Str::limit($hour->description, 60)}}</td>
<td>{{\Carbon\Carbon::parse($hour->date)->format('d-m-Y')}}</td>
<td>{{$hour->billable == 1 ? "Ja" : "Nee"}}</td>
<td>{{$hour->billed_at != null ? "Ja" : "Nee"}}</td>
<td>
@if($hour->intern_description)<span class="glyphicon glyphicon-comment"
data-toggle="popover"
data-trigger="hover"
title="Interne opmerking"
data-content="{{$hour->intern_description}}"></span> @endif
@if($hour->bug == 1)<span class="icon-bug pull-right"
data-toggle="tooltip"
title="Bug"></span> @endif
@if(!empty($hour->exceed_subproject)) <span
class="glyphicon glyphicon-alert" data-toggle="popover"
data-trigger="hover" title="Let op!"
data-content="Deze uren vallen niet binnen het budget van het deelproject."></span> @endif
</td>
<td>
{{-- FIXME: CORRECT PERMISSION ? --}}
@if( (empty($hour->locked_at) || $hour->locked_at == '0000-00-00 00:00:00') && ($subproject->locked == 0 || Auth::user()->can('recalculate_project')))
@if($hour->user_id != \Auth::id())
@can('delete_all_hours')
<form action="/hours/{{ $hour->id }}" method="POST" id="delete-form-projecturen-{{ $hour->id }}" class="pull-right">
@csrf
@method('DELETE')
{!! Btn::delete($hour->id, $name = "projecturen") !!}
</form>
@endcan
@else
<form action="/hours/{{ $hour->id }}" method="POST" id="delete-form-projecturen-{{ $hour->id }}" class="pull-right">
@csrf
@method('DELETE')
{!! Btn::delete($hour->id, $name = "projecturen") !!}
</form>
@endif
@else
<span class="glyphicon glyphicon-lock" data-toggle="tooltip"
title="Locked"></span>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
<div class="text-center">
{!! $hours->appends(Request::except('page'))->render() !!}
</div>
<div class="optionPopup" id="collapseOptions">
<div class="project">
<div class="colored-tile">
<span class="counter"></span>
</div>
<div class="title-tile">
<h3 class="title">Multi select</h3>
</div>
<div class="option-tile do-action" id="moveHours">
<span class="glyphicon glyphicon-move"></span>
Verplaatsen
</div>
<div class="option-tile do-action" id="billableHoursModal">
<span class="glyphicon glyphicon-usd"></span>
Facturabelheid
</div>
<div class="option-tile do-action" id="billingHoursModal">
<span class="glyphicon glyphicon-euro"></span>
Factureren
</div>
<div class="option-tile do-action" id="deleteHoursModal">
<span class="glyphicon glyphicon-trash"></span>
Verwijderen
</div>
<div class="cancel-tile" id="closeSelection">
<span class="glyphicon glyphicon-remove"></span>
</div>
</div>
</div>
</div>
</div>
@if(count($errors))
@foreach($errors->all() as $error)
<div class="alert alert-danger" role="alert">{{$error}}</div>
@endforeach
@endif
</section>
</div>
</div>
</div>
</div>
<div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="addTasksModal"
id="addTasksModal"></div>
@if(!empty($hours->total()) and $subproject->Project->archived != '1'))
{{--multi select option popups--}}
@include('partials.popups.multiSelect.move')
@include('partials.popups.multiSelect.billable')
@include('partials.popups.multiSelect.billing')
@include('partials.popups.multiSelect.delete')
@endif
@stop
@section('script')
<script src="{{ asset('js/createFilterParams.js') }}"></script>
<script type="text/javascript">
$(document).ready(function () {
$('.pagination-amount select').change(function () {
url = updateQueryString('pa', $('.pagination-amount select option:checked').val());
goPjax(url);
});
$('#multiSelectAll').change(function () {
if ($(this).prop("checked")) {
$('td.nombore').each(function () {
var selectRow = $(this);
selectRow.find('#checkboxSelect').prop("checked", true);
selectRow.find('.slider').addClass("active");
$('#collapseOptions').addClass("active");
});
} else {
$('td.nombore').each(function () {
var selectRow = $(this);
selectRow.find('#checkboxSelect').prop("checked", false);
selectRow.find('.slider').removeClass("active");
$('#collapseOptions').removeClass("active");
});
}
});
$('td.nombore #checkboxSelect').change(function () {
var checkbox = $(this).parent(".slider");
var optionBar = $('#collapseOptions');
if ($(this).is(':checked')) {
checkbox.addClass("active");
$('span.counter').text($('#checkboxSelect:checked').length);
} else {
checkbox.removeClass("active");
$('span.counter').text($('#checkboxSelect:checked').length);
}
if ($(".slider").hasClass("active")) {
$(function () {
optionBar.addClass("active");
});
} else {
$(function () {
optionBar.removeClass("active");
});
}
});
$('#closeSelection').click(function () {
var selectRow = $('td.nombore');
selectRow.find('#checkboxSelect').prop("checked", false);
selectRow.find('.slider').removeClass("active");
$('#collapseOptions').removeClass("active");
$split = window.location.href.split('?');
window.location.replace($split[0]);
});
$('.do-action').click(function () {
$value = "{{$subproject->id}}";
$modal = $(this).attr('id');
makeURL($value, $modal);
});
function makeURL($value, $modal) {
var IDs = $("td.nombore .slider.active[id]").map(function () {
return this.id;
}).get();
$split = window.location.href.split('?');
$url = $split[0] + '?popup=' + $modal + '&subproject=' + $value + "&selected=" + IDs;
window.location.replace($url);
}
if (window.location.search.indexOf('popup=') > -1) {
$('#{{request('popup')}}.modal').modal('show');
}
if (window.location.search.indexOf('selected=') > -1) {
var selectRow = $('td.nombore');
$split = "{{request('selected')}}".split(',');
for (var i = 0; i < $split.length; i++) {
selectRow.find('#' + $split[i] + ' #checkboxSelect').prop("checked", true);
selectRow.find('#' + $split[i]).addClass("active");
}
$('#collapseOptions').addClass("active");
$('span.counter').text($('#checkboxSelect:checked').length);
}
$('.range-slider').change(function () {
var value = $(this).val();
var output = $(this).next('label');
output.html(value);
});
});
</script>
@stop