// @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 = `
` + ($(data).find("ID_PROJECT").text() != 0 ? " Projekt " + $(data).find("ID_PROJECT").text() + " " : "") + `
` + ($(data).find("PARENT_ID").text() != 0 ? " Zadanie " + $(data).find("PARENT_ID").text() + " " : "") + `
Zadanie ` + $(data).find("ID").text() + `
`;
}
if (TYPE == "PROJECT") {
var breadcrumb = `
Projekt ` + TASK + `
`;
}
$("#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_STATUS Deleted &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_ID 0 A_STATUS DELETED &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();
}