فهرست منبع

added Bocian tool

Piotr Labudda 7 سال پیش
والد
کامیت
6bf27ebf85
2فایلهای تغییر یافته به همراه2310 افزوده شده و 0 حذف شده
  1. 1091 0
      tools/Bocian.php
  2. 1219 0
      tools/Bocian.php.view.js

+ 1091 - 0
tools/Bocian.php

@@ -0,0 +1,1091 @@
+<?php
+
+Lib::loadClass('RouteToolBase');
+Lib::loadClass('UI');
+Lib::loadClass('Response');
+Lib::loadClass('Theme');
+
+// class name must have the same name as file
+// index.php?_route=UrlAction_BraveCare  - uruchamia defaultAction
+class Bocian extends RouteToolBase {
+
+	public function defaultAction() {
+		UI::gora();
+		echo UI::h('script', ['src'=>"static/sweetalert2.min.js"]);
+		echo UI::h('link', ['rel'=>"stylesheet", 'type'=>"text/css", 'href'=>"static/sweetalert2.min.css"]);
+		Theme::top();
+		//echo '<div id="smad-wrapper">'; // todo: sprawdzi  czy można usunać
+		echo '<div class="container-bi_audit_form_pracownicy_raport" style="display: none;"></div>';
+		echo '<div class="container-bi_audit_form_kontrahenci_raport" style="display: none;"></div>';
+
+		UI::inlineJS(__FILE__ . '.view.js', [
+			'URL_FETCH_TEST' => $this->getLink('fetchEnergaRumKontrahenciPowiazaniaAjax'),
+			'URL_FETCH_TEST_KRS' => $this->getLink('fetchTestKrsAjax'),
+			'URL_FETCH_TEST_CEIDG' => $this->getLink('fetchTestCeidgAjax'),
+			'URL_FETCH_PRACOWNICY' => $this->getLink('fetchPracownicyAjax'),
+			'URL_FETCH_KONTRAHENCI' => $this->getLink('fetchKontrahenciAjax'),
+			'URL_CREATE_PRACOWNICY_GROUP' => $this->getLink('createPracownicyGroupAjax'),
+			'URL_CREATE_KONTRAHENCIS_GROUP' => $this->getLink('createKontrahenciGroupAjax'),
+			'URL_ADD_PRACOWNICY_TO_GROUP' => $this->getLink('addPracownicyToGroupAjax'),
+			'URL_ADD_KONTRAHENCI_TO_GROUP' => $this->getLink('addKontrahenciToGroupAjax'),
+			'URL_FETCH_GROUP_PRACOWNICY' => $this->getLink('fetchGroupPracownicyAjax'),
+			'URL_FETCH_GROUP_KONTRAHENCI' => $this->getLink('fetchGroupKontrahenciAjax'),
+			'URL_GENERATE_BI_AUDIT_RAPORT_AJAX' => $this->getLink('generateBiAuditRaportAjax'),
+			'DBG' => V::get('DBG', 0, $_GET),
+			'VIEW_KONTRAHENCI' => $this->defaultViewFormBiAudit([], 'KONTRAHENCI'),
+			'VIEW_PRACOWNICY' => $this->defaultViewFormBiAudit([], 'PRACOWNICY'),
+		]);
+
+		echo '</div>'; // #smad-wrapper
+		UI::dol();
+	}
+/*
+	public function fetchEnergaRumKontrahenciPowiazaniaAjaxAction() {
+		Response::sendTryCatchJson(array($this, 'fetchEnergaRumKontrahenciPowiazaniaAjax')); // , $args = 'JSON_FROM_REQUEST_BODY');
+	}
+	public function fetchEnergaRumKontrahenciPowiazaniaAjax($args) {
+		$id = V::get('ID', 1, $_REQUEST, 'int');
+
+		$items = ACL::getAclByNamespace('default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA')->buildQuery([
+			'cols' => [ // TODO:? propertyName = []
+				'ID',
+				'A_ADM_COMPANY',
+				'L_APPOITMENT_USER',
+				'A_CLASSIFIED',
+				'A_STATUS',
+				'A_STATUS_INFO',
+				'BI_analiza_depth',
+				'BI_analiza_reloadCache',
+				'FILE_STATUS',
+				'FILE_STATUS_info',
+				'L_APPOITMENT_USER',
+				'default_db__x3A__BI_audit_ENERGA_PRACOWNICY:BI_audit_ENERGA_PRACOWNICY',
+				'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI:BI_audit_ENERGA_RUM_KONTRAHENCI',
+				'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row',
+				'default_db__x3A__BI_audit_KW_requested_person:BI_audit_KW_requested_person',
+			],
+			//'f_ID' => $id,
+		])->getItems([
+			'limit' => 10
+		]);
+
+		// $items = [
+		// 	[ 'ID' => 1, 'L_APPOITMENT_INFO' => 'x', 'BI_analiza_depth' => 'a', 'FILE_STATUS' => 1, 'FILE_STATUS_info' => 'test1'],
+		// 	[ 'ID' => 2, 'L_APPOITMENT_INFO' => 'y', 'BI_analiza_depth' => 'b', 'FILE_STATUS' => 0, 'FILE_STATUS_info' => 'test2'],
+		// 	[ 'ID' => 3, 'L_APPOITMENT_INFO' => 'z',  'BI_analiza_depth' => 'c', 'FILE_STATUS' => 1, 'FILE_STATUS_info' => 'test3'],
+		// ];
+
+		return [
+			'type' => 'success',
+			'msg' => 'OK',
+			'__req_args' => $_REQUEST,
+			'__args' => $args,
+			'body' => [
+				'items' => $items,
+				'view' => $this->showPowiazaniaEnergaRumKontrahenciPowiazania($items),
+			]
+		];
+	}
+
+
+public function showPowiazaniaEnergaRumKontrahenciPowiazania($items) {
+
+	$view = '<form class="form-horizontal" method="post">
+						<table class="table table-bordered table-hover table-striped" height=5>
+									 <thead>
+										 <tr style="">
+										 		<td width=1><input type="checkbox" name="checkAll" id="checkAll" /></td>
+											 <td width=1>ID</td>
+											 <td>Adnotacje</td>
+											 <td>Głębokość analizy</td>
+											 <td>Status raportu</td>
+											 <td>Status raportu - informacje</td>
+										 </tr>
+									 </thead>
+									 <tbody>
+					';
+
+		foreach ($items as $key => $row) {
+				$view .= '<tr>
+				<td><input type="checkbox" name="prID[]" value="'.$row['ID'].'" onClick="checkAll()"/></td>
+								<td align="right">'.$row["ID"].'</td>
+								<td align="right">'.$row["L_APPOITMENT_INFO"].'</td>
+								<td align="right">'.$row["BI_analiza_depth"].'</td>
+								<td align="right">'.$row["FILE_STATUS"].'</td>
+								<td align="right">'.$row["FILE_STATUS_info"].'</td>';
+		}
+		$view .= '</tbody></table></form>';
+
+
+		return $view;
+}
+*/
+
+
+
+	public function fetchTestKrsAjaxAction() {
+		Response::sendTryCatchJson(array($this, 'fetchTestKrsAjax')); // , $args = 'JSON_FROM_REQUEST_BODY');
+	}
+	public function fetchTestKrsAjax($args) {
+		$id = V::get('ID', 1, $_REQUEST, 'int');
+		$items = ACL::getAclByNamespace('default_db/BI_audit_KRS/BI_audit_KRS')->buildQuery([
+			'cols' => [ // TODO:? propertyName = []
+				'A_kod',
+				'A_kraj',
+				'A_miejscowosc',
+				'A_nrDomu',
+				'A_nrLokalu',
+				'A_poczta',
+				'A_ulica',
+				'ID',
+				'S_gmina',
+				'S_kraj',
+				'S_miejscowosc',
+				'S_powiat',
+				'S_wojewodztwo',
+				'dataDokumentu',
+				'default_db__x3A__BI_audit_KRS_company:BI_audit_KRS_company/ID',
+				'default_db__x3A__BI_audit_KRS_company:BI_audit_KRS_company/krs',
+				'default_db__x3A__BI_audit_KRS_company:BI_audit_KRS_company/nazwa',
+				'default_db__x3A__BI_audit_KRS_company:BI_audit_KRS_company/regon',
+				'default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person/ID',
+				'default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person/imiona',
+				'default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person/nazwisko',
+				'default_db__x3A__BI_audit_KRS_person:BI_audit_KRS_person/pesel',
+				'krs',
+				'nazwa',
+				'nip',
+				'regon',
+			],
+			'f_ID' => "{$id}",
+		])->getItems([
+			'limit' => 10
+		]);
+
+		return [
+			'type' => 'success',
+			'msg' => 'KRS',
+			'__req_args' => $_REQUEST,
+			'__args' => $args,
+			'body' => [
+				'items' => $items,
+			]
+		];
+	}
+
+	public function fetchTestCeidgAjaxAction() {
+		Response::sendTryCatchJson(array($this, 'fetchTestCeidgAjax')); // , $args = 'JSON_FROM_REQUEST_BODY');
+	}
+	public function fetchTestCeidgAjax($args) {
+		$id = V::get('ID', 0, $_REQUEST, 'int');
+		$items = ACL::getAclByNamespace('default_db/BI_audit_CEIDG/BI_audit_CEIDG')->buildQuery([
+			'cols' => [ // TODO:? propertyName = []
+				'ID',
+				'budynek',
+				'firma',
+				'gmina',
+				'identyfikatorWpisu',
+				'imie',
+				'kodPocztowy',
+				'kraj',
+				'lokal',
+				'miejscowosc',
+				'nazwisko',
+				'nip',
+				'poczta',
+				'powiat',
+				'regon',
+				'ulica',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/ID',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/budynek',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/gmina',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/kodPocztowy',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/lokal',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/miejscowosc',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/nazwa',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/nip',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/poczta',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/powiat',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/ulica',
+				'default_db__x3A__BI_audit_CEIDG_pelnomocnicy:BI_audit_CEIDG_pelnomocnicy/wojewodztwo',
+				'default_db__x3A__BI_audit_CEIDG_powiazania:BI_audit_CEIDG_powiazania/ID',
+				'default_db__x3A__BI_audit_CEIDG_powiazania:BI_audit_CEIDG_powiazania/nip',
+				'default_db__x3A__BI_audit_CEIDG_powiazania:BI_audit_CEIDG_powiazania/regon',
+			],
+			// 'f_ID' => $id,
+		])->getItems([
+			'limit' => 10
+		]);
+
+		return [
+			'type' => 'success',
+			'msg' => 'CEIDG',
+			'__req_args' => $_REQUEST,
+			'__args' => $args,
+			'body' => [
+				'items' => $items,
+			]
+		];
+	}
+
+/**
+ * KONTRAHENCI
+ */
+public function fetchKontrahenciAjaxAction() {
+	Response::sendTryCatchJson(array($this, 'fetchKontrahenciAjax'));
+}
+
+public function fetchKontrahenciAjax($args) {
+
+			$idGroup = V::get('filterIdGroup', 0, $_REQUEST, 'int'); // TODO: dla filtrów "Wysokiego ryzyka" - przekazywany ID rekodu
+			if ($idGroup < 0) $idGroup = 0;
+
+			$limit = 5;
+
+			$limitstart = V::get('limitstart', 0, $_REQUEST, 'int');
+			if ($limitstart < 0) $limitstart = 0;
+
+			$page = V::get('page', 0, $_REQUEST, 'int');
+			$limitstart = ($page - 1) * $limit;
+
+			$search = V::get('search', '', $_REQUEST);
+			$searchParams = [];
+			if (!empty($search)) {
+				$ogcSearch = "*{$search}*"; // wildCard="*" -> mysql '%'
+				$searchParams['ogc:Filter'] = '
+					<ogc:Filter>
+				    <ogc:Or>
+				      <ogc:PropertyIsLike wildCard="" singleChar="%23" escapeChar="!">
+				        <ogc:PropertyName>NIP</ogc:PropertyName>
+				        <ogc:Literal>' . $ogcSearch . '</ogc:Literal>
+				      </ogc:PropertyIsLike>
+				      <ogc:PropertyIsLike wildCard="*" singleChar="%23" escapeChar="!">
+				        <ogc:PropertyName>Nazwa_grupy_kapitalowej</ogc:PropertyName>
+								<ogc:Literal>' . $ogcSearch . '</ogc:Literal>
+				      </ogc:PropertyIsLike>
+				      <ogc:PropertyIsLike wildCard="*" singleChar="%23" escapeChar="!">
+				        <ogc:PropertyName>Pelna_nazwa_kontrahenta</ogc:PropertyName>
+								<ogc:Literal>' . $ogcSearch . '</ogc:Literal>
+				      </ogc:PropertyIsLike>
+				    </ogc:Or>
+				  </ogc:Filter>
+				';
+			}
+
+			$backRefFilter = [];
+			if ($idGroup > 0) {
+				$backRefFilter['__backRef'] = [
+					'namespace' => 'default_db/BI_audit_ENERGA_PRACOWNICY_GRUPY/BI_audit_ENERGA_KONTRAHENCIS_GRUPY', // TODO: nowy rejetr na grupy / filty KONTRAHENCI
+					'primaryKey' => $idGroup,
+					'fieldName' => 'default_db__x3A__BI_audit_ENERGA_PRACOWNICY:BI_audit_ENERGA_KONTRAHENCIS',
+				];
+				// TODO: Storage dodać obiekt xsd default_db/BI_audit_ENERGA_PRACOWNICY_GRUPY/BI_audit_ENERGA_KONTRAHENCI_GRUPY:
+				// - ID
+				// - ID_USER - id usera który stworzył grupę (tylko dla niego będzie widoczna)
+				// - NAZWA - nazwa grupy
+				// - 'default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_KONTRAHENCI' minOccurs="0" maxOccurs="unbounded"
+			}
+
+			$acl = ACL::getAclByNamespace('default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI');
+			$query = $acl->buildQuery(array_merge([
+				'cols' => [ // TODO:? propertyName = []
+									'ID',
+									'Nazwa_grupy_kapitalowej',
+									'Pelna_nazwa_kontrahenta',
+									'Numer_kontrahenta',
+									'Skrocona_Nazwa_Kontrahenta',
+									'Typ_kontrahenta',
+									'NIP',
+									'KRS',
+									'REGON',
+									'PESEL',
+						 			'Forma_prawna_dzialalnosci',
+						 			'Ulica',
+						 			'Numer_budynku',
+						 			'Numer_mieszkania_lokalu',
+						 			'Miejscowosc',
+									'Kod_pocztowy',
+									'Kraj',
+									'Telefon',
+									'Fax',
+									'Mail',
+									'A_ADM_COMPANY',
+									'A_CLASSIFIED',
+									'A_STATUS',
+									'A_STATUS_INFO',
+									'Dodano',
+									'L_APPOITMENT_USER',
+									'Podmiot_dominujacy',
+									'Tytul_dokumentu',
+									'ownCompany',
+									'uwagi',
+				],
+				//'f_ID' => $id,
+				'limit' => $limit,
+				'limitstart' => $limitstart, // offset
+			], $searchParams, $backRefFilter));
+			$total = $query->getTotal();
+			$items = $query->getItems();
+
+			$pagination = array();
+			$pagination['total_items'] = $total;
+			$pagination['size'] = ceil($total/$limit); // pages size
+			$pagination['current'] = $page;
+			$pagination['limit'] = $limit;
+
+			return [
+				'type' => 'success',
+				'msg' => 'showKontrajenci',
+				'__req_args' => $_REQUEST,
+				'__args' => $args,
+				'body' => [
+					'items' => $items,
+					//'view' => $this->htmlViewFormBiAudit($items, 'KONTRAHENCI'),
+					'pagination' => $pagination
+				]
+			];
+		}
+//
+// public function fetchKontrahenciAjaxOld($args) {
+// 	//$id = V::get('ID', 1, $_REQUEST, 'int');
+// 	$items = ACL::getAclByNamespace('default_db/BI_audit_ENERGA_RUM_KONTRAHENCI/BI_audit_ENERGA_RUM_KONTRAHENCI')->buildQuery([
+// 		'cols' => [ // TODO:? propertyName = []
+// 				'ID',
+// 				'Nazwa_grupy_kapitalowej',
+// 				'Pelna_nazwa_kontrahenta',
+// 				'NIP',
+// 				'KRS',
+// 				'REGON',
+// 	 			'Miejscowosc',
+// 				'Kod_pocztowy',
+// 				'Telefon'
+// 		],
+// 		//'f_ID' => $id,
+// 	])->getItems([
+// 		'limit' => 10
+// 	]);
+//
+// 	return [
+// 		'type' => 'success',
+// 		'msg' => 'showKontrahenci',
+// 		'__req_args' => $_REQUEST,
+// 		'__args' => $args,
+// 		'body' => [
+// 			'items' => $items,
+// 			'view' => $this->htmlViewFormBiAudit($items, 'KONTRAHENCI')
+// 		]
+// 	];
+// }
+
+public function showTableKontrahenci($items) {
+	$view = '<form class="form-horizontal" method="post">
+					<table class="table table-bordered table-hover table-striped" height=5>
+								 <thead>
+									 <tr>
+											<td width=1><input type="checkbox" name="checkAll" id="checkAll-KONTRAHENCI" /></td>
+										 <td width=1>ID</td>
+										 <td>Nazwa grupy kapitalowej</td>
+										 <td>Pelna nazwa kontrahenta</td>
+										 <td>Numer kontrahenta</td>
+										 <td>Skrócona nazwa kontrahenta</td>
+										 <td>Typ_kontrahenta</td>
+										 <td>NIP</td>
+										 <td>KRS</td>
+										 <td>Regon</td>
+										 <td>PESEL</td>
+										 <td>Forma prawna działalności</td>
+										 <td>Ulica</td>
+										 <td>Numer budynku</td>
+										 <td>Numer mieszkania lokalu</td>
+										 <td>Miejscowosc</td>
+										 <td>Kod pocztowy</td>
+										 <td>Kraj</td>
+										 <td>Telefon</td>
+										 <td>Fax</td>
+										 <td>Mail</td>
+										 <td>A_ADM_COMPANY</td>
+										 <td>A_CLASSIFIED</td>
+										 <td>A_STATUS</td>
+										 <td>A_STATUS_INFO</td>
+										 <td>Dodano</td>
+										 <td>L_APPOITMENT_USER</td>
+										 <td>Podmiot dominujacy</td>
+										 <td>Tytul dokumentu</td>
+										 <td>ownCompany</td>
+										 <td>uwagi</td>
+									 </tr>
+									 </thead>
+									 <tbody id="body-kontrahenci">
+									 </tbody></table>
+									 </form>
+				';
+
+	return $view;
+}
+
+// tworzenie grupy kontrahentów
+public function createKontrahenciGroupAjaxAction() {
+	Response::sendTryCatchJson(array($this, 'createKontrahenciGroupAjax'), $args = 'JSON_FROM_REQUEST_BODY'); // użyj tej wersji jeśli chcesz wysyłać z przelgądarki JSON-a post-em
+}
+
+public function createKontrahenciGroupAjax($args) {
+	$nazwa = V::get('NAZWA', '', $args);
+	// TODO: vlaidacja nazwy - sprawdzenie czy już nie występuje
+
+	$idGroup = DB::getPDO()->insert('BI_audit_ENERGA_KONTRAHENCI_GRUPY', [
+		'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
+		'A_RECORD_CREATE_DATE' => 'NOW()',
+		'NAZWA' => $nazwa,
+	]);
+
+	return [
+		'msg' => "Utworzona grupę {$idGroup}",
+		'type' => "success",
+		'body' => [
+			'id' => $idGroup,
+		]
+	];
+}
+
+
+
+	// Dodanie do grupy filtra kontrahentów
+	public function addKontrahenciToGroupAjaxAction() {
+		// Response::sendTryCatchJson(array($this, 'addKontrahenciToGroupAjax'), $args = 'JSON_FROM_REQUEST_BODY'); // użyj tej wersji jeśli chcesz wysyłać z przelgądarki JSON-a post-em
+		Response::sendTryCatchJson(array($this, 'addKontrahenciToGroupAjax'));
+	}
+	public function addKontrahenciToGroupAjax($args) {
+		$idGroup = V::get('idGroup', 0, $_REQUEST, 'int');
+		$kontrahenciIds = V::get('kontrahenciIds', [], $_REQUEST, 'array');
+
+		// validate
+		if (!$idGroup) throw new Exception("Nie wybrano grupa");
+		if (!$kontrahenciIds || count($kontrahenciIds) == 0 ) throw new Exception("Proszę wybrać kontrahentów");
+
+		$group = ACL::getAclByNamespace('default_db/BI_audit_ENERGA_KONTRAHENCI_GRUPY/BI_audit_ENERGA_KONTRAHENCI_GRUPY')->buildQuery([
+			'cols' => [ // TODO:? propertyName = []
+				'ID',
+				'ID_USER',
+				'NAZWA',
+			],
+			// 'f_ID_USER' => User::getID()
+		])->getItem($idGroup);
+		if (!$group) throw new Exception("Grupa nie istnieje");
+		if (User::getID() != $group['ID_USER']) throw new Exception("Brak uprawnień do grupy");
+
+		// $refGrupyToPracownicy = ACL::getRefTable('obiekt główny', 'nazwa pola - powiązane rekordy');
+		$refGrupyToKontrahenci = ACL::getRefTable('default_db/BI_audit_ENERGA_KONTRAHENCI_GRUPY/BI_audit_ENERGA_KONTRAHENCI_GRUPY',
+			'default_db__x3A__BI_audit_ENERGA_KONTRAHENCI:BI_audit_ENERGA_KONTRAHENCI');
+		foreach ($kontrahenciIds as $kontrahentIds) {
+			DB::getPDO()->insert($refGrupyToKontrahenci, ['PRIMARY_KEY' => $idGroup, 'REMOTE_PRIMARY_KEY' => $kontrahentIds]);
+		}
+
+		return [
+			'msg' => "Powiązano kontrahentów z grupą {$idGroup}",
+			'type' => "success",
+		];
+	}
+
+
+public function fetchGroupKontrahenciAjaxAction() {
+	Response::sendTryCatchJson(array($this, 'fetchGroupKontrahenciAjax'));
+}
+
+public function fetchGroupKontrahenciAjax() {
+// TODO: odkomentować jak zostanie dodana tabela default_db/BI_audit_ENERGA_KONTRAHENCI_GRUPY/BI_audit_ENERGA_KONTRAHENCI_GRUPY
+	/*$group = ACL::getAclByNamespace('default_db/BI_audit_ENERGA_KONTRAHENCI_GRUPY/BI_audit_ENERGA_KONTRAHENCI_GRUPY')->buildQuery([
+		'cols' => [ // TODO:? propertyName = []
+			'ID',
+			'ID_USER',
+			'NAZWA',
+		],
+		'f_ID_USER' => User::getID()
+	])->getItem($idGroup);
+	if (!$group) throw new Exception("Grupa nie istnieje");
+	if (User::getID() != $group['ID_USER']) throw new Exception("Brak uprawnień do grupy");
+
+	$itemsKontrahenci = $query->getItems();
+
+	$arrayGroupKontrahenci = array();
+	foreach ($itemsKontrahenci as $key => $value) {
+		$arrayGroupKontrahenci[$value['ID']] = $value['NAZWA'];
+	}
+*/
+	//TODO: USUNAĆ listę grup wpisane na sztywno
+	$arrayGroupKontrahenci = array();
+	$arrayGroupKontrahenci[0]["ID"] = 1;
+	$arrayGroupKontrahenci[0]["NAZWA"] = "Grupa 1";
+	$arrayGroupKontrahenci[1]["ID"] = 2;
+	$arrayGroupKontrahenci[1]["NAZWA"] = "Grupa 2";
+	$arrayGroupKontrahenci[2]["ID"] = 3;
+	$arrayGroupKontrahenci[2]["NAZWA"] = "Grupa 3";
+	$arrayGroupKontrahenci[3]["ID"] = 4;
+	$arrayGroupKontrahenci[3]["NAZWA"] = "Grupa 4";
+	$arrayGroupKontrahenci[4]["ID"] = 5;
+	$arrayGroupKontrahenci[4]["NAZWA"] = "Grupa 5";
+	$arrayGroupKontrahenci[5]["ID"] = 6;
+	$arrayGroupKontrahenci[5]["NAZWA"] = "Grupa 6";
+	$arrayGroupKontrahenci[6]["ID"] = 7;
+	$arrayGroupKontrahenci[6]["NAZWA"] = "Grupa 7";
+	$arrayGroupKontrahenci[7]["ID"] = 8;
+	$arrayGroupKontrahenci[7]["NAZWA"] = "Grupa 8";
+	$arrayGroupKontrahenci[8]["ID"] = 9;
+	$arrayGroupKontrahenci[8]["NAZWA"] = "Grupa 9";
+	$arrayGroupKontrahenci[9]["ID"] = 10;
+	$arrayGroupKontrahenci[9]["NAZWA"] = "Grupa 10";
+	$arrayGroupKontrahenci[9]["ID"] = 11;
+	$arrayGroupKontrahenci[9]["NAZWA"] = "Grupa 11";
+
+	return [
+		'type' => 'success',
+		'msg' => 'fetchKontrahenciToGroup',
+		'__req_args' => $_REQUEST,
+		'__args' => $args,
+		'body' => [
+			'itemsGroupKontrahenci' => $arrayGroupKontrahenci
+		]
+	];
+}
+
+
+/*
+ * PRACOWNICY
+ */
+	public function fetchPracownicyAjaxAction() {
+		// sleep(2);
+		Response::sendTryCatchJson(array($this, 'fetchPracownicyAjax'));
+	}
+
+	public function fetchPracownicyAjax($args) {
+
+		$idGroup = V::get('filterIdGroup', 0, $_REQUEST, 'int'); // TODO: dla filtrów "Wysokiego ryzyka" - przekazywany ID rekodu
+		if ($idGroup < 0) $idGroup = 0;
+
+		$limit = 2;
+
+		$limitstart = V::get('limitstart', 0, $_REQUEST, 'int');
+		if ($limitstart < 0) $limitstart = 0;
+
+
+		$page = V::get('page', 0, $_REQUEST, 'int');
+		$limitstart = ($page - 1) * $limit;
+
+
+		$search = V::get('search', '', $_REQUEST);
+		$searchParams = [];
+		if (!empty($search)) {
+			$ogcSearch = "*{$search}*"; // wildCard="*" -> mysql '%'
+			$searchParams['ogc:Filter'] = '
+				<ogc:Filter>
+			    <ogc:Or>
+			      <ogc:PropertyIsLike wildCard="" singleChar="%23" escapeChar="!">
+			        <ogc:PropertyName>nip</ogc:PropertyName>
+			        <ogc:Literal>' . $ogcSearch . '</ogc:Literal>
+			      </ogc:PropertyIsLike>
+			      <ogc:PropertyIsLike wildCard="*" singleChar="%23" escapeChar="!">
+			        <ogc:PropertyName>nazwisko</ogc:PropertyName>
+							<ogc:Literal>' . $ogcSearch . '</ogc:Literal>
+			      </ogc:PropertyIsLike>
+			    </ogc:Or>
+			  </ogc:Filter>
+			';
+		}
+
+		$backRefFilter = [];
+		if ($idGroup > 0) {
+			$backRefFilter['__backRef'] = [
+				'namespace' => 'default_db/BI_audit_ENERGA_PRACOWNICY_GRUPY/BI_audit_ENERGA_PRACOWNICY_GRUPY', // TODO: nowy rejetr na grupy / filty pracowników
+				'primaryKey' => $idGroup,
+				'fieldName' => 'default_db__x3A__BI_audit_ENERGA_PRACOWNICY:BI_audit_ENERGA_PRACOWNICY',
+			];
+			// TODO: Storage dodać obiekt xsd default_db/BI_audit_ENERGA_PRACOWNICY_GRUPY/BI_audit_ENERGA_PRACOWNICY_GRUPY:
+			// - ID
+			// - ID_USER - id usera który stworzył grupę (tylko dla niego będzie widoczna)
+			// - NAZWA - nazwa grupy
+			// - 'default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY' minOccurs="0" maxOccurs="unbounded"
+		}
+
+		$acl = ACL::getAclByNamespace('default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY');
+		$query = $acl->buildQuery(array_merge([
+			'cols' => [ // TODO:? propertyName = []
+				'ID',
+				'imiona',
+				'nazwisko',
+				'nip',
+				'pesel',
+				'regon',
+				'source',
+				'A_ADM_COMPANY',
+				'A_CLASSIFIED',
+				'A_STATUS',
+				'A_STATUS_INFO',
+				'L_APPOITMENT_USER',
+				'default_db__x3A__BI_audit_ENERGA_PRACOWNICY_adresy:BI_audit_ENERGA_PRACOWNICY_adresy/*'
+			],
+			//'f_ID' => $id,
+			'limit' => $limit,
+			'limitstart' => $limitstart, // offset
+			// 'order_by' => 'ID', // sortowanie po kolumnie
+			// 'order_dir' => 'DESC', // kierunek sortowania
+			// 'f_nip' = "=12345", // szukamy dokładnie tej wartości - mysql: where nip = "12345"
+			// 'f_nip' = "12345", // szukamy dokładnie tej wartości - mysql: where nip like "%12345%"
+			// 'f_nip' = "12345%", // szukamy dokładnie tej wartości - mysql: where nip like "12345%"
+			// 'f_ID' = "=12345", // szukamy dokładnie tej wartości - mysql: where ID = "12345"
+		], $searchParams, $backRefFilter));
+		$total = $query->getTotal();
+		$items = $query->getItems();
+
+		$pagination = array();
+		$pagination['total_items'] = $total;
+		$pagination['size'] = ceil($total/$limit); // pages size
+		$pagination['current'] = $page;
+		$pagination['limit'] = $limit;
+
+		// { // tworzenie własnego zapytanie mysql
+		// 	$rootTableName = $acl->getRootTableName();
+		// 	DB::getPDO()->fetchAll("
+		// 		select t.*
+		// 		from {$rootTableName} t
+		// 		where t.ID in (
+		// 			select x.ID
+		// 			from ... x
+		// 			where
+		// 		)
+		// 	");
+		// }
+
+		return [
+			'type' => 'success',
+			'msg' => 'showPracownicy',
+			'__req_args' => $_REQUEST,
+			'__args' => $args,
+			'body' => [
+				'items' => $items,
+				//'view' => $this->htmlViewFormBiAudit($items, 'PRACOWNICY'),
+				'pagination' => $pagination
+			]
+		];
+	}
+
+
+
+	public function showTablePracownicy() {
+			$view = '<form class="form-horizontal" method="post">
+							<table class="table table-responsive table-bordered table-hover table-striped" height=5>
+										 <thead>
+											 <tr>
+											 		<td width=1><input type="checkbox" name="checkAll" id="checkAll-PRACOWNICY" /></td>
+												 <td width=1>ID</td>
+												 <td>Imię/Imiona</td>
+												 <td>Nazwisko</td>
+												 <td>NIP</td>
+												 <td>Pesel</td>
+												 <td>Regon</td>
+												 <td>source</td>
+												 <td>A_ADM_COMPANY</td>
+												 <td>A_CLASSIFIED</td>
+												 <td>A_STATUS</td>
+												 <td>A_STATUS_INFO</td>
+												 <td>L_APPOITMENT_USER</td>
+												 <td>Adresy</td>
+											 </tr>
+										 </thead>
+										 <tbody id="body-pracownicy">
+										 </tbody></table>
+										 </form>';
+
+						return $view;
+
+	}
+
+
+	// tworzenie grupy pracowników
+	public function createPracownicyGroupAjaxAction() {
+		Response::sendTryCatchJson(array($this, 'createPracownicyGroupAjax'), $args = 'JSON_FROM_REQUEST_BODY'); // użyj tej wersji jeśli chcesz wysyłać z przelgądarki JSON-a post-em
+		// Response::sendTryCatchJson(array($this, 'createPracownicyGroupAjax'));
+	}
+	public function createPracownicyGroupAjax($args) {
+		$nazwa = V::get('NAZWA', '', $args);
+		// TODO: vlaidacja nazwy - sprawdzenie czy już nie występuje
+
+		// validate
+		if (!$nazwa) throw new Exception("Nie wybrano grupa");
+		if (!$kontrahenciIds || count($kontrahenciIds) == 0 ) throw new Exception("Proszę wybrać kontrahentów");
+
+		$idGroup = DB::getPDO()->insert('BI_audit_ENERGA_PRACOWNICY_GRUPY', [
+			'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
+			'A_RECORD_CREATE_DATE' => 'NOW()',
+			// 'A_STATUS' => 'WAITING', // jeśli trzeba to ustawić
+			'NAZWA' => $nazwa,
+		]);
+		// DB::getPDO()->insert('BI_audit_ENERGA_PRACOWNICY_GRUPY_HIST', [
+		// 	'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
+		// 	'A_RECORD_CREATE_DATE' => 'NOW()',
+		// 	'ID_USERS2' => $idRaport,
+		// 	// 'A_STATUS' => 'WAITING', // jeśli trzeba to ustawić
+		// 	'NAZWA' => $nazwa,
+		// ]);
+		return [
+			'msg' => "Utworzona grupę {$idGroup}",
+			'type' => "success",
+			'body' => [
+				'id' => $idGroup,
+			]
+		];
+	}
+
+	// Dodanie do grupy filtra pracowników
+	public function addPracownicyToGroupAjaxAction() {
+		// Response::sendTryCatchJson(array($this, 'addPracownicyToGroupAjax'), $args = 'JSON_FROM_REQUEST_BODY'); // użyj tej wersji jeśli chcesz wysyłać z przelgądarki JSON-a post-em
+		Response::sendTryCatchJson(array($this, 'addPracownicyToGroupAjax'));
+	}
+	public function addPracownicyToGroupAjax($args) {
+		$idGroup = V::get('idGroup', 0, $_REQUEST, 'int');
+		$pracownicyIds = V::get('pracownicyIds', [], $_REQUEST, 'array');
+
+		// validate
+		if (!$nazwa) throw new Exception("Nie wybrano grupa");
+		if (!$pracownicyIds || count($pracownicyIds) == 0 ) throw new Exception("Proszę wybrać pracowników");
+
+		// TODO: SPRWADZENIE  CZY NIE DODANOU JUZ PRACOWNIKAS
+		// default_db/BI_audit_ENERGA_PRACOWNICY_GRUPY/BI_audit_ENERGA_PRACOWNICY_GRUPY
+		// default_db/BI_audit_ENERGA_PRACOWNICY/BI_audit_ENERGA_PRACOWNICY
+
+		$group = ACL::getAclByNamespace('default_db/BI_audit_ENERGA_PRACOWNICY_GRUPY/BI_audit_ENERGA_PRACOWNICY_GRUPY')->buildQuery([
+			'cols' => [ // TODO:? propertyName = []
+				'ID',
+				'ID_USER',
+				'NAZWA',
+			],
+			// 'f_ID_USER' => User::getID()
+		])->getItem($idGroup);
+		if (!$group) throw new Exception("Grupa nie istnieje");
+		if (User::getID() != $group['ID_USER']) throw new Exception("Brak uprawnień do grupy");
+
+		// $refGrupyToPracownicy = ACL::getRefTable('obiekt główny', 'nazwa pola - powiązane rekordy');
+		$refGrupyToPracownicy = ACL::getRefTable('default_db/BI_audit_ENERGA_PRACOWNICY_GRUPY/BI_audit_ENERGA_PRACOWNICY_GRUPY',
+			'default_db__x3A__BI_audit_ENERGA_PRACOWNICY:BI_audit_ENERGA_PRACOWNICY');
+		foreach ($pracownicyIds as $idPracownik) {
+			DB::getPDO()->insert($refGrupyToPracownicy, ['PRIMARY_KEY' => $idGroup, 'REMOTE_PRIMARY_KEY' => $idPracownik]);
+		}
+
+		return [
+			'msg' => "Powiązano pracowników z grupą {$idGroup}",
+			'type' => "success",
+		];
+	}
+
+
+	public function fetchGroupPracownicyAjaxAction() {
+		Response::sendTryCatchJson(array($this, 'fetchGroupPracownicyAjax'));
+	}
+
+	public function fetchGroupPracownicyAjax() {
+
+// TODO: odkomentować jak zostanie dodana tabela default_db/BI_audit_ENERGA_PRACOWNICY_GRUPY/BI_audit_ENERGA_PRACOWNICY_GRUPY
+		/*$group = ACL::getAclByNamespace('default_db/BI_audit_ENERGA_PRACOWNICY_GRUPY/BI_audit_ENERGA_PRACOWNICY_GRUPY')->buildQuery([
+			'cols' => [ // TODO:? propertyName = []
+				'ID',
+				'ID_USER',
+				'NAZWA',
+			],
+			'f_ID_USER' => User::getID()
+		])->getItem($idGroup);
+		if (!$group) throw new Exception("Grupa nie istnieje");
+		if (User::getID() != $group['ID_USER']) throw new Exception("Brak uprawnień do grupy");
+
+		$items = $query->getItems();
+
+		$arrayGroupPracownicy = array();
+		foreach ($items as $key => $value) {
+			$arrayGroupPracownicy[$value['ID']] = $value['NAZWA'];
+ 		}
+*/
+		//TODO: USUNAĆ listę grup wpisane na sztywno
+		$arrayGroupPracownicy = array();
+		$arrayGroupPracownicy[0]["ID"] = 1;
+		$arrayGroupPracownicy[0]["NAZWA"] = "Grupa 1";
+		$arrayGroupPracownicy[1]["ID"] = 2;
+		$arrayGroupPracownicy[1]["NAZWA"] = "Grupa 2";
+		$arrayGroupPracownicy[2]["ID"] = 3;
+		$arrayGroupPracownicy[2]["NAZWA"] = "Grupa 3";
+		$arrayGroupPracownicy[3]["ID"] = 4;
+		$arrayGroupPracownicy[3]["NAZWA"] = "Grupa 4";
+		$arrayGroupPracownicy[4]["ID"] = 5;
+		$arrayGroupPracownicy[4]["NAZWA"] = "Grupa 5";
+
+
+		return [
+			'type' => 'success',
+			'msg' => 'fetchGroupPracownicyAjax',
+			'__req_args' => $_REQUEST,
+			'__args' => $args,
+			'body' => [
+				'itmesGroupPracownicy' => $arrayGroupPracownicy
+			]
+		];
+	}
+
+
+	// link do ackji w php: $saveFormUrl = $this->getLink('saveRaportAjax');
+	// przekazać link do JavaScript i tam:
+	// window.fetch('{$saveFormUrl}', { ... }).then(...) - dokumentacja: https://github.com/github/fetch
+	public function generateBiAuditRaportAjaxAction() {
+		 //Response::sendTryCatchJson(array($this, 'saveRaportAjax'), $args = 'JSON_FROM_REQUEST_BODY'); // użyj tej wersji jeśli chcesz wysyłać z przelgądarki JSON-a post-em
+		Response::sendTryCatchJson(array($this, 'generateBiAuditRaportAjax'), $args = 'JSON_FROM_REQUEST_BODY');
+		//Response::sendTryCatchJson(array($this, 'generateBiAuditRaportAjax'));
+	}
+	public function generateBiAuditRaportAjax($args) {
+
+		// głebokość powiazan
+		$depthValue = V::get('depthValue', '', $args);
+		if (!$depthValue) {
+			throw new Exception("Nie podano wartości dla głębokości powiązań");
+		}
+
+		// Tworzenie relacji Raport do Pracownicy
+		$pracownicyIds = []; // array z nr ID na podstawie wysłanego formularza
+		$pracownicyIds = V::get('pracownicyIds', '', $args);
+		// walidacja id pracowników
+		if (!$pracownicyIds) {
+			throw new Exception("Nie wybrano pracowników");
+		}
+
+		$kontrahenciIds = []; // array z nr ID na podstawie wysłanego formularza
+		$kontrahenciIds = V::get('kontrahenciIds', '', $args);
+		// walidacja id kontrahetów
+		if (!$kontrahenciIds) {
+			throw new Exception("Nie wybrano kontrahentów");
+		}
+
+		// Tworzenie rekrodu w bazie - Raport -
+		$idRaport = DB::getPDO()->insert('BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', [
+			'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
+			'A_RECORD_CREATE_DATE' => 'NOW()',
+			 'A_STATUS' => 'WAITING', // TODO: czy  trzeba to ustawić (pytanie do Mariusza)
+			 'FILE_STATUS' => "TO_GENERATE",
+			 'BI_analiza_minDepth' => 1,
+			 'BI_analiza_maxDepth' => $depthValue
+		]);
+
+
+		// Tworzenie relacji Raport do Pracownicy
+		$refPowiazaniaToPracownicy = ACL::getRefTable('default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA',
+			'default_db__x3A__BI_audit_ENERGA_PRACOWNICY:BI_audit_ENERGA_PRACOWNICY');
+		foreach ($pracownicyIds as $idPracownik) {
+			DB::getPDO()->insert($refPowiazaniaToPracownicy, ['PRIMARY_KEY' => $idRaport, 'REMOTE_PRIMARY_KEY' => $idPracownik]);
+		}
+
+
+		// Tworzenie relacji Raport do Kontrahenci - analogicznie jak wyżej
+		$refPowiazaniaToKontrahenci = ACL::getRefTable('default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA',
+			'default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI:BI_audit_ENERGA_RUM_KONTRAHENCI');
+		foreach ($kontrahenciIds as $idKontrahent) {
+			DB::getPDO()->insert($refPowiazaniaToKontrahenci, ['PRIMARY_KEY' => $idRaport, 'REMOTE_PRIMARY_KEY' => $idKontrahent ]);
+		}
+
+		// ...
+
+		return [
+			'msg' => "Zadanie do wygnerowania raportu zostało zapisane.",
+			'type' => "success",
+			'body' => [
+				'id' => $idRaport,
+			]
+		];
+	}
+
+
+
+		public function defaultViewFormBiAudit($items, $type) {
+
+	$activeFormSteps = '';
+
+		switch($type) {
+				case 'KONTRAHENCI':
+					$activeFormStepsKontrahent = 'complete';
+					$titleHeader = 'KONTRAHENCI';
+					$groupFilterList = '
+					<div class="menu-item">
+							<ul class="padding-0">
+									<li><a href="#" title="STWÓRZ GRUPĘ" class="btn btn-default" onClick="createGroupKontrahenci(event)" data-color-noactive="">+ STWÓRZ GRUPĘ</a></li>
+							</ul>
+					</div>
+					<div id="group-kontrahenci" class="btn-group">
+							<button class="btn btn-default active" title="Wszyscy" data-group-filter="0">Wszyscy</button>
+					</div>';
+					$showButtonNextStep = '<button type="button" class="btn btn-primary" onClick="generateBiAuditRaport(event)" id="button-generate-reaport">SZUKAJ POWIĄZAŃ</button>';
+					$pagination_form = '<div id="pagination-kontrahenci"></div>';
+				break;
+
+				case 'PRACOWNICY':
+					$titleHeader = 'PRACOWNICY';
+					$groupFilterList = '
+					<div class="menu-item">
+							<ul class="padding-0">
+									<li><a href="#" title="STWÓRZ GRUPĘ" class="btn btn-default" onClick="createGroupPracownicy(event)" data-color-noactive="">+ STWÓRZ GRUPĘ</a></li>
+							</ul>
+					</div>
+					<div id="group-pracownicy" class="btn-group">
+							<button class="btn btn-default active" title="Wszyscy" data-group-filter="0">Wszyscy</button>
+					</div>';
+					$showButtonNextStep = '<a href="index.php?_route=UrlAction_Bocian#KONTRAHENCI"  title="DODAJ DO ANALIZY" class="btn btn-primary">DODAJ DO ANALIZY</a>';
+					$pagination_form = '<div id="pagination-pracownicy"></div>';
+
+					break;
+		}
+
+
+			$view = '
+			<!-- start:employees-section-->
+			<div id="smad-employees-section" class="smad-form-' . $type . '" >
+				<div class="container-fluid">
+					<div>
+							<div class="padding-lr-0">
+									<div id="smad-menu-section">
+											<div class="col-sm-12 col-md-6 padding-lr-0">
+													<div class="menu-items">
+															<div class="smad-heder-title menu-item"><span class="smad-line-red">|</span> ' . $titleHeader . ' </div>
+													</div>
+											</div>
+											<div class="col-sm-12 col-md-6 padding-lr-0">
+													<div class="form-steps">
+															<!-- start:form steps wizard -->
+															<div class="row smad-wizard" style="border-bottom:0;">
+																	<div class="col-xs-4 col-md-4 smad-wizard-step complete"><!-- complited line -->
+																			<div class="text-center smad-wizard-stepnum">&nbsp;</div>
+																			<div class="progress"><div class="progress-bar"></div></div>
+																			<a href="https://bravecom.yellowgroup.pl/SE/index.php?_route=UrlAction_Bocian#PRACOWNICY" class="smad-wizard-dot"></a>
+																			<div class="smad-wizard-info complete text-center">
+																					<div class="step-item">Krok 1</div>
+																					<div class="step-title ">PRACOWNICY</div>
+																			</div>
+																	</div>
+
+																	<div class="col-xs-4 col-md-4 smad-wizard-step ' . $activeFormStepsKontrahent . ' ">
+																			<div class="text-center smad-wizard-stepnum">&nbsp;</div>
+																			<div class="progress"><div class="progress-bar"></div></div>
+																			<a href="https://bravecom.yellowgroup.pl/SE/index.php?_route=UrlAction_Bocian#KONTRAHENCI" class="smad-wizard-dot"></a>
+																			<div class="smad-wizard-info  text-center">
+																					<div class="step-item">Krok 2</div>
+																					<div class="step-title ">KONTRAHENCI</div>
+																			</div>
+																	</div>
+
+																	<div class="col-xs-4 col-md-4 smad-wizard-step ">
+																			<div class="text-center smad-wizard-stepnum">&nbsp;</div>
+																			<div class="progress"><div class="progress-bar"></div></div>
+																			<a href="#" class="smad-wizard-dot"></a>
+																			<div class="smad-wizard-info  text-center">
+																					<div class="step-item">Krok 3</div>
+																					<div class="step-title ">SZUKANIE POWIĄZAŃ</div>
+																			</div>
+																	</div>
+															</div>
+															<!-- end:form steps wizard -->
+													</div>
+											</div>
+									</div>
+							</div>
+					</div>
+			</div>
+
+			<div class="container-fluid">
+					<div class=" padding-lr-0">
+							<div class="smad-divider"></div>
+					</div>
+			</div>
+			<!-- start:filters -->
+			<div class="container-fluid">
+					<div class="row">
+							<div>
+									<div class="smad-employees-form-section" class="border-top-grey">
+											<div class="col-md-9 smad-border-col">
+													<div class="menu-items">
+														'.$groupFilterList.'
+														</div>
+											</div>
+											<div class="col-md-3">
+													<div class="form-input">
+															<div class="form-item col-md-6 smad-heder-title">głębokość powiązań:</div>
+															<div class="form-item col-md-6">
+																	<input type="text" class="form-control smad-depth" placeholder="1-16" value="" />
+															</div>
+													</div>
+											</div>
+									</div>
+							</div>
+					</div>
+			</div>
+			<!-- end:filters -->
+
+			<!-- start:list employees -->
+			<div class="container-fluid">
+
+							<div class="padding-0 smad-employees-list-head">
+									<div class="col-md-6">
+											<header>
+													<h2 class="title">Wszyscy</h2>
+											</header>
+											<div class="desc">
+													Lorem Ipsum jest tekstem stosowanym jako przykładowy wypełniacz w przemyśle poligraficznym.
+											</div>
+									</div>
+									<div class="col-md-6">
+											<div class="menu-items">
+													<div class="menu-item">
+															<ul class="padding-0">
+																	<li><a href="#" title="IMPORT PRACOWNIKÓW" class="btn btn-info data-color-noactive="">IMPORT PRACOWNIKÓW</a></li>
+																	<li><a href="#" title="DODAJ PRACOWNIKÓW" class="btn btn-info" data-color-noactive="">+ DODAJ PRACOWNIKÓW</a></li>
+															</ul>
+													</div>
+											</div>
+									</div>
+							</div>
+
+			</div>
+			<div class="container-fluid">
+					<div class="table-responsive padding-0" id="smad-table-' . $type . '">
+							' . $this->showListDataByType($items, $type) . '
+					</div>
+			</div>
+			<!-- end:list employees -->
+			<!-- start:list paginations employees -->
+			<div class="container-fluid ">
+				<div>
+					'. $pagination_form .'
+				</div>
+			</div>
+			<!-- end:list paginations employees -->
+
+			<!-- start:bottom buttons -->
+			<div class="container-fluid smad-employees-bottom-navigation">
+					<div class="padding-0">
+							<div class="col-lg-6 ">
+									<a href="#" title="PRZENIEŚ DO GRUPY" onClick="addPracownikToGroup(event)" class="btn btn-info">PRZENIEŚ DO GRUPY</a>
+							</div>
+							<div class="col-lg-6 text-right">
+									' . $showButtonNextStep . '
+							</div>
+					</div>
+			</div>
+			<!-- end:bottom buttons -->
+	</div>
+	<!-- start:employees-section -->
+			';
+			return $view;
+		}
+
+
+	public function showListDataByType($items, $type='PRACOWNICY') {
+
+			switch ($type) {
+				case 'PRACOWNICY':
+					return $this->showTablePracownicy();
+					break;
+				case 'KONTRAHENCI':
+					return $this->showTableKontrahenci($items);
+					break;
+			}
+	}
+}

+ 1219 - 0
tools/Bocian.php.view.js

@@ -0,0 +1,1219 @@
+console.log('test1... DBG:', DBG)
+
+// localStorage.setItem('Bocian.pracownicyIds', JSON.stringify(ids))
+// var ids = localStorage.getItem('Bocian.pracownicyIds')
+// localStorage.removeItem('Bocian.pracownicyIds')
+// localStorage.removeItem('Bocian.kontrahenciIds')
+// localStorage.removeItem('Bocian.depth') // TODO: zapis na stronie głównej i BiAuditRaport
+
+if (!URL_FETCH_TEST) {
+	throw "Brak zmiennej URL_FETCH_TEST"
+}
+
+$(window).on('hashchange', function() {
+	initLocalStorage();
+	rootChangeForm();
+});
+
+function loadCurrentDepthInInput(idInput) {
+  var depthValue = getItemLocalStorage('Bocian.biAuditForm.depth');
+
+   $(idInput).val(function() {
+       return depthValue;
+   });
+}
+
+function updateLocalStorageBiAuditDepth(idInput) {
+  $(idInput).keyup(function() {
+    delayUpdate(function(){
+      var newValue = $(idInput).val();
+      var responseValue = validateValueDepth(parseInt(newValue));
+
+      setItemLocalStorage('Bocian.biAuditForm.depth', responseValue);
+      loadCurrentDepthInInput('.smad-depth');
+    }, 1000 );
+  });
+}
+
+function validateValueDepth(newValue) {
+  var value = null;
+  value = newValue;
+
+  if (parseInt(newValue) < 0) {
+      value = 1;
+  }
+
+  if (parseInt(newValue) > 16) {
+    value = 16;
+  }
+
+  return value;
+}
+
+var delayUpdate = (function() {
+  var timer = 0;
+  return function(callback, ms) {
+  clearTimeout (timer);
+  timer = setTimeout(callback, ms);
+ };
+})();
+
+function initLocalStorage() {
+
+	if (getItemLocalStorage('Bocian.biAuditForm.pracownicyIds') === null) {
+		 setItemLocalStorage('Bocian.biAuditForm.pracownicyIds', []);
+	}
+
+	if (getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds') === null) {
+		 setItemLocalStorage('Bocian.biAuditForm.kontrahenciIds', []);
+	}
+
+	setItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup', 0);
+	setItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup', 0);
+
+	if (getItemLocalStorage('Bocian.biAuditForm.depth') === null) {
+		updateLocalStorageBiAuditDepth(2);
+	}
+}
+
+
+function defaultBIAuditLocalStorage() {
+	localStorage.removeItem('Bocian.biAuditForm.pracownicyIds');
+	localStorage.removeItem('Bocian.biAuditForm.kontrahenciIds');
+	setItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page', 1);
+	setItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page', 1);
+	setItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup', 0);
+	setItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup', 0);
+	setItemLocalStorage('Bocian.biAuditForm.depth', 2);
+}
+
+function generateBiAuditRaport(event) {
+	event.preventDefault();
+
+		var pracownicyIdsArray = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');
+		var kontrahenciIdsArray = getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');
+		var depthValue = getItemLocalStorage('Bocian.biAuditForm.depth');
+
+		// validate
+		if (!depthValue || depthValue === 0) {
+			p5UI__notifyAjaxCallback({ type: 'error', msg: 'Nie podano wartości dla głębokości powiązań' });
+		} else if (!pracownicyIdsArray || pracownicyIdsArray.length === 0) {
+			p5UI__notifyAjaxCallback({ type: 'error', msg: 'Nie wybrano pracowników' });
+		} else if (!kontrahenciIdsArray || kontrahenciIdsArray.length === 0) {
+			p5UI__notifyAjaxCallback({ type: 'error', msg: 'Nie wybrano kontrahentów' });
+		} else {
+			// send
+			window.fetch(URL_GENERATE_BI_AUDIT_RAPORT_AJAX, {
+				  method: 'POST',
+				  headers: {
+				    'Content-Type': 'application/json'
+				  },
+					credentials: 'same-origin',
+				  body: JSON.stringify({
+				     pracownicyIds: pracownicyIdsArray,
+				     kontrahenciIds: kontrahenciIdsArray,
+				     depthValue: depthValue
+				  })
+				})
+				.then(function(response) {
+					console.log('Firsst then', response);
+					return response.text();
+				})
+				.then(function(responseText) {
+					try {
+						return JSON.parse(responseText);
+					} catch (e) {
+						throw responseText;
+					}
+				})
+				.then(function(result) {
+					result
+					if (result.type == 'success') {
+
+						p5UI__notifyAjaxCallback(result);
+						defaultBIAuditLocalStorage();
+						window.setTimeout(window.location.href = "https://bravecom.yellowgroup.pl/SE/index.php?_route=ViewTableAjax&namespace=default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA", 4000);
+						resolve(result.msg);
+
+					} else {
+						reject(result.msg);
+					}
+				})
+				.catch(function(error) {
+					console.log('request failed', error)
+				});
+		}
+}
+
+function addPracownikToGroup(event) {
+	event.preventDefault();
+
+	var pracownicyIdsArray = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');
+
+	if (pracownicyIdsArray === null) {
+		showTextListIdPracownikow = 'ID pracowników: nie wybrano';
+	} else {
+		showTextListIdPracownikow = 'ID pracowników: ' + pracownicyIdsArray;
+	}
+
+	swal({
+	  title: 'Przenieś do grupy',
+		input: 'select',
+		text: showTextListIdPracownikow,
+	  inputOptions: getItemLocalStorage('Bocian.biAuditForm.pracownicy.groups'),
+	  inputPlaceholder: 'Wybierz grupę',
+	  showCancelButton: true,
+	  confirmButtonText: 'Zapisz',
+	  showLoaderOnConfirm: true,
+	  preConfirm: function (idGroup) {
+	    return new Promise(function (resolve, reject) {
+				console.log('value', idGroup);
+
+				if ( !pracownicyIdsArray || pracownicyIdsArray === null || pracownicyIdsArray === 'undefined' ) {
+						reject('Wybierz pracowników');
+				} else if ( pracownicyIdsArray.length === 0 ) {
+					reject('Wybierz pracowników');
+				}
+				if (!idGroup) reject('Proszę wybrać nazwę grupy');
+
+				window.fetch(URL_ADD_PRACOWNICY_TO_GROUP, {
+					method: 'POST',
+					header: {
+						'contentType': 'applications/json'
+					},
+					credentials: 'same-origin',
+					body: JSON.stringify({
+						'idGroup': idGroup,
+						'pracownicyIds': getItemLocalStorage('Bocian.biAuditForm.pracownicyIds'),
+					})
+				})
+				.then(function(response) {
+					return response.text();
+				})
+				.then(function(responseText) {
+
+					try {
+						return JSON.parse(responseText);
+					} catch (e) {
+						throw responseText;
+					}
+				})
+				.then(function(result) {
+					result
+					if (result.type == 'success') {
+						p5UI__notifyAjaxCallback(result);
+						resolve(result.msg);
+					} else {
+						reject(result.msg);
+					}
+				})
+				.catch(function(error) {
+					console.log('request failed', error)
+				});
+	    })
+	  },
+	  allowOutsideClick: false
+	}).then(function (groupPracownicyData) {
+		//TODO: pIOTRKU CZY TU POWINIENEM COŚ JESZCZE OBSŁUŻYĆ
+	});
+}
+
+function addKontrahenciToGroup(event) {
+	event.preventDefault();
+
+	var kontrahenciIdsArray = getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');
+
+	if (kontrahenciIdsArray === null) {
+		showTextListIdKontrahentow = 'ID pracowników: nie wybrano';
+	} else {
+		showTextListIdKontrahentow = 'ID pracowników: ' + pracownicyIdsArray;
+	}
+
+	swal({
+	  title: 'Przenieś do grupy',
+		input: 'select',
+		text: showTextListIdKontrahentow,
+	  inputOptions: getItemLocalStorage('Bocian.biAuditForm.kontrahenci.groups'),
+	  inputPlaceholder: 'Wybierz grupę',
+	  showCancelButton: true,
+	  confirmButtonText: 'Zapisz',
+	  showLoaderOnConfirm: true,
+	  preConfirm: function (idGroup) {
+	    return new Promise(function (resolve, reject) {
+
+				if (!idGroup) reject('Proszę wybrać nazwę grupy');
+				if ( !kontrahenciIdsArray || kontrahenciIdsArray === null || kontrahenciIdsArray === 'undefined' ) {
+						reject('Wybierz kontrahentów');
+				} else if ( kontrahenciIdsArray.length === 0 ) {
+					reject('Wybierz kontrahentów');
+				}
+
+				window.fetch(URL_ADD_KONTRAHENCI_TO_GROUP, {
+					method: 'POST',
+					header: {
+						'contentType': 'applications/json'
+					},
+					credentials: 'same-origin',
+					body: JSON.stringify({
+						'idGroup': idGroup,
+						'kontrahenciIds': getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds'),
+					})
+				})
+				.then(function(response) {
+					return response.text();
+				})
+				.then(function(responseText) {
+
+					try {
+						return JSON.parse(responseText);
+					} catch (e) {
+						throw responseText;
+					}
+				})
+				.then(function(result) {
+					result
+					if (result.type == 'success') {
+						p5UI__notifyAjaxCallback(result);
+						resolve(result.msg);
+					} else {
+						reject(result.msg);
+					}
+				})
+				;
+	    })
+	  },
+	  allowOutsideClick: false
+	}).then(function (groupKontrahenciData) {
+		//TODO: pIOTRKU CZY TU POWINIENEM COŚ JESZCZE OBSŁUŻYĆ
+	});
+}
+
+
+function createGroupKontrahenci(event) {
+	event.preventDefault();
+
+	swal({
+	  title: 'Utwórz grupę',
+	  input: 'text',
+	  showCancelButton: true,
+	  confirmButtonText: 'Zapisz',
+	  showLoaderOnConfirm: true,
+	  preConfirm: function (NAZWA) {
+	    return new Promise(function (resolve, reject) {
+				if (!NAZWA) reject('Proszę podać nazwę grupy');
+
+				window.fetch(URL_CREATE_KONTRAHENCIS_GROUP, {
+					method: 'POST',
+					header: {
+						'contentType': 'applications/json'
+					},
+					credentials: 'same-origin',
+					body: JSON.stringify({
+						'NAZWA': NAZWA
+					})
+				})
+				.then(function(response) {
+					return response.text();
+				})
+				.then(function(responseText) {
+
+					try {
+						return JSON.parse(responseText);
+					} catch (e) {
+						throw responseText;
+					}
+				})
+				.then(function(result) {
+					result
+					if (result.type == 'success') {
+						p5UI_notifyAjaxCallback(result);
+						resolve(result.msg);
+					} else {
+						reject(result.msg);
+					}
+				})
+				;
+	    })
+	  },
+	  allowOutsideClick: false
+	}).then(function (groupKontrahenciData) {
+			//TODO: aktualizacja fitrów na widoku -> SPrawdzić co dostaniemy w odpowiedzi po dodaniu filtra grupy
+			groupsKontrahenci = '<button class="btn btn-default" title="'+groupKontrahenciData['NAZWA']+'" data-group-filter="'+groupKontrahenciData['ID']+'">'+groupKontrahenciData['NAZWA']+'</button>';
+			$('#group-kontrahenci').append(groupsKontrahenci);
+	});
+
+}
+
+function createGroupPracownicy(event) {
+	event.preventDefault();
+
+	swal({
+	  title: 'Utwórz grupę',
+	  input: 'text',
+	  showCancelButton: true,
+	  confirmButtonText: 'Zapisz',
+	  showLoaderOnConfirm: true,
+	  preConfirm: function (NAZWA) {
+	    return new Promise(function (resolve, reject) {
+				if (!NAZWA) reject('Proszę podać nazwę grupy');
+
+				window.fetch(URL_CREATE_PRACOWNICY_GROUP, {
+					method: 'POST',
+					header: {
+						'contentType': 'applications/json'
+					},
+					credentials: 'same-origin',
+					body: JSON.stringify({
+						'NAZWA': NAZWA
+					})
+				})
+				.then(function(response) {
+					return response.text();
+				})
+				.then(function(responseText) {
+
+					try {
+						return JSON.parse(responseText);
+					} catch (e) {
+						throw responseText;
+					}
+				})
+				.then(function(result) {
+					result
+					if (result.type == 'success') {
+						p5UI_notifyAjaxCallback(result);
+						resolve(result.msg);
+					} else {
+						reject(result.msg);
+					}
+				})
+				;
+	    })
+	  },
+	  allowOutsideClick: false
+	}).then(function (groupPracownicyData) {
+		//TODO: aktualizacja fitrów na widoku -> SPrawdzić co dostaniemy w odpowiedzi po dodaniu filtra grupy
+		groupsPracownicy = '<button class="btn btn-default" title="'+groupPracownicyData['NAZWA']+'" data-group-filter="'+groupPracownicyData['ID']+'">'+groupPracownicyData['NAZWA']+'</button>';
+		$('#group-pracownicy').append(groupsPracownicy);
+
+	});
+
+}
+
+// // Documentation: https://github.com/github/fetch
+// fetch(URL_FETCH_TEST, {
+// 	credentials: 'same-origin'
+// })
+// .then(function parseJSON(response) {
+//   return response.json()
+// })
+// .then(function(data) {
+// 	//$( ".container" ).append( data.body.view );
+// 	console.log('request succeeded with JSON response', data)
+// }).catch(function(error) {
+// 	console.log('request failed', error)
+// })
+//
+// fetch(URL_FETCH_TEST_KRS, {
+// 	credentials: 'same-origin'
+// })
+// .then(function parseJSON(response) {
+//   return response.json()
+// })
+// .then(function(data) {
+// 	console.log('request succeeded with JSON response', data)
+// }).catch(function(error) {
+// 	console.log('request failed', error)
+// })
+//
+// fetch(URL_FETCH_TEST_CEIDG, {
+// 	credentials: 'same-origin'
+// })
+// .then(function parseJSON(response) {
+//   return response.json()
+// })
+// .then(function(data) {
+// 	console.log('request succeeded with JSON response', data)
+// }).catch(function(error) {
+// 	console.log('request failed', error)
+// })
+
+function rootChangeForm() {
+
+	var valueUrl = global.location.hash;
+
+	switch (valueUrl) {
+		case '#KONTRAHENCI':
+			$( ".container-bi_audit_form_kontrahenci_raport" ).html( VIEW_KONTRAHENCI );
+			urlFetchKontrahenci(1);
+			fetchGroupKontrahenci();
+			$( ".container-bi_audit_form_pracownicy_raport" ).hide();
+			$( ".container-bi_audit_form_kontrahenci_raport" ).show();
+			break;
+
+		case '#PRACOWNICY':
+			$( ".container-bi_audit_form_pracownicy_raport" ).html( VIEW_PRACOWNICY );
+			urlFetchPracownicy(1);
+			fetchGroupPracownicy()
+			$( ".container-bi_audit_form_kontrahenci_raport" ).hide();
+			$( ".container-bi_audit_form_pracownicy_raport" ).show();
+		break;
+
+		default:
+			$( ".container-bi_audit_form_pracownicy_raport" ).html( VIEW_PRACOWNICY );
+			urlFetchPracownicy(1);
+			fetchGroupPracownicy()
+			$( ".container-bi_audit_form_kontrahenci_raport" ).hide();
+			$( ".container-bi_audit_form_pracownicy_raport" ).show();
+		break;
+	}
+
+	//aktualizacja inputa głebokości powiazan
+	loadCurrentDepthInInput('.smad-depth');
+	updateLocalStorageBiAuditDepth('.smad-depth');
+
+}
+
+function getAddressData(objectValue) {
+
+	var objectValue = objectValue || [];
+	var listData = '';
+
+	if (!objectValue) {
+		return true;
+	}
+
+	objectValue.forEach (function(item) {
+		if (item['kodPocztowy']) { listData += '<div>kod pocztowy: ' + item['kodPocztowy'] + '<div>'; }
+		if (item['miejscowosc']) { listData += '<div>miejscowość: ' + item['miejscowosc'] + '<div>'; }
+		if (item['nrBudynku']) { listData += '<div>nr budynku: ' + item['nrBudynku'] + '<div>'; }
+		if (item['nrLokalu']) { listData += '<div>nr lokalu: ' + item['nrLokalu'] + '<div>'; }
+		if (item['typAdresu']) { listData += '<div>typ adresu: ' + item['typAdresu'] + '<div>'; }
+		if (item['ulica']) { listData += '<div>ulica: ' + item['ulica'] + '<div>'; }
+		listData += '<div>------<div>';
+	});
+
+	return listData;
+}
+
+function urlFetchKontrahenci(page) {
+			var page = page || getItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page');
+
+			selectPage('KONTRAHENCI', page);
+			if ( page === 1) {
+				setItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page', 1);
+			}
+
+			var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup');
+
+			fetch(URL_FETCH_KONTRAHENCI + '&page=' + page + '&filterIdGroup=' + filterIdGroup, {
+					credentials: 'same-origin'
+				})
+				.then(function parseJSON(response) {
+					return response.json()
+
+				var filterIdGroup = filterIdGroup || getItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup');
+						})
+				.then(function(data) {
+
+						var listItemsKontrahenci = null;
+						data.body.items.forEach (function(row) {
+							listItemsKontrahenci += '<tr><td><input type="checkbox" name="kontrID[]" value="'+row['ID']+'" /></td>'+
+								'<td align="right">'+row["ID"]+'</td>'+
+								'<td align="right">'+row["Nazwa_grupy_kapitalowej"]+'</td>'+
+								'<td align="right">'+row["Pelna_nazwa_kontrahenta"]+'</td>'+
+								'<td align="right">'+row["Numer_kontrahenta"]+'</td>'+
+								'<td align="right">'+row["Skrocona_Nazwa_Kontrahenta"]+'</td>'+
+								'<td align="right">'+row["Typ_kontrahenta"]+'</td>'+
+								'<td align="right">'+row["NIP"]+'</td>'+
+								'<td align="right">'+row["KRS"]+'</td>'+
+								'<td align="right">'+row["REGON"]+'</td>'+
+								'<td align="right">'+row["PESEL"]+'</td>'+
+								'<td align="right">'+row["Forma_prawna_dzialalnosci"]+'</td>'+
+								'<td align="right">'+row["Ulica"]+'</td>'+
+								'<td align="right">'+row["Numer_budynku"]+'</td>'+
+								'<td align="right">'+row["Numer_mieszkania_lokalu"]+'</td>'+
+								'<td align="right">'+row["Miejscowosc"]+'</td>'+
+								'<td align="right">'+row["Kod_pocztowy"]+'</td>'+
+								'<td align="right">'+row["Kraj"]+'</td>'+
+								'<td align="right">'+row["Telefon"]+'</td>'+
+								'<td align="right">'+row["Fax"]+'</td>'+
+								'<td align="right">'+row["Mail"]+'</td>'+
+								'<td align="right">'+row["A_ADM_COMPANY"]+'</td>'+
+								'<td align="right">'+row["A_CLASSIFIED"]+'</td>'+
+								'<td align="right">'+row["A_STATUS"]+'</td>'+
+								'<td align="right">'+row["A_STATUS_INFO"]+'</td>'+
+								'<td align="right">'+row["Dodano"]+'</td>'+
+								'<td align="right">'+row["L_APPOITMENT_USER"]+'</td>'+
+								'<td align="right">'+row["Podmiot_dominujacy"]+'</td>'+
+								'<td align="right">'+row["Tytul_dokumentu"]+'</td>'+
+								'<td align="right">'+row["ownCompany"]+'</td>'+
+								'<td align="right">'+row["uwagi"]+'</td></tr>';
+						});
+
+				if (data.body.pagination !== undefined) {
+					Pagination.Init(document.getElementById('pagination-kontrahenci'), {
+							url: 'https://bravecom.yellowgroup.pl/SE/index.php?_route=UrlAction_Bocian#KONTRAHENCI',
+							id_pagination: 'pagination-kontrahenci',
+							type: 'KONTRAHENCI',
+							total_items: data.body.pagination.total_items, // pages size
+							size: data.body.pagination.size, // pages size
+							page: page,  // selected page
+							step: 1   // pages before and after current
+					});
+
+				}
+
+				$( "#body-kontrahenci" ).html(listItemsKontrahenci);
+				checkAll('KONTRAHENCI');
+				catchEventCheckbox('KONTRAHENCI');
+				checkedChoiseItems('KONTRAHENCI', getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds') );
+
+				//	$( ".container-bi_audit_raport" ).append( data.body.view );
+					console.log('request succeeded with JSON responseKontrahenci', data)
+				}).catch(function(error) {
+					console.log('request failed', error)
+				})
+}
+
+function urlFetchPracownicy(page) {
+
+		var page = page || getItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page');
+
+		if ( page === 1) {
+			setItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page', 1);
+		}
+
+			var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup');
+
+			selectPage('PRACOWNICY', page);
+
+			fetch(URL_FETCH_PRACOWNICY + '&page=' + page + '&filterIdGroup=' + filterIdGroup, {
+				credentials: 'same-origin'
+			})
+			.then(function parseJSON(response) {
+			  return response.json()
+			})
+			.then(function(data) {
+
+					var addresPerson = '';
+					var listItemsPracownik = null;
+					console.log('urlFetchPracownicy', data.body.items);
+
+					data.body.items.forEach (function(row) {
+
+						if (row["default_db__x3A__BI_audit_ENERGA_PRACOWNICY_adresy:BI_audit_ENERGA_PRACOWNICY_adresy"]) {
+							addresPerson = getAddressData(row["default_db__x3A__BI_audit_ENERGA_PRACOWNICY_adresy:BI_audit_ENERGA_PRACOWNICY_adresy"]);
+						}
+
+
+						listItemsPracownik += '<tr><td><input type="checkbox" name="prID[]" value="'+row['ID']+'" /></td>'+
+							'<td align="right">'+row["ID"]+'</td>'+
+							'<td align="right">'+row["imiona"]+'</td>'+
+							'<td align="right">'+row["nazwisko"]+'</td>'+
+							'<td align="right">'+row["nip"]+'</td>'+
+							'<td align="right">'+row["pesel"]+'</td>'+
+							'<td align="right">'+row["regon"]+'</td>'+
+							'<td align="right">'+row["source"]+'</td>'+
+							'<td align="right">'+row["A_ADM_COMPANY"]+'</td>'+
+							'<td align="right">'+row["A_CLASSIFIED"]+'</td>'+
+							'<td align="right">'+row["A_STATUS"]+'</td>'+
+							'<td align="right">'+row["A_STATUS_INFO"]+'</td>'+
+							'<td align="right">'+row["L_APPOITMENT_USER"]+'</td>'+
+							'<td align="right">'+ addresPerson +'</td></tr>';
+					});
+
+			if (data.body.pagination.size) {
+						Pagination.Init(document.getElementById('pagination-pracownicy'), {
+							  url: 'https://bravecom.yellowgroup.pl/SE/index.php?_route=UrlAction_Bocian#PRACOWNICY',
+								id_pagination: 'pagination-pracownicy',
+								type: 'PRACOWNICY',
+								total_items: data.body.pagination.total_items, // pages size
+								size: data.body.pagination.size, // pages size
+								page: data.body.pagination.current,  // selected page
+								step: 1   // pages before and after current
+						});
+			}
+
+			$( "#body-pracownicy" ).html( listItemsPracownik);
+				checkAll('PRACOWNICY');
+				catchEventCheckbox('PRACOWNICY');
+				checkedChoiseItems('PRACOWNICY', getItemLocalStorage('Bocian.biAuditForm.pracownicyIds') );
+
+			//	$( ".container-bi_audit_raport" ).append( data.body.view );
+				console.log('request succeeded with JSON responsePRACOWNICY', data)
+			}).catch(function(error) {
+				console.log('request failed', error)
+			})
+
+}
+
+function selectPage(type, nrPage) {
+	var type = type.toLowerCase();
+
+	$('#pagination-' + type + ' ul li a').each(function(index, value){
+		if (this.text === nrPage) {
+			$(this).addClass('active');
+		} else {
+			$(this).removeClass('active');
+		}
+	});
+}
+
+function checkAll(type) {
+
+	$('#checkAll-' + type).change(function() {
+
+		  var valueCheckbox = null;
+			var checkboxes = $('form').find(':checkbox');
+			if($(this).prop('checked')) {
+				checkboxes.prop('checked', true);
+				//valueCheckbox = checkboxes.prop("checked");
+					 var allValsChecked = [];
+					 var checkedValues = $('#smad-table-' + type + ' input:checkbox:checked').map(function() {
+
+						 if (this.value !== 'on') {
+							  allValsChecked.push(parseInt(this.value));
+						 }
+					}).get();
+
+					updateListIdBiAuditReaport(type, allValsChecked);
+
+			} else {
+
+				checkboxes.prop('checked', false);
+
+				var allValsUnChecked = [];
+				var checkedValues = $('#smad-table-' + type + ' input:checkbox:not(:checked)').map(function() {
+					if (this.value !== 'on') {
+						 allValsUnChecked.push(parseInt(this.value));
+					}
+			 }).get();
+
+				deleteListIdBiAuditReaport(type, allValsUnChecked);
+			}
+	});
+}
+
+/**
+ * Select again checkbox before selected item chekbox from storage (pracownicy/kontrahenci)
+ */
+function checkedChoiseItems(type, store) {
+
+	var idElement = 'smad-table-' + type;
+
+	// if id element exist
+	if (document.getElementById(idElement)) {
+
+		// checked again if user selected Item (pracownicy/kontrahent)
+			for (i = 0; i < store.length; i++) {
+				$('#body-'+type.toLowerCase() +' input[type=checkbox] ').map(function(k, v) {
+				    if ( store[i] === parseInt(this.value) ){
+								$(this).prop('checked', true);
+				    }
+					}).get();
+			}
+
+	}
+
+	//$('#checkAll-' + type).on('bind', function() {
+	$('#smad-table-' + type + ' input[type=checkbox]').on( 'load', function() {
+		var itemsCHecked = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');
+
+	  getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');
+
+				if (itemsCHecked.lenght === 0 ) {
+						return;
+				}
+			  var valueCheckbox = null;
+				var checkboxes = $('form').find(':checkbox');
+				if($(this).prop('checked')) {
+					   checkboxes.prop('checked', true);
+						 var allValsChecked = [];
+						 var checkedValues = $('#smad-table-' + type + ' input:checkbox:checked').map(function() {
+
+							 if (this.value !== 'on') {
+								  allValsChecked.push(parseInt(this.value));
+							 }
+				}).get();
+
+					updateListIdBiAuditReaport(type, allValsChecked);
+
+			} else {
+
+				checkboxes.prop('checked', false);
+
+				var allValsUnChecked = [];
+				var checkedValues = $('#smad-table-' + type + ' input:checkbox:not(:checked)').map(function() {
+					if (this.value !== 'on') {
+						 allValsUnChecked.push(parseInt(this.value));
+					}
+			 }).get();
+
+				deleteListIdBiAuditReaport(type, allValsUnChecked);
+			}
+	});
+}
+
+
+
+
+function catchEventCheckbox(type) {
+
+		$('#smad-table-' + type + ' input[type="checkbox"]').on('change', function() {
+		    if($(this).is(":checked")) {
+					var allValsChecked = [];
+					if (this.value !== 'on') {
+						 allValsChecked.push(parseInt(this.value));
+					}
+
+					updateListIdBiAuditReaport(type, allValsChecked);
+		    } else  {
+
+						var allValsUnChecke = [];
+						if (this.value !== 'on') {
+							 allValsUnChecke.push(parseInt(this.value));
+						}
+
+						deleteListIdBiAuditReaport(type, allValsUnChecke);
+		    }
+		});
+
+}
+
+function clearSelectedCheckbox() {
+	$('#checkAll-PRACOWNICY').prop('checked', false)
+	$('#checkAll-KONTRAHENCI').prop('checked', false)
+}
+
+function updateListIdBiAuditReaport(type, valueArray) {
+
+		var currentStoragePracownicyIds = [];
+		var updateListPracownicyIds = null;
+		var currentStorageKontrahenciIds = [];
+		var updateListKontrahenciIds = null;
+
+		if ( type == 'PRACOWNICY') {
+				currentStoragePracownicyIds = getItemLocalStorage('Bocian.biAuditForm.pracownicyIds');
+
+				if(currentStoragePracownicyIds !== null) {
+					updateListPracownicyIds = [...new Set([...currentStoragePracownicyIds ,...valueArray])];
+				}
+				else {
+					updateListPracownicyIds = valueArray;
+				}
+
+				setItemLocalStorage('Bocian.biAuditForm.pracownicyIds', updateListPracownicyIds);
+		}
+
+		if ( type == 'KONTRAHENCI') {
+				currentStorageKontrahenciIds = getItemLocalStorage('Bocian.biAuditForm.kontrahenciIds');
+
+				if(currentStorageKontrahenciIds !== null) {
+					updateListKontrahenciIds = [...new Set([...currentStorageKontrahenciIds ,...valueArray])];
+				}
+				else {
+					updateListKontrahenciIds = valueArray;
+				}
+
+				setItemLocalStorage('Bocian.biAuditForm.kontrahenciIds', updateListKontrahenciIds);
+		}
+}
+
+function deleteListIdBiAuditReaport(type, valueArray) {
+
+		var currentStoragePracownicyIds = [];
+		var updateListPracownicyIds = null;
+
+		if ( type == 'PRACOWNICY') {
+				deleteItemLocalStorage('Bocian.biAuditForm.pracownicyIds', valueArray);
+		}
+
+		if ( type == 'KONTRAHENCI') {
+				deleteItemLocalStorage('Bocian.biAuditForm.kontrahenciIds', valueArray);
+		}
+}
+
+// filter group detect
+function fetchGroupPracownicy() {
+
+		fetch(URL_FETCH_GROUP_PRACOWNICY, {
+				credentials: 'same-origin'
+			})
+			.then(function parseJSON(response) {
+				return response.json()
+			})
+			.then(function(data) {
+					setItemLocalStorage('Bocian.biAuditForm.pracownicy.groups', data.body.itmesGroupPracownicy);
+
+					if (data.body.itmesGroupPracownicy === null) {
+						return;
+					}
+
+					var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup');
+					var groupsPracownicy = '';
+					var activeButton = '';
+
+					data.body.itmesGroupPracownicy.forEach (function(row) {
+							if ( filterIdGroup === row['ID'] ) { activeButton = 'active'; $('#group-pracownicy button.active').removeClass('active'); }
+							groupsPracownicy += '<button class="btn btn-default '+activeButton+'" title="' + row['NAZWA'] + '" data-group-filter="' + row['ID'] + '">' + row['NAZWA'] + '</button>';
+					});
+
+					$("#group-pracownicy").append(groupsPracownicy);
+
+				console.log('request succeeded with JSON fetchGroupPracownicy', data.body.itmesGroupPracownicy)
+			}).catch(function(error) {
+				console.log('request failed', error)
+			});
+}
+
+function fetchGroupKontrahenci() {
+
+		fetch(URL_FETCH_GROUP_KONTRAHENCI, {
+				credentials: 'same-origin'
+			})
+			.then(function parseJSON(response) {
+				return response.json()
+			})
+			.then(function(data) {
+					setItemLocalStorage('Bocian.biAuditForm.kontrahenci.groups', data.body.itemsGroupKontrahenci);
+
+					if (data.body.itemsGroupKontrahenci === null) {
+						return;
+					}
+
+					var filterIdGroup = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup');
+					var groupsKontrahenci = '';
+					var activeButton = '';
+
+					data.body.itemsGroupKontrahenci.forEach (function(row) {
+							if ( filterIdGroup === row['ID'] ) { activeButton = 'active'; $('#group-kontrahenci button.active').removeClass('active'); }
+							groupsKontrahenci += '<button class="btn btn-default '+activeButton+'" title="'+row['NAZWA']+'" data-group-filter="'+row['ID']+'">'+row['NAZWA']+'</button>';
+					});
+
+					$("#group-kontrahenci").append(groupsKontrahenci);
+
+				console.log('request succeeded with JSON fetchGroupKontrahenci', data.body.itemsGroupKontrahenci);
+			}).catch(function(error) {
+				console.log('request failed', error)
+			});
+}
+
+function detectChoiseFilter() {
+
+	$('#group-kontrahenci').on('click', 'button', function(evt) {
+
+		$('#group-kontrahenci button.active').removeClass('active');
+		$(this).addClass('active');
+
+		// pobranie id grupy kliknietego buttonu
+		var filterIdGroup = $(this).attr("data-group-filter");
+		// ustawić id grupy do sesyjnej
+		setItemLocalStorage('Bocian.biAuditForm.kontrahenci.filterIdGroup', parseInt(filterIdGroup));
+		// wywylac funckje pobrania danych
+		urlFetchKontrahenci(1);
+
+	});
+	$('#group-pracownicy').on('click', 'button', function(evt) {
+
+		$('#group-pracownicy button.active').removeClass('active');
+		$(this).addClass('active');
+
+		// pobranie id grupy kliknietego buttonu
+		var filterIdGroup = $(this).attr("data-group-filter");
+		// ustawić id grupy do sesyjnej
+		setItemLocalStorage('Bocian.biAuditForm.pracownicy.filterIdGroup', parseInt(filterIdGroup));
+		// wywylac funckje pobrania danych
+		urlFetchPracownicy(1);
+
+	});
+
+}
+
+
+// Local storage
+function setItemLocalStorage(key, array) {
+	localStorage.setItem(key, JSON.stringify(array));
+}
+
+function getItemLocalStorage(key) {
+	var retrievedData = localStorage.getItem(key);
+	var response = JSON.parse(retrievedData);
+
+	return response;
+}
+
+function deleteItemLocalStorage(key, itemsArray) {
+
+	var currentStorageArray = getItemLocalStorage(key);
+
+	var newStorageArray = removeItemArrayInArray(currentStorageArray, itemsArray);
+
+	setItemLocalStorage(key, newStorageArray);
+}
+
+/**
+ * arr - array
+ * item - search item
+ */
+function removeItemInArray(arr, item) {
+      for(var i = arr.length; i--;) {
+          if(arr[i] === item) {
+              arr.splice(i, 1);
+          }
+      }
+
+			return arr;
+  }
+
+/**
+ * arr - array
+ * item - array list items
+ */
+function removeItemArrayInArray(arr, itemsArray) {
+      for(var i = arr.length; i--;) {
+	      for(var j = itemsArray.length; j--;) {
+	          if(arr[i] === itemsArray[j]) {
+	              arr.splice(i, 1);
+	          }
+	      }
+      }
+
+			return arr;
+  }
+
+// Pagination
+var Pagination = {
+
+    code: '',			// end show html paginations
+    clickPage: 1, // set default 1 page
+
+    // --------------------
+    // Utility
+    // --------------------
+    //  initialize  default data
+    Extend: function(data) {
+        data = data || {};
+        Pagination.url = data.url;
+        Pagination.id_pagination = data.id_pagination;
+        Pagination.type = data.type;
+        Pagination.total_items = data.total_items;
+        Pagination.size = data.size || 2;
+        Pagination.page = data.page || 1;
+        Pagination.step = data.step || 3;
+    },
+
+    // add pages by number (from [s] to [f])
+    Add: function(s, f) {
+        for (var i = s; i < f; i++) {
+            Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default">' + i + '</a></li>';
+        }
+    },
+
+    // add last page with separator
+    Last: function() {
+        Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default">>></a></li>';
+    },
+
+    // add first page with separator
+    First: function() {
+        Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default"><<</a></li>';
+    },
+
+    // add last page with separator
+    Next: function() {
+        Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default">></a></li>';
+    },
+
+    // add first page with separator
+    Prev: function() {
+        Pagination.code += '<li><a href="' + Pagination.url + '" class="btn btn-default"><</a></li>';
+    },
+
+
+
+    // --------------------
+    // Handlers
+    // --------------------
+
+    // change page
+    Click: function() {
+			clearSelectedCheckbox();
+
+			var selectPage = $("#pagination-"+Pagination.type.toLowerCase()+' .tblAjax__footer__toolbar__pagination').find('a.active').text();
+			Pagination.clickPage = +this.innerHTML || '';
+			if ( selectPage === NaN || selectPage > Pagination.size) { selectPage = 1; }
+
+			switch (this.innerHTML) {
+				case '&gt;&gt;': // last
+					Pagination.clickPage = Pagination.size;
+					break;
+
+				case '&lt;&lt;': // first
+					Pagination.clickPage = 1;
+					break;
+
+				case '&lt;': // prev
+					Pagination.clickPage = parseInt(selectPage) - 1;
+					if (Pagination.clickPage < 1) {
+							Pagination.clickPage = 1;
+					}
+
+					break;
+
+				case '&gt;': // next
+					Pagination.clickPage = parseInt(selectPage) + 1;
+
+					if (Pagination.clickPage > Pagination.size) {
+							Pagination.clickPage = Pagination.size;
+					}
+					break;
+			}
+
+			if ( Pagination.type === 'KONTRAHENCI' ) {
+				setItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page', Pagination.clickPage);
+				Pagination.page = urlFetchKontrahenci(Pagination.clickPage);
+			}
+			else if ( Pagination.type === 'PRACOWNICY' ){
+				setItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page', Pagination.clickPage);
+				Pagination.page = urlFetchPracownicy(Pagination.clickPage);
+			}
+
+        Pagination.Start();
+    },
+
+
+    // --------------------
+    // Script structure pagination
+    // --------------------
+
+    // binding pages
+    Bind: function() {
+        var a = Pagination.e.getElementsByTagName('a');
+				var currentPage = Pagination.clickPage || 1;
+        for (var i = 0; i < a.length; i++) {
+            if (+a[i].innerHTML === Pagination.page) a[i].className = 'btn btn-default active';
+            a[i].addEventListener('click', Pagination.Click, false);
+        }
+    },
+
+    // write pagination
+    Finish: function() {
+        Pagination.e.innerHTML = Pagination.code;
+        Pagination.code = '</ul></nav>';
+        Pagination.Bind();
+    },
+
+    // find pagination type
+    Start: function() {
+			Pagination.code = '<div class="foot-info tblAjax__footer__toolbar__info footer_pagination_menu_items"><p>Wiersze od 1 do ' + Pagination.total_items + ' z ' + Pagination.total_items + '</p></div>';
+			Pagination.code += '<nav aria-label="Page navigation" class="footer_pagination_menu_items"><ul class="btn-group tblAjax__footer__toolbar__pagination smad-pagination">';
+			Pagination.First();
+			Pagination.Prev();
+
+
+				if ( Pagination.type === 'KONTRAHENCI' ) {
+					Pagination.page = getItemLocalStorage('Bocian.biAuditForm.kontrahenci.pagination.page') || 1;
+				}
+				else if ( Pagination.type === 'PRACOWNICY' ){
+					Pagination.page = getItemLocalStorage('Bocian.biAuditForm.pracownicy.pagination.page') || 1;
+				}
+
+				if ( Pagination.page > Pagination.size ) {
+						Pagination.page = 1;
+				}
+
+        if (Pagination.size < Pagination.step * 2 + 6) {
+            Pagination.Add(1, Pagination.size + 1);
+        }
+        /*else if (Pagination.page < Pagination.step * 2 + 1) {
+            Pagination.Add(1, Pagination.step * 2 + 4);
+        }
+        else if (Pagination.page > Pagination.size - Pagination.step * 2) {
+            Pagination.Add(Pagination.size - Pagination.step * 2 - 2, Pagination.size + 1);
+        }*/
+        else {
+          //  Pagination.Add(Pagination.page - Pagination.step, Pagination.page + Pagination.step + 1);
+        }
+				Pagination.Next();
+				Pagination.Last();
+        Pagination.Finish();
+    },
+
+
+    // --------------------
+    // Initialization
+    // --------------------
+
+    // binding buttons
+    Buttons: function(e) {
+        var nav = e.getElementsByTagName('a');
+    },
+
+    // create skeleton
+    Create: function(e) {
+
+        var html = [
+             '<div></div>'  // pagination container
+        ];
+
+        e.innerHTML = html.join('');
+        Pagination.e = e.getElementsByTagName('div')[0];
+        Pagination.Buttons(e);
+    },
+
+    // init
+    Init: function(e, data) {
+        Pagination.Extend(data);
+        Pagination.Create(e);
+        Pagination.Start();
+    }
+};
+
+function todo__fetchRaport(id) {
+	p5WFS_GetFeature('default_db__x3A__BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA:BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA', {
+		primaryKey: id,
+		resolve: 'all',
+		resolveDepth: 3,
+	}).then(function (features) {
+		console.log('features', features)
+	}).catch(function (e) {
+		console.warn(e)
+		p5UI__notifyAjaxCallback({ type: 'error', msg: e })
+	})
+}
+
+
+$(document).ready(function(){
+	rootChangeForm();
+	detectChoiseFilter();
+});
+
+global.checkAll = checkAll;
+global.checkedChoiseItems = checkedChoiseItems;
+global.catchEventCheckbox = catchEventCheckbox;
+global.clearSelectedCheckbox = clearSelectedCheckbox;
+global.createGroupPracownicy = createGroupPracownicy;
+global.createGroupKontrahenci = createGroupKontrahenci;
+global.selectPage = selectPage;
+global.detectChoiseFilter = detectChoiseFilter;
+
+global.updateListIdBiAuditReaport = updateListIdBiAuditReaport;
+global.deleteListIdBiAuditReaport = deleteListIdBiAuditReaport;
+
+global.urlFetchPracownicy = urlFetchPracownicy;
+global.generateBiAuditRaport = generateBiAuditRaport;
+global.getAddressData = getAddressData;
+
+global.Pagination = Pagination;
+global.todo__fetchRaport = todo__fetchRaport;
+
+global.initLocalStorage = initLocalStorage;
+global.setItemLocalStorage = setItemLocalStorage;
+global.getItemLocalStorage = getItemLocalStorage;
+global.deleteItemLocalStorage = deleteItemLocalStorage;
+global.defaultBIAuditLocalStorage = defaultBIAuditLocalStorage;
+global.removeItemInArray = removeItemInArray;
+global.removeItemArrayInArray = removeItemArrayInArray;
+
+global.addPracownikToGroup = addPracownikToGroup;