// @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() { 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&'; //console.log(req); $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "xml", success: function(data) { //console.log(data); //console.log("sorted"); 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 }; } //Deleted function to save changes. /*function save() { var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; var saveQuery = ` ` + TASK + ` `; $("#left").find("input").each(function() { saveQuery += '<' + $(this).attr("name") + ' xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + $(this).val() + '\n'; }); $("#left").find("select").each(function() { saveQuery += '<' + $(this).attr("name") + ' xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + $(this).find("option:selected").text() + '\n'; }); saveQuery += ` `; //console.log(saveQuery); $.ajax({ url: link, data: saveQuery, type: 'POST', contentType: "text/xml", dataType: "text", success: function(data) { //console.log(data); $.notify("Zapisano!", "success"); $("#save").prop('disabled', false); renderForm(); }, error: function(xhr, ajaxOptions, thrownError) { $.notify("Brak połączenia z bazą danych", "error"); } }); }*/ 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 li', 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 id = getIndexById($(this).parents("li").data('id')); var period = $(this).val(); var link = BASE_URL + 'wfs-data.php/default_db/?SERVICE=WFS&VERSION=1.0.0&SRSNAME=EPSG:3003&'; //console.log(req); $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "xml", success: function(data) { //console.log(data); $.notify("Zapisano!", "success"); state[id]["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).parents("li").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 id = getIndexById($(this).parents("li").data('id')); 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) { state[id]["desc"] = desc; if (details.worker != false) { state[id]["worker"] = details.worker } else { state[id]["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; //console.log(req); $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "xml", success: function(data) { //console.log(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["status"] = "WAITING"; temp["worker"] = (details.worker != false ? details.worker : USER); temp["owner"] = USER; state.push(temp); $(".eInput").val(""); //console.log(temp); //console.log("x", state); updateProgress(); render(); setSort(); } } }); } return false; } }); $(document).on('click', '.delTask', function() { var id = $(this).closest(".singleTask").data("id"); var index = getIndexById(id); if ($(this).parents(".singleTask").find(".aCheck").data("state") == "1") { $.notify("Nie możesz zmieniać stanu zatwierdzonych zadań", "danger"); return true; } if(state[index]['childs'] != false){ $.notify("Zmieniać status można tylko wtedy, jeżeli zadanie nie ma podzadań.", "danger"); return; } if ($(this).parents(".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 id = getIndexById($(node).parents("li").data("id")); if (state[id]["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).parents("li").data("id") + ``; if (state[id]['status'] != "OFF_HARD") { req += 'OFF_HARD'; state[id]['status'] = "OFF_HARD"; } else { req += 'WAITING'; state[id]['status'] = "WAITING"; } req += ` `; //console.log(req); $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "text", success: function(data) { //console.log(data); setSort(); updateProgress(); render(); } }); }); function getIndexById(id){ for (var i = 0; i < state.length; i++) { if (state[i]['id'] == id) { return i; } } return false; } $(document).on('click', '.check', function() { var node = this; var id = $(node).parents("li").data("id"); var index = getIndexById(id); if (state[index]['status'] == "OFF_HARD") { $.notify("Nie możesz zmieniać stanu zatwierdzonych zadań", "danger"); return true; } if(state[index]['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).parents("li").data("id") + ``; if (state[index]['percent'] != "100%") { req += '100%'; state[index]['percent'] = "100%"; } else { req += '0%'; state[index]['percent'] = "0%"; } req += ` `; $.ajax({ url: link, data: req, type: 'POST', contentType: "text/xml", dataType: "text", success: function(data) { setSort(); } }); updateProgress(); render(); }); function stripHTML(dirtyString) { var container = document.createElement('div'); var text = document.createTextNode(dirtyString); container.appendChild(text); return container.innerHTML; // innerHTML will be a xss safe string } 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 += '
'; field += ''; field += '
'; var value = $(data).find($(this).attr('name')).text(); if ($(this).attr('p5:allow_write') == "true") { if ($(this).attr('type') == "gml:LineStringPropertyType") { field += '...'; } else if ($(this).attr('type') == "xsd:string" || $(this).attr('type') == "xsd:integer" || true) {// || true due to changes of saving system. field += ''; } else if ($(this).attr('type') == "xsd:dateTime") { field += '
'; } else { field += '"; } } else { field += $(data).find($(this).attr('name')).text(); } field += '
'; field += '
'; } }); field += '
'; field += '
'; field += '
'; field += 'Edytuj'; $("#left").append(field); $("#left").append("
"); createLink("PROBLEMS", TASK, $("#save").parents("a")); //renderTaskManager(); getData(); }); }); } $(document).ajaxStop(function() { if (loaded) return; loaded = true; renderTaskManager(); }); function getData() { 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' + TASK + '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' + TASK + 'PARENT_ID0A_STATUSDELETED&sortBy=ID+D';//SORT_PRIO+A } $.get(link, function(data) { loaded = false; //console.log(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"] === ""){ //console.log(temp); $.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; 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) { //console.log(data); if ($(data).find("ID").text() != '') { temp["childs"] = true; } state.push(temp); }); }); }); } function render() { var resultActive = ""; var resultDone = ""; //console.log(state); $.each(state, 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%);"; } } result += "
  • "; if (e["percent"] == "100%") { result += ""; if (e['status'] != "OFF_HARD") { result += ""; } else { result += ""; } } else { result += ""; result += ""; } result += "" result += ""; result += ``; //result += ((e['owner'] != USER) ? " " : "") + "
  • "; if (e['percent'] == "100%") { resultDone += result; } else { resultActive += result; } }); resultActive += "
    "; resultDone += "
    "; $("#sortable").html(resultActive); $("#doneList").html(resultDone); $('.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%
    "); $(".taskList").append(""); // $("#sortable").append("
  • Zaprojektować podstawowy layout skryptu
  • "); // $("#sortable").append("
  • Stworzyć tasklistę, dodać przesuwaunie i flagowanie
  • "); // $("#sortable").append("
  • Dodać po lewej stronie formularz
  • "); // $("#sortable").append("
  • Połączyć z API
  • "); $(".taskList").append('
    ' + ' ' + '' + '
    ' + '
    '); 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("
    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(); }