var TicketFiles = function ($) { "use strict"; var me = { elem: {}, selector: { dialog: '#attachment-assign-dialog', dialogTabs: '#filetabs', dialogContent: '#assign-dialog-content', documentTableContainer: '.document-table-container', documentFilterCheckbox: '.document-filter-checkbox', documentAssignButton: '.document-assign-action', createLiabilityButton: '.create-liability-button' }, storage: { fileId: null, previewFileId: null, documentType: 'verbindlichkeit', dataTableSettings: {} }, init: function () { me.elem.$assignDialog = $(me.selector.dialog); me.attachEvents(); me.initDialog(); }, /** * Benötigte Events attachen */ attachEvents: function () { // Hinzufügen-Button wird angeklickt $(document).on('click', '.attachment-assign-button', function (e) { e.preventDefault(); me.onClickAddButton(this); }); // Im Dialog-Modal wird der Tab gewechselt $(document).on('tabsactivate', me.selector.dialogTabs, function(event, ui) { me.onChangeFileTab(ui.newTab, ui.oldTab); }); // DataTable-Filter wird geändert $(document).on('change', me.selector.documentFilterCheckbox, function () { me.onChangeTableFilter(this); }); // "Datei zuweisen"-Button wurde in UI-Dialog-Table angeklickt $(document).on('click', me.selector.documentAssignButton, function (e) { e.preventDefault(); me.onClickDocumentAssignButton(this); }); // Neue Verbindlichkeit anlegen $(document).on('click', me.selector.createLiabilityButton, function () { me.createNewLiability(); }); }, /** * @param {HTMLElement} element */ onClickAddButton: function (element) { var fileId = parseInt($(element).data('file')); if (isNaN(fileId) || fileId === 0) { return; } // UI-Dialog anzeigen me.storage.fileId = fileId; me.displayDialog(); }, /** * Im UI-Dialog wird der Tab gewechselt * * @param {HTMLElement} newTab Tab-Element das aktiviert wird * @param {HTMLElement} oldTab Tab-Element das vorher aktiv war */ onChangeFileTab: function (newTab, oldTab) { var docTypeBefore = $(oldTab).data('type'); me.destroyDataTable(docTypeBefore); me.storage.documentType = $(newTab).data('type'); me.loadDataTable(); }, /** * "Datei zuweisen"-Button wurde angeklickt * * @param {HTMLElement} element Angeklickter Button */ onClickDocumentAssignButton: function (element) { var $tableRow = $(element).parents('tr'); if (!$.fn.DataTable.isDataTable(me.elem.$currentDataTable)) { alert('Unbekannter Fehler #1: DataTable konnte nicht gefunden werden.'); return; } var $dataTable = me.elem.$currentDataTable.DataTable(); var data = $dataTable.row($tableRow).data(); // ID aus DataTable-Datensatz holen var objectId = parseInt(data.id); if (isNaN(objectId)) { alert('Unbekannter Fehler #2: ID für Zuweisung konnte nicht gefunden werden.'); return; } // Datei-Stichwort zuweisen me.assignDocumentKeyword(me.storage.documentType, objectId); }, /** * Datei-Stichwort zuweisen * * @param {string} documentType * @param {number} objectId */ assignDocumentKeyword: function (documentType, objectId) { $.ajax({ url: 'index.php?module=ticket&action=assistent&cmd=assign-file', data: {keyword: documentType, file: me.storage.fileId, object: objectId}, type: 'POST', dataType: 'json', success: function(result) { if (result.success === false) { alert('Unbekannter Fehler #3. Datei konnte nicht zugewiesen werden.'); } me.closeDialog(); window.location.reload(); } }); }, /** * DataTable-Filter wurde geändert * * @param {HTMLElement} element */ onChangeTableFilter: function (element) { var isActive = $(element).prop('checked'); var filterColumn = $(element).data('filter-column'); if (typeof isActive === 'undefined' || typeof filterColumn === 'undefined') { return; } // Prüfen ob DataTable vorhanden if (!$.fn.DataTable.isDataTable(me.elem.$currentDataTable)) { return; } var dataTable = me.elem.$currentDataTable.DataTable(); // Filter anwenden if (isActive) { dataTable.column(filterColumn).search('true', false, false, false).draw(); } else { dataTable.column(filterColumn).search('', false, false, false).draw(); } }, /** * UI-Dialog initialisieren */ initDialog: function () { me.elem.$assignDialog.dialog({ title: 'Datei-Zuordnung', modal: true, minWidth: 900, closeOnEscape: false, autoOpen: false, resizable: false }); // Tabs initialisieren $(me.selector.dialogTabs).tabs(); }, /** * UI-Dialog anzeigen (vorher DataTable laden) */ displayDialog: function () { me.loadDataTable().then(me.openDialog); }, /** * HTML-Template und DataTable-Einstellungen laden * * @return {Deferred} jQuery Promise Object */ loadDataTable: function () { return me.fetchDataTableHtmlTemplate() .then(me.fetchDataTableSettings) .then(me.initDataTable); }, /** * UI-Dialog öffnen */ openDialog: function () { window.setTimeout(function () { // Kurz warten bis DataTable aufgebaut ist, damit Höhe berechnet werden kann me.elem.$assignDialog.dialog('open'); me.elem.$assignDialog.dialog('option', 'height', 'auto'); }, 150); }, /** * UI-Dialog schließen */ closeDialog: function () { me.elem.$assignDialog.dialog('close'); }, /** * DataTable initialisieren */ initDataTable: function () { var $tabContent = me.elem.$assignDialog.find('#' + me.storage.documentType + '-tab'); me.elem.$currentDataTable = $tabContent.find('table.display'); me.elem.$currentDataTable.css('width', '100%'); // DataTable ist bereist initialisiert > Instanz zerstören if ($.fn.DataTable.isDataTable(me.elem.$currentDataTable)) { me.elem.$currentDataTable.DataTable().destroy(); } // DataTable initialisieren var table = me.elem.$currentDataTable.DataTable(me.storage.dataTableSettings); table.on('init.dt', function () { $(me.selector.documentTableContainer).show(); }) }, /** * Zerstört eine DataTable-Instanz * * @param {string} docType */ destroyDataTable: function (docType) { var $tabContent = me.elem.$assignDialog.find('#' + docType + '-tab'); var $table = $tabContent.find('table.display'); if ($.fn.DataTable.isDataTable($table)) { $table.DataTable().destroy(); me.elem.$currentDataTable = null; } }, /** * DataTable-HTML-Tabelle laden * * @return {jqXHR} jQuery jqXHR-Objekt */ fetchDataTableHtmlTemplate: function () { return $.ajax({ url: 'index.php?module=ticket&action=assistent&cmd=table-html', data: { 'type': me.storage.documentType, 'id': me.storage.fileId }, type: 'GET', dataType: 'html', success: function(data) { me.elem.$assignDialog.find('#' + me.storage.documentType + '-tab').html(data); me.elem.$assignDialog.find(me.selector.documentTableContainer).hide(); } }); }, /** * DataTable-Einstellungen laden * * @return {jqXHR} jQuery jqXHR-Objekt */ fetchDataTableSettings: function () { return $.ajax({ url: 'index.php?module=ticket&action=assistent&cmd=table-settings', data: { 'type': me.storage.documentType, 'id': me.storage.fileId }, type: 'GET', dataType: 'json', success: function(data) { me.storage.dataTableSettings = data; } }); }, /** * Neue Verbindlichkeit anlegen + Datei zuweisen * * Bei Erfolg wird die Verbindlichkeit geöffnet. */ createNewLiability: function () { $.ajax({ url: 'index.php?module=ticket&action=assistent&cmd=create-liability', data: { 'id': me.storage.fileId }, type: 'GET', dataType: 'json', success: function(data) { if (typeof data.success === 'undefined' || data.success === false) { alert('Unbekannter Fehler #5. Verbindlichkeit konnte nicht angelegt werden.'); return; } /** @namespace data.liability */ if (typeof data.liability === 'undefined') { alert('Unbekannter Fehler #6. Verbindlichkeit konnte nicht angelegt werden.'); return; } window.location.href = './index.php?module=verbindlichkeit&action=edit&id=' + data.liability; } }); } }; return { init: me.init }; }(jQuery); var TicketTree = function($) { "use strict"; var me = { elem: {}, storage: { api:null, }, selector: { }, initTree: function() { $('#mlmTree').aciTree({ autoInit: false, checkboxChain: false, ajax: { url: 'index.php?module=ticket&action=antwort&cmd=gettree&id='+$('.mlmTreeContainerLeft').data('id') }, checkbox: true, itemHook: function(parent, item, itemData, level) { }, filterHook: function(item, search, regexp) { if (search.length) { var parent = this.parent(item); if (parent.length) { var label = this.getLabel(parent); if (regexp.test(String(label))) { this.setVisible(item); return true; } this.setVisible(item); } if (regexp.test(String(this.getLabel(item)))) { item.addClass('searched'); return true; } else { return false; } } else { return true; } } }); }, init: function () { me.initTree(); me.storage.api = $('#mlmTree').aciTree('api'); $('#search').val(''); var last = ''; $('#search').on('keyup', function() { if ($(this).val() === last) { return; } $('.aciTreeLi').removeClass('searched'); last = $(this).val(); me.storage.api.filter(null, { search: $(this).val(), callback: function() { }, success: function(item, options) { if (!options.first) { //alert('No results found!'); } } }); }); $('#mlmTree').on('acitree', function(event, api, item, eventName, options){ switch (eventName){ case 'checked': break; case 'unchecked': break; case 'selected': var itemData = api.itemData(item); if(typeof itemData.vorlage != 'undefined') { einfuegenticket(itemData.vorlage); } break; default: if (api.isItem(item)){ //console.log('the event is: ' + eventName + ' for the item ID: ' + api.getId(item)); } else { //console.log('the event is: ' + eventName + ' for the tree ROOT'); } } }); $('#mlmTree').aciTree('init'); } } return { init: me.init }; }(jQuery); $(document).ready(function () { if ($('div.mlmTreeContainerLeft').length > 0) { TicketTree.init(); } if ($('#ticketassistent').length === 0) { return; } TicketFiles.init(); });