Преглед изворни кода

BiAuditGenerate :: implementacja czyszczenia tabel (jeszcze niczego nie usuwa)

Mariusz Muszyński пре 8 година
родитељ
комит
62b47bd774
1 измењених фајлова са 426 додато и 223 уклоњено
  1. 426 223
      SE/se-lib/Route/UrlAction/BiAuditGenerate.php

+ 426 - 223
SE/se-lib/Route/UrlAction/BiAuditGenerate.php

@@ -26,6 +26,7 @@ class Route_UrlAction_BiAuditGenerate extends RouteBase {
 	private $powiazanie = null;
 	private $SOURCE = null;
 	private $REFERER;
+	private $POWIAZANIA_ID = null;
 
 	public function handleAuth() {
 		if (!User::logged()) {
@@ -123,25 +124,25 @@ class Route_UrlAction_BiAuditGenerate extends RouteBase {
         </table>
       </div>
     </div>
-    <div class="form-group">
+<!--    <div class="form-group">
       <label class="col-sm-2 control-label">
          Odśwież cache
       </label>
       <div class="col-sm-2">
         <select name="reloadCache" class="form-control">
           <option value="No" selected>Nie</option>
-<!--          <option value="Part">Częściowe</option>-->
+<!-#-          <option value="Part">Częściowe</option>-#->
           <option value="Full">Pełne</option>
         </select>
       </div>
     </div>
     <div class="form-group">
       <div class="col-sm-offset-2 col-sm-10">
-<!--        Częściowe odświeżenie wymagane w przypadku, gdy jedynie dodano nowe rekordy w tabelach pracowników/kontrahentów.<br/>-->
+<!-#-        Częściowe odświeżenie wymagane w przypadku, gdy jedynie dodano nowe rekordy w tabelach pracowników/kontrahentów.<br/>-#->
         Pełne odświeżenie wymagane w przypadku edycji/usunięcia istniejących rekordów w tabelach pracowników/kontrahentów.<br/>
         Uwaga! Jeżeli aktywne są inne zadania, te zadanie zostanie wstrzymane do momentu ich ukończenia.
       </div>
-    </div>
+    </div>-->
     <div class="form-group">
       <div class="col-sm-12">
         <div class="containter" style="text-align:center">
@@ -156,252 +157,252 @@ class Route_UrlAction_BiAuditGenerate extends RouteBase {
 <script language="JavaScript">
 <!--
 function toggleAll(source) {
-  checkboxes = document.getElementsByName('prID[]');
-  for(var i=0, n=checkboxes.length;i<n;i++) checkboxes[i].checked = source.checked;
+checkboxes = document.getElementsByName('prID[]');
+for(var i=0, n=checkboxes.length;i<n;i++) checkboxes[i].checked = source.checked;
 }
 function toggle(source) {
-  checkboxes = document.getElementsByName('prID[]');
-  all = true;
-  for(var i=0, n=checkboxes.length;i<n;i++) if(checkboxes[i].checked == false) all = false;
-  source.form['checkAll'].checked = all;
+checkboxes = document.getElementsByName('prID[]');
+all = true;
+for(var i=0, n=checkboxes.length;i<n;i++) if(checkboxes[i].checked == false) all = false;
+source.form['checkAll'].checked = all;
 }
 -->
 </script>
 <?php
-	}
+}
 
-	private function initializePowiazaniaSave() {
-		$prID = V::get('prID', array(), $_POST);
-		if (!$prID) throw new Exception("Nie wybrano żadnego pracownika!");
-
-		$acl = Core_AclHelper::getAclByNamespace('default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI');
-		$queryFeatures = $acl->buildQuery(['limit' => 0, 'cols' => ['ID']]);
-		$kontrahenci = $queryFeatures->getItems();
-
-		$acl = Core_AclHelper::getAclByNamespace('default_db/BI_audit_KW_requested_person/BI_audit_KW_requested_person');
-		$queryFeatures = $acl->buildQuery(['limit' => 0, 'cols' => ['ID']]);
-		$requestedPersons = $queryFeatures->getItems();
-
-		if (!($kontrahenci || $requestedPersons)) throw new Exception("Nie znaleziono żadnego obiektu końcowego");
-
-		$sqlUpdate = ['FILE_STATUS' => 'TO_GENERATE'];
-
-		$reloadCache = V::get('reloadCache', 'No', $_POST);
-		$reloadCacheAvailable = ['Full', 'Part', 'No'];
-		if (!in_array($reloadCache, $reloadCacheAvailable)) throw new Exception("Błąd formularza!");
-		$sqlUpdate['BI_analiza_reloadCache'] = $reloadCache;
-
-		$query = "select count(*) from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache in ('Full', 'Part')";
-		$result = DB::getPDO()->fetchValue($query);
-		if ($result) $sqlUpdate['FILE_STATUS_info'] = 'Oczekuje na odświeżenie cache (wymagane dla innego rekordu)';
-		elseif ($reloadCache != 'No') $sqlUpdate['FILE_STATUS_info'] = 'Oczekuje na odświeżenie cache';
-		else $sqlUpdate['FILE_STATUS_info'] = "Oczekuje na wygenerowanie powiązań";
-
-		if ($this->powiazanie) { // wyzwolone z poziomu tabeli BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA - aktualizujemy istniejący rekord
-			$powiazanieID = $this->powiazanie['ID'];
-		} else { // wyzwolone z poziomu tabeli BI_audit_ENERGA_PRACOWNICY - dodajemy nowy rekord
-			if (count($prID) != 1) throw new Exception("Błąd formularza!");
-			if (!($lAppoitmentInfo = V::get('info', false, $_POST))) throw new Exception("Błąd formularza!");
-			if (!($BiAnalizaMinDepth = V::get('minDepth', false, $_POST))) throw new Exception("Błąd formularza!");
-			if (!($BiAnalizaMaxDepth = V::get('maxDepth', false, $_POST))) throw new Exception("Błąd formularza!");
-			if (!($BiAnalizaOnlyTargets = V::get('onlyTargets', false, $_POST))) throw new Exception("Błąd formularza!");
-			$query = "select * from BI_audit_ENERGA_PRACOWNICY where ID='{$prID[0]}'";
-			$result = DB::getPDO()->fetchFirst($query);
-			if (!$result) throw new Exception("Błąd formularza!");
-			$sqlInsert = [
-				'L_APPOITMENT_INFO' => $lAppoitmentInfo,
-				'A_STATUS' => 'NORMAL',
-				'A_STATUS_INFO' => 'Dodane przez BiAuditGenerate z poziomu tabeli BI_audit_ENERGA_PRACOWNICY',
-				'A_ADM_COMPANY' => $result['A_ADM_COMPANY'],
-				'A_CLASSIFIED' => $result['A_CLASSIFIED'],
-				'FILE_STATUS' => 'NONE',
-				'FILE_STATUS_info' => 'Oczekuję na zdefiniowanie danych wejściowych',
-				'BI_analiza_reloadCache' => $sqlUpdate['BI_analiza_reloadCache'],
-				'BI_analiza_minDepth' => $BiAnalizaMinDepth,
-				'BI_analiza_maxDepth' => $BiAnalizaMaxDepth,
-				'BI_analiza_onlyTargets' => $BiAnalizaOnlyTargets,
-			];
-			$powiazanieID = DB::getDB()->ADD_NEW_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', (object)$sqlInsert);
-			if ($powiazanieID) SE_Layout::alert('success','Dodano rekord do wygenerowania powiązań');
-			else throw new Exception("Wystąpił nieznany błąd @initializePowiazaniaSave");
-		}
+private function initializePowiazaniaSave() {
+	$prID = V::get('prID', array(), $_POST);
+	if (!$prID) throw new Exception("Nie wybrano żadnego pracownika!");
+
+	$acl = Core_AclHelper::getAclByNamespace('default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI');
+	$queryFeatures = $acl->buildQuery(['limit' => 0, 'cols' => ['ID']]);
+	$kontrahenci = $queryFeatures->getItems();
+
+	$acl = Core_AclHelper::getAclByNamespace('default_db/BI_audit_KW_requested_person/BI_audit_KW_requested_person');
+	$queryFeatures = $acl->buildQuery(['limit' => 0, 'cols' => ['ID']]);
+	$requestedPersons = $queryFeatures->getItems();
+
+	if (!($kontrahenci || $requestedPersons)) throw new Exception("Nie znaleziono żadnego obiektu końcowego");
+
+	$sqlUpdate = ['FILE_STATUS' => 'TO_GENERATE'];
+
+	$reloadCache = V::get('reloadCache', 'No', $_POST);
+	$reloadCacheAvailable = ['Full', 'Part', 'No'];
+	if (!in_array($reloadCache, $reloadCacheAvailable)) throw new Exception("Błąd formularza!");
+	$sqlUpdate['BI_analiza_reloadCache'] = $reloadCache;
+
+	$query = "select count(*) from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache in ('Full', 'Part')";
+	$result = DB::getPDO()->fetchValue($query);
+	if ($result) $sqlUpdate['FILE_STATUS_info'] = 'Oczekuje na odświeżenie cache (wymagane dla innego rekordu)';
+	elseif ($reloadCache != 'No') $sqlUpdate['FILE_STATUS_info'] = 'Oczekuje na odświeżenie cache';
+	else $sqlUpdate['FILE_STATUS_info'] = "Oczekuje na wygenerowanie powiązań";
+
+	if ($this->powiazanie) { // wyzwolone z poziomu tabeli BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA - aktualizujemy istniejący rekord
+		$powiazanieID = $this->powiazanie['ID'];
+	} else { // wyzwolone z poziomu tabeli BI_audit_ENERGA_PRACOWNICY - dodajemy nowy rekord
+		if (count($prID) != 1) throw new Exception("Błąd formularza!");
+		if (!($lAppoitmentInfo = V::get('info', false, $_POST))) throw new Exception("Błąd formularza!");
+		if (!($BiAnalizaMinDepth = V::get('minDepth', false, $_POST))) throw new Exception("Błąd formularza!");
+		if (!($BiAnalizaMaxDepth = V::get('maxDepth', false, $_POST))) throw new Exception("Błąd formularza!");
+		if (!($BiAnalizaOnlyTargets = V::get('onlyTargets', false, $_POST))) throw new Exception("Błąd formularza!");
+		$query = "select * from BI_audit_ENERGA_PRACOWNICY where ID='{$prID[0]}'";
+		$result = DB::getPDO()->fetchFirst($query);
+		if (!$result) throw new Exception("Błąd formularza!");
+		$sqlInsert = [
+			'L_APPOITMENT_INFO' => $lAppoitmentInfo,
+			'A_STATUS' => 'NORMAL',
+			'A_STATUS_INFO' => 'Dodane przez BiAuditGenerate z poziomu tabeli BI_audit_ENERGA_PRACOWNICY',
+			'A_ADM_COMPANY' => $result['A_ADM_COMPANY'],
+			'A_CLASSIFIED' => $result['A_CLASSIFIED'],
+			'FILE_STATUS' => 'NONE',
+			'FILE_STATUS_info' => 'Oczekuję na zdefiniowanie danych wejściowych',
+			'BI_analiza_reloadCache' => $sqlUpdate['BI_analiza_reloadCache'],
+			'BI_analiza_minDepth' => $BiAnalizaMinDepth,
+			'BI_analiza_maxDepth' => $BiAnalizaMaxDepth,
+			'BI_analiza_onlyTargets' => $BiAnalizaOnlyTargets,
+		];
+		$powiazanieID = DB::getDB()->ADD_NEW_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', (object)$sqlInsert);
+		if ($powiazanieID) SE_Layout::alert('success','Dodano rekord do wygenerowania powiązań');
+		else throw new Exception("Wystąpił nieznany błąd @initializePowiazaniaSave");
+	}
 
-		$sqlUpdate['ID'] = $powiazanieID;
+	$sqlUpdate['ID'] = $powiazanieID;
 
-		self::truncatePowiazaniaFromDB($powiazanieID);
+	self::truncatePowiazaniaFromDB($powiazanieID);
 
-		$refPowiazaniaToPracownicy = BiAuditRefTables::getRefTable('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', 'BI_audit_ENERGA_PRACOWNICY', true);
-		foreach ($prID as $v) DB::getPDO()->insert($refPowiazaniaToPracownicy, ['PRIMARY_KEY' => $powiazanieID, 'REMOTE_PRIMARY_KEY' => $v]);
+	$refPowiazaniaToPracownicy = BiAuditRefTables::getRefTable('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', 'BI_audit_ENERGA_PRACOWNICY', true);
+	foreach ($prID as $v) DB::getPDO()->insert($refPowiazaniaToPracownicy, ['PRIMARY_KEY' => $powiazanieID, 'REMOTE_PRIMARY_KEY' => $v]);
 
-		$refPowiazaniaToKontrahenci = BiAuditRefTables::getRefTable('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', 'BI_audit_ENERGA_RUM_KONTRAHENCI', true);
-		foreach ($kontrahenci as $kontrahent) DB::getPDO()->insert($refPowiazaniaToKontrahenci, ['PRIMARY_KEY' => $powiazanieID, 'REMOTE_PRIMARY_KEY' => $kontrahent['ID']]);
+	$refPowiazaniaToKontrahenci = BiAuditRefTables::getRefTable('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', 'BI_audit_ENERGA_RUM_KONTRAHENCI', true);
+	foreach ($kontrahenci as $kontrahent) DB::getPDO()->insert($refPowiazaniaToKontrahenci, ['PRIMARY_KEY' => $powiazanieID, 'REMOTE_PRIMARY_KEY' => $kontrahent['ID']]);
 
-		$refPowiazaniaToKwRequestedPreson = BiAuditRefTables::getRefTable('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', 'BI_audit_KW_requested_person', true);
-		foreach ($requestedPersons as $requestedPerson) DB::getPDO()->insert($refPowiazaniaToKwRequestedPreson, ['PRIMARY_KEY' => $powiazanieID, 'REMOTE_PRIMARY_KEY' => $requestedPerson['ID']]);
+	$refPowiazaniaToKwRequestedPreson = BiAuditRefTables::getRefTable('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', 'BI_audit_KW_requested_person', true);
+	foreach ($requestedPersons as $requestedPerson) DB::getPDO()->insert($refPowiazaniaToKwRequestedPreson, ['PRIMARY_KEY' => $powiazanieID, 'REMOTE_PRIMARY_KEY' => $requestedPerson['ID']]);
 
-		$affected = DB::getDB()->UPDATE_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $sqlUpdate);
-		if ($affected) {
-			if ($this->powiazanie) {
-				SE_Layout::alert('success','Oznaczono rekord do wygenerowania powiązań');
+	$affected = DB::getDB()->UPDATE_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $sqlUpdate);
+	if ($affected) {
+		if ($this->powiazanie) {
+			SE_Layout::alert('success','Oznaczono rekord do wygenerowania powiązań');
 ?>
 <div class="container" style="text-align:center">
-  <a href="<?=$this->REFERER?>" class="btn btn-primary">Powrót</a>
+<a href="<?=$this->REFERER?>" class="btn btn-primary">Powrót</a>
 </div>
 <?php
-			}
-		} else throw new Exception("Wystąpił nieznany błąd @initializePowiazaniaSave");
-	}
-
-	private function initializePowiazania() {
-		switch (V::get('action', '', $_POST)) {
-			case "initialize":
-				$this->initializePowiazaniaSave();
-				break;
-			default:
-				$this->initializePowiazaniaForm();
 		}
+	} else throw new Exception("Wystąpił nieznany błąd @initializePowiazaniaSave");
+}
+
+private function initializePowiazania() {
+	switch (V::get('action', '', $_POST)) {
+		case "initialize":
+			$this->initializePowiazaniaSave();
+			break;
+		default:
+			$this->initializePowiazaniaForm();
 	}
+}
 
-	private function showPowiazania() {
+private function showPowiazania() {
 //		echo "Statystyki znalezionych powiązań [TODO]";
-		$dir = self::getDirectory('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $this->powiazanie['ID']);
-		$url = self::getUrl('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $this->powiazanie['ID']);
-
-		$reports = [
-			'pdf' => [
-				'files' => glob("{$dir}/relations*.pdf"),
-				'label' => 'Raporty PDF:<br/>&nbsp;',
-				'button' => 'Pokaż raport PDF',
-				'regex' => "/^relations(-{$this->powiazanie['ID']})?_([[:digit:]]+)\.pdf$/",
-				'parentDir' => false,
-			],
-			'html' => [
-				'files' => glob("{$dir}/html*/relations-{$this->powiazanie['ID']}*.html"),
-				'label' => 'Raporty HTML<br/>do przeglądania:',
-				'button' => 'Pokaż raport HTML',
-				'regex' => "/^relations-({$this->powiazanie['ID']})_([[:digit:]]+)\.html$/",
-				'parentDir' => true,
-			],
-			'htmlZip' => [
-				'files' => glob("{$dir}/html*.zip"),
-				'label' => 'Raporty HTML<br/>do pobrania:',
-				'button' => 'Pobież raport HTML',
-				'regex' => "/^html(-{$this->powiazanie['ID']})?_([[:digit:]]+)\.zip$/",
-				'parentDir' => false,
-			],
-		];
+	$dir = self::getDirectory('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $this->powiazanie['ID']);
+	$url = self::getUrl('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $this->powiazanie['ID']);
+
+	$reports = [
+		'pdf' => [
+			'files' => glob("{$dir}/relations*.pdf"),
+			'label' => 'Raporty PDF:<br/>&nbsp;',
+			'button' => 'Pokaż raport PDF',
+			'regex' => "/^relations(-{$this->powiazanie['ID']})?_([[:digit:]]+)\.pdf$/",
+			'parentDir' => false,
+		],
+		'html' => [
+			'files' => glob("{$dir}/html*/relations-{$this->powiazanie['ID']}*.html"),
+			'label' => 'Raporty HTML<br/>do przeglądania:',
+			'button' => 'Pokaż raport HTML',
+			'regex' => "/^relations-({$this->powiazanie['ID']})_([[:digit:]]+)\.html$/",
+			'parentDir' => true,
+		],
+		'htmlZip' => [
+			'files' => glob("{$dir}/html*.zip"),
+			'label' => 'Raporty HTML<br/>do pobrania:',
+			'button' => 'Pobież raport HTML',
+			'regex' => "/^html(-{$this->powiazanie['ID']})?_([[:digit:]]+)\.zip$/",
+			'parentDir' => false,
+		],
+	];
 ?>
 <div class="container" style="margin-top:20px">
-  <legend>
-    Wygenerowany raport nr <?=$this->powiazanie['ID']?>
-  </legend>
-  <div class="form-group" style="text-align: center;">
+<legend>
+Wygenerowany raport nr <?=$this->powiazanie['ID']?>
+</legend>
+<div class="form-group" style="text-align: center;">
 <?php
-		array_walk($reports, function ($report) use ($url) {
-			echo "<div class=\"col-sm-2\"><h4>{$report['label']}</h4>";
-			$hrefs = array_filter(array_map(function ($path) use ($url, $report) {
-				if (!is_file($path)) return false;
-				$file = basename($path);
-				if (preg_match($report['regex'], $file, $matches)) $i = " (" . ltrim($matches[2], '0') . ")";
-				else $i = '';
-				if ($report['parentDir']) $file = basename(dirname($path)) . "/" . $file;
-				return "<a href=\"{$url}/{$file}\" target=\"_blank\" class=\"btn btn-primary\">{$report['button']}{$i}</a>";
-			}, $report['files']));
-			if ($hrefs) echo implode('<br/><br/>', $hrefs);
-			else echo "<h5>Nie znaleziono</h5>";
-			echo "</div>\n";
-		});
+	array_walk($reports, function ($report) use ($url) {
+		echo "<div class=\"col-sm-2\"><h4>{$report['label']}</h4>";
+		$hrefs = array_filter(array_map(function ($path) use ($url, $report) {
+			if (!is_file($path)) return false;
+			$file = basename($path);
+			if (preg_match($report['regex'], $file, $matches)) $i = " (" . ltrim($matches[2], '0') . ")";
+			else $i = '';
+			if ($report['parentDir']) $file = basename(dirname($path)) . "/" . $file;
+			return "<a href=\"{$url}/{$file}\" target=\"_blank\" class=\"btn btn-primary\">{$report['button']}{$i}</a>";
+		}, $report['files']));
+		if ($hrefs) echo implode('<br/><br/>', $hrefs);
+		else echo "<h5>Nie znaleziono</h5>";
+		echo "</div>\n";
+	});
 ?>
-  </div>
-  <div class="form-group">
-    <div class="col-sm-12">
-      <br/><br/><a href="<?=$this->REFERER?>" class="btn btn-default">Powrót</a>
-    </div>
-  </div>
+</div>
+<div class="form-group">
+<div class="col-sm-12">
+<br/><br/><a href="<?=$this->REFERER?>" class="btn btn-default">Powrót</a>
+</div>
+</div>
 </div>
 <?php
-	}
+}
 
-	private function showPowiazaniaList() {
-		switch (V::get('action', '', $_POST)) {
-			case "initialize":
-				$this->initializePowiazaniaSave();
-				break;
-		}
-		$this->showPowiazaniaListForm();
+private function showPowiazaniaList() {
+	switch (V::get('action', '', $_POST)) {
+		case "initialize":
+			$this->initializePowiazaniaSave();
+			break;
 	}
+	$this->showPowiazaniaListForm();
+}
 
-	private function showPowiazaniaListForm() {
-		if (!$this->SOURCE['ID']) throw new Exception("Błąd danych");
-		elseif ($this->SOURCE['TABLE'] != 'BI_audit_ENERGA_PRACOWNICY') throw new Exception("Błąd danych");
+private function showPowiazaniaListForm() {
+	if (!$this->SOURCE['ID']) throw new Exception("Błąd danych");
+	elseif ($this->SOURCE['TABLE'] != 'BI_audit_ENERGA_PRACOWNICY') throw new Exception("Błąd danych");
 
-		$query = "select * from `{$this->SOURCE['TABLE']}` where ID = '{$this->SOURCE['ID']}'";
-		$pracownik = DB::getPDO()->fetchFirst($query);
-		if (!$pracownik) throw new Exception("Błąd danych");
+	$query = "select * from `{$this->SOURCE['TABLE']}` where ID = '{$this->SOURCE['ID']}'";
+	$pracownik = DB::getPDO()->fetchFirst($query);
+	if (!$pracownik) throw new Exception("Błąd danych");
 ?>
 <div class="container" style="margin-top:20px">
-  <legend>
-    Lista wygenerowanych powiązań :: <?=htmlspecialchars($pracownik['imiona'] . " " . $pracownik['nazwisko'])?>
-    <span class="pull-right"># <?=$pracownik['ID']?></span>
-  </legend>
-  <div class="form-group">
-    <div class="col-sm-12">
-      <h4>Lista wygenerowanych powiązań, w których znajduje się pracownik</h4>
-      <table class="table table-bordered table-hover table-striped" height=5>
-        <thead>
-          <tr style="text-align:center; background-color:lightgray">
-            <td width=1>ID</td>
-            <td>Adnotacje</td>
-            <td>Minimalna głębokość analizy</td>
-            <td>Maksymalna głębokość analizy</td>
-            <td>Powiązania tylko do celów</td>
-            <td>Status raportu</td>
-            <td>Status raportu - informacje</td>
-            <td>Indywidualny raport</td>
-            <td width=1></td>
-          </tr>
-        </thead>
-        <tbody>
+<legend>
+Lista wygenerowanych powiązań :: <?=htmlspecialchars($pracownik['imiona'] . " " . $pracownik['nazwisko'])?>
+<span class="pull-right"># <?=$pracownik['ID']?></span>
+</legend>
+<div class="form-group">
+<div class="col-sm-12">
+<h4>Lista wygenerowanych powiązań, w których znajduje się pracownik</h4>
+<table class="table table-bordered table-hover table-striped" height=5>
+<thead>
+  <tr style="text-align:center; background-color:lightgray">
+    <td width=1>ID</td>
+    <td>Adnotacje</td>
+    <td>Minimalna głębokość analizy</td>
+    <td>Maksymalna głębokość analizy</td>
+    <td>Powiązania tylko do celów</td>
+    <td>Status raportu</td>
+    <td>Status raportu - informacje</td>
+    <td>Indywidualny raport</td>
+    <td width=1></td>
+  </tr>
+</thead>
+<tbody>
 
 <?php
-		$refPowiazaniaToPracownicy = BiAuditRefTables::getRefTable('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', 'BI_audit_ENERGA_PRACOWNICY', true);
-		$query = "select `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA`.*
+	$refPowiazaniaToPracownicy = BiAuditRefTables::getRefTable('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', 'BI_audit_ENERGA_PRACOWNICY', true);
+	$query = "select `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA`.*
 from `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA`
 join `{$refPowiazaniaToPracownicy}` on `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA`.`ID` = `{$refPowiazaniaToPracownicy}`.`PRIMARY_KEY`
 where `REMOTE_PRIMARY_KEY` = '{$this->SOURCE['ID']}'";
-		$result = DB::getPDO()->fetchAll($query);
+	$result = DB::getPDO()->fetchAll($query);
 
-		if (!$result) echo '<tr><td align="center" colspan="9">Brak znalezionych powiązań</td></tr>';
-		else {
-	                foreach ($result as $row) {
-				$query = "select count(*) from `{$refPowiazaniaToPracownicy}` where `PRIMARY_KEY` = '{$row['ID']}'";
-				$count = DB::getPDO()->fetchValue($query);
+	if (!$result) echo '<tr><td align="center" colspan="9">Brak znalezionych powiązań</td></tr>';
+	else {
+		foreach ($result as $row) {
+			$query = "select count(*) from `{$refPowiazaniaToPracownicy}` where `PRIMARY_KEY` = '{$row['ID']}'";
+			$count = DB::getPDO()->fetchValue($query);
 ?>
-          <tr>
-            <td align="right"><?=$row['ID']?></td>
-            <td><?=$row['L_APPOITMENT_INFO']?></td>
-            <td><?=$row['BI_analiza_minDepth']?></td>
-            <td><?=$row['BI_analiza_maxDepth']?></td>
-            <td><?=($row['BI_analiza_onlyTargets'] == 'N' ? "Nie" : "Tak")?></td>
-            <td><?=$row['FILE_STATUS']?></td>
-            <td><?=$row['FILE_STATUS_info']?></td>
-            <td><?=($count > 1 ? 'Nie' : 'Tak')?></td>
-            <td><?=UI::hButtonPost("Pokaż w tabeli", ['class' => 'btn-info btn-xs', 'action' => "index.php?_route=ViewTableAjax&namespace=default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA&ff_ID={$row['ID']}", 'data' > ['f_ID' => $row['ID']]])?></td>
-          </tr>
+  <tr>
+    <td align="right"><?=$row['ID']?></td>
+    <td><?=$row['L_APPOITMENT_INFO']?></td>
+    <td><?=$row['BI_analiza_minDepth']?></td>
+    <td><?=$row['BI_analiza_maxDepth']?></td>
+    <td><?=($row['BI_analiza_onlyTargets'] == 'N' ? "Nie" : "Tak")?></td>
+    <td><?=$row['FILE_STATUS']?></td>
+    <td><?=$row['FILE_STATUS_info']?></td>
+    <td><?=($count > 1 ? 'Nie' : 'Tak')?></td>
+    <td><?=UI::hButtonPost("Pokaż w tabeli", ['class' => 'btn-info btn-xs', 'action' => "index.php?_route=ViewTableAjax&namespace=default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA&ff_ID={$row['ID']}", 'data' > ['f_ID' => $row['ID']]])?></td>
+  </tr>
 <?php
-			}
 		}
+	}
 ?>
-        </tbody>
-      </table>
-    </div>
-  </div>
-  <div class="form-group">
-    <div class="col-sm-12">
-      <h4>Dodaj nowe zadanie generowania powiazań dla tego pracownika</h4>
-    </div>
-  </div>
-  <form class="form-horizontal" method="post">
+</tbody>
+</table>
+</div>
+</div>
+<div class="form-group">
+<div class="col-sm-12">
+<h4>Dodaj nowe zadanie generowania powiazań dla tego pracownika</h4>
+</div>
+</div>
+<form class="form-horizontal" method="post">
     <div class="form-group">
       <label class="col-sm-4 control-label">Minimalna głębokość poszukiwań (liczba rekurencji)</label>
       <div class="col-sm-1">
@@ -429,25 +430,25 @@ where `REMOTE_PRIMARY_KEY` = '{$this->SOURCE['ID']}'";
         <input type="text" class="form-control" name="info" value="Indywidualnie dla <?=htmlspecialchars($pracownik['imiona'] . " " . $pracownik['nazwisko'])?>" required/>
       </div>
     </div>
-    <div class="form-group">
+<!--    <div class="form-group">
       <label class="col-sm-4 control-label">
          Odśwież cache
       </label>
       <div class="col-sm-2">
         <select name="reloadCache" class="form-control">
           <option value="No" selected>Nie</option>
-<!--          <option value="Part">Częściowe</option>-->
+<!-#-          <option value="Part">Częściowe</option>-#->
           <option value="Full">Pełne</option>
         </select>
       </div>
     </div>
     <div class="form-group">
       <div class="col-sm-offset-4 col-sm-8">
-<!--        Częściowe odświeżenie wymagane w przypadku, gdy jedynie dodano nowe rekordy w tabelach pracowników/kontrahentów.<br/>-->
+<!-#-        Częściowe odświeżenie wymagane w przypadku, gdy jedynie dodano nowe rekordy w tabelach pracowników/kontrahentów.<br/>-#->
         Pełne odświeżenie wymagane w przypadku edycji/usunięcia istniejących rekordów w tabelach pracowników/kontrahentów.<br/>
         Uwaga! Jeżeli aktywne są inne zadania, te zadanie zostanie wstrzymane do momentu ich ukończenia.
       </div>
-    </div>
+    </div>-->
     <div class="form-group">
       <div class="col-sm-12">
         <div class="containter" style="text-align:center">
@@ -924,6 +925,162 @@ function validateCompany(source) {
 <?php
 	}
 
+	private function clearTable_do() {
+		try {
+			$wynik = V::get('wynik', 0, $_POST, 'int');
+			$ctrl = @gzuncompress(@base64_decode(V::get('_BiAuditGenerate_ctrl', '', $_SESSION)));
+			unset($_SESSION['_BiAuditGenerate_ctrl']);
+			$deleteFiles = (V::get('deleteFiles', '', $_POST) === 'on');
+			$deletedDirs = 0; $deletedFiles = 0;
+			if (!($ctrl)) throw new Exception('Błąd parametru');
+			if (!($wynik == $ctrl)) {
+				SE_Layout::alert('warning', 'Podano błędny wynik działania');
+				$this->clearTable_form();
+				return;
+			}
+
+			switch ($this->SOURCE['TABLE']) {
+				case "BI_audit_ENERGA_PRACOWNICY":
+				case "BI_audit_ENERGA_RUM_KONTRAHENCI":
+					$query = "delete from `{$this->SOURCE['TABLE']}`";
+					break;
+				case "BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA":
+					//throw new Exception('Not implemented yet');//TODO
+					if ($deleteFiles) {
+						$query = "select ID from `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA`";
+						$result = DB::getPDO()->fetchAll($query);
+						foreach ($result as $row) {
+							$dir = self::getDirectory('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', $row['ID']);
+							if (!file_exists($dir)) continue;
+							$deleted = V::deleteWholeDirectory($dir, true, false);
+							$deletedDirs += count($deleted['dirs']);
+							$deletedFiles += count($deleted['files']);
+						}
+					}
+					$query = "";
+					break;
+				default: throw new Exception('Błąd parametru');
+				//DB::getPDO()->query($query);
+			}
+?>
+<div style="text-align: center;">
+  <h2>Pomyślnie wyczyszczono tabelę.</h2>
+<?php
+			if ($deleteFiles && ($deletedDirs || $deletedFiles)):
+?>
+  <h4>Ponadto usunięto <?=$deletedDirs?> katalogów oraz <?=$deletedFiles?> plików.</h4>
+<?php
+			endif;
+?>
+  <br/><a href="<?=$this->REFERER?>" class="btn btn-primary" style="width: 80px;">Powrót</a>
+</div>
+<?php
+		} catch (Exception $e) {
+			SE_Layout::alert('danger', $e->getMessage());
+		}
+	}
+
+	private function clearTable_form() {
+		$tables = [
+			'BI_audit_ENERGA_PRACOWNICY' => 'pracowników',
+			'BI_audit_ENERGA_RUM_KONTRAHENCI' => 'kontrahentów',
+			'BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA' => 'raportów',
+		];
+		if (!isset($tables[$this->SOURCE['TABLE']])) SE_Layout::alert('danger', 'Błąd parametru');
+
+		$a = rand(10, 50);
+		$b = rand(10, 50);
+		if ($a == $b) $op = 1;
+		else $op = rand(0, 1);
+
+		if ($op) {
+			$suma = $a + $b;
+			$string = "{$a} + {$b}";
+		} else {
+			if ($a < $b) {
+				$suma = $b - $a;
+				$string = "{$b} - {$a}";
+			} else {
+				$suma = $a - $b;
+				$string = "{$a} - {$b}";
+			}
+		}
+		$string .= " = ";
+		$_SESSION['_BiAuditGenerate_ctrl'] = base64_encode(gzcompress($suma));
+
+		$im = imagecreate((strlen($string) - 1) * 10, 24);
+		$bg = imagecolorallocate($im, 255, 255, 255);
+		$textcolor = imagecolorallocate($im, 0, 0, 0);
+		imagestring($im, 5, 0, 0, $string, $textcolor);
+		ob_start();
+		imagepng($im);
+		$image = ob_get_contents();
+		ob_end_clean();
+
+/*
+		$image = new Imagick();
+		$draw = new ImagickDraw();
+		$pixel = new ImagickPixel('white');
+		$image->newImage(200, 24, $pixel);
+//		$image->setFont("schema/WPS_Functions/mapserver_gml_to_png/map/fonts/Arial_Bold.ttf");
+//		$image->newPseudoImage(100, 100, "label:\"{$a} {$op} {$b}\"");
+//		$image->newPseudoImage(100, 100, "caption:Hello");
+		$image->setImageFormat('png');
+		$draw->setFillColor('black');
+//		$draw->setFont('Arial');
+		$draw->setFontSize(24);
+		$image->annotateImage($draw, 0, 24, 0, $s);
+		$image->trimImage(0);
+*/
+
+		$imageBase64 = base64_encode($image);
+
+//echo $imageBase64;
+
+		
+?>
+<div style="text-align: center;">
+  <h2>Czy jesteś pewien, że chcesz usunąć<br/><b>wszystkie dane</b> z tabeli <?=$tables[$this->SOURCE['TABLE']]?>?</h2><br/>
+  <h3>Podaj wynik działania:</h3>
+  <form method="post">
+    <img src="data:image/png;base64,<?=$imageBase64?>" height="36px"/><input type="text" name="wynik" style="font-size: 24px; width: 50px;" pattern="^[0-9]{1,3}$" oninvalid="setCustomValidity('Nieprawidłowy format')" maxlength="3" autofocus required autocomplete="off"/><br/><br/>
+<?php
+		if ($this->SOURCE['TABLE'] == 'BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA'):
+?>
+    <h4><input type="checkbox" name="deleteFiles"/>&nbsp;&nbsp;Usuń również wszystkie pliki</h4><br/>
+<?php
+		endif;
+?>
+    <button type="submit" class="btn btn-primary" name="action" value="doClearTable" style="width: 80px;">Tak</button>
+    <input type="hidden" name="REFERER" value="<?=$this->REFERER?>">
+    <a href="<?=$this->REFERER?>" class="btn btn-default" style="width: 80px;">Anuluj</a>
+  </form>
+</div>
+<?php
+	}
+
+	private function clearTable() {
+		SE_Layout::alert('warning', 'Funkcja w fazie testów - niczego jeszcze nie usuwa');
+		$query = "select count(*) from `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA` where `FILE_STATUS` = 'IN_PROGRESS'";
+		if (DB::getPDO()->fetchValue($query)) {
+?>
+<div style="text-align: center;">
+  <h2>Nie można usunąć żadnych danych<br/>(wykryto uruchomione zadania)</h2><br/>
+  <a href="<?=$this->REFERER?>" class="btn btn-primary" style="width: 80px;">Powrót</a>
+</div>
+<?php
+			return;
+		}
+
+		$action = V::get('action', '', $_POST);
+		switch ($action) {
+			case "doClearTable":
+				$this->clearTable_do();
+				break;
+			default: $this->clearTable_form();
+		}
+	}
+
 	public function defaultAction() {
 		SE_Layout::gora();
 		SE_Layout::menu();
@@ -942,15 +1099,43 @@ function validateCompany(source) {
 			$this->powiazania();
 		}
 		elseif ($TABLE = V::get('_fromNamespace', '', $_GET)) {
+			$_subUrlAction = V::get('_subUrlAction', '', $_GET);
 			switch ($TABLE) {
 				case "default_db/BI_audit_ENERGA_PRACOWNICY":
-					$this->SOURCE['TABLE'] = 'BI_audit_KRS';
-					$this->importToPracownicy();
+					$this->SOURCE['TABLE'] = 'BI_audit_ENERGA_PRACOWNICY';
+					switch ($_subUrlAction) {
+						case "clearTable":
+							$this->clearTable();
+							break;
+						case "importFromKRS":
+							$this->SOURCE['TABLE'] = 'BI_audit_KRS';
+							$this->importToPracownicy();
+							break;
+						default: SE_Layout::alert('danger', 'Błąd parametru #21');
+					}
+					break;
+				case "default_db/BI_audit_ENERGA_RUM_KONTRAHENCI":
+					$this->SOURCE['TABLE'] = 'BI_audit_ENERGA_RUM_KONTRAHENCI';
+					switch ($_subUrlAction) {
+						case "clearTable":
+							$this->clearTable();
+							break;
+						default: SE_Layout::alert('danger', 'Błąd parametru #22');
+					}
+					break;
+				case "default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA":
+					$this->SOURCE['TABLE'] = 'BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA';
+					switch ($_subUrlAction) {
+						case "clearTable":
+							$this->clearTable();
+							break;
+						efault: SE_Layout::alert('danger', 'Błąd parametru #23');
+					}
 					break;
-				default: SE_Layout::alert('danger', 'Błąd parametru');
+				default: SE_Layout::alert('danger', 'Błąd parametru #1');
 			}
 		}
-		else SE_Layout::alert('danger', 'Błąd parametru');
+		else SE_Layout::alert('danger', 'Błąd parametru #0');
 		SE_Layout::dol();
 	}
 
@@ -1042,17 +1227,17 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 			if (!file_exists($tasksDirLocation)) throw new Exception('Error during creating temporary directory.');
 
 
-			### Wyłączenie wcześniej używanego mechanizmu wymuszania częściowego odświeżania cache - teraz działa to z automatu
+			### Wyłączenie wcześniej używanego mechanizmu wymuszania częściowego (oraz pełnego od 2018-04-19) odświeżania cache - teraz działa to z automatu
 			$sqlArr = [
 				'BI_analiza_reloadCache' => 'No',
 			];
-			$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache in ('Part') and FILE_STATUS = 'TO_GENERATE'";
+			$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache in ('Part', 'Full') and FILE_STATUS = 'TO_GENERATE'";
 			$result = DB::getPDO()->fetchAll($query);
 			foreach ($result as $row) {
 				DB::getDB()->UPDATE_OBJ('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', array_merge(['ID' => $row['ID']], $sqlArr));
 			}
 
-
+/*			2018-04-19 - zmieniono działanie silnika tak, aby sam wykrywał czy należy wykonać pełne odświeżenie cache
 			### Sprawdzenie czy któryś rekord wymaga odświeżenia cache
 			$doGenerate = true;
 			$query = "select ID from BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA where BI_analiza_reloadCache in ('Full') and FILE_STATUS = 'TO_GENERATE'";
@@ -1125,7 +1310,7 @@ Router::getRoute("UrlAction_BiAuditGenerate")->' . $function . ';
 				}
 
 			}
-
+*/
 
 			### Generowanie powiązań
 			if ($doGenerate) {
@@ -1920,6 +2105,23 @@ SQL;
 			$onlyBase = false;
 		}
 
+		if ($this->POWIAZANIA_ID && (!$full)) {
+			$checkTables = ['BI_audit_ENERGA_PRACOWNICY', 'BI_audit_ENERGA_RUM_KONTRAHENCI'];
+			foreach ($checkTables as $table) {
+				$query = "select count(*) from `BI_audit_ALL` `all` left join `{$table}` `t` on `all`.`REMOTE_ID`=`t`.`ID` where `all`.`REMOTE_TABLE`='{$table}' and `t`.`ID` is null";
+				if (DB::getPDO()->fetchValue($query)) {
+					$full = true;
+					BiAuditPowiazania::saveToLog("Wykryto niespójność tabel - uruchamiam pełne odświeżenie cache");
+					$sqlArr = [
+						'BI_analiza_reloadCache' => 'Full',
+						'FILE_STATUS_info' => 'Odświeżam w pełni cache',
+					];
+					DB::getPDO()->update('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', "ID", $this->POWIAZANIA_ID, $sqlArr);
+					break;
+				}
+			}
+		}
+
 		$powiazaniaDirLocation = self::getMainDirectory();
 		$tasksDirLocation = $powiazaniaDirLocation . "/.tasks";
 		$reloadCachePidFile = $tasksDirLocation . "/reloadCache.pid";
@@ -1933,15 +2135,16 @@ SQL;
 			self::reloadCache_reTeryt($full);
 			error_log('now: self::reloadCache_updateAll');
 			self::reloadCache_updateAll($full, $onlyBase);
-			if ($full) file_put_contents($reloadCacheResultFile, "ok");
+			if (!$this->POWIAZANIA_ID) file_put_contents($reloadCacheResultFile, "ok");
 		} catch (Exception $e) {
 			var_dump($e);
-			if ($full) file_put_contents($reloadCacheResultFile, $e->getMessage());
+			if (!$this->POWIAZANIA_ID) file_put_contents($reloadCacheResultFile, $e->getMessage());
 			else throw new Exception($e->getMessage());
 		}
 	}
 
 	public function doGeneratePowiazania($ID) {
+		$this->POWIAZANIA_ID = $ID;
 		$powiazaniaDirLocation = self::getMainDirectory();
 		$tasksDirLocation = $powiazaniaDirLocation . "/.tasks";
 		$resultFile = "{$tasksDirLocation}/generatePowiazania-{$ID}.result";
@@ -1965,7 +2168,7 @@ SQL;
 		try {
 			$BiAuditPowiazania = new BiAuditPowiazania($ID, $tasksDirLocation);
 
-			$query = "select count(*) from `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA` where `FILE_STATUS` = 'IN_PROGRESS' and `BI_analiza_reloadCache` = 'Part' and ID != ${ID}";
+			$query = "select count(*) from `BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA` where `FILE_STATUS` = 'IN_PROGRESS' and `BI_analiza_reloadCache` in ('Part', 'Full') and ID != ${ID}";
 			$sqlArr = [
 				'BI_analiza_reloadCache' => 'Part',
 				'FILE_STATUS_info' => 'Odświeżam częściowo cache',
@@ -1983,7 +2186,7 @@ SQL;
 			
 			BiAuditPowiazania::saveToLog("Uruchamiam częściowe odświeżenie cache");
 			$this->doReloadCache(); //DUPA testowe wylaczanie
-			BiAuditPowiazania::saveToLog("Odświeżono częściowo cache");
+			BiAuditPowiazania::saveToLog("Odświeżono cache");
 
 			$sqlArr = [
 				'BI_analiza_reloadCache' => 'No',