1import { o as __toESM } from "./chunk-CPYxVWes.js"; 2import { t as require_jquery } from "./jquery-Bw33iOZF.js"; 3import { B as buildAvatars, G as datetime_to_dynamic_datetimestring, J as datetime_tz_to_datetime, Y as displayErrors, a as PersonPicker, c as _days_short_string_array, ct as openMorphModal, ht as truncateString, lt as paginator_menu, mt as trans, n as InteractiveID, q as datetime_tz_to_date, r as MorphModalIsOpen, ut as populateTable } from "./global-CtxDzNbZ.js"; 4import { t as require_daterangepicker } from "./daterangepicker-gcCN3p8A.js"; 5require_daterangepicker(); 6var import_jquery = /* @__PURE__ */ __toESM(require_jquery(), 1); 7var tasks_loaded = false; 8var taskcenter_task_id = null; 9(0, import_jquery.default)(document).on("click", ".task_resolve", function() { 10 let task_id = (0, import_jquery.default)(this).data("task_id"); 11 Swal.fire({ 12 title: trans("Update task"), 13 text: trans("Are you sure you mark the task as resolved?"), 14 icon: "warning", 15 showCancelButton: true, 16 cancelButtonColor: "#e1e1e1", 17 cancelButtonText: `<i class="fas fa-times-circle fa-fw"></i> ${trans("Back")}`, 18 confirmButtonColor: "#1cc88a", 19 confirmButtonText: `<i class="fas fa-check-circle fa-fw"></i> ${trans("Yes")}` 20 }).then((result) => { 21 if (result.value) taskcard_changeTaskStatus(task_id, "resolve"); 22 }); 23}); 24(0, import_jquery.default)(document).on("click", ".task_delete", function() { 25 let task_id = (0, import_jquery.default)(this).data("task_id"); 26 Swal.fire({ 27 title: trans("Update task"), 28 text: trans("Are you sure you mark the task as deleted?"), 29 icon: "warning", 30 showCancelButton: true, 31 cancelButtonColor: "#e1e1e1", 32 cancelButtonText: `<i class="fas fa-times-circle fa-fw"></i> ${trans("Back")}`, 33 confirmButtonColor: "#1cc88a", 34 confirmButtonText: `<i class="fas fa-check-circle fa-fw"></i> ${trans("Yes")}` 35 }).then((result) => { 36 if (result.value) taskcard_changeTaskStatus(task_id, "delete"); 37 }); 38}); 39(0, import_jquery.default)(document).on("click", ".task_pause", function() { 40 let task_id = (0, import_jquery.default)(this).data("task_id"); 41 Swal.fire({ 42 title: trans("Update task"), 43 text: trans("Are you sure you mark the task as paused?"), 44 icon: "warning", 45 showCancelButton: true, 46 cancelButtonColor: "#e1e1e1", 47 cancelButtonText: `<i class="fas fa-times-circle fa-fw"></i> ${trans("Back")}`, 48 confirmButtonColor: "#1cc88a", 49 confirmButtonText: `<i class="fas fa-check-circle fa-fw"></i> ${trans("Yes")}` 50 }).then((result) => { 51 if (result.value) taskcard_changeTaskStatus(task_id, "pause"); 52 }); 53}); 54(0, import_jquery.default)(document).on("click", ".task_open", function() { 55 taskcard_getTask((0, import_jquery.default)(this).data("task_id")); 56 if (!MorphModalIsOpen("#taskcard_modal")) openMorphModal("#taskcard_modal"); 57}); 58(0, import_jquery.default)(document).on("click", ".task_back", function() { 59 if (!tasks_loaded) taskcard_getTasks(); 60 (0, import_jquery.default)("#taskcenter_task_details_container").html("").addClass("d-none"); 61 (0, import_jquery.default)("#task_overview_container").removeClass("d-none"); 62}); 63(0, import_jquery.default)(document).on("click", ".tasks_open", function() { 64 taskcard_getTasks(); 65 if (!MorphModalIsOpen("#taskcard_modal")) openMorphModal("#taskcard_modal"); 66}); 67(0, import_jquery.default)(document).on("click", ".taskcard_status_select", function() { 68 taskcard_getTasks(); 69}); 70(0, import_jquery.default)(document).on("change", "#taskcard_own_tasks_only", function() { 71 taskcard_getTasks(); 72}); 73(0, import_jquery.default)(document).on("click", "#task_pagination_size_10,#task_pagination_size_25,#task_pagination_size_100", function() { 74 (0, import_jquery.default)("#task_pagination_size").val((0, import_jquery.default)(this).val()); 75 taskcard_getTasks(); 76}); 77function taskcard_getTasks(option = { page: 0 }) { 78 tasks_loaded = true; 79 let paginator_config = { 80 callback_function: taskcard_getTasks, 81 filter_data: [{ 82 label: trans("Own tasks only"), 83 column_name: "own_tasks_only", 84 type: "checkbox" 85 }, { 86 label: trans("Status"), 87 column_name: "status", 88 type: "checkbox-list", 89 data: { list: filter_task_status } 90 }], 91 search_enabled: true, 92 search_label: trans("Search for task"), 93 pagination_size: localStorage.getItem(`paginator_per_page_taskcard_getTasks`) 94 }; 95 paginator_config = { 96 ...paginator_config, 97 ...option 98 }; 99 let table = "taskcard_tasks_table"; 100 (0, import_jquery.default)(`#${table}, #${table}_wrapper`).addClass("tableloader"); 101 import_jquery.default.ajax({ 102 type: "GET", 103 url: `${_route_prefix}/ajax/fragment/gettasks`, 104 data: { 105 page: paginator_config?.page, 106 search: paginator_config?.search, 107 filters: paginator_config?.filters, 108 pagination_size: paginator_config?.pagination_size 109 }, 110 success: function(data) { 111 let tasks = data.data; 112 let options = { 113 searching: false, 114 paging: false, 115 info: false, 116 order: [[0, "desc"]] 117 }; 118 let collection = []; 119 let columns = [ 120 { 121 data: "id", 122 title: "#", 123 width: "5%" 124 }, 125 { 126 data: "status", 127 title: trans("Status"), 128 width: "5%" 129 }, 130 { 131 data: "title", 132 title: trans("Description"), 133 width: "57%" 134 }, 135 { 136 data: "assigned_group", 137 title: trans("Responsible"), 138 width: "10%" 139 }, 140 { 141 data: "assignee", 142 title: trans("Assigned"), 143 width: "10%" 144 }, 145 { 146 data: "due_date", 147 title: trans("Due date"), 148 width: "10%" 149 }, 150 { 151 data: "created_at", 152 title: trans("Created at"), 153 width: "10%" 154 }, 155 { 156 data: "action", 157 title: "<i class=\"fas fa-bolt fa-fw\"></i>", 158 className: "text-center", 159 width: "3%" 160 } 161 ]; 162 for (let i = 0; tasks.length > i; i++) { 163 let task = tasks[i]; 164 let account_html = ``; 165 switch (task.resource) { 166 case "App\\Account": 167 account_html = InteractiveID({ 168 string: "account_id:" + task.identifier, 169 icon: "<i class='fas fa-user fa-fw'></i>" 170 }); 171 break; 172 case "App\\Models\\AccountMaster\\AccountMaster": 173 account_html = InteractiveID({ 174 string: "accountmaster_id:" + task.identifier, 175 icon: "<i class='fas fa-building fa-fw'></i>" 176 }); 177 break; 178 } 179 let status_html = ``; 180 switch (task.status) { 181 case 0: 182 status_html = `<small class="badge badge-danger">${trans("Deleted")}</small class>`; 183 break; 184 case 1: 185 status_html = `<small class="badge badge-primary">${trans("Active")}</small>`; 186 break; 187 case 2: 188 status_html = `<small class="badge badge-warning">${trans("Paused")}</small>`; 189 break; 190 case 3: 191 status_html = `<small class="badge badge-success">${trans("Resolved")}</small>`; 192 break; 193 } 194 let assignee_html = ""; 195 if (task.rel_assignee) { 196 let avatar_html; 197 if (task.rel_assignee.avatar) avatar_html = buildAvatars({ 198 useImagePath: `/upload/avatar/${task.rel_assignee.avatar}`, 199 setheight: 20, 200 setwidth: 20, 201 classes: "d-inline rounded", 202 returnHtml: true 203 }); 204 else avatar_html = buildAvatars({ 205 setheight: 20, 206 setwidth: 20, 207 classes: "d-inline rounded", 208 returnHtml: true 209 }); 210 assignee_html = ` 211 <div class="d-inline"> 212 <small class="badge badge-light">${avatar_html} ${task.rel_assignee.name} ${task.rel_assignee.lastname ?? ""}</small> 213 </div> 214 `; 215 } else assignee_html = ` 216 <div class="d-inline"> 217 <small class="text-muted">-- ${trans("Not assigned")} --</small> 218 </div> 219 `; 220 let due_date_html = ""; 221 let due_date_badge = "badge-light"; 222 if (task.hasOwnProperty("due_date") && task.due_date != null) { 223 var then = dayjs(); 224 if (dayjs(task.due_date).diff(then, "second") < 0) due_date_badge = "badge-danger"; 225 task.due_date != null ? due_date_html = `<small title="${datetime_tz_to_date(task.due_date)}" class="text-center badge ${due_date_badge}"><i class="fas fa-clock fa-fw"></i> ${datetime_tz_to_date(task.due_date)}</small>` : due_date_html = ""; 226 } 227 let action_html = ` 228 ${account_html} 229 <button class="btn btn-sm btn-light task_open" data-task_id="${task.id}"><i class="fas fa-tasks fa-fw"></i></button> 230 `; 231 let item = { 232 "id": `<span class="badge badge-light">#${task.id}</span>`, 233 "status": `${status_html}`, 234 "title": `<small style="min-width:150px;">${truncateString(task.title, 120)}</small>`, 235 "assigned_group": task.rel_assigned_group ? task.rel_assigned_group.name : "-", 236 "assignee": assignee_html, 237 "due_date": due_date_html, 238 "created_at": `<small title="${datetime_tz_to_datetime(task.created_at)}" class="text-muted flex-shrink-1 text-center " data-task_id="${task.id}">${datetime_to_dynamic_datetimestring(datetime_tz_to_datetime(task.created_at))}</small>`, 239 "action": action_html 240 }; 241 collection.push(item); 242 } 243 populateTable({ 244 collection, 245 table, 246 columns, 247 options 248 }); 249 paginator_menu(table, data, paginator_config); 250 }, 251 error: function(xhr) { 252 displayErrors(xhr, typeof table !== "undefined" ? table : null); 253 } 254 }); 255} 256function taskcard_updateAssignee(assignee_id) { 257 import_jquery.default.ajax({ 258 type: "POST", 259 url: `${_route_prefix}/ajax/fragment/updateassignee`, 260 data: { 261 task_id: taskcenter_task_id, 262 assignee_id 263 }, 264 success: function(data) { 265 let assignee = data.data; 266 let avatar_html; 267 if (assignee.avatar) avatar_html = buildAvatars({ 268 useImagePath: `/upload/avatar/${assignee.avatar}`, 269 setheight: 20, 270 setwidth: 20, 271 classes: "d-inline rounded", 272 returnHtml: true 273 }); 274 else avatar_html = buildAvatars({ 275 setheight: 20, 276 setwidth: 20, 277 classes: "d-inline rounded", 278 returnHtml: true 279 }); 280 (0, import_jquery.default)(".taskcard_get_assignees").html(`${avatar_html} ${assignee.name}`); 281 taskcard_getTasks(); 282 }, 283 error: function(xhr) { 284 displayErrors(xhr, typeof table !== "undefined" ? table : null); 285 } 286 }); 287} 288function taskcard_getAssignees(task_id, selected_assignee = null) { 289 import_jquery.default.ajax({ 290 type: "POST", 291 url: `${_route_prefix}/ajax/fragment/getassignees`, 292 data: {}, 293 success: function(data) { 294 let assignees = data; 295 let selected_person_id = 0; 296 if (selected_assignee) selected_person_id = selected_assignee.id; 297 PersonPicker({ persons: assignees }, { 298 id: "taskcard_selected_assignee", 299 target: "#taskcard_assignee_container", 300 display_avatar: true, 301 selected_person_id, 302 callback: function(selected_id) { 303 taskcard_updateAssignee(selected_id); 304 } 305 }); 306 }, 307 error: function(xhr) { 308 displayErrors(xhr, typeof table !== "undefined" ? table : null); 309 } 310 }); 311} 312function taskcard_getTask(task_id) { 313 taskcenter_task_id = task_id; 314 import_jquery.default.ajax({ 315 type: "POST", 316 url: `${_route_prefix}/ajax/fragment/gettask`, 317 data: { task_id }, 318 success: function(data) { 319 let task = data; 320 let isDisabled = `disabled="disabled"`; 321 if (task.status === 1) isDisabled = ""; 322 let assignee = null; 323 if (task.rel_assignee) assignee = task.rel_assignee; 324 let due_date_badge = "badge-light"; 325 let due_date_content = `${trans("Add due date")}`;
326 if (task.hasOwnProperty("due_date") && task.due_date != null) { 327 var then = dayjs(); 328 if (dayjs(task.due_date).diff(then, "second") < 0) due_date_badge = "badge-danger"; 329 task.due_date != null && (due_date_content = `${datetime_tz_to_date(task.due_date)}`); 330 } 331 let due_date_btn_html = `<button class="btn btn-sm btn-light task_add_duedate ${due_date_badge}" data-task_id="${task_id}" ${isDisabled}><input type="hidden" id="task_duedate"><i class="fas fa-clock fa-fw"></i> ${due_date_content}</button>`; 332 let resource_btn = ``; 333 switch (task.resource) { 334 case "App\\Account": 335 resource_btn = InteractiveID({ 336 string: `account_id:${task.identifier}`, 337 tooltip: ``, 338 icon: "<i class='fas fa-user fa-fw'></i>", 339 element_type: "a", 340 href: `${_route_prefix}/account/${task.identifier}` 341 }); 342 break; 343 case "App\\Models\\AccountMaster\\AccountMaster": 344 resource_btn = `${InteractiveID({ 345 string: "accountmaster_id:" + task.identifier, 346 icon: "<i class='fas fa-user-tie fa-fw'></i>" 347 })}`; 348 break; 349 } 350 let html = ` 351 <div class="row"> 352 <div class="col-12 task_toolbar d-flex justify-content-between align-items-center"> 353 <button title="${trans("Back to overview")}" type="button" class="btn btn-sm btn-light task_back"><i class="fas fa-arrow-left fa-fw"></i> ${trans("Back to overview")}</button> 354 <span> 355 <button title="${trans("Delete task")}" type="button" class="btn btn-sm btn-danger task_delete" data-task_id="${task_id}" ${isDisabled}><i class="fas fa-trash fa-fw"></i></button> 356 </span> 357 </div> 358 </div> 359 <hr class="dashed"> 360 <div class="task"> 361 <div class="row"> 362 <div class="col-9 border-right"> 363 <div class="d-flex justify-content-center"> 364 <span class="font-bold text-center">${trans(task.title)}</span> 365 </div> 366 <div class="row"> 367 <div class="col-12"> 368 <small>${trans(task.description)}</small> 369 </div> 370 </div> 371 </div> 372 <div class="col-3"> 373 <div class="row"> 374 <div class="col-12 text-center"> 375 ${trans("Task id")} <span class="badge badge-counter border">#${task.id}</span> 376 </div> 377 </div> 378 <hr class="dashed"> 379 <div class="d-flex justify-content-between"> 380 <small>${trans("Responsible")}</small> 381 <span>${trans(task.rel_assigned_group?.name ?? "-")}</span> 382 </div> 383 <hr class="dashed"> 384 <div class="d-flex justify-content-between"> 385 <small>${trans("Assigned")}</small> 386 <div id="taskcard_assignee_container"></div> 387 </div> 388 <hr class="dashed"> 389 <div class="d-flex justify-content-between"> 390 <small>${trans("Due date")}</small> 391 ${due_date_btn_html} 392 </div> 393 <hr class="dashed"> 394 <div class="d-flex justify-content-center"> 395 ${resource_btn} 396 </div> 397 <div class="row"> 398 <div class="col-12"> 399 <small title="${datetime_tz_to_datetime(task.created_at)}" class="text-muted">${trans("Created at")} ${datetime_to_dynamic_datetimestring(datetime_tz_to_datetime(task.created_at))}</small> 400 </div> 401 </div> 402 <div class="row"> 403 <div class="col-12"> 404 <small title="${datetime_tz_to_datetime(task.updated_at)}" class="text-muted">${trans("Updated at")} ${datetime_to_dynamic_datetimestring(datetime_tz_to_datetime(task.updated_at))}</small> 405 </div> 406 </div> 407 </div> 408 </div> 409 </div> 410 <hr class="dashed"> 411 <div class="row"> 412 <div class="col-12"> 413 <button class="btn btn-sm btn-outline-success task_resolve float-right" data-task_id="${task.id}" ${isDisabled}><i class="fas fa-circle-check fa-fw"></i> ${trans("Mark as resolved")}</button> 414 </div> 415 </div> 416 `; 417 (0, import_jquery.default)("#taskcenter_task_details_container").html(html).removeClass("d-none"); 418 if ((0, import_jquery.default)(".task_add_duedate").length) { 419 (0, import_jquery.default)(".task_add_duedate").daterangepicker({ 420 "singleDatePicker": true, 421 "timePicker": false, 422 "timePicker24Hour": true, 423 "timePickerSeconds": false, 424 "autoUpdateInput": true, 425 "minDate": dayjs(), 426 "locale": { 427 "format": "YYYY-MM-DD", 428 "separator": " - ", 429 "applyLabel": trans("Apply"), 430 "cancelLabel": trans("Undo"), 431 "fromLabel": trans("From"), 432 "toLabel": trans("To"), 433 "customRangeLabel": "Custom", 434 "weekLabel": trans("Week"), 435 "daysOfWeek": _days_short_string_array,
436 "monthNames": _month_long_string_array, 437 "firstDay": 1 438 }, 439 "linkedCalendars": false, 440 "showCustomRangeLabel": false, 441 "alwaysShowCalendars": true, 442 "opens": "center", 443 "drops": "down" 444 }); 445 (0, import_jquery.default)(".task_add_duedate").on("apply.daterangepicker", function(ev, picker) { 446 (0, import_jquery.default)(".task_add_duedate").html(`<i class="fas fa-clock fa-fw"></i> ${unix_to_date(picker.startDate.unix())}`); 447 (0, import_jquery.default)("#task_duedate").val(picker.startDate.unix()); 448 taskcard_changeProperty((0, import_jquery.default)(this).data("task_id"), "due_date", picker.startDate.unix()); 449 }); 450 } 451 taskcard_getAssignees(task_id, assignee); 452 (0, import_jquery.default)("#task_overview_container").addClass("d-none"); 453 }, 454 error: function(xhr) { 455 displayErrors(xhr, typeof table !== "undefined" ? table : null); 456 } 457 }); 458} 459function taskcard_changeTaskStatus(task_id, status) { 460 import_jquery.default.ajax({ 461 type: "POST", 462 url: `${_route_prefix}/ajax/fragment/changestatus`, 463 data: { 464 task_id, 465 status 466 }, 467 success: function(data) { 468 if (status === "resolve") { 469 taskcard_getTasks(); 470 (0, import_jquery.default)("#taskcenter_task_details_container").html("").addClass("d-none"); 471 (0, import_jquery.default)("#task_overview_container").removeClass("d-none"); 472 } 473 }, 474 error: function(xhr) { 475 displayErrors(xhr, typeof table !== "undefined" ? table : null); 476 } 477 }); 478} 479function taskcard_changeProperty(task_id, property, value) { 480 import_jquery.default.ajax({ 481 type: "POST", 482 url: `${_route_prefix}/ajax/fragment/changeproperty`, 483 data: { 484 task_id, 485 property, 486 value 487 }, 488 success: function(data) { 489 taskcard_getTasks(); 490 }, 491 error: function(xhr) { 492 displayErrors(xhr, typeof table !== "undefined" ? table : null); 493 } 494 }); 495} 496//#endregion 497export { taskcard_changeProperty, taskcard_changeTaskStatus, taskcard_getAssignees, taskcard_getTask, taskcard_getTasks, taskcard_updateAssignee };
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.