invoiceninja/app/Http/Controllers/TaskKanbanController.php

121 lines
3.2 KiB
PHP
Raw Normal View History

2017-12-17 19:54:54 +02:00
<?php
namespace App\Http\Controllers;
2017-12-17 20:59:10 +02:00
use App\Models\Task;
2017-12-17 19:54:54 +02:00
use App\Models\TaskStatus;
2017-12-17 22:10:54 +02:00
use App\Models\Project;
use App\Models\Client;
2017-12-17 19:54:54 +02:00
class TaskKanbanController extends BaseController
{
/**
* @return \Illuminate\Contracts\View\View
*/
public function index()
{
2017-12-18 13:05:34 +02:00
$tasks = Task::scope()->with(['project', 'client', 'task_status'])->orderBy('task_status_sort_order')->get();
$stauses = TaskStatus::scope()->orderBy('sort_order')->get();
2017-12-17 22:10:54 +02:00
$projects = Project::scope()->get();
$clients = Client::scope()->get();
2017-12-17 19:54:54 +02:00
2017-12-17 20:59:10 +02:00
// check initial statuses exist
2017-12-17 19:54:54 +02:00
if (! $stauses->count()) {
$stauses = [];
$defaults = [
'backlog',
'ready_to_do',
'in_progress',
'done',
];
for ($i=0; $i<count($defaults); $i++) {
$status = TaskStatus::createNew();
$status->name = trans('texts.' . $defaults[$i]);
$status->sort_order = $i;
$status->save();
$stauses[] = $status;
}
}
$data = [
'title' => trans('texts.kanban'),
'statuses' => $stauses,
2017-12-17 20:59:10 +02:00
'tasks' => $tasks,
2017-12-17 22:10:54 +02:00
'clients' => $clients,
'projects' => $projects,
2017-12-17 19:54:54 +02:00
];
return view('tasks.kanban', $data);
}
2017-12-19 10:14:26 +02:00
/**
* @return \Illuminate\Http\RedirectResponse
*/
public function storeStatus()
{
2017-12-19 15:44:51 +02:00
$status = TaskStatus::createNew();
$status->fill(request()->all());
$status->save();
return response()->json($status);
2017-12-19 10:14:26 +02:00
}
/**
* @param $publicId
*
* @return \Illuminate\Http\RedirectResponse
*/
public function updateStatus($publicId)
{
2017-12-19 15:44:51 +02:00
$status = TaskStatus::scope($publicId)->firstOrFail();
2017-12-19 13:25:13 +02:00
$status->fill(request()->all());
2017-12-19 10:14:26 +02:00
$status->save();
return response()->json($status);
}
/**
* @return \Illuminate\Http\RedirectResponse
*/
public function deleteStatus($publicId)
{
2017-12-19 14:25:44 +02:00
$status = TaskStatus::scope($publicId)->firstOrFail();
$status->delete();
2017-12-19 10:14:26 +02:00
return response()->json(['message' => RESULT_SUCCESS]);
}
2017-12-19 14:25:44 +02:00
/**
* @param $publicId
*
* @return \Illuminate\Http\RedirectResponse
*/
public function updateTask($publicId)
{
$task = Task::scope($publicId)->firstOrFail();
$origStatusId = $task->task_status_id;
$origSortOrder = $task->task_status_sort_order;
$newStatusId = request('task_status_id');
$newSortOrder = request('task_status_sort_order');
Task::scope()
->where('task_status_id', '=', $origStatusId)
->where('task_status_sort_order', '>', $origSortOrder)
->decrement('task_status_sort_order');
Task::scope()
->where('task_status_id', '=', $newStatusId)
->where('task_status_sort_order', '>=', $newSortOrder)
->increment('task_status_sort_order');
$task->task_status_id = request('task_status_id');
$task->task_status_sort_order = $newSortOrder;
$task->save();
return response()->json($task);
}
2017-12-17 19:54:54 +02:00
}