2018-09-22 22:01:32 +02:00
var tasksTable = $ ( '#tasks-table' ) . DataTable ( {
'order' : [ [ 2 , 'desc' ] ] ,
'columnDefs' : [
2018-09-23 09:22:54 +02:00
{ 'orderable' : false , 'targets' : 0 } ,
2020-01-03 14:18:56 +01:00
{ 'searchable' : false , "targets" : 0 } ,
2018-09-23 09:22:54 +02:00
{ 'visible' : false , 'targets' : 3 }
2018-09-22 22:01:32 +02:00
] ,
2018-09-23 09:22:54 +02:00
'rowGroup' : {
dataSrc : 3
2018-09-22 22:01:32 +02:00
}
} ) ;
2019-01-05 20:06:35 +01:00
$ ( '#tasks-table tbody' ) . removeClass ( "d-none" ) ;
2019-03-04 17:43:12 +01:00
tasksTable . columns . adjust ( ) . draw ( ) ;
2020-11-07 14:53:45 +01:00
$ ( '.dataTables_scrollBody' ) . addClass ( "dragscroll" ) ;
dragscroll . reset ( ) ;
2018-09-22 22:01:32 +02:00
2019-10-15 19:59:14 +02:00
$ ( "#search" ) . on ( "keyup" , Delay ( function ( )
2018-09-22 22:01:32 +02:00
{
var value = $ ( this ) . val ( ) ;
if ( value === "all" )
{
value = "" ;
}
2019-01-19 00:37:21 -07:00
2018-09-22 22:01:32 +02:00
tasksTable . search ( value ) . draw ( ) ;
2019-10-15 19:59:14 +02:00
} , 200 ) ) ;
2018-09-22 22:01:32 +02:00
2018-09-24 19:13:53 +02:00
$ ( "#status-filter" ) . on ( "change" , function ( )
{
var value = $ ( this ) . val ( ) ;
if ( value === "all" )
{
value = "" ;
}
// Transfer CSS classes of selected element to dropdown element (for background)
$ ( this ) . attr ( "class" , $ ( "#" + $ ( this ) . attr ( "id" ) + " option[value='" + value + "']" ) . attr ( "class" ) + " form-control" ) ;
2019-01-19 00:37:21 -07:00
2018-09-24 19:13:53 +02:00
tasksTable . column ( 5 ) . search ( value ) . draw ( ) ;
} ) ;
2020-11-07 14:53:45 +01:00
$ ( "#clear-filter-button" ) . on ( "click" , function ( )
{
$ ( "#search" ) . val ( "" ) ;
$ ( "#status-filter" ) . val ( "all" ) ;
$ ( "#search" ) . trigger ( "keyup" ) ;
$ ( "#status-filter" ) . trigger ( "change" ) ;
$ ( "#show-done-tasks" ) . trigger ( 'checked' , false ) ;
} ) ;
2020-04-19 08:51:02 -04:00
$ ( ".status-filter-message" ) . on ( "click" , function ( )
2018-09-24 19:13:53 +02:00
{
var value = $ ( this ) . data ( "status-filter" ) ;
$ ( "#status-filter" ) . val ( value ) ;
$ ( "#status-filter" ) . trigger ( "change" ) ;
} ) ;
2018-09-22 22:01:32 +02:00
$ ( document ) . on ( 'click' , '.do-task-button' , function ( e )
{
2018-09-24 09:30:26 +02:00
e . preventDefault ( ) ;
2018-09-25 16:24:43 +02:00
// Remove the focus from the current button
// to prevent that the tooltip stays until clicked anywhere else
document . activeElement . blur ( ) ;
2018-11-24 19:40:50 +01:00
Grocy . FrontendHelpers . BeginUiBusy ( ) ;
2019-01-19 00:37:21 -07:00
2018-09-22 22:01:32 +02:00
var taskId = $ ( e . currentTarget ) . attr ( 'data-task-id' ) ;
2018-09-23 09:22:54 +02:00
var taskName = $ ( e . currentTarget ) . attr ( 'data-task-name' ) ;
2018-09-22 22:01:32 +02:00
var doneTime = moment ( ) . format ( 'YYYY-MM-DD HH:mm:ss' ) ;
2019-01-19 14:51:51 +01:00
Grocy . Api . Post ( 'tasks/' + taskId + '/complete' , { 'done_time' : doneTime } ,
2018-09-22 22:01:32 +02:00
function ( )
{
2018-09-23 19:26:13 +02:00
if ( ! $ ( "#show-done-tasks" ) . is ( ":checked" ) )
{
2020-01-28 19:27:18 +01:00
animateCSS ( "#task-" + taskId + "-row" , "fadeOut" , function ( )
2018-09-23 19:26:13 +02:00
{
2020-01-28 19:27:18 +01:00
$ ( "#task-" + taskId + "-row" ) . tooltip ( "hide" ) ;
$ ( "#task-" + taskId + "-row" ) . remove ( ) ;
2018-09-23 19:26:13 +02:00
} ) ;
}
else
{
$ ( '#task-' + taskId + '-row' ) . addClass ( "text-muted" ) ;
$ ( '#task-' + taskId + '-name' ) . addClass ( "text-strike-through" ) ;
$ ( '.do-task-button[data-task-id="' + taskId + '"]' ) . addClass ( "disabled" ) ;
}
2018-11-24 19:40:50 +01:00
Grocy . FrontendHelpers . EndUiBusy ( ) ;
2019-05-01 20:19:18 +02:00
toastr . success ( _ _t ( 'Marked task %s as completed on %s' , taskName , doneTime ) ) ;
2020-01-27 19:00:49 +01:00
RefreshContextualTimeago ( "#task-" + taskId + "-row" ) ;
2018-09-23 09:22:54 +02:00
RefreshStatistics ( ) ;
} ,
function ( xhr )
{
2018-11-24 19:40:50 +01:00
Grocy . FrontendHelpers . EndUiBusy ( ) ;
2018-09-23 09:22:54 +02:00
console . error ( xhr ) ;
}
) ;
} ) ;
2018-09-22 22:01:32 +02:00
2019-07-06 20:34:01 +02:00
$ ( document ) . on ( 'click' , '.undo-task-button' , function ( e )
{
e . preventDefault ( ) ;
// Remove the focus from the current button
// to prevent that the tooltip stays until clicked anywhere else
document . activeElement . blur ( ) ;
Grocy . FrontendHelpers . BeginUiBusy ( ) ;
var taskId = $ ( e . currentTarget ) . attr ( 'data-task-id' ) ;
var taskName = $ ( e . currentTarget ) . attr ( 'data-task-name' ) ;
2020-08-30 12:18:16 +02:00
Grocy . Api . Post ( 'tasks/' + taskId + '/undo' , { } ,
2019-07-06 20:34:01 +02:00
function ( )
{
window . location . reload ( ) ;
} ,
function ( xhr )
{
Grocy . FrontendHelpers . EndUiBusy ( ) ;
console . error ( xhr ) ;
}
) ;
} ) ;
2020-08-30 12:18:16 +02:00
$ ( document ) . on ( 'click' , '.delete-task-button' , function ( e )
2018-09-23 09:22:54 +02:00
{
2018-09-24 09:30:26 +02:00
e . preventDefault ( ) ;
2020-10-14 22:58:26 +02:00
var objectName = $ ( e . currentTarget ) . attr ( 'data-task-name' ) ;
2018-09-23 09:22:54 +02:00
var objectId = $ ( e . currentTarget ) . attr ( 'data-task-id' ) ;
2018-09-22 22:01:32 +02:00
2018-09-23 09:22:54 +02:00
bootbox . confirm ( {
2019-05-01 20:19:18 +02:00
message : _ _t ( 'Are you sure to delete task "%s"?' , objectName ) ,
2019-09-24 10:24:47 +02:00
closeButton : false ,
2018-09-23 09:22:54 +02:00
buttons : {
confirm : {
2019-05-01 20:19:18 +02:00
label : _ _t ( 'Yes' ) ,
2018-09-23 09:22:54 +02:00
className : 'btn-success'
} ,
cancel : {
2019-05-01 20:19:18 +02:00
label : _ _t ( 'No' ) ,
2018-09-23 09:22:54 +02:00
className : 'btn-danger'
}
} ,
callback : function ( result )
{
if ( result === true )
{
2019-01-19 14:51:51 +01:00
Grocy . Api . Delete ( 'objects/tasks/' + objectId , { } ,
2018-09-23 09:22:54 +02:00
function ( result )
2018-09-22 22:01:32 +02:00
{
2020-01-28 19:27:18 +01:00
animateCSS ( "#task-" + objectId + "-row" , "fadeOut" , function ( )
2018-09-22 22:01:32 +02:00
{
2020-01-28 19:27:18 +01:00
$ ( "#task-" + objectId + "-row" ) . tooltip ( "hide" ) ;
$ ( "#task-" + objectId + "-row" ) . remove ( ) ;
2018-09-22 22:01:32 +02:00
} ) ;
2018-09-23 09:22:54 +02:00
} ,
function ( xhr )
{
console . error ( xhr ) ;
2018-09-22 22:01:32 +02:00
}
2018-09-23 09:22:54 +02:00
) ;
}
2018-09-22 22:01:32 +02:00
}
2018-09-23 09:22:54 +02:00
} ) ;
2018-09-22 22:01:32 +02:00
} ) ;
2018-09-23 19:26:13 +02:00
$ ( "#show-done-tasks" ) . change ( function ( )
{
if ( this . checked )
{
window . location . href = U ( '/tasks?include_done' ) ;
}
else
{
window . location . href = U ( '/tasks' ) ;
}
} ) ;
if ( GetUriParam ( 'include_done' ) )
{
$ ( "#show-done-tasks" ) . prop ( 'checked' , true ) ;
}
2018-09-22 22:01:32 +02:00
function RefreshStatistics ( )
{
var nextXDays = $ ( "#info-due-tasks" ) . data ( "next-x-days" ) ;
2019-01-19 00:37:21 -07:00
Grocy . Api . Get ( 'tasks' ,
2018-09-22 22:01:32 +02:00
function ( result )
{
var dueCount = 0 ;
var overdueCount = 0 ;
var now = moment ( ) ;
var nextXDaysThreshold = moment ( ) . add ( nextXDays , "days" ) ;
2020-08-30 12:18:16 +02:00
result . forEach ( element =>
{
2018-09-23 09:22:54 +02:00
var date = moment ( element . due _date ) ;
2018-09-22 22:01:32 +02:00
if ( date . isBefore ( now ) )
{
overdueCount ++ ;
}
else if ( date . isBefore ( nextXDaysThreshold ) )
{
dueCount ++ ;
}
} ) ;
2019-01-19 00:37:21 -07:00
2020-11-07 14:53:45 +01:00
$ ( "#info-due-tasks" ) . html ( '<span class="d-block d-md-none">' + dueCount + ' <i class="fas fa-clock"></i></span><span class="d-none d-md-block">' + _ _n ( dueCount , '%s task is due to be done' , '%s tasks are due to be done' ) + ' ' + _ _n ( nextXDays , 'within the next day' , 'within the next %s days' ) ) ;
$ ( "#info-overdue-tasks" ) . html ( '<span class="d-block d-md-none">' + overdueCount + ' <i class="fas fa-times-circle"></i></span><span class="d-none d-md-block">' + _ _n ( overdueCount , '%s task is overdue to be done' , '%s tasks are overdue to be done' ) ) ;
2018-09-22 22:01:32 +02:00
} ,
function ( xhr )
{
console . error ( xhr ) ;
}
) ;
}
RefreshStatistics ( ) ;