1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 08:21:34 +02:00

Working on task kanban

This commit is contained in:
Hillel Coren 2017-12-18 13:05:34 +02:00
parent 2016de98e6
commit e69b97f31e
3 changed files with 25 additions and 7 deletions

View File

@ -14,10 +14,10 @@ class TaskKanbanController extends BaseController
*/ */
public function index() public function index()
{ {
$tasks = Task::scope()->with(['project', 'client'])->get(); $tasks = Task::scope()->with(['project', 'client', 'task_status'])->orderBy('task_status_sort_order')->get();
$stauses = TaskStatus::scope()->orderBy('sort_order')->get();
$projects = Project::scope()->get(); $projects = Project::scope()->get();
$clients = Client::scope()->get(); $clients = Client::scope()->get();
$stauses = TaskStatus::scope()->get();
// check initial statuses exist // check initial statuses exist
if (! $stauses->count()) { if (! $stauses->count()) {

View File

@ -79,6 +79,14 @@ class Task extends EntityModel
return $this->belongsTo('App\Models\Project')->withTrashed(); return $this->belongsTo('App\Models\Project')->withTrashed();
} }
/**
* @return mixed
*/
public function task_status()
{
return $this->belongsTo('App\Models\TaskStatus')->withTrashed();
}
/** /**
* @param $task * @param $task
* *

View File

@ -10,6 +10,10 @@
min-height: 540px; min-height: 540px;
} }
.kanban input {
width: 100%;
}
.kanban-column { .kanban-column {
background-color: #E9E9E9; background-color: #E9E9E9;
padding: 10px; padding: 10px;
@ -110,6 +114,7 @@
var projectMap = {}; var projectMap = {};
var clientMap = {}; var clientMap = {};
var statusMap = {};
ko.bindingHandlers.enterkey = { ko.bindingHandlers.enterkey = {
init: function (element, valueAccessor, allBindings, viewModel) { init: function (element, valueAccessor, allBindings, viewModel) {
@ -143,6 +148,7 @@
for (var i=0; i<statuses.length; i++) { for (var i=0; i<statuses.length; i++) {
var status = statuses[i]; var status = statuses[i];
var statusModel = new StatusModel(status); var statusModel = new StatusModel(status);
statusMap[status.public_id] = statusModel;
self.statuses.push(statusModel); self.statuses.push(statusModel);
} }
@ -159,7 +165,11 @@
for (var i=0; i<tasks.length; i++) { for (var i=0; i<tasks.length; i++) {
var task = tasks[i]; var task = tasks[i];
var taskModel = new TaskModel(task); var taskModel = new TaskModel(task);
var statusModel = self.statuses()[tasks.task_status_id || 0]; if (task.task_status) {
var statusModel = statusMap[task.task_status.public_id];
} else {
var statusModel = self.statuses()[0];
}
statusModel.tasks.push(taskModel); statusModel.tasks.push(taskModel);
} }
@ -467,15 +477,15 @@
<div class="kanban-column kanban-column-last well"> <div class="kanban-column kanban-column-last well">
<div class="kanban-column-row" data-bind="css: { editing: is_adding_status }"> <div class="kanban-column-row" data-bind="css: { editing: is_adding_status }">
<div data-bind="event: { click: startAddStatus }" style="padding-bottom: 8px;"> <div class="view" data-bind="event: { click: startAddStatus }" style="padding-bottom: 8px;">
<a href="#" class="view text-muted" style="font-size:13px"> <a href="#" class="text-muted" style="font-size:13px">
{{ trans('texts.new_status') }}... {{ trans('texts.new_status') }}...
</a> </a>
</div> </div>
<div class="edit"> <div class="edit">
<textarea data-bind="value: new_status, valueUpdate: 'afterkeydown', <input data-bind="value: new_status, valueUpdate: 'afterkeydown',
hasfocus: is_adding_status, selected: is_adding_status, enterkey: completeAddStatus"></textarea> hasfocus: is_adding_status, selected: is_adding_status, enterkey: completeAddStatus"></textarea>
<div class="pull-right"> <div class="pull-right" style="padding-top:6px">
<button type='button' class='btn btn-default btn-sm' data-bind="click: cancelAddStatus"> <button type='button' class='btn btn-default btn-sm' data-bind="click: cancelAddStatus">
{{ trans('texts.cancel') }} {{ trans('texts.cancel') }}
</button> </button>