Explorar el Código

added task manager with fixed code

Piotr Labudda hace 9 años
padre
commit
d6ccb415a2

+ 1 - 1
SE/se-lib/Route/FixProjectPath.php

@@ -409,7 +409,7 @@ jQuery(document).ready(function () {
 
 }
 
-/**
+/*
  * Old triggers before 2015-06-10:
 
 CREATE DEFINER=`root`@`localhost` TRIGGER `_IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT` BEFORE INSERT ON `IN7_MK_BAZA_DYSTRYBUCJI`

+ 108 - 0
SE/se-lib/Route/UrlAction/TaskManager.php

@@ -0,0 +1,108 @@
+<?php
+
+Lib::loadClass('RouteBase');
+Lib::loadClass('ProcesHelper');
+Lib::loadClass('Config');
+Lib::loadClass('UI');
+Lib::loadClass('Request');
+Lib::loadClass('ProcesHelper');
+Lib::loadClass('Response');
+Lib::loadClass('DBG');
+
+class Route_UrlAction_TaskManager extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
+
+	public function getStatsAjaxAction() {
+		try {
+			$id = V::get('ID', 0, $_GET, 'int');
+			if ($id <= 0) throw new Exception("ID is not set.");
+			$sqlId = DB::getPDO()->quote($id, PDO::PARAM_INT);
+			$type = V::get('TYPE', 0, $_GET, 'string');
+			$rows = null;
+			if ($type == "PROBLEM") {
+				$rows = DB::getPDO()->fetchAll("
+					SELECT * FROM _SYNC_TASK_PERCENT WHERE ID_TASK = {$sqlId} AND ID_PROJECT = 0
+				");
+			}
+			if ($type == "PROJECT") {
+				$rows = DB::getPDO()->fetchAll("
+					SELECT * FROM _SYNC_TASK_PERCENT WHERE ID_PROJECT = {$sqlId} AND ID_TASK = 0
+				");
+			}
+			Response::sendJsonExit($rows);
+		} catch (Exception $e) {
+			UI::alert('danger', "Error: " . $e->getMessage());
+		}
+	}
+
+	public function handleAuth() {
+		if (!User::logged()) {
+			User::authByRequest();
+		}
+	}
+
+	public function reinstallAction() {
+		$createTableSql = file_get_contents(__FILE__ . '.create__SYNC_TASK_PERCENT.sql');
+		DBG::nicePrint($createTableSql, '$createTableSql');
+		$dropProcedureSql = "DROP PROCEDURE `PROBLEMS__SYNC_PERCENT`";
+		DBG::nicePrint($dropProcedureSql, '$dropProcedureSql');
+		$createProcedureSql = file_get_contents(__FILE__ . '.problems_sync_percent.sql');
+		DBG::nicePrint($createProcedureSql, '$createProcedureSql');
+	}
+
+	public function defaultAction() {
+		UI::gora();
+		UI::menu();
+		try {
+			// DB::getPDO()->query("CALL `PROBLEMS__SYNC_PERCENT`();");// TODO: BUG zamula
+			$id = 0;
+			$type = "";
+			if (!empty(V::get('ID_PROBLEM', 0, $_REQUEST, 'int'))) {
+				$id = V::get('ID_PROBLEM', 0, $_REQUEST, 'int');
+				$type = "PROBLEM";
+			}
+			if (!empty(V::get('ID_PROJECT', 0, $_REQUEST, 'int'))) {
+				$id = V::get('ID_PROJECT', 0, $_REQUEST, 'int');
+				$type = "PROJECT";
+			}
+			if ($id <= 0) throw new Exception("Wrong ID");
+			$this->showManager($id, $type);
+		} catch (Exception $e) {
+			UI::alert('danger', "Error: " . $e->getMessage());
+		}
+		UI::dol();
+	}
+
+	public function showManager($id, $type) {
+		echo "<div class=container-fluid>";
+		echo "<div class=row>";
+		echo "<div class='col-lg-6 col-lg-push-6' id=right>";
+		echo "</div>";
+		echo "<div class='col-lg-6 col-lg-pull-6' id=left>";
+		echo "</div>";
+
+		echo "</div>";
+		echo "</div>";
+
+		echo '<link rel="stylesheet" type="text/css" href="static/sweetalert2.min.css">';
+		// echo '<link rel="stylesheet" href="static/task.css?'.time().'" type="text/css" />';
+		UI::startTag('style', ['type' => "text/css"]);
+		include dirname(__FILE__) . '.task.css';
+		UI::endTag('style');
+
+		echo '<script src="static/sweetalert2.min.js"></script>';
+		echo '<script src="static/jquery.ui.autocomplete.js"></script>';
+		echo '<script src="static/jquery.ui.menu.js"></script>';
+
+		// echo "<script>var BASE_URL = '".Request::getPathUri()."';var TASK = ".$id.";var USER = '".User::getLogin()."';var TYPE='".$type."'; var ProblemsTableId=".ProcesHelper::getZasobTableID('PROBLEMS').";var ProjectsTableId=".ProcesHelper::getZasobTableID('IN7_MK_BAZA_DYSTRYBUCJI')."</script>";
+		// echo '<script src="static/task.js?'.time().'"></script>';
+		UI::inlineJS(__FILE__ . '.task.js', [
+			'BASE_URL' => Request::getPathUri(),
+			'TASK' => "'{$id}'",
+			'USER' => "'" . User::getLogin() . "'",
+			'TYPE' => "'{$type}'",
+			'ProblemsTableId' => "'" . ProcesHelper::getZasobTableID('PROBLEMS') . "'",
+			'ProjectsTableId' => "'" . ProcesHelper::getZasobTableID('IN7_MK_BAZA_DYSTRYBUCJI') . "'",
+		]);
+	}
+
+}

+ 10 - 0
SE/se-lib/Route/UrlAction/TaskManager.php.create__SYNC_TASK_PERCENT.sql

@@ -0,0 +1,10 @@
+CREATE TABLE IF NOT EXISTS `_SYNC_TASK_PERCENT` (
+  `ID_TASK` int(11) NOT NULL,
+  `A_PROBLEM_COMPLETE_PERCENT` varchar(6) NOT NULL DEFAULT '',
+  `L_APPOITMENT_PERIOD` varchar(30) NOT NULL DEFAULT '',
+  `A_SYNCHRONIZED` int(1) NOT NULL DEFAULT '0',
+  `A_LAST_SYNC` varchar(20) DEFAULT '',
+  `SYNC_SORT_PRIO` int(11) NOT NULL DEFAULT '0',
+  `CHILDS_COUNT` int(11) NOT NULL DEFAULT '0',
+  `CHILDS_DONE_COUNT` int(11) NOT NULL DEFAULT '0'
+) ENGINE=MyISAM DEFAULT CHARSET=latin2;

+ 88 - 0
SE/se-lib/Route/UrlAction/TaskManager.php.problems_sync_percent.sql

@@ -0,0 +1,88 @@
+CREATE DEFINER=`root`@`localhost` PROCEDURE `PROBLEMS__SYNC_PERCENT`()
+BEGIN
+
+INSERT IGNORE INTO _SYNC_TASK_PERCENT (`ID_TASK`) SELECT `ID` FROM PROBLEMS;
+
+UPDATE `_SYNC_TASK_PERCENT` p, `PROBLEMS` t
+	SET p.`A_PROBLEM_COMPLETE_PERCENT` = REPLACE(t.`A_PROBLEM_COMPLETE_PERCENT`, "%", "")
+		, p.`L_APPOITMENT_PERIOD` = t.`L_APPOITMENT_PERIOD`
+	WHERE p.`ID_TASK` = t.`ID`
+;
+
+UPDATE `_SYNC_TASK_PERCENT` t
+	LEFT JOIN `PROBLEMS` p ON t.`ID_TASK` = p.`ID`
+	SET t.A_SYNCHRONIZED = 0
+	WHERE t.`A_LAST_SYNC` < p.`A_RECORD_CREATE_DATE` OR t.`A_LAST_SYNC` < p.`A_RECORD_UPDATE_DATE`
+;
+
+SELECT @c:=COUNT(*) FROM `_SYNC_TASK_PERCENT` WHERE `A_SYNCHRONIZED` = 0;
+SET @i = 0;
+WHILE @i < @c DO
+	PREPARE stmt FROM "SELECT `ID_TASK` into @parent_id FROM `_SYNC_TASK_PERCENT` WHERE `A_SYNCHRONIZED` = 0 LIMIT ?,1";
+	EXECUTE stmt USING @i;
+	DEALLOCATE PREPARE stmt;
+	select @parent_id;
+	WHILE @parent_id <> 0 DO
+		SELECT @parent_id := `PARENT_ID` FROM `PROBLEMS` WHERE `ID` = @parent_id;
+		UPDATE `_SYNC_TASK_PERCENT` SET `A_SYNCHRONIZED` = 0 WHERE `ID_TASK` = @parent_id;
+	END WHILE;
+	SET @i = @i +1;
+END WHILE;
+
+UPDATE `_SYNC_TASK_PERCENT` SET SYNC_SORT_PRIO = 0;
+SELECT @c:=COUNT(*) FROM `_SYNC_TASK_PERCENT` p1
+	LEFT JOIN `PROBLEMS` t1 ON p1.`ID_TASK` = t1.`PARENT_ID`
+	WHERE p1.`A_SYNCHRONIZED` = 0 AND  t1.`ID` IS NULL
+;
+
+SET @i = 0;
+WHILE @i < @c DO
+	SET @sort_prio = 1000;
+	SELECT @i;
+	PREPARE stmt FROM "SELECT p1.`ID_TASK` into @parent_id FROM `_SYNC_TASK_PERCENT` p1
+		LEFT JOIN `PROBLEMS` t1 ON p1.`ID_TASK` = t1.`PARENT_ID`
+		WHERE p1.`A_SYNCHRONIZED` = 0 AND  t1.`ID` IS NULL LIMIT ?, 1"
+	;
+	EXECUTE stmt USING @i;
+	DEALLOCATE PREPARE stmt;
+	select @parent_id;
+	UPDATE `_SYNC_TASK_PERCENT` SET `SYNC_SORT_PRIO` = @sort_prio WHERE `ID_TASK` = @parent_id;
+	WHILE @parent_id <> 0 DO
+		SET @sort_prio = @sort_prio - 1;
+		SELECT @parent_id := `PARENT_ID` FROM `PROBLEMS` WHERE `ID` = @parent_id;
+		UPDATE `_SYNC_TASK_PERCENT` SET `SYNC_SORT_PRIO` = @sort_prio WHERE `ID_TASK` = @parent_id;
+	END WHILE;
+	SET @i = @i + 1;
+END WHILE;
+
+SELECT @c:=COUNT(*) FROM `_SYNC_TASK_PERCENT` WHERE `A_SYNCHRONIZED` = 0;
+SET @i = 0;
+WHILE @i < @c DO
+	SELECT `ID_TASK` into @id FROM `_SYNC_TASK_PERCENT` WHERE `A_SYNCHRONIZED` = 0 ORDER BY `SYNC_SORT_PRIO` DESC LIMIT 0,1;
+	SET @i = @i + 1;
+	SELECT @childs:=COUNT(*) FROM `_SYNC_TASK_PERCENT` p1
+		LEFT JOIN `PROBLEMS` t1 ON p1.`ID_TASK` = t1.`PARENT_ID`
+		WHERE p1.`A_SYNCHRONIZED` = 0 AND t1.`PARENT_ID` = @id
+	;
+	IF @childs = 0 THEN
+		UPDATE `_SYNC_TASK_PERCENT` SET A_SYNCHRONIZED = 1, A_LAST_SYNC = NOW(), `CHILDS_COUNT` = @childs WHERE `ID_TASK` = @id;
+	ELSE
+		SELECT @avg:=AVG(p2.`A_PROBLEM_COMPLETE_PERCENT`), @amount:=SUM(p2.`L_APPOITMENT_PERIOD`) FROM `_SYNC_TASK_PERCENT` p1
+			LEFT JOIN `PROBLEMS` t1 ON p1.`ID_TASK` = t1.`PARENT_ID`
+			LEFT JOIN `_SYNC_TASK_PERCENT` p2 ON p2.`ID_TASK` = t1.`ID`
+			WHERE p1.`A_SYNCHRONIZED` = 0 AND t1.`PARENT_ID` = @id
+		;
+		SET @avg = ROUND(@avg);
+		UPDATE `_SYNC_TASK_PERCENT` SET A_SYNCHRONIZED = 1, A_PROBLEM_COMPLETE_PERCENT = @avg,L_APPOITMENT_PERIOD = @amount, A_LAST_SYNC = NOW(), `CHILDS_COUNT` = @childs WHERE `ID_TASK` = @id;
+		SET @avg = ROUND(@avg/10)*10;
+		UPDATE `PROBLEMS` SET `A_PROBLEM_COMPLETE_PERCENT` = CONCAT(@avg, "%"),L_APPOITMENT_PERIOD = @amount, A_RECORD_UPDATE_DATE = NOW() WHERE `ID` = @id;
+	END IF;
+	SELECT "TEST";
+	SELECT @childsdone:=COUNT(*) FROM `_SYNC_TASK_PERCENT` p
+		LEFT JOIN `PROBLEMS` t ON t.`ID` = p.`ID_TASK`
+		WHERE p.`A_PROBLEM_COMPLETE_PERCENT` = 100 AND t.`PARENT_ID` = @id
+	;
+	UPDATE `_SYNC_TASK_PERCENT` SET `CHILDS_DONE_COUNT` = @childsdone WHERE `ID_TASK` = @id;
+END WHILE;
+
+END

+ 185 - 0
SE/se-lib/Route/UrlAction/TaskManager.php.task.css

@@ -0,0 +1,185 @@
+.taskList{
+	margin:0 auto;
+	margin-top:25px;
+	margin-bottom:25px;
+	background-color: #fcf59b;
+	color: #212121;
+	font-size:1.5em;
+}
+
+.stats{
+	background-color:#ededed;
+	padding:10px;
+}
+
+#sortable{
+	list-style:none;
+	padding:0;
+	margin:0;
+}
+
+.ico{
+	color:grey;
+	opacity:0.3;
+}
+
+#sortable li{
+	padding:10px 10px;
+	border-bottom-style:dotted;
+	border-color:#CAC47C;
+	border-width:1px;
+}
+
+#save{
+	margin-bottom:10px;
+}
+
+#add{
+	padding:10px 10px;
+	border-bottom-style:solid;
+	border-width:2px;
+	border-color:#f5cf7a;
+}
+
+.details{
+	cursor:pointer;
+	opacity:0.8;
+	color:black;
+}
+
+.details:hover{
+	cursor:pointer;
+	opacity:1;
+}
+
+.addIco{
+	color:grey;
+	opacity:0.3;
+	float:left;
+}
+
+.eInput{
+	margin-left:5px;
+	width:95%;
+	float:left;
+	display:inline-block;
+  min-height:20px;
+	border: none;
+  overflow: auto;
+  outline: none;
+	background-color:transparent;
+	height:15px;
+	resize:none;
+}
+
+.editable{
+	resize: none;
+	margin-left:5px;
+	width:80%;
+	height:15px;
+	display:inline-block;
+	background-color:transparent;
+  min-height:20px;
+	border: none;
+  overflow: auto;
+  outline: none;
+}
+
+.check, .aCheck{
+	margin-left:5px;
+	width:15px;
+	height:15px;
+	display:inline-block;
+	border-style:solid;
+	border-width:1px;
+	border-color:grey;
+	border-radius:0.1em;
+	background-color: white;
+}
+
+#doneList{
+	list-style:none;
+	background-color:#e9e9e9;
+	padding:0;
+	margin:0;
+}
+
+#doneList li{
+	padding:10px 10px;
+	border-bottom-style:dotted;
+	border-color:#CAC47C;
+	border-width:1px;
+}
+
+#doneList .editable{
+	color:grey;
+	text-decoration: line-through;
+	display:inline-block;
+	margin-left:5px;
+}
+
+.progress{
+	background-color: transparent;
+}
+
+#showMore{
+	background-color:#e9e9e9;
+	text-align:center;
+	color:grey;
+	font-size:11px;
+	cursor:pointer;
+}
+
+.form-group{
+	margin-bottom:15px;
+}
+
+.ui-autocomplete {
+	position: absolute;
+	top: 100%;
+	left: 0;
+	z-index: 1000;
+	float: left;
+	display: none;
+	min-width: 160px;
+	padding: 4px 0;
+	margin: 0 0 10px 25px;
+	list-style: none;
+	background-color: #ffffff;
+	border-color: #ccc;
+	border-color: rgba(0, 0, 0, 0.2);
+	border-style: solid;
+	border-width: 1px;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	border-radius: 5px;
+	-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+	-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+	box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+	-webkit-background-clip: padding-box;
+	-moz-background-clip: padding;
+	background-clip: padding-box;
+	*border-right-width: 2px;
+	*border-bottom-width: 2px;
+}
+
+.ui-menu-item > a.ui-corner-all {
+	display: block;
+	padding: 3px 15px;
+	clear: both;
+	font-weight: normal;
+	line-height: 18px;
+	color: #555555;
+	white-space: nowrap;
+	text-decoration: none;
+}
+
+.ui-state-hover, .ui-state-active {
+	color: #ffffff;
+	text-decoration: none;
+	background-color: #0088cc;
+	border-radius: 0px;
+	-webkit-border-radius: 0px;
+	-moz-border-radius: 0px;
+	background-image: none;
+}

+ 898 - 0
SE/se-lib/Route/UrlAction/TaskManager.php.task.js

@@ -0,0 +1,898 @@
+// @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 = `
+    <Transaction
+      xmlns="http://www.opengis.net/wfs"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      version="1.0.0"
+      service="WFS"
+      xmlns:p5_default_db="` + BASE_URL + `wfs/default_db/PROBLEMS"
+      xsi:schemaLocation="` + BASE_URL + `wfs/default_db/PROBLEMS` + BASE_URL + `dev-pl/se-feature-api/wfs.php/xml/wfs/default_db/PROBLEMS/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:PROBLEMS&amp;SRSNAME=EPSG:4326&amp;"
+      xmlns:gml="http://www.opengis.net/gml">
+  `;
+  var i = 0;
+  var idx = [];
+  $("#sortable").find(".singleTask").each(function() {
+    i++;
+    req += `
+      <Insert xmlns="http://www.opengis.net/wfs">
+      <PROBLEMS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">
+      <ID xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + $(this).data("id") + `</ID>
+      <SORT_PRIO xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + i + `</SORT_PRIO>
+      </PROBLEMS>
+      </Insert>
+    `;
+    idx.push($(this).data("id"));
+  });
+  req += `</Transaction>`;
+
+  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("sorted");
+      //console.log(data);
+      $.notify("Sortowanie zsynchronizowane", "success");
+    }
+  });
+  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, target) {
+  var link;
+  if (TYPE == "PROBLEM") {
+    link = BASE_URL + 'index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID=' + ProblemsTableId + "#EDIT/" + id;
+  }
+  if (TYPE == "PROJECT") {
+    link = BASE_URL + 'index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID=' + ProjectsTableId + "#EDIT/" + id;
+  }
+  $(target).attr("href", link);
+}
+
+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 = `
+  <Transaction
+  xmlns="http://www.opengis.net/wfs"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  version="1.0.0"
+  service="WFS"
+  xmlns:p5_default_db="` + BASE_URL + `wfs/default_db/PROBLEMS"
+  xsi:schemaLocation="` + BASE_URL + `wfs/default_db/PROBLEMS ` + BASE_URL + `dev-pl/se-feature-api/wfs.php/xml/wfs/default_db/PROBLEMS/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:PROBLEMS&amp;SRSNAME=EPSG:4326&amp;"
+  xmlns:gml="http://www.opengis.net/gml">
+  <Insert xmlns="http://www.opengis.net/wfs">
+  <PROBLEMS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">
+  <ID xmlns="` + BASE_URL + `wfs/default_db/CRM_PROCES">` + TASK + `</ID>
+  `;
+        $("#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 += `
+  </PROBLEMS>
+  </Insert>
+  </Transaction>
+  `;
+        //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("");
+  }
+}
+
+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 = `
+    <Transaction
+    xmlns="http://www.opengis.net/wfs"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    version="1.0.0"
+    service="WFS"
+    xmlns:p5_default_db="` + BASE_URL + `wfs/default_db/PROBLEMS"
+    xsi:schemaLocation="` + BASE_URL + `wfs/default_db/PROBLEMS` + BASE_URL + `dev-pl/se-feature-api/wfs.php/xml/wfs/default_db/PROBLEMS/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:PROBLEMS&amp;SRSNAME=EPSG:4326&amp;"
+    xmlns:gml="http://www.opengis.net/gml">
+  `;
+  req += `
+    <Insert xmlns="http://www.opengis.net/wfs">
+    <PROBLEMS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">
+    <ID xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + $(this).data("id") + `</ID>`;
+  if (state[index]["status"] == "NORMAL") {
+    state[index]["status"] = "WAITING";
+    req += '<A_STATUS xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">WAITING</A_STATUS>';
+  } else if (state[index]["status"] == "WAITING") {
+    state[index]["status"] = "NORMAL";
+    req += '<A_STATUS xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">NORMAL</A_STATUS>';
+  }
+  req += `</PROBLEMS>
+    </Insert>
+    </Transaction>`;
+  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=<ogc:Filter><ogc:PropertyIsLike wildCard="*" singleChar="^" escapeChar="!"><ogc:PropertyName>ADM_ACCOUNT</ogc:PropertyName><ogc:Literal>*' + request.term + '*</ogc:Literal></ogc:PropertyIsLike></ogc:Filter>&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 = `
+      <Transaction
+      xmlns="http://www.opengis.net/wfs"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      version="1.0.0"
+      service="WFS"
+      xmlns:p5_default_db="` + BASE_URL + `wfs/default_db/PROBLEMS"
+      xsi:schemaLocation="` + BASE_URL + `wfs/default_db/PROBLEMS` + BASE_URL + `dev-pl/se-feature-api/wfs.php/xml/wfs/default_db/PROBLEMS/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:PROBLEMS&amp;SRSNAME=EPSG:4326&amp;"
+      xmlns:gml="http://www.opengis.net/gml">
+    `;
+    req += `
+      <Insert xmlns="http://www.opengis.net/wfs">
+      <PROBLEMS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">
+      <ID xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + $(this).parents("li").data('id') + `</ID>
+      <L_APPOITMENT_PERIOD xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + $(textarea).val()+ `</L_APPOITMENT_PERIOD>
+      </PROBLEMS>
+      </Insert>`;
+    req += '</Transaction>';
+    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&';
+    $.ajax({
+      url: link,
+      data: req,
+      type: 'POST',
+      contentType: "text/xml",
+      dataType: "xml",
+      success: function(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 = `
+      <Transaction
+      xmlns="http://www.opengis.net/wfs"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      version="1.0.0"
+      service="WFS"
+      xmlns:p5_default_db="` + BASE_URL + `wfs/default_db/PROBLEMS"
+      xsi:schemaLocation="` + BASE_URL + `wfs/default_db/PROBLEMS` + BASE_URL + `dev-pl/se-feature-api/wfs.php/xml/wfs/default_db/PROBLEMS/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:PROBLEMS&amp;SRSNAME=EPSG:4326&amp;"
+      xmlns:gml="http://www.opengis.net/gml">
+    `;
+    req += `
+      <Insert xmlns="http://www.opengis.net/wfs">
+      <PROBLEMS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">
+      <ID xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + $(this).parents("li").data('id') + `</ID>`;
+    if (details.worker != false)
+      req += '<L_APPOITMENT_USER xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + details.worker + '</L_APPOITMENT_USER>';
+    else
+      req += '<L_APPOITMENT_USER xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + USER + '</L_APPOITMENT_USER>';
+
+    if (details.date != false)
+      req += '<A_PROBLEM_DATE xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + details.date + '</A_PROBLEM_DATE>';
+    else
+      req += '<A_PROBLEM_DATE xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + moment().format('YYYY-MM-DD HH:mm:ss') + '</A_PROBLEM_DATE>';
+
+    req += `<A_PROBLEM_DESC xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + $(this).val() + `</A_PROBLEM_DESC>
+      <CUSTOMER_ADMIN_USER xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">BRAK</CUSTOMER_ADMIN_USER>
+      </PROBLEMS>
+      </Insert>`;
+    req += '</Transaction>';
+    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 = `
+        <Transaction
+        xmlns="http://www.opengis.net/wfs"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        version="1.0.0"
+        service="WFS"
+        xmlns:p5_default_db="` + BASE_URL + `wfs/default_db/PROBLEMS"
+        xsi:schemaLocation="` + BASE_URL + `wfs/default_db/PROBLEMS` + BASE_URL + `dev-pl/se-feature-api/wfs.php/xml/wfs/default_db/PROBLEMS/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:PROBLEMS&amp;SRSNAME=EPSG:4326&amp;"
+        xmlns:gml="http://www.opengis.net/gml">
+      `;
+      req += `
+        <Insert xmlns="http://www.opengis.net/wfs">
+        <PROBLEMS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">`;
+      if (TYPE == "PROBLEM") {
+        req += `<PARENT_ID xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + TASK + `</PARENT_ID>`;
+      }
+      if (TYPE == "PROJECT") {
+        req += `<PARENT_ID xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">0</PARENT_ID>`;
+      }
+      if (details.worker != false) {
+        req += '<L_APPOITMENT_USER xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + details.worker + '</L_APPOITMENT_USER>';
+      } else {
+        req += '<L_APPOITMENT_USER xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + USER + '</L_APPOITMENT_USER>';
+      }
+
+      if (details.date != false) {
+        req += '<A_PROBLEM_DATE xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + details.date + '</A_PROBLEM_DATE>';
+      } else {
+        req += '<A_PROBLEM_DATE xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">' + moment().format('YYYY-MM-DD HH:mm:ss') + '</A_PROBLEM_DATE>';
+      }
+      req += `<ID_PROJECT xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + ProjectId + `</ID_PROJECT>`;
+      req += `<L_APPOITMENT_PERIOD xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">0</L_APPOITMENT_PERIOD>`;
+      req += `<A_PROBLEM_DESC xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + $(this).val() + `</A_PROBLEM_DESC>
+        <CUSTOMER_ADMIN_USER xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">BRAK</CUSTOMER_ADMIN_USER>
+        </PROBLEMS>
+        </Insert>`;
+      req += '</Transaction>';
+      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) {
+          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["status"] = "WAITING";
+          temp["worker"] = (details.worker != false ? details.worker : USER);
+          temp["owner"] = USER;
+          state.push(temp);
+          $(".eInput").val("");
+          updateProgress();
+          render();
+          setSort();
+        }
+      });
+    }
+    return false;
+  }
+});
+
+$(document).on('click', '.delTask', function() {
+  if ($(this).parents(".singleTask").find(".aCheck").data("state") == "1") {
+    $.notify("Nie możesz zmieniać stanu zatwierdzonych zadań", "danger");
+    return true;
+  }
+  if ($(this).parents(".singleTask").data("step") == 2) {
+    allCount--;
+  } else {
+    allCount--;
+    activeCount--;
+  }
+
+  var id = $(this).closest(".singleTask").data("id");
+  var index = getIndexById(id);
+  var req = `
+    <Transaction
+    xmlns="http://www.opengis.net/wfs"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    version="1.0.0"
+    service="WFS"
+    xmlns:p5_default_db="` + BASE_URL + `wfs/default_db/PROBLEMS"
+    xsi:schemaLocation="` + BASE_URL + `wfs/default_db/PROBLEMS` + BASE_URL + `dev-pl/se-feature-api/wfs.php/xml/wfs/default_db/PROBLEMS/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:PROBLEMS&amp;SRSNAME=EPSG:4326&amp;"
+    xmlns:gml="http://www.opengis.net/gml">
+  `;
+  req += `
+    <Insert xmlns="http://www.opengis.net/wfs">
+    <PROBLEMS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">`;
+  req += `<ID xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + id + `</ID>`;
+  req += `<A_STATUS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">DELETED</A_STATUS>
+    </PROBLEMS>
+    </Insert>`;
+  req += '</Transaction>';
+  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 <span class='glyphicon glyphicon-chevron-down'></span>");
+  } else {
+    $("#doneList").slideDown("fast");
+    $(this).html("Ukryj wykonane zadania <span class='glyphicon glyphicon-chevron-up'></span>");
+  }
+});
+
+$(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 = `
+    <Transaction
+    xmlns="http://www.opengis.net/wfs"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    version="1.0.0"
+    service="WFS"
+    xmlns:p5_default_db="` + BASE_URL + `wfs/default_db/PROBLEMS"
+    xsi:schemaLocation="` + BASE_URL + `wfs/default_db/PROBLEMS` + BASE_URL + `dev-pl/se-feature-api/wfs.php/xml/wfs/default_db/PROBLEMS/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:PROBLEMS&amp;SRSNAME=EPSG:4326&amp;"
+    xmlns:gml="http://www.opengis.net/gml">
+  `;
+  req += `
+    <Insert xmlns="http://www.opengis.net/wfs">
+    <PROBLEMS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">
+    <ID xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + id + `</ID>`;
+  if (state[id]['status'] != "OFF_HARD") {
+    req += '<A_STATUS xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">OFF_HARD</A_STATUS>';
+    state[id]['status'] = "OFF_HARD";
+  } else {
+    req += '<A_STATUS xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">WAITING</A_STATUS>';
+    state[id]['status'] = "WAITING";
+  }
+  req += `</PROBLEMS>
+    </Insert>
+    </Transaction>`;
+  $.ajax({
+    url: link,
+    data: req,
+    type: 'POST',
+    contentType: "text/xml",
+    dataType: "text",
+    success: function(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 = `
+    <Transaction
+    xmlns="http://www.opengis.net/wfs"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    version="1.0.0"
+    service="WFS"
+    xmlns:p5_default_db="` + BASE_URL + `wfs/default_db/PROBLEMS"
+    xsi:schemaLocation="` + BASE_URL + `wfs/default_db/PROBLEMS` + BASE_URL + `dev-pl/se-feature-api/wfs.php/xml/wfs/default_db/PROBLEMS/?SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=p5_default_db:PROBLEMS&amp;SRSNAME=EPSG:4326&amp;"
+    xmlns:gml="http://www.opengis.net/gml">
+  `;
+  req += `
+    <Insert xmlns="http://www.opengis.net/wfs">
+    <PROBLEMS xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">
+    <ID xmlns="` + BASE_URL + `wfs/default_db/PROBLEMS">` + $(node).parents("li").data("id") + `</ID>`;
+
+  if (state[index]['percent'] != "100%") {
+    req += '<A_PROBLEM_COMPLETE_PERCENT xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">100%</A_PROBLEM_COMPLETE_PERCENT>';
+    state[index]['percent'] = "100%";
+  } else {
+    req += '<A_PROBLEM_COMPLETE_PERCENT xmlns="' + BASE_URL + 'wfs/default_db/PROBLEMS">0%</A_PROBLEM_COMPLETE_PERCENT>';
+    state[index]['percent'] = "0%";
+  }
+  req += `</PROBLEMS>
+    </Insert>
+    </Transaction>`;
+  $.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=<ogc:Filter><ogc:PropertyIsEqualTo><ogc:PropertyName>ID</ogc:PropertyName><ogc:Literal>" + TASK + "</ogc:Literal></ogc:PropertyIsEqualTo></ogc:Filter>";
+  }
+  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=<ogc:Filter><ogc:PropertyIsEqualTo><ogc:PropertyName>ID</ogc:PropertyName><ogc:Literal>" + TASK + "</ogc:Literal></ogc:PropertyIsEqualTo></ogc:Filter>";
+  }
+  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 = `
+          <ol class="breadcrumb">
+          ` + ($(data).find("ID_PROJECT").text() != 0 ? "<li><a href='" + BASE_URL + "index.php?_route=UrlAction_TaskManager&ID_PROJECT=" + $(data).find("ID_PROJECT").text() + "'> Projekt " + $(data).find("ID_PROJECT").text() + "</a></li>" : "") + `
+          ` + ($(data).find("PARENT_ID").text() != 0 ? "<li><a href='" + BASE_URL + "index.php?_route=UrlAction_TaskManager&ID_PROBLEM=" + $(data).find("PARENT_ID").text() + "'> Zadanie " + $(data).find("PARENT_ID").text() + "</a></li>" : "") + `
+          <li class="active">Zadanie ` + $(data).find("ID").text() + ` </li>
+          </ol>`;
+      }
+      if (TYPE == "PROJECT") {
+        var breadcrumb = `
+          <ol class="breadcrumb">
+          <li class=active> Projekt ` + TASK + `</li>
+          </ol>`;
+      }
+      $("#left").append(breadcrumb);
+      field += '';
+      $(fields).find("sequence").find("element").each(function() {
+        var show = true;
+        if ($(this).attr('name') == "ID") {
+          show = false;
+        }
+        if (show) {
+          field += '<div class="form-group">';
+          field += '<label class="col-xs-12 col-sm-12 col-md-12 control-label" for="' + $(this).attr('name') + '">';
+          if ($(this).attr('p5:label')) {
+            field += $(this).attr('p5:label');
+          } else {
+            field += $(this).attr('name');
+          }
+          field += ' <i class="glyphicon glyphicon-info-sign frm-help" data-toggle="popover" data-trigger="hover" title="" data-content="' + stripHTML($(this).attr('p5:description')) + '" data-original-title="' + $(this).attr('name') + '">';
+          field += '</i>';
+          field += '</label>';
+          field += '<div class="col-xs-12 col-sm-12 col-md-12">';
+          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 += '<input readOnly name="' + $(this).attr('name') + '" type="text" value="' + $(data).find($(this).attr('name')).text() + '" maxlength="255" class="form-control">';
+            } else if ($(this).attr('type') == "xsd:dateTime") {
+              field += '<div class="input-group"><input  name="' + $(this).attr('name') + '" readOnly type="text" value="' + value + '" maxlength="255" class="se_type-datetime form-control" data-format="yyyy-MM-dd hh:mm"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></div>';
+            } else {
+              field += '<select name="' + $(this).attr('name') + '" class="form-control"><option></option>';
+              $(fields).find("simpleType[name='" + $(this).attr('type').replace("p5_default_db:", "") + "']").find("enumeration").each(function() {
+                if (value == $(this).attr("value")) {
+                  field += '<option selected=SELECTED >' + $(this).attr("value") + '</option>';
+                } else {
+                  field += '<option >' + $(this).attr("value") + '</option>';
+                }
+              });
+              field += "</select>";
+            }
+          } else {
+            field += $(data).find($(this).attr('name')).text();
+          }
+          field += '</div>';
+          field += '<div class=clearfix></div></div>';
+        }
+      });
+      field += '<div class="form-group">';
+      field += '<div class="col-xs-offset-0 col-xs-12 col-sm-offset-3 col-sm-9 col-md-offset-2 col-md-10">';
+      field += '</div></div>';
+      field += '<a><button type="submit" class="btn btn-primary" id=save tabindex="20">Edytuj</button></a>';
+      $("#left").append(field);
+      $("#left").append("<div class=clearfix></div>");
+      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=<ogc:Filter><ogc:And><ogc:PropertyIsEqualTo><ogc:PropertyName>PARENT_ID</ogc:PropertyName><ogc:Literal>' + TASK + '</ogc:Literal></ogc:PropertyIsEqualTo><ogc:Not><ogc:PropertyIsEqualTo><ogc:PropertyName>A_STATUS</ogc:PropertyName><ogc:Literal>Deleted</ogc:Literal></ogc:PropertyIsEqualTo></ogc:Not></ogc:And></ogc:Filter>&sortBy=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=<ogc:Filter><ogc:And><ogc:PropertyIsEqualTo><ogc:PropertyName>ID_PROJECT</ogc:PropertyName><ogc:Literal>' + TASK + '</ogc:Literal></ogc:PropertyIsEqualTo><ogc:PropertyIsEqualTo><ogc:PropertyName>PARENT_ID</ogc:PropertyName><ogc:Literal>0</ogc:Literal></ogc:PropertyIsEqualTo><ogc:Not><ogc:PropertyIsEqualTo><ogc:PropertyName>A_STATUS</ogc:PropertyName><ogc:Literal>DELETED</ogc:Literal></ogc:PropertyIsEqualTo></ogc:Not></ogc:And></ogc:Filter>&sortBy=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();
+      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=<ogc:Filter><ogc:PropertyIsEqualTo><ogc:PropertyName>PARENT_ID</ogc:PropertyName><ogc:Literal>" + temp["id"] + "</ogc:Literal></ogc:PropertyIsEqualTo></ogc:Filter>";
+      $.get(linkChilds, function(data) {
+        if ($(data).find("ID").text() != '0') {
+          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 += "<li class=singleTask data-id=" + e["id"] + "  style='"+css+"'>";
+    result += "<span class='glyphicon glyphicon-option-vertical ico'></span>";
+    if (e["percent"] == "100%") {
+      result += "<span class=check style='background-color:#333333'></span>";
+      if (e['status'] != "OFF_HARD") {
+        result += "<span class=aCheck></span>";
+      } else {
+        result += "<span class=aCheck style=background-color:green;></span>";
+      }
+    } else {
+      result += "<span class=check></span>";
+    }
+    result += "<input type=text "+(e["childs"] ? "DISABLED" : "")+" class='form-control hours' value='"+e["period"]+"' style=width:40px;float:left;padding:0px;height:25px;>"
+    result += "<textarea " + (USER != e["owner"] ||  e['status'] == "OFF_HARD" ? "DISABLED" : "") + " class=editable>" + e['desc'] + "</textarea>";
+    result += `<div class="dropdown" style=display:inline;>
+      <span class="glyphicon glyphicon glyphicon-menu-hamburger" data-toggle="dropdown"></span>
+      <ul class="dropdown-menu dropdown-menu-right">
+      <li><a href=` + BASE_URL + `index.php?_route=UrlAction_TaskManager&ID_PROBLEM=` + e['id'] + `>Szczegóły</a></li>
+      <li><p style="cursor:pointer;padding:3px 20px;" class=delTask>Usuń</p></li>
+      </ul>
+      </div>`;
+    result += ((e['owner'] != USER) ? " <span class='glyphicon glyphicon-user user' title='Zlecone przez inną osobę'></span>" : "") + "</li>";
+    if (e['percent'] == "100%") {
+      resultDone += result;
+    } else {
+      resultActive += result;
+    }
+  });
+  resultActive += "<div class=clearfix></div>";
+  resultDone += "<div class=clearfix></div>";
+  $("#sortable").html(resultActive);
+  $("#doneList").html(resultDone);
+}
+
+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 = "<td>L. wykonanych podzadań: "+data["CHILDS_DONE_COUNT"]+"/"+data["CHILDS_COUNT"]+"</td><td></td>";
+    $("#line1", ".stats").html(result);
+  });
+}
+
+function renderTaskManager() {
+  $("#right").append("<div class=taskList ></div>");
+  if (false) {// TODO
+    $("#right").append("<h2>Statystyki</h2><div class=stats></div>");
+    $(".stats").append("<div class=table-responsive><table class=table><tr id=line1></tr><tr id=line2></tr></table></div>");
+    loadStats();
+  }
+  $(".taskList").append("<div class=progress></div>");
+  $(".progress").append("<div id=accepted class='progress-bar progress-bar-success progress-bar-striped' role=progressbar style=width:9%>0%</div>");
+  $(".progress").append("<div id=completed class='progress-bar progress-bar-info progress-bar-striped' role=progressbar style=width:9%>0%</div>");
+  $(".taskList").append("<ul id='sortable'></ul>");
+
+  // $("#sortable").append("<li><span class='glyphicon glyphicon-option-vertical ico'></span><span class=check data-step=0></span> <div class=editable contentEditable='true'>Zaprojektować podstawowy layout skryptu</div></li>");
+  // $("#sortable").append("<li><span class='glyphicon glyphicon-option-vertical ico'></span><span class=check data-step=0></span> <div class=editable contentEditable='true'>Stworzyć tasklistę, dodać przesuwaunie i flagowanie</div></li>");
+  // $("#sortable").append("<li><span class='glyphicon glyphicon-option-vertical ico'></span><span class=check data-step=0></span> <div class=editable contentEditable='true'>Dodać po lewej stronie formularz</div></li>");
+  // $("#sortable").append("<li><span class='glyphicon glyphicon-option-vertical ico'></span><span class=check data-step=0></span> <div class=editable contentEditable='true'>Połączyć z API</div></li>");
+  $(".taskList").append("<div id=add><span class='glyphicon glyphicon-plus addIco'></span> <textarea class=eInput id=datepicker placeholder='Dodaj zadanie'></textarea><div class=clearfix></div></div>");
+  picker = $("<input/>", {
+    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("<div id=showMore >Pokaż wykonane zadania <span class='glyphicon glyphicon-chevron-down'></span></div>");
+  $(".taskList").append("<ul id='doneList'></ul>");
+  var link;
+  $('.editable').autosize();
+  $("#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();
+}