Working on projects

This commit is contained in:
Hillel Coren 2017-12-25 12:13:01 +02:00
parent d7fbccba3e
commit f1052ef377
2 changed files with 51 additions and 126 deletions

View File

@ -2,6 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Jobs\GenerateProjectChartData;
use App\Http\Requests\CreateProjectRequest; use App\Http\Requests\CreateProjectRequest;
use App\Http\Requests\ProjectRequest; use App\Http\Requests\ProjectRequest;
use App\Http\Requests\UpdateProjectRequest; use App\Http\Requests\UpdateProjectRequest;
@ -10,9 +11,6 @@ use App\Models\Project;
use App\Ninja\Datatables\ProjectDatatable; use App\Ninja\Datatables\ProjectDatatable;
use App\Ninja\Repositories\ProjectRepository; use App\Ninja\Repositories\ProjectRepository;
use App\Services\ProjectService; use App\Services\ProjectService;
use DateInterval;
use DatePeriod;
use stdClass;
use Auth; use Auth;
use Input; use Input;
use Session; use Session;
@ -56,65 +54,14 @@ class ProjectController extends BaseController
{ {
$account = auth()->user()->account; $account = auth()->user()->account;
$project = $request->entity(); $project = $request->entity();
$taskMap = []; $chartData = dispatch(new GenerateProjectChartData($project));
foreach ($project->tasks as $task) {
$parts = json_decode($task->time_log) ?: [];
if (! count($parts)) {
continue;
}
foreach ($parts as $part) {
$start = $part[0];
$end = count($part) > 1 ? $part[1] : time();
$date = $account->getDateTime();
$date->setTimestamp($part[0]);
$sqlDate = $date->format('Y-m-d');
if (! isset($taskMap[$sqlDate])) {
$taskMap[$sqlDate] = 0;
}
$taskMap[$sqlDate] += $end - $start;
}
}
$labels = [];
$records = [];
$startDate = date_create('2017-11-01');
$endDate = date_create('2017-12-01');
$interval = new DateInterval('P1D');
$period = new DatePeriod($startDate, $interval, $endDate);
$data = [];
$amount = 0;
$color = '51,122,183';
foreach ($period as $date) {
$labels[] = $date->format('m/d/Y');
$records[] = $amount+=10;
}
$dataset = new stdClass();
$dataset->data = $records;
$dataset->label = trans("texts.tasks");
$dataset->lineTension = 0;
$dataset->borderWidth = 4;
$dataset->borderColor = "rgba({$color}, 1)";
$dataset->backgroundColor = "rgba({$color}, 0.1)";
$data = new stdClass();
$data->labels = $labels;
$data->datasets = [$dataset];
$data = [ $data = [
'account' => auth()->user()->account, 'account' => auth()->user()->account,
'project' => $project, 'project' => $project,
'title' => trans('texts.view_project'), 'title' => trans('texts.view_project'),
'showBreadcrumbs' => false, 'showBreadcrumbs' => false,
'data' => $data, 'chartData' => $chartData,
]; ];
return View::make('projects.show', $data); return View::make('projects.show', $data);

View File

@ -77,18 +77,28 @@
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<h3>{{ trans('texts.summary') }}</h3> <h3>{{ trans('texts.summary') }}
<table class="table" style="width:100%">
<tr>
<td><small>{{ trans('texts.tasks') }}</small></td>
<td style="text-align: right">3</td>
</tr>
<tr>
<td><small>{{ trans('texts.duration') }}</small></td>
<td style="text-align: right">04:15:00</td>
</tr>
</table>
</h3>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@if ($chartData)
<canvas id="chart-canvas" height="50px" style="background-color:white;padding:20px;display:none"></canvas><br/> <canvas id="chart-canvas" height="50px" style="background-color:white;padding:20px;display:none"></canvas><br/>
@endif
<ul class="nav nav-tabs nav-justified"> <ul class="nav nav-tabs nav-justified">
{!! Form::tab_link('#tasks', trans('texts.tasks')) !!} {!! Form::tab_link('#tasks', trans('texts.tasks')) !!}
@ -119,8 +129,7 @@
$('.nav-tabs a[href="#tasks"]').tab('show'); $('.nav-tabs a[href="#tasks"]').tab('show');
var chartData = {!! json_encode($data) !!}; var chartData = {!! json_encode($chartData) !!};
console.log(chartData);
loadChart(chartData); loadChart(chartData);
}); });
@ -143,70 +152,39 @@
function loadChart(data) { function loadChart(data) {
var ctx = document.getElementById('chart-canvas').getContext('2d'); var ctx = document.getElementById('chart-canvas').getContext('2d');
if (window.myChart) { $('#chart-canvas').fadeIn();
window.myChart.config.data = data; window.myChart = new Chart(ctx, {
//window.myChart.config.options.scales.xAxes[0].time.unit = chartGroupBy.toLowerCase(); type: 'line',
//window.myChart.config.options.scales.xAxes[0].time.round = chartGroupBy.toLowerCase(); data: data,
window.myChart.update(); options: {
} else { legend: {
$('#chart-canvas').fadeIn(); display: false,
window.myChart = new Chart(ctx, { },
type: 'line', scales: {
data: data, xAxes: [{
options: { type: 'time',
tooltips: { time: {
mode: 'x-axis', unit: 'day',
titleFontSize: 15, round: 'day',
titleMarginBottom: 12, },
bodyFontSize: 15, gridLines: {
bodySpacing: 10, display: false,
callbacks: { },
title: function(item) { }],
//return moment(item[0].xLabel).format("{{ $account->getMomentDateFormat() }}"); yAxes: [{
}, ticks: {
label: function(item, data) { @if ($project->budgeted_hours)
/* max: {{ $project->budgeted_hours }},
if (item.datasetIndex == 0) { @endif
var label = " {!! trans('texts.invoices') !!}: "; beginAtZero: true,
} else if (item.datasetIndex == 1) { callback: function(label, index, labels) {
var label = " {!! trans('texts.payments') !!}: "; return roundToTwo(label) + " {{ trans('texts.hours') }}";
} else if (item.datasetIndex == 2) {
var label = " {!! trans('texts.expenses') !!}: ";
}
return label + formatMoney(item.yLabel, chartCurrencyId, account.country_id);
*/
} }
} },
}, }]
title: {
display: false,
fontSize: 18,
text: '{{ trans('texts.total_revenue') }}'
},
scales: {
xAxes: [{
type: 'time',
time: {
//unit: chartGroupBy,
//round: chartGroupBy,
},
gridLines: {
display: false,
},
}],
yAxes: [{
ticks: {
beginAtZero: true,
callback: function(label, index, labels) {
//return formatMoney(label, chartCurrencyId, account.country_id);
}
},
}]
}
} }
}); }
} });
} }