mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-16 04:57:15 +01:00
501 lines
18 KiB
JavaScript
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);
|