// @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() + '' + $(this).attr("name") + '>\n';
});
$("#left").find("select").each(function() {
saveQuery += '<' + $(this).attr("name") + ' xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + $(this).find("option:selected").text() + '' + $(this).attr("name") + '>\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 = `
` + ($(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 += '';
}
});
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_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 ' + TASK + ' PARENT_ID 0 A_STATUS DELETED &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();
}