// @required var BASE_URL // @required var TASK // @required var USER // @required var TYPE // @required var ProblemsTableId // @required var ProjectsTableId var activeCount = 0; var allCount = 0; var acceptedCount = 0; var picker; var position = 0; var wordLen = 0; var projectId; var author; var state = []; var loaded; renderForm(); /*$(document).on('click', '#save', function() { $("#save").prop('disabled', true); save(); });*/ function setSort() { var req = ` `; var i = 0; var idx = []; $("#sortable").find(".singleTask").each(function() { if ($(this).data("parent") !== false) return true; i++; req += ` ` + $(this).data("id") + ` ` + i + ` `; idx.push($(this).data("id")); }); req += ``; var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "xml", success: function(data) { if ($(data).find("ServiceException").text() == "") { $.notify("Sortowanie zsynchronizowane", "success"); } else { $.notify($(data).find("ServiceException").text(), "danger"); $.notify("Błąd. Skontaktuj się z administratorem", "error"); } } }); var temp = []; $.each(idx, function(i, e) { var index = getIndexById(e); temp.push(state[index]); }); $.each(state, function(i, e) { if (e['percent'] == "100%") temp.push(e); }); state = []; state = temp; render(); } function createLink(name, id) { if (TYPE == "PROBLEM") return 'index.php?_route=ViewTableAjax&namespace=default_db/' + "PROBLEMS" + '#EDIT/' + id if (TYPE == "PROJECT") return 'index.php?_route=ViewTableAjax&namespace=default_db/' + "IN7_MK_BAZA_DYSTRYBUCJI" + '#EDIT/' + id return '#' } function getDetails(value) { var date = false; var worker = false; $.each(value.split(" "), function(i, e) { if (e.substr(0, 1) == "@") { var query = e.substr(1); if (query != "" && isNaN(query.substr(0, 1)) && !worker) { worker = query; } if (query != "" && !isNaN(query.substr(0, 1)) && !date) { date = moment(query).format('YYYY-MM-DD HH:mm:ss'); } } }); return { worker: worker, date: date }; } function updateProgress() { var proc; var procAcc; allCount = state.length; activeCount = 0; acceptedCount = 0; $.each(state, function(i, e) { if (e["percent"] != "100%") { activeCount++; } if (e["status"] == "OFF_HARD") { acceptedCount++; } }); if (allCount != 0) { proc = Math.round((allCount - activeCount) / allCount * 100 / 10) * 10; procAcc = Math.round((acceptedCount) / allCount * 100 / 10) * 10; } else { proc = 0; procAcc = 0; } $("#completed").css('width', proc - procAcc + "%").attr('aria-valuenow', proc - procAcc).text(proc + '%'); $("#accepted").css('width', procAcc + "%").attr('aria-valuenow', procAcc).text(procAcc + '%'); if (proc == 0) { $("#completed").text(""); } if (procAcc == 0) { $("#accepted").text(""); } if (proc == procAcc) { $("#completed").text(""); } } function getCaretPosition(ctrl) { var start, end; if (ctrl.setSelectionRange) { start = ctrl.selectionStart; end = ctrl.selectionEnd; } else if (document.selection && document.selection.createRange) { var range = document.selection.createRange(); start = 0 - range.duplicate().moveStart('character', -100000); end = start + range.text.length; } return { start: start, end: end } } $(document).on('dblclick', '#sortable tr', function(e) { // var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; var index = getIndexById($(this).data("id")); var req = ` `; req += ` ` + $(this).data("id") + ``; if (state[index]["status"] == "NORMAL") { state[index]["status"] = "WAITING"; req += 'WAITING'; } else if (state[index]["status"] == "WAITING") { state[index]["status"] = "NORMAL"; req += 'NORMAL'; } req += ` `; render(); $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "text", success: function(data) {} }); }); function autoCom() { var hide = true; $(".eInput").autocomplete({ source: function(request, response) { $.ajax({ url: BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:ADMIN_USERS&SRSNAME=EPSG:3003&Filter=ADM_ACCOUNT*' + request.term + '*&maxFeatures=10', dataType: "xml", success: function(xmlResponse) { var data = $("featureMember", xmlResponse).map(function() { if ($("ID", this).text() != 0) return { value: $("ADM_ACCOUNT", this).text(), id: $("ID", this).text() }; }); response(data); } }); }, search: function() { if (hide) return false; }, select: function(event, ui) { var text = this.value; this.value = text.substring(0, position) + " @" + ui.item.value + " " + text.substring(position + wordLen + 2); return false; }, focus: function() { return false; }, minLength: 0 }).bind("keyup", function() { hide = true; $(this).autocomplete("close"); var caret = getCaretPosition(this); var val = this.value; val += " "; var result = /\S+$/.exec(val.slice(0, val.indexOf(' ', caret.end))); var lastWord = result ? result[0] : null; if (lastWord != null && lastWord.substring(0, 1) == "@") { wordLen = lastWord.length; var query = lastWord.substr(1); if (isNaN(query.substring(0, 1)) && query != "") { hide = false; if (val.substr(0, caret.end).lastIndexOf(" ") > 0) { position = val.substr(0, caret.end).lastIndexOf(" "); } else { position = 0; } } if (!isNaN(query.substring(0, 1)) && query != "") { if (val.substr(0, caret.end).lastIndexOf(" ") > 0) { position = val.substr(0, caret.end).lastIndexOf(" "); } else { position = 0; } $(picker).data("DateTimePicker").show(); } } $(this).autocomplete("search", query); }); } $(document).on('keydown', '.hours', function(e) { var textarea = this; if (e.which == 13) { $(textarea).prop("disabled", true); var req = ` `; req += ` ` + $(this).parents("li").data('id') + ` ` + $(textarea).val() + ` `; req += ''; var ids = []; var tab = getObjOfElement(this, ids); var period = $(this).val(); var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "xml", success: function(data) { $.notify("Zapisano!", "success"); tab["period"] = period; $.each(ids, function(i, e) { var result = getObjOfElement($('.singleTask[data-id="' + e + '"]')); var period = 0; var count = 0; $.each(result["childs"], function(i2, e2) { count++; if (!isNaN(parseInt(e2["period"]))) period += parseInt(e2["period"]) else period += 0; }) if (count != 0) result["period"] = period }) render(); } }); } }); $(document).on('keydown', '.editable', function(e) { var textarea = this; if (e.keyCode == 13) { $(textarea).prop("disabled", true); var details = getDetails($(this).val()); var req = ` `; req += ` ` + $(this).closest(".singleTask").data('id') + ``; if (details.worker != false) req += '' + details.worker + ''; else req += '' + USER + ''; if (details.date != false) req += '' + details.date + ''; else req += '' + moment().format('YYYY-MM-DD HH:mm:ss') + ''; req += `` + $(this).val() + ` BRAK `; req += ''; var tab = getObjOfElement(this); var desc = $(this).val(); var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "xml", success: function(data) { tab["desc"] = desc; if (details.worker != false) { tab["worker"] = details.worker } else { tab["worker"] = USER; } render(); $.notify("Zapisano!", "success"); } }); return false; } }); $(document).on('keydown', '.eInput', function(e) { if (e.keyCode == 13) { if ($(this).val() != "") { var details = getDetails($(this).val()); var req = ` `; req += ` `; if (TYPE == "PROBLEM") { req += `` + TASK + ``; } if (TYPE == "PROJECT") { req += `0`; } if (details.worker != false) { req += '' + details.worker + ''; } else { req += '' + USER + ''; } if (details.date != false) { req += '' + details.date + ''; } else { req += '' + moment().format('YYYY-MM-DD HH:mm:ss') + ''; } req += `` + ProjectId + ``; req += `0`; req += `` + $(this).val() + ` BRAK `; req += ''; var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; var info = this; $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "xml", success: function(data) { if ($(data).find("ServiceException").text() != "") { $.notify("Błąd API: Prawdopodobnie nie masz uprawnień. Skontaktuj się z administratorem.", "error"); $.notify($(data).find("ServiceException").text(), "danger"); } else { var temp = {}; temp["id"] = $(data).find("FeatureId").attr("fid").substr($(data).find("FeatureId").attr("fid").indexOf('.') + 1); temp["desc"] = $(info).val(); temp["percent"] = "0%"; temp["period"] = "0"; temp["childs"] = false; temp["expand"] = false; temp["status"] = "WAITING"; temp["worker"] = (details.worker != false ? details.worker : USER); temp["owner"] = USER; state.push(temp); $(".eInput").val(""); updateProgress(); render(); setSort(); } } }); } return false; } }); function getObjOfElement(el, ids = []) { var acc = $(el).closest(".singleTask") while (true) { ids.unshift($(acc).data("id")); var parent_id = $(acc).data("parent") if (!parent_id) break; acc = $(".singleTask[data-id='" + parent_id + "']"); } var tab = state; $.each(ids, function(i, e) { var index; if (i == 0) { index = getIndexById(e, tab); tab = tab[index]; } else { index = getIndexById(e, tab["childs"]); tab = tab["childs"][index]; } }); ids.reverse(); return tab; } $(document).on('click', '.expand', function() { var tab = getObjOfElement(this); if (!$(this).data("state")) { tab["expand"] = true; if (tab["childs"] === true) { tab["childs"] = []; getData("PROBLEM", tab["id"], tab["childs"]) } } else { tab["expand"] = false; } render(); }); $(document).on('click', '.delTask', function() { var id = $(this).closest(".singleTask").data("id"); var tab = getObjOfElement(this); if ($(this).closest(".singleTask").find(".aCheck").data("state") == "1") { $.notify("Nie możesz zmieniać stanu zatwierdzonych zadań", "danger"); return true; } if (tab['childs'] != false) { $.notify("Zmieniać status można tylko wtedy, jeżeli zadanie nie ma podzadań.", "danger"); return; } if ($(this).closest(".singleTask").data("step") == 2) { allCount--; } else { allCount--; activeCount--; } var req = ` `; req += ` `; req += `` + id + ``; req += `DELETED `; req += ''; var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "xml", success: function(data) {} }); state.splice(index, 1); render(); }); $(document).on('click', '#showMore', function() { if ($("#doneList").is(":visible")) { $("#doneList").slideUp("fast"); $(this).html("Pokaż wykonane zadania "); } else { $("#doneList").slideDown("fast"); $(this).html("Ukryj wykonane zadania "); } }); $(document).on('click', '.aCheck', function() { var node = this; var tab = getObjOfElement(this); if (tab["owner"] != USER) { $.notify("Tylko zleceniodawca może zatwierdzać postęp prac.", "danger"); return true; } var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; var req = ` `; req += ` ` + $(node).closest("li").data("id") + ``; if (tab['status'] != "OFF_HARD") { req += 'OFF_HARD'; tab['status'] = "OFF_HARD"; } else { req += 'WAITING'; tab['status'] = "WAITING"; } req += ` `; $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "text", success: function(data) { setSort(); updateProgress(); render(); } }); }); function getIndexById(id, arr = state) { for (var i = 0; i < arr.length; i++) { if (arr[i]['id'] == id) { return i; } } return false; } $(document).on('click', '.check', function() { var node = this; var id = $(node).closest("li").data("id"); var ids = []; var tab = getObjOfElement(this, ids); if (tab['status'] == "OFF_HARD") { $.notify("Nie możesz zmieniać stanu zatwierdzonych zadań", "danger"); return true; } if (tab['childs'] != false) { $.notify("Zmieniać status można tylko wtedy, jeżeli zadanie nie ma podzadań.", "danger"); return; } var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; var req = ` `; req += ` ` + $(node).closest("li").data("id") + ``; if (tab['percent'] != "100%") { req += '100%'; tab['percent'] = "100%"; } else { req += '0%'; tab['percent'] = "0%"; } req += ` `; $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "text", success: function(data) { setSort(); } }); $.each(ids, function(i, e) { var result = getObjOfElement($('.singleTask[data-id="' + e + '"]')); var percent = 0; var count = 0; $.each(result["childs"], function(i2, e2) { count++; if (!isNaN(parseInt(e2["percent"]))) percent += parseInt(e2["percent"]) else percent += 0; }) if (count != 0) result["percent"] = (percent / count) + "%" }) updateProgress(); render(); }); function stripHTML(dirtyString) { var container = document.createElement('div'); var text = document.createTextNode(dirtyString); container.appendChild(text); return container.innerHTML; } function renderForm() { $("#left").empty(); var link, link2; if (TYPE == "PROBLEM") { link = BASE_URL + "wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&TYPENAME=p5_default_db:PROBLEMS&REQUEST=DescribeFeatureTypeAdvanced"; link2 = BASE_URL + "wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:PROBLEMS&SRSNAME=EPSG:3003&Filter=ID" + TASK + ""; } if (TYPE == "PROJECT") { link = BASE_URL + "wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&TYPENAME=p5_default_db:IN7_MK_BAZA_DYSTRYBUCJI&REQUEST=DescribeFeatureTypeAdvanced"; link2 = BASE_URL + "wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:IN7_MK_BAZA_DYSTRYBUCJI&SRSNAME=EPSG:3003&Filter=ID" + TASK + ""; } var field = ''; $.get(link, function(fields) { $.get(link2, function(data) { author = $(data).find("A_RECORD_CREATE_AUTHOR").text(); if (TYPE == "PROBLEM") { ProjectId = $(data).find("ID_PROJECT").text(); } if (TYPE == "PROJECT") { ProjectId = TASK; } if (TYPE == "PROBLEM") { var breadcrumb = ` `; } if (TYPE == "PROJECT") { var breadcrumb = ` `; } $("#left").append(breadcrumb); field += ''; $(fields).find("sequence").find("element").each(function() { var show = true; if ($(this).attr('name') == "ID") { show = false; } if (show) { field += '' if ($(this).attr('p5:label')) { field += $(this).attr('p5:label'); } else { field += $(this).attr('name'); } field += ": " var value = $(data).find($(this).attr('name')).text(); field += $(data).find($(this).attr('name')).text(); field += '
'; } }); field += '
'; field += '
'; field += 'Edytuj'; $("#left").append(field); $("#left").append("
"); createLink("PROBLEMS", TASK, $("#save").parents("a")); //renderTaskManager(); getData(TYPE, TASK, state); renderTaskManager(); }); }); } function getData(type, parent_id, target) { if (type == "PROBLEM") { link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:PROBLEMS&SRSNAME=EPSG:3003&Filter=PARENT_ID' + parent_id + 'A_STATUSDeleted&sortBy=ID+D'; //SORT_PRIO+A'; } if (type == "PROJECT") { link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:PROBLEMS&SRSNAME=EPSG:3003&Filter=ID_PROJECT' + parent_id + 'PARENT_ID0A_STATUSDELETED&sortBy=ID+D'; //SORT_PRIO+A } $.get(link, function(data) { var count = $(data).find("featureMember").length; $(data).find("featureMember").each(function(e) { if ($(this).find("ID").text() == 0) { return; } var temp = {}; temp["id"] = $(this).find("ID").text(); temp["desc"] = $(this).find("A_PROBLEM_DESC").text(); temp["percent"] = $(this).find("A_PROBLEM_COMPLETE_PERCENT").text(); if (temp["percent"] === "") { $.notify("Błąd krytyczny. Brak uprawnień do komórki: `A_PROBLEM_COMPLETE_PERCENT` w tabeli `PROBLEMS`", "error"); loaded = true; return false; } temp["status"] = $(this).find("A_STATUS").text(); temp["worker"] = $(this).find("L_APPOITMENT_USER").text(); temp["period"] = $(this).find("L_APPOITMENT_PERIOD").text(); temp["owner"] = $(this).find("A_RECORD_CREATE_AUTHOR").text(); temp["childs"] = false; temp["expand"] = false; target.push(temp); var lastId = target.length - 1; var linkChilds = BASE_URL + "wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=p5_default_db:PROBLEMS&SRSNAME=EPSG:3003&Filter=PARENT_ID" + temp["id"] + ""; $.get(linkChilds, function(data) { if ($(data).find("ID").text() != '') { target[lastId]["childs"] = true; render(); } }); }); render(); }); } function renderTasks(arr, ret = false, depth = 0) { var resultActive = ""; var resultDone = ""; $.each(arr, function(i, e) { var result = ""; var css = ""; if (e["percent"] != "100%") { if (e['status'] == "NORMAL") { css = "background: linear-gradient(to right, #73fb73 0%, #73fb73 " + e["percent"] + ", #bdefbd " + e["percent"] + ", #bdefbd 100%);"; } else if (e['status'] == "WAITING") { css = "background: linear-gradient(to right, rgba(0,0,0,0.1) 0%, rgba(0,0,0,0.1) " + e["percent"] + ", transparent " + e["percent"] + ", transparent 100%);"; } if (ret !== false) css = "background-color:#fffabe;"; } else { if (ret !== false) css = "background-color:#e6e6e6;"; } result += ""; result += "" if (e["childs"] !== false) result += ""; else result += ""; result += "" result += "" if (e["percent"] == "100%") { result += "" result += ""; if (e['status'] != "OFF_HARD") { result += ""; } else { result += ""; } } else { result += "" //if (ret === false) // result += ""; result += "" result += ""; } result += "" result += "" result += "" result += "" result += "" result += " "; result += "" result += "" result += `"; result += "" result += "" if (e["childs"] !== false && e["childs"] !== true && e["expand"]) { result += renderTasks(e["childs"], e["id"], depth + 1) } //result += ((e['owner'] != USER) ? " " : "") + ""; if (e['percent'] == "100%") { resultDone += result; } else { resultActive += result; } updateProgress() }); if (ret !== false) return resultActive + resultDone; resultActive += "
"; resultDone += "
"; $("#sortable").html(resultActive); $("#doneList").html(resultDone); } function render() { renderTasks(state) $('.editable').autosize(); $('[data-toggle="popover"]').popover(); } function loadStats() { var link; if (TYPE == "PROBLEM") { link = BASE_URL + "index.php?_route=UrlAction_TaskManager&_task=getStatsAjax&TYPE=PROBLEM&ID=" + TASK; } else { link = BASE_URL + "index.php?_route=UrlAction_TaskManager&_task=getStatsAjax&TYPE=PROBLEM&ID=" + TASK; } $.get(link, function(data) { data = data[0]; var result = "L. wykonanych podzadań: " + data["CHILDS_DONE_COUNT"] + "/" + data["CHILDS_COUNT"] + ""; $("#line1", ".stats").html(result); }); } function renderTaskManager() { $("#right").append("
"); if (false) { // TODO $("#right").append("

Statystyki

"); $(".stats").append("
"); loadStats(); } $(".taskList").append("
"); $(".progress").append("
0%
"); $(".progress").append("
0%
"); picker = $("", { type: 'text', style: 'width:0px;height:0px;outline:none;overflow:0;border:0;margin:0px;padding:0px;', id: "date", }).datetimepicker({ defaultDate: false, useCurrent: false, widgetPositioning: { horizontal: 'auto', vertical: 'bottom' } }) $('.taskList').append(picker); $(".taskList").append('
' + ' ' + '' + '
' + '
'); $(".taskList").append("
"); $(".taskList").append("
Pokaż wykonane zadania
"); $(".taskList").append("
"); var link; $("#doneList").hide(); updateProgress(); $(picker).on("dp.change", function(e) { var date = e.date; date = date.format('YYYY-MM-DD'); var text = $(".eInput").val(); var result = text.substring(0, position) + " @" + date + " " + text.substring(position + wordLen + 2); $(".eInput").val(result); $(picker).data("DateTimePicker").hide(); }); $(function() { $("#sortable").sortable({ stop: function(event, ui) { setSort(); }, handle: ".ico" }); autoCom(); $('.eInput').autosize(); }); render(); }