OpenXE/classes/Modules/Resubmission/www/js/resubmission_task_ui.js
2021-05-21 08:49:41 +02:00

501 lines
18 KiB
JavaScript

/**
* Modul zur Bedienung der Wiedervorlagen-Aufgaben
*/
var ResubmissionTasksUi = (function ($) {
var me = {
storage: {
dataTableName: 'resubmission_tasks',
resubmissionId: null,
$editDialog: null
},
/**
* @param {number} resubmissionId Wiedervorlagen-ID
*/
init: function (resubmissionId) {
me.storage.resubmissionId = parseInt(resubmissionId, 10);
if (isNaN(me.storage.resubmissionId) || me.storage.resubmissionId <= 0) {
throw 'Could not initialize ResubmissionTasksUi. Required parameter is missing: resubmissionId';
}
me.storage.$editDialog = $('#editResubmissionTask');
if (me.storage.$editDialog.length === 0) {
throw 'Could not initialize ResubmissionTasksUi. Required elements are missing: #editResubmissionTask';
}
me.registerEvents();
me.initEditDialog();
me.loadDataTable();
},
/**
* @return {void}
*/
registerEvents: function () {
// Aufgabe anlegen
var $taskCreateButton = $('#resubmissiontask-create');
$taskCreateButton.off('click');
$taskCreateButton.on('click', function (e) {
e.preventDefault();
me.createTask();
});
// Aufgabe bearbeiten
$(document).off('click', '.resubmissiontask-edit-button');
$(document).on('click', '.resubmissiontask-edit-button', function (e) {
e.preventDefault();
var taskId = $(this).data('taskId');
me.editTask(taskId);
});
// Aufgabe löschen
$(document).off('click', '.resubmissiontask-delete-button');
$(document).on('click', '.resubmissiontask-delete-button', function (e) {
e.preventDefault();
var taskId = $(this).data('taskId');
me.deleteTask(taskId);
});
// Aufgaben-Status ändern
$(document).off('click', '.resubmissiontask-state-button');
$(document).on('click', '.resubmissiontask-state-button', function (e) {
e.preventDefault();
var taskId = $(this).data('taskId');
var taskState = $(this).data('taskState');
if (taskState === 'open') {
me.setTaskState(taskId, 'completed');
}
if (taskState === 'completed') {
me.setTaskState(taskId, 'open');
}
});
},
/**
* @return {void}
*/
destroy: function () {
me.destroyDataTable();
if (me.storage.$editDialog !== null) {
me.storage.$editDialog.dialog('destroy');
}
me.storage.$editDialog = null;
me.storage.resubmissionId = null;
},
/**
* Öffnet den Dialog zum Anlegen einer Aufgabe
*
* @return {void}
*/
createTask: function () {
me.resetEditDialog();
$.ajax({
url: 'index.php?module=wiedervorlage&action=edit&cmd=taskstageslist',
data: {
resubmission_id: me.storage.resubmissionId
},
method: 'post',
dataType: 'json',
success: function (data) {
// Stages-Dropdown füllen
var $stageSelect = $('#resubmissiontask-requiredcompletionstage').html('');
if (data.hasOwnProperty('stages')) {
$('<option>').val(0).html('- Nie -').appendTo($stageSelect);
$.each(data.stages, function (index, stage) {
var stageName = stage.shortname !== '' ? stage.shortname : stage.longname;
$('<option>').val(stage.id).html(stageName).appendTo($stageSelect);
});
}
$stageSelect.val(0);
me.storage.$editDialog.find('#resubmissiontask-id').val('-1');
me.openEditDialog();
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
}
});
},
/**
* Öffnet den Dialog zum Bearbeiten einer Aufgabe
*
* @param {number} taskId
*
* @return {void}
*/
editTask: function (taskId) {
$.ajax({
url: 'index.php?module=wiedervorlage&action=edit&cmd=taskget',
data: {
resubmission_id: me.storage.resubmissionId,
task_id: taskId
},
method: 'post',
dataType: 'json',
success: function (data) {
$('#resubmissiontask-id').val(data.id);
$('#resubmissiontask-title').val(data.title);
$('#resubmissiontask-state').val(data.state);
$('#resubmissiontask-priority').val(data.priority);
$('#resubmissiontask-employee').val(data.employee_name);
$('#resubmissiontask-customer').val(data.customer);
$('#resubmissiontask-submissiondate').val(data.submission_date);
$('#resubmissiontask-submissiontime').val(data.submission_time);
$('#resubmissiontask-project').val(data.project_name);
$('#resubmissiontask-subproject').val(data.subproject_name);
if (CKEDITOR.instances.hasOwnProperty('resubmissiontaskdescription')
&& CKEDITOR.instances.resubmissiontaskdescription) {
CKEDITOR.instances.resubmissiontaskdescription.setData(data.description);
} else {
$('textarea#resubmissiontaskdescription').val(data.description);
}
// Stages-Dropdown füllen
var $stageSelect = $('#resubmissiontask-requiredcompletionstage').html('');
if (data.hasOwnProperty('stages')) {
$('<option>').val(0).html('- Nie -').appendTo($stageSelect);
$.each(data.stages, function (index, stage) {
$('<option>').val(stage.id).html(stage.shortname).appendTo($stageSelect);
});
}
$stageSelect.val(data.required_completion_stage_id);
me.openEditDialog();
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
}
});
},
/**
* Speichert das geöffnete Aufgaben-Modal;
*
* Wird verwendet für "Aufgabe bearbeiten" und "Aufgabe anlegen"
*
* @return {void}
*/
saveTask: function () {
var $description = $('textarea#resubmissiontaskdescription');
var descriptionText = $description.ckeditor().editor.getData();
var formData = {
resubmission_id: me.storage.resubmissionId,
task_id: $('#resubmissiontask-id').val(),
project: $('#resubmissiontask-project').val(),
subproject: $('#resubmissiontask-subproject').val(),
title: $('#resubmissiontask-title').val(),
state: $('#resubmissiontask-state').val(),
priority: $('#resubmissiontask-priority').val(),
employee: $('#resubmissiontask-employee').val(),
customer: $('#resubmissiontask-customer').val(),
submission_date: $('#resubmissiontask-submissiondate').val(),
submission_time: $('#resubmissiontask-submissiontime').val(),
required_completion_stage_id: $('#resubmissiontask-requiredcompletionstage').val(),
description: descriptionText
};
$.ajax({
url: 'index.php?module=wiedervorlage&action=edit&cmd=tasksave',
data: formData,
method: 'post',
dataType: 'json',
beforeSend: function () {
App.loading.open();
},
success: function (data) {
if (data.success === true) {
me.resetEditDialog();
me.reloadDataTable();
me.closeEditDialog();
}
if (data.success === false) {
alert(data.error);
}
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
},
complete: function () {
App.loading.close();
}
});
},
/**
* Löscht eine Aufgabe; Löschen muss vorher bestätigt werden
*
* @param {number} taskId
*
* @return {void}
*/
deleteTask: function (taskId) {
var confirmation = confirm('Möchten Sie die Aufgabe wirklich löschen?');
if (!confirmation) {
return;
}
$.ajax({
url: 'index.php?module=wiedervorlage&action=edit&cmd=taskdelete',
data: {
task_id: taskId,
resubmission_id: me.storage.resubmissionId
},
method: 'post',
dataType: 'json',
success: function () {
me.reloadDataTable();
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
}
});
},
/**
* Status der Aufgabe ändern
*
* @param {number} taskId
* @param {string} taskState [open|completed]
*/
setTaskState: function (taskId, taskState) {
if (taskState !== 'open' && taskState !== 'completed') {
return;
}
$.ajax({
url: 'index.php?module=wiedervorlage&action=edit&cmd=taskstatechange',
data: {
task_id: taskId,
task_state: taskState,
resubmission_id: me.storage.resubmissionId
},
method: 'post',
dataType: 'json',
success: function () {
me.reloadDataTable();
},
error: function (jqXhr) {
alert('Fehler: ' + jqXhr.responseJSON.error);
}
});
},
/**
* @return {void}
*/
initEditDialog: function () {
me.storage.$editDialog.dialog({
modal: true,
bgiframe: true,
closeOnEscape: false,
minWidth: 980,
minHeight: 400,
autoOpen: false,
buttons: [{
text: 'Abbrechen',
click: function () {
me.resetEditDialog();
me.closeEditDialog();
}
}, {
text: 'Speichern',
click: function () {
me.saveTask();
}
}],
open: function () {
me.initCkEditor();
// ANFANG Workaround Projekt-Arbeitspaket-AutoComplete
addClicklupe();
//lupeclickevent();
// ENDE Workaround Projekt-Arbeitspaket-AutoComplete
// ANFANG Workaround Projekt-Arbeitspaket-AutoComplete
$('input#resubmissiontask-subproject').autocomplete({
source: 'index.php?module=ajax&action=filter&filtername=arbeitspaket&projekt=' + 0
});
$('input#resubmissiontask-project').autocomplete({
source: 'index.php?module=ajax&action=filter&filtername=projektname',
select: function (event, ui) {
if (ui.item) {
$('input#resubmissiontask-subproject').autocomplete({
source: 'index.php?module=ajax&action=filter&filtername=arbeitspaket&projekt=' +
ui.item.value
});
}
}
});
// ENDE Workaround Projekt-Arbeitspaket-AutoComplete
},
close: function () {
me.resetEditDialog();
me.destroyCkEditor();
}
});
},
/**
* CKEditor für Beschreibungsfeld initialisieren
*
* Workaround für CKEditor
* Workaround ist notwendig weil `$this->app->YUI->CkEditor('resubmissiontaskdescription','belege');` nicht
* funktioniert
*
* @return void
*/
initCkEditor: function () {
if (CKEDITOR.instances.hasOwnProperty('resubmissiontaskdescription')) {
return; // Ist bereits initialisiert
}
if (CKEDITOR.instances.resubmissiontaskdescription) {
return;
}
var ckeditorSettings = {
toolbar:
[
['Bold', 'Italic', 'Underline', 'RemoveFormat', '-', 'Undo', 'Redo'],
['NumberedList', 'BulletedList'],
['Font', 'FontSize', 'TextColor'],
['Source']
],
allowedContent: true,
extraPlugins: 'colorbutton,font'
};
var $description = me.storage.$editDialog.find('textarea#resubmissiontaskdescription');
$description.ckeditor(ckeditorSettings);
},
/**
* @return void
*/
destroyCkEditor: function () {
if (!CKEDITOR.instances.hasOwnProperty('resubmissiontaskdescription')) {
return; // Ist nicht initialisiert
}
if (!CKEDITOR.instances.resubmissiontaskdescription) {
return;
}
CKEDITOR.instances.resubmissiontaskdescription.destroy();
},
/**
* @return void
*/
openEditDialog: function () {
me.storage.$editDialog.dialog('open');
},
/**
* @return void
*/
closeEditDialog: function () {
me.storage.$editDialog.dialog('close');
},
/**
* @return {void}
*/
resetEditDialog: function () {
me.storage.$editDialog.find('#resubmissiontask-id').val('0');
me.storage.$editDialog.find('#resubmissiontask-title').val('');
me.storage.$editDialog.find('#resubmissiontask-state').val('open');
me.storage.$editDialog.find('#resubmissiontask-priority').val('medium');
me.storage.$editDialog.find('#resubmissiontask-employee').val('');
me.storage.$editDialog.find('#resubmissiontask-customer').val('');
me.storage.$editDialog.find('#resubmissiontask-submissiondate').val('');
me.storage.$editDialog.find('#resubmissiontask-submissiontime').val('');
me.storage.$editDialog.find('#resubmissiontask-project').val('');
me.storage.$editDialog.find('#resubmissiontask-subproject').val('');
me.storage.$editDialog.find('#resubmissiontask-requiredcompletionstage').html(
'<option value="0">- Nie -</option>'
);
if (CKEDITOR.instances.hasOwnProperty('resubmissiontaskdescription')) {
CKEDITOR.instances.resubmissiontaskdescription.setData('');
}
},
/**
*
*
* @return {void}
*/
loadDataTable: function () {
me.fetchDataTableHtml()
.then(
function () {
// DataTable-Daten laden und anzeigen
me.initDataTable();
},
function () {
// Fehler beim Abrufen der DataTable-Einstellungen
alert('Fehler beim Abrufen der Datatable \'resubmission_tasks\'.');
}
);
},
/**
* DataTable-HTML-Tabelle + Settings-JSON laden
*
* @return {jqXHR} jQuery jqXHR-Objekt
*/
fetchDataTableHtml: function () {
if (me.storage.resubmissionId === null) {
throw 'Could not initialize ResubmissionTasksUi. Required settings are missing: resubmissionId';
}
return $.ajax({
url: 'index.php?module=wiedervorlage&action=edit&cmd=tasktablehtml',
data: { 'id': me.storage.resubmissionId },
type: 'GET',
dataType: 'html',
success: function (htmlResult) {
$('#resubmission-tasks-datatable').html(htmlResult);
}
});
},
/**
* @return {void}
*/
initDataTable: function () {
DataTableHelper.initDataTable(me.storage.dataTableName);
},
/**
* @return {void}
*/
reloadDataTable: function () {
DataTableHelper.refreshDataTable(me.storage.dataTableName);
},
/**
* @return {void}
*/
destroyDataTable: function () {
DataTableHelper.destroyDataTable(me.storage.dataTableName);
}
};
return {
init: me.init,
destroy: me.destroy,
editTask: me.editTask
};
})(jQuery);