فهرست منبع

Scalenie z se-dev-pl czesci funkcji araxis merge, ocena okresowa powinna byc na tabeli wypelniana bez papierow.

Arkadiusz Binder 11 سال پیش
والد
کامیت
c303c05990

+ 563 - 356
SE/superedit-GRAPH_VIEW_PROCES.php

@@ -1,13 +1,274 @@
 <?php
 
-Lib::loadClass('ProcesHelper');
-Lib::loadClass('UsersHelper');
+class crm_proces_paser {
+
+  // var $this->get_proces_init=array();
+
+ // [proces_init]  - A
+ //    [step]      - flat 0
+ //    [step]      - flat 3 , tree 2 , cut
+ //     [step]     - flat 0 , tree 0
+ //     [step]     - flat 1 , tree 1
+ //       [step]   - flat 1 , tree 1
+ //         [step] - flat 0 , tree 0
+ //     [step]     - flat 1 , tree 1
+ //       [step]   - flat 0 , tree 0
+ 
+
+
+   
+   //funckcja do szukania proces_init
+   function get_proces_init($id_proces) {
+	$sql= "select p.`ID`,p.`DESC` from `CRM_PROCES` as p 
+	   LEFT JOIN _CRM_PROCES_INIT_STATS AS cs ON cs.ID = p.ID
+	where  p.`A_STATUS` in('WAITING','NORMAL') and p.`TYPE`='PROCES_INIT' 
+	and (cs.`path` like '%/".$id_proces."/%' or cs.`path` like '%/".$id_proces."'  or cs.`path` like '".$id_proces."/%' ) 
+	";
+//	echo $sql;
+	$res=DB::query($sql);
+		while($h=DB::fetch($res)) {
+			$this->get_proces_init[]=$h->ID;
+		}
+		return $this->get_proces_init;
+	
+   }
+
+   
+
+   function build_proces_init_tree($id_proces) {
+	  // $tree->Childs[$id_proces]=true;
+	   $tree->Childs[$id_proces]->PARENT=0;
+	   $tree->Childs[$id_proces]->SOURCE='build_tree_for_proces';
+
+	   $tree->Parents[0]->CHILD[$id_proces]=$id_proces;
+	   $obj=DB::get_by_id('CRM_PROCES',$id_proces);
+	   $tree->Childs[$id_proces]->TYPE=$obj->TYPE;
+	//   echo "here for ".$id_proces;
+	   self::build_tree_for_proces($tree,$id_proces,$id_proces);
+	   return $tree;
+   }
+   
+      function build_tree_for_proces(&$tree,$cursor,$init_once=null) {
+		  	   if(!empty($init_once)) $sql_or=" or cp.ID={$init_once} "; else $sql_or="";
+	      	   $sql="select cp.`ID`,cp.`IF_TRUE_GOTO`,cp.`IF_TRUE_GOTO_FLAG` , cp.`TYPE` from `CRM_PROCES` as cp 
+	      	   		
+	      	   where ( cp.PARENT_ID={$cursor} {$sql_or} ) and  cp.`A_STATUS` in ('WAITING','NORMAL')";
+		  	  // echo "<br>sql: ".$sql;
+	      	   $res=DB::query($sql);
+	      	   	      	   while ($h=DB::fetch($res)) {
+	      	   	 if(empty($init_once))  $tree->Childs[$h->ID]->PARENT=$cursor; //wyzwolenie tylko pozniejsze
+	      	   	  if(empty($init_once))  $tree->Parents[$cursor]->CHILD[$h->ID]=$h->ID;
+		  	   	   $tree->Childs[$h->ID]->TYPE=$h->TYPE;
+		  	   	   $tree->Childs[$h->ID]->SOURCE='build_tree_for_proces';
+
+
+	      	   	   if($h->IF_TRUE_GOTO>0) { 
+	      	   	      $tree->Childs[$h->ID]->GOTO_FLAG=$h->IF_TRUE_GOTO_FLAG;
+	      	   	      $tree->Childs[$h->ID]->IF_TRUE_GOTO=$h->IF_TRUE_GOTO;
+	      	   	      $tree->Childs[$h->IF_TRUE_GOTO]->IS_EXECUTED_BY[$h->ID]=$h->ID;
+	      	   	   }
+		      	   self::build_tree_for_proces($tree,$h->ID,null);
+	      	   }
+      }
+
+	  function get_resources_by_proceses_id($id_proces_obj,$id_proces,$filter_zasob) {
+		 $filter="";
+		 if( is_array($filter_zasob) ) $filter=" and cz.ID in (".implode(',', $filter_zasob).") " ;
+		 else if(!empty($filter_zasob)) $filter=" and cz.ID=".$filter_zasob ;
+		 
+		  $sql="select cz.ID,cz.PARENT_ID, cz.`DESC`,cz.`TYPE`	,	czp.`DESC` as DESC_czp, czp.`TYPE` as TYPE_czp
+		  	from CRM_WSKAZNIK as cw 
+		  		left join CRM_LISTA_ZASOBOW as cz on cz.ID=cw.ID_ZASOB 
+		  			left join CRM_LISTA_ZASOBOW as czp on czp.ID=cz.PARENT_ID
+		  		where cw.ID_PROCES in (".implode(',', array_keys($id_proces_obj)).") and cw.A_STATUS in ('NORMAL','WAITING')
+		  		and czp.`TYPE` in ('TABELA') ".$filter." ";
+		  $res=DB::query($sql);
+		  		while($h=DB::fetch($res)) {
+			  		$found['ID'][$h->ID]['PARENT_ID']=$h->PARENT_ID;
+			  		$found['ID'][$h->ID]['DESC']=$h->DESC;
+			  		$found['PARENT_ID'][$h->PARENT_ID]=$h->DESC_czp;
+			  		
+		  		}
+		  		
+//		  $this->get_resources_by_proceses_id->$id_proces=$found;
+	//	  DEBUG_S(-3,'Found resources',$found,__FILE__,__FUNCTION__,__LINE__);
+		  return $found;
+
+		  
+	  }
+
+
+      function build_tree_flat_info(&$tree,$flat) {
+		  /* >> zbudowanie ile ma dzieci <<
+			  $tree->Childs[3208] => stdClass Object
+			  (
+            [PARENT] => 3123
+            [CHILD] => Array
+                (
+             >>       [3219] => 1 <<
+             >>       [3237] => 0 <<
+             >>       [3209] => 0 <<
+                 
+			 */
+	      foreach($tree->Childs as $id=>$obj) {
+			  //sprawdzmy czy nasz parent wymaga wyswietlenia osobnego podkroku w widoku szczegolowego procesu
+		      foreach($tree->Parents[$id]->CHILD as $child) {
+			      $tree->Childs[$id]->CHILD[$child]=count($tree->Parents[$child]->CHILD);     
+		      }
+	      }    
+      }
+      
+      
+      function detect_tree_where_to_detail_cut(&$tree,$flag_not_to_cut=null) {
+	       foreach($tree->Childs as $id=>$obj) {
+			  //sprawdzmy czy nasz parent wymaga wyswietlenia osobnego podkroku w widoku szczegolowego procesu
+			  $control=0;
+		      foreach($obj->CHILD as $child) {
+			      if($child>0) $control++;   
+		      }
+		      if(empty($flag_not_to_cut)) {
+		       
+		       if($control>1) $tree->Childs[$id]->TO_DETAIL_CUT_FLAG=true;  //przeciecie jezeli jest wiecej wyjsc niz jedno z zaglebieniami
+		        //przeciecie, jezeli jest wyjscie z kroku procesu do innego 
+		        if(isset($tree->Childs[$id]->GOTO_FLAG)) $tree->Childs[$id]->TO_DETAIL_CUT_FLAG=true;
+		        //trzeba zbadac tez czy nie jest do niego dowiazywany w jakims miejscu proces
+		         if(isset($tree->Childs[$id]->IS_EXECUTED_BY)) { $tree->Childs[$id]->TO_DETAIL_CUT_FLAG=true;
+		         //echo "<br> Is executed by CUT!";
+		         }
+
+		       } else $tree->Childs[$id]->NO_CUT_FLAG=true;
+	      }       
+      }
+      function search_parent_ids_till_cut(&$tree,$init,&$find) {
+      //szukam lancuchow do optymalizacji do miejsca flagi CUT, kojarzac od razu linki
+	     	if(isset($tree->Childs[$init]->TO_DETAIL_CUT_FLAG)) {
+		    	//if(!empty($find))
+		    	//if($init==2444)
+		    	  self::zoom_process_links($tree,$init,$init); 
+			}
+//			$tree->Viev_Zpc_Parent_cut[$init]=$find[0];
+	        if(!isset($tree->Childs[$init]->TO_DETAIL_CUT_FLAG)) {
+				  
+	      		  $find[]=$init;
+		  		  self::zoom_process_links($tree,$init,$find[0]);
+		      foreach($tree->Childs[$init]->CHILD as $id=>$count) {
+			      self::search_parent_ids_till_cut($tree,$id,$find);
+		      }
+	      } //else
+	     // return $find;
+      }
+      
+      function zoom_process_links($tree,$id,$root_id) {
+      	//dobudowuje znaczniki dotyczace LINKOW oraz brakujace ID z tym zwiazane
+	      //echo "<br>testuje zoom dla ".$id." root:".$root_id;
+
+	      if(isset($tree->Childs[$id]->GOTO_FLAG)) {
+					  	if(isset( $tree->Childs[$tree->Childs[$id]->IF_TRUE_GOTO])) {
+						  	//adding internal link to the same process
+						  	//TODO trzeba przemyslec, czy dowiazywac linki do zagregowanych krokow, czy trzeba robic cut w tych miejscach - na ten moment domyslnie CUT
+//						  	if(empty($tree->Childs[$id]->NO_CUT_FLAG)) //tylko linki zewnetrzne jak flaga NOCUT!
+						  	//echo "... dodaje 218:  ".$tree->Childs[$id]->IF_TRUE_GOTO;
+						  	if(isset($tree->Childs[$tree->Childs[$id]->IF_TRUE_GOTO]->SOURCE)) {
+						  		$tree->Viev_Zpc[$root_id]->INTERNAL_LINK[$tree->Childs[$id]->IF_TRUE_GOTO]=$tree->Childs[$id]->IF_TRUE_GOTO;
+						  		//echo "dodalem Linka dla ".$root_id;
+						  	} else { //echo "To jest link external - bo referencyjny ID{$tree->Childs[$id]->IF_TRUE_GOTO}nie byl w procesie";
+
+						  		$tree->Viev_Zpc[$root_id]->EXTERNAL_LINK[$tree->Childs[$id]->IF_TRUE_GOTO]=$tree->Childs[$id]->IF_TRUE_GOTO;
+						  	}
+						  	
+					  	} else { //echo "<br>Links zewnetrzny do ".$id." - ".$tree->Childs[$id]->IF_TRUE_GOTO;
+					  		$tree->Viev_Zpc[$root_id]->EXTERNAL_LINK[$tree->Childs[$id]->IF_TRUE_GOTO]=$tree->Childs[$id]->IF_TRUE_GOTO;
+					  		//$tree->Viev_Zpc_found[$tree->Childs[$id]->IF_TRUE_GOTO]=$tree->Childs[$id]->IF_TRUE_GOTO; //zeby tego rekordu nie przetwarzal ? TODO ?
+					  		$obj=DB::get_by_id('CRM_PROCES',$tree->Childs[$id]->IF_TRUE_GOTO);
+					  		$tree->Viev_Zpc[$tree->Childs[$id]->IF_TRUE_GOTO]->DESC="{".$obj->ID."}".substr($obj->DESC,0,50);
+					  		if($tree->Childs[$id]->GOTO_FLAG=='GOTO_AND_RETURN') {	 //dodanie zwrotnej strzalki TODO dac inny typ strzalki!!
+					  		 $tree->Viev_Zpc[$tree->Childs[$id]->IF_TRUE_GOTO]->EXTERNAL_LINK[$root_id]=$root_id;
+					  		 //echo "<br> GOTO_AND_RETURN!!!".$tree->Childs[$id]->IF_TRUE_GOTO." -- ".$root_id;
+					  		}
+					  		
+					  	}
+				  	} 
+
+	      
+      }
+      
+      function build_path_zoom_proces_cut(&$tree,$init,$path_zpc=array()) {
+	      //funkcja do pokazania procesow wyplaszczonych, z wypunktowanymi rozgalezieniami - buduje drzewo w sposob inteligentny
+		  //szukam rekordow z gory do pierwszego CUT
+		  foreach($tree->Childs as $id=>$obj) {
+		  		if(!isset($tree->Viev_Zpc_found[$id])) {
+			  		//echo "<br>szukam parentow dla ".$id;
+				  	self::search_parent_ids_till_cut($tree,$id,$find);
+			//	  	echo "<br>find:238 for id {$id} ".implode(',', $find)." EOL. ";
+				  	if(empty($find))  { //echo " - Find empty for ".$id."  adding ".$tree->Childs[$id]->PARENT;
+					  	//trzeba przeskanowac w find jest dany parent -> Viev_Zpc_found
+					  	//	if(isset($tree->Childs[$id]->PARENT))
+					  	//		$tree->Viev_Zpc_Parent[$id]=$tree->Childs[$id]->PARENT;
+				  	}
+				  	foreach($find as $find_id) {
+				  		$tree->Viev_Zpc_found[$find_id]=$find[0];
+				  		if($find_id<>$find[0]) $tree->Viev_Zpc_Parent[$find_id]=$find[0]; //todo moze byc to z bledem jak nadrzedny bedzie zbitym ciagiem
+				  		else $tree->Viev_Zpc_Parent[$find_id]=$tree->Childs[$find_id]->PARENT;
+				  	}
+				  	$tree->Viev_Zpc[$id]->PATH=$find;
+				  	//wykrycie parenta polega na znalezieniu jego naturalnego parenta i poszukaniu w ktorej jest grupie
+				  	//$tree->Viev_Zpc[$id]->PARENT=$tree->Viev_Zpc_Parent[$tree->Childs[$id]->PARENT]  ;
+				  	$obj=DB::get_by_id('CRM_PROCES',$id);
+				  	$tree->Viev_Zpc[$id]->DESC="{".$id."}".substr($obj->DESC,0,50)."...";
+				  					  	unset($find);
+			  	}
+			  	
+		  	
+		  }
+		  		//parenty trzeba zrobic za drugim rzutem
+			  	foreach($tree->Viev_Zpc as $id=>$obj) {
+			 // 		echo "<br>256 wykrywam parenta dla {$id}";
+				  				    {
+					  	//skanujemy wszystkie rekordy w Viev_Zpc w celu znalezienia czy danego ID parent nie jest w ktoryms z ID - tego szukamy
+					  if(!isset($obj->PARENT)) //tylko dla tych ktore nie maja parentow
+					  	foreach($tree->Viev_Zpc as $id_=>$obj_) {
+						  	if(isset($tree->Childs[$id_]->SOURCE))
+						  	if(in_array($tree->Childs[$id]->PARENT, $obj_->PATH)) {
+						  	//	echo "<br>206 Skanuje dla brakujacego parenta dla ".$id." i znalazlem".$id_;
+						  		$tree->Viev_Zpc[$id]->PARENT=$id_;
+						  	} //else  echo "<br>&nbsp;&nbsp;   199: nie znalazlem w ".$id_." path:".implode(',', $obj_->PATH);
+					  	}
+					  	
+					  if(!isset($tree->Viev_Zpc[$id]->PARENT)) { //jezeli nie znaleziono ta metoda to znaczy ze parent jest naturalny
+						  $tree->Viev_Zpc[$id]->PARENT=$tree->Childs[$id]->PARENT;
+						//  echo " - 204 ustawilem ostatecznie ".$tree->Childs[$id]->PARENT;
+					  }
+					  	
+				  	}
+				  	
+			  	}
+		  
+		  	      
+      }
+      
+      
+}	 
+
 
 function GRAPH_VIEW_PROCES() {
+
+
 	$id_proces = V::get('id_proces', '', $_REQUEST, 'int');
 	$id_zasob = V::get('id_zasob', '', $_REQUEST, 'int');
 
+//	$id_proces = $_REQUEST['id_proces'];
+	//TOOD bug funkcji V nie mozna dac INT=0!!!
+//	if (empty($id_proces)) {
+//		echo'<p class="err box box-red">'."Wrong ID".'</p>';
+//		return;
+//	}
+
 	$db = DB::getDB();
+	//$proces = $db->get_by_id('CRM_PROCES', $id_proces);
+	//if (empty($proces)) {
+	//	echo'<p class="err box box-red">'."Process {$id_proces} not exists".'</p>';
+	//	return;
+	//}
 
 	$ajaxTask = V::get('ajaxTask', '', $_REQUEST);
 	if ($ajaxTask == 'getInfo') {
@@ -15,48 +276,47 @@ function GRAPH_VIEW_PROCES() {
 		$id_zasob = V::get('id_zasob', '', $_REQUEST, 'int');
 
 		if ($id > 0) {
+			//TODO najlepiej wyslac to od razu w jsonie i przekazac jakos do uzycia do wykresu!
 			$step = $db->get_by_id('CRM_PROCES', $id);
-			$cp = new GraphViewProcessParser();
-			$tree = $cp->build_proces_init_tree($id);
-			$cp->build_tree_flat_info($tree, null);
-			$cp->detect_tree_where_to_detail_cut($tree);
-			$cp->build_path_zoom_proces_cut($tree, $id);
+						 $cp=new crm_proces_paser;
+						 $tree=$cp->build_proces_init_tree($id);
+						 $cp->build_tree_flat_info($tree,null);
+						 $cp->detect_tree_where_to_detail_cut($tree);
+						 $cp->build_path_zoom_proces_cut($tree,$id);
+
 
+
+			//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($step);echo'</pre>';
 			?>
-			<?php if ($step->TYPE == 'PROCES_INIT') : ?>
-				<a href="?FUNCTION_INIT=GRAPH_VIEW_PROCES&id_proces=<?php echo $step->PARENT_ID; ?>&PROCES_INIT_SCAN=1">Widok mapy <?php echo $step->PARENT_ID; ?></a>
-			<?php endif; ?>
-			<?php if (empty($_REQUEST['RESOURCES'])) : ?>
-				<a href="?FUNCTION_INIT=GRAPH_VIEW_PROCES&id_proces=<?php echo $step->PARENT_ID; ?>&PROCES_INIT_SCAN=1&RESOURCES=1&id_zasob=<?php echo $id_zasob; ?>"> | mapa z zasobami</a>
-			<?php endif; ?>
-			<p>
-				<span style="color:red">
-					<a href="?FUNCTION_INIT=GRAPH_VIEW_PROCES&id_proces=<?php echo $id; ?>"><?php echo $step->ID; ?></a>
-					- <?php echo $step->DESC; ?> <?php echo $step->DESC; ?>
-				</span>
-				| <a href="?FUNCTION_INIT=GRAPH_VIEW_PROCES&id_proces=<?php echo $id; ?>&RESOURCES=1&id_zasob=<?php echo $id_zasob; ?>"> widok procesu z zasobami </a>
+			<?php if($step->TYPE=='PROCES_INIT') echo "<a href=?FUNCTION_INIT=GRAPH_VIEW_PROCES&id_proces={$step->PARENT_ID}&PROCES_INIT_SCAN=1>Widok mapy {$step->PARENT_ID}</a>"; ?>
+			<?php if(empty($_REQUEST['RESOURCES'])) echo "<a href=?FUNCTION_INIT=GRAPH_VIEW_PROCES&id_proces={$step->PARENT_ID}&PROCES_INIT_SCAN=1&RESOURCES=1&id_zasob={$id_zasob}> | mapa z zasobami</a>"; ?>
+			<p> <?php echo "<font color=red><a href=?FUNCTION_INIT=GRAPH_VIEW_PROCES&id_proces={$id}>".$step->ID."</a> - ".$step->DESC; ?>  <?php echo $step->DESC; ?></font>
+				<?php echo "| <a href=?FUNCTION_INIT=GRAPH_VIEW_PROCES&id_proces={$id}&RESOURCES=1&id_zasob={$id_zasob}> widok procesu z zasobami </a> ";?>
 			</p>
 			<p><?php echo $step->OPIS; ?></p>
-				<?php foreach ($tree->Viev_Zpc[$id]->PATH as $ind=>$id_include) : ?>
-					<?php if ($ind == 0) continue; //pierwszy wiersz wyswietlony wyzej ?>
-					<?php $step = $db->get_by_id('CRM_PROCES', $id_include); ?>
-					<p><b><?php echo $step->ID; ?></a> - <?php echo $step->DESC; ?></b> <font size="-3"><?php echo $step->OPIS; ?></font></p>
-				<?php endforeach; ?>
+			 	<?php foreach ($tree->Viev_Zpc[$id]->PATH as $ind=>$id_include) {
+			 					if($ind==0) continue; //pierwszy wiersz wyswietlony wyzej
+				 				$step = $db->get_by_id('CRM_PROCES', $id_include);
+				 			    echo "<p><b>".$step->ID."</a> - ".$step->DESC."</b> <font size=-3>".$step->OPIS."</font></p>";
+				 			 } ?>
 			<?php
-		}
-		else {//zasob
+		} else { //zasob
 			$id = V::get('id', 0, $_REQUEST);
-			if ($id[0] == 'Z') {
-				$zasob = ProcesHelper::getZasobInfo(4975);
-				echo "Zasob: [".$zasob->ID."], Typ: ".$zasob->TYPE.", Nazwa: ".$zasob->DESC." (".$zasob->DESC_PL.")<br>".$zasob->OPIS;
-				echo "<hr> Nadrzędny: Zasob: [".$zasob->P__ID."] , Typ: ".$zasob->P__TYPE.", Nazwa: ".$zasob->P__DESC." (".$zasob->P__DESC_PL.")<br>".$zasob->P__OPIS;
-			}
+				if($id[0]=='Z') {
+					Lib::loadClass('ProcesHelper');
+					$zasob=ProcesHelper::getZasobInfo(4975);
+					
+					echo "Zasob: [".$zasob->ID."], Typ: ".$zasob->TYPE.", Nazwa: ".$zasob->DESC." (".$zasob->DESC_PL.")<br>".$zasob->OPIS;
+					echo "<hr> Nadrzędny: Zasob: [".$zasob->P__ID."] , Typ: ".$zasob->P__TYPE.", Nazwa: ".$zasob->P__DESC." (".$zasob->P__DESC_PL.")<br>".$zasob->P__OPIS;
+				}
+
+			
 		}
 		exit;
 	}
 
 	$graph = new stdClass();
-	$graph->htmlID = "graph_proces_id_{$id_proces}";
+	$graph->htmlID = 'graph_proces_id_' . $id_proces;
 	$graph->procesTreeFlat = array();
 	$graph->procesTreeGoto = array();
 	$graph->treeItems = array();
@@ -64,134 +324,292 @@ function GRAPH_VIEW_PROCES() {
 	$graph->elements = new stdClass();
 	$graph->elements->nodes = array();
 	$graph->elements->edges = array();
-
-	function graph__addNodeID($id, &$graph, $name = null, $path, $parent = null, $type, $once = null) {
-		if (!array_key_exists($id, $graph->treeItems)) {
-			$graph->treeItems[$id] = true;
-			if (empty($name)) $name = $id;
-			if (!empty($path)) {
-				$name = $name . " " . implode(',', $path);
-			}
-			$type_init = null;
-			if ($type == 'PROCES_INIT') $type_init = 'procesInit';
-			else if($type == 'RESOURCE') $type_init = 'RESOURCE';
-
-			$graph->elements->nodes[] = array('data' => array('id' => "{$id}", 'name' => $name, 'type' => $type_init));
-		}
-		if (!empty($parent)) {
-			if (isset($once)) {
-				if (!isset($graph->used_elements[$parent][$id]) && !isset($graph->used_elements[$id][$parent])) {
-					$graph->elements->edges[] = array('data' => array('source' => $parent, 'target' => $id));
+	/*	elements: {
+				nodes: [
+					{ data: { id: 'j', name: 'Jerry' } },
+					{ data: { id: 'e', name: 'Elaine' } },
+					{ data: { id: 'k', name: 'Kramer' } },
+					{ data: { id: 'g', name: 'George' } }
+				],
+				edges: [
+					{ data: { source: 'j', target: 'e' } },
+					{ data: { source: 'j', target: 'k' } },
+					{ data: { source: 'j', target: 'g' } },
+					{ data: { source: 'e', target: 'j' } },
+					{ data: { source: 'e', target: 'k' } },
+					{ data: { source: 'k', target: 'j' } },
+					{ data: { source: 'k', target: 'e' } },
+					{ data: { source: 'k', target: 'g' } },
+					{ data: { source: 'g', target: 'j' } }
+				]
+			},
+	 */
+
+			function graph__addNodeID($id, &$graph,$name=null,$path,$parent=null,$type,$once=null) {
+				if (!array_key_exists($id, $graph->treeItems)) {
+					$graph->treeItems[$id]= true;
+					if(empty($name)) $name=$id;
+					if(!empty($path))  { $name=$name." ".implode(',', $path);// $path=array(); 
+					}
+					//DEBUG_S(-3,'added id,name,path,parent',array($id,$name,$path,$parent),__FILE__,__FUNCTION__,__LINE__);
+		
+					if($type=='PROCES_INIT') $type_init='procesInit'; 
+					else if($type=='RESOURCE') $type_init=$type;
+					else $type_init=null;
+				//	echo "<br>".$type_init." ".$id." ".$name;
+					
+					
+				//	$name=str_replace(array('ś','ż',"ś"), array('s','z',"xxx"), $name);
+
+					
+					$graph->elements->nodes[] = array('data'=>array('id'=>"".$id."", 'name'=>$name , 'type'=>$type_init));
+					
+	
+					//echo "<br> w AddNode:ID".$id." parent".$parent;
 				}
-			} else {
-				$graph->elements->edges[] = array('data' => array('source' => $parent, 'target' => $id));
+				   if(!empty($parent)) {
+					   if(isset($once)) {
+						   if(!isset($graph->used_elements[$parent][$id]) && !isset($graph->used_elements[$id][$parent])) {
+						   		$graph->elements->edges[] = array('data'=>array('source'=>$parent, 'target'=>$id  ));
+						   	}
+					   } else {
+						   		$graph->elements->edges[] = array('data'=>array('source'=>$parent, 'target'=>$id  ));
+					   }
+					   
+						$graph->used_elements[$parent][$id]=1;
+						$graph->used_elements[$id][$parent]=1;
+						
+
+				   }
+		
 			}
-			$graph->used_elements[$parent][$id] = 1;
-			$graph->used_elements[$id][$parent] = 1;
+		 
+	 
+	 
+	 
+	 
+	$id_zasob = V::get('id_zasob', '', $_REQUEST, 'int');	
+
+	 $PROCES_INIT_SCAN = V::get('PROCES_INIT_SCAN', '', $_REQUEST, 'int');
+	if(!empty($PROCES_INIT_SCAN))	 {
+	     //mapa procesow
+	
+		$cp=new crm_proces_paser;
+
+	$PROCES_INIT_SCAN_STANOWISKO = V::get('PROCES_INIT_SCAN_STANOWISKO', '', $_REQUEST, 'int');		
+	$PROCES_INIT_SCAN_USER = V::get('PROCES_INIT_SCAN_USER', '', $_REQUEST, 'int');		
+	
+	if(!empty($PROCES_INIT_SCAN_STANOWISKO))  {
+		Lib::loadClass('ProcesHelper');
+		$proces_list_obj = ProcesHelper::get_procesy_by_stanowiska( array($PROCES_INIT_SCAN_STANOWISKO) );
+		foreach($proces_list_obj as $obj) {
+			$init[$obj->ID]=$obj->ID;
+		}
+    } else if(!empty($PROCES_INIT_SCAN_USER))  {
+		Lib::loadClass('UsersHelper');
+		$proces_list_obj = UsersHelper::get_group_by_user($PROCES_INIT_SCAN_USER,array('SHOW_IN_PERIOD_MARK'=>'YES'));
+		
+		foreach($proces_list_obj as $obj) {
+			$init[$obj->ID]=$obj->ID;
 		}
+    } else if(!empty($id_zasob)) {
+		Lib::LoadClass('ProcesHelper');
+	    $init=ProcesHelper::get_proces_init_by_zasob_id($id_zasob);
+    } else  {
+	    $init=$cp->get_proces_init($id_proces);
 	}
 
-	$id_zasob = V::get('id_zasob', '', $_REQUEST, 'int');
 
-	$PROCES_INIT_SCAN = V::get('PROCES_INIT_SCAN', '', $_REQUEST, 'int');
-	if (!empty($PROCES_INIT_SCAN)) {
-		$cp = new GraphViewProcessParser();
+	DEBUG_S(3,'lista procesow init',$init,__FILE__,__FUNCTION__,__LINE__);
+		foreach($init as $id_proces) {
+
+			 $tree=$cp->build_proces_init_tree($id_proces);
+
+			 $cp->build_tree_flat_info($tree,null);
+		     $cp->detect_tree_where_to_detail_cut($tree,'nocut');
+			 $cp->build_path_zoom_proces_cut($tree,$id_proces);
+			
+			
+			 DEBUG_S(3,'get_proces_init',$init);
+			 DEBUG_S(3,'tree->childs',$tree->Childs);
+			 DEBUG_S(3,'tree->Parents',$tree->Parents);
+			 DEBUG_S(3,'tree->Viev_Zpc',$tree->Viev_Zpc);
+			 DEBUG_S(3,'tree->Viev_Zpc_Parent',$tree->Viev_Zpc_Parent);
+			 DEBUG_S(3,'tree->get_resources_by_proceses_id',$tree->get_resources_by_proceses_id);
+
+		
+			 	  graph__addNodeID(0, $graph,$name=null,$path,null);
+			 foreach($tree->Viev_Zpc as $id=>$obj) {
+				  graph__addNodeID($id, $graph,$obj->DESC,null,((isset($obj->PARENT)) ? $obj->PARENT : null),$tree->Childs[$id]->TYPE);
+				//  foreach($obj->INTERNAL_LINK as $link) graph__addNodeID($id, &$graph,$tree->Viev_Zpc[$link]->DESC,null,$link,null);
+				  foreach($obj->EXTERNAL_LINK as $link) graph__addNodeID($link, $graph,$tree->Viev_Zpc[$link]->DESC,null,$id,'PROCES_INIT');
+			 }
+		
+		
+			 if(!empty($_REQUEST['RESOURCES'])) {
+			 
+			 $resources=$cp->get_resources_by_proceses_id($tree->Childs,$id_proces,$id_zasob);
+				 foreach($resources['PARENT_ID'] as $ID=>$DESC) {
+					  graph__addNodeID("Z_".$ID, $graph,$DESC,null,null,'RESOURCE');
+				  }
+				  foreach($resources['ID'] as $ID=>$DESC) {
+					  graph__addNodeID("Z_".$ID, $graph,$DESC['DESC'],null,$id_proces,'RESOURCE');
+					  graph__addNodeID("Z_".$ID, $graph,$DESC['DESC'],null,"Z_".$DESC['PARENT_ID'],'RESOURCE','once');
+				  }
+			 }
+
+
+			 
+			 unset($tree);
+		}
+		
+		
+	}else {
+
+		 //dokladnie 1 proces
+		 $cp=new crm_proces_paser;
+
+		 $tree=$cp->build_proces_init_tree($id_proces);
+		 $cp->build_tree_flat_info($tree,null);
+	     $cp->detect_tree_where_to_detail_cut($tree);
+		 $cp->build_path_zoom_proces_cut($tree,$id_proces);
+		 DEBUG_S(3,'get_proces_init',$init);
+		 DEBUG_S(3,'tree->childs',$tree->Childs);
+		 DEBUG_S(3,'tree->Parents',$tree->Parents);
+		 DEBUG_S(-3,'tree->Viev_Zpc',$tree->Viev_Zpc);
+		 DEBUG_S(3,'tree->Viev_Zpc_Parent',$tree->Viev_Zpc_Parent);
+		 DEBUG_S(3,'tree->Viev_Zpc_Parent_cut',$tree->Viev_Zpc_Parent_cut);
+		 DEBUG_S(3,'tree->Viev_Zpc_found',$tree->Viev_Zpc_found);	
+		 	  graph__addNodeID(0, $graph,$name=null,$path,null);
+		 foreach($tree->Viev_Zpc as $id=>$obj) {
+		 			    //echo "<br> tst edg:".$id." / ".$tree->Childs[$id]->PARENT;
+		 			   // : $tree->Viev_Zpc[$tree->Childs[$id]->PARENT])
+			  graph__addNodeID($id, $graph,$obj->DESC,null,((isset($obj->PARENT)) ? $obj->PARENT : null),$tree->Childs[$id]->TYPE);
+			  foreach($obj->INTERNAL_LINK as $link) graph__addNodeID($id, $graph,$tree->Viev_Zpc[$link]->DESC,null,$link,null);
+			  foreach($obj->EXTERNAL_LINK as $link) graph__addNodeID($link, $graph,$tree->Viev_Zpc[$link]->DESC,null,$id,'PROCES_INIT');
+	
+		 }
+		  if(!empty($_REQUEST['RESOURCES'])) {
+			 $resources=$cp->get_resources_by_proceses_id($tree->Childs,$id_proces,$id_zasob);
+				 foreach($resources['PARENT_ID'] as $ID=>$DESC) {
+					  graph__addNodeID("Z_".$ID, $graph,$DESC,null,null,'RESOURCE');
+				  }
+				  foreach($resources['ID'] as $ID=>$DESC) {
+					  graph__addNodeID("Z_".$ID, $graph,$DESC['DESC'],null,$id_proces,'RESOURCE');
+					  graph__addNodeID("Z_".$ID, $graph,$DESC['DESC'],null,"Z_".$DESC['PARENT_ID'],'RESOURCE');
+				  }
+			 }
+
+		 
+		 
+		 
+		 
+	 }
+	 
+	 
+ 
+	 
+/*
+	$db = DB::getDB();
+	
+	$sql= "select p.`ID`,`DESC` from `CRM_PROCES` as p where  p.`A_STATUS` in('WAITING','NORMAL') and p.`TYPE`='PROCES_INIT' and ID=994 limit 1";
+	$res=DB::query($sql);
+	while($h=DB::fetch($res)) {
+		SearchParentsWithExits($h->ID,$h->ID,$graph,'Proces '.$h->ID,0);
+		//graph__addNodeID($h->ID, $graph);
+		graph__addNodeID('1', $graph,'1');
 
-		$PROCES_INIT_SCAN_STANOWISKO = V::get('PROCES_INIT_SCAN_STANOWISKO', '', $_REQUEST, 'int');
-		$PROCES_INIT_SCAN_USER = V::get('PROCES_INIT_SCAN_USER', '', $_REQUEST, 'int');
+	//	graph__addNodeID($h->ID, $graph,$h->ID);
+//		graph__addNodeID('100', $graph,'100');
+		//$graph->treeItems[$h->ID] = true;
+		//$graph->treeItems[101] = true;
 
-		if (!empty($PROCES_INIT_SCAN_STANOWISKO)) {
-			$PROCES_INIT_SCAN_STANOWISKA = array($PROCES_INIT_SCAN_STANOWISKO);
-			$proces_list_obj = ProcesHelper::get_procesy_by_stanowiska($PROCES_INIT_SCAN_STANOWISKA);
-			foreach ($proces_list_obj as $obj) {
-				$init[$obj->ID] = $obj->ID;
-			}
-		} else if(!empty($PROCES_INIT_SCAN_USER))  {
-			$proces_list_obj = UsersHelper::get_group_by_user($PROCES_INIT_SCAN_USER, array('SHOW_IN_PERIOD_MARK' => 'YES'));
-			foreach ($proces_list_obj as $obj) {
-				$init[$obj->ID] = $obj->ID;
-			}
-		} else if(!empty($id_zasob)) {
-			$init = ProcesHelper::get_proces_init_by_zasob_id($id_zasob);
+//		$graph->elements->nodes[] = array('data'=>array('id'=>$h->ID, 'name'=>$h->ID , 'type'=>'procesInit'));
+//		$graph->elements->nodes[] = array('data'=>array('id'=>101, 'name'=>101 , 'type'=>'procesInit'));
+//		$graph->elements->edges[] = array('data'=>array('source'=>994, 'target'=>101));
+
+
+	}
+*/
+	foreach($graph->elements->nodes as $var) {
+	//	echo "<br>\n NODE".$var[data][id];
+		$nodes[$var[data][id]]=$var[data][id];
+	}
+	foreach($graph->elements->edges as $var) {
+		//echo "<br>\n".$var[data][source]." ".$var[data][target]." ";
+		if(!isset($nodes[$var[data][source]]))  echo "<br>FAIL1 ".$var[data][source];
+		if(!isset($nodes[$var[data][target]]))  echo "<br>FAIL2 ".$var[data][target];
+	}
+
+	DEBUG_S(3,'nodes',$graph->elements->nodes);
+	DEBUG_S(3,'edges',$graph->elements->edges);
+/*		
+	$sql = "select p.`ID`, p.`PARENT_ID`
+			from `CRM_PROCES` as p
+			where p.`A_STATUS` in('WAITING','NORMAL')
+	";
+	$res = $db->query($sql);
+	while ($r = $db->fetch($res)) {
+		$graph->procesTreeFlat[$r->PARENT_ID] []= $r->ID;
+	}
+
+	$sql = "select p.`IF_TRUE_GOTO` as ID, p.`ID` as PARENT_ID
+			from `CRM_PROCES` as p
+			where p.`A_STATUS` in('WAITING','NORMAL')
+				and p.IF_TRUE_GOTO>0
+		--		and p.IF_TRUE_GOTO_FLAG='GOTO_AND_RETURN'
+	";
+	
+	$res = $db->query($sql);
+	while ($r = $db->fetch($res)) {
+		$graph->procesTreeGoto[$r->PARENT_ID] []= $r->ID;
+	}
+
+
+	function createGraphRec($id, $tree, &$graph, $lvl = 0) {
+		$graph->treeItems[$id] = true;
+		settype($id, 'string');
+		if ($id == 3122) {
+			$graph->elements->nodes[] = array('data'=>array('id'=>$id, 'name'=>$id, 'type'=>'procesInit', 'lvl'=>$lvl));
 		} else {
-			$init = $cp->get_proces_init($id_proces);
+			$graph->elements->nodes[] = array('data'=>array('id'=>$id, 'name'=>$id, 'lvl'=>$lvl));
 		}
-		DEBUG_S(3,'lista procesow init',$init,__FILE__,__FUNCTION__,__LINE__);
-		foreach ($init as $id_proces) {
-			$tree = $cp->build_proces_init_tree($id_proces);
-			$cp->build_tree_flat_info($tree, null);
-			$cp->detect_tree_where_to_detail_cut($tree, 'nocut');
-			$cp->build_path_zoom_proces_cut($tree, $id_proces);
-			DEBUG_S(3,'get_proces_init',$init);
-			DEBUG_S(3,'tree->childs',$tree->Childs);
-			DEBUG_S(3,'tree->Parents',$tree->Parents);
-			DEBUG_S(3,'tree->Viev_Zpc',$tree->Viev_Zpc);
-			DEBUG_S(3,'tree->Viev_Zpc_Parent',$tree->Viev_Zpc_Parent);
-			DEBUG_S(3,'tree->get_resources_by_proceses_id',$tree->get_resources_by_proceses_id);
-			graph__addNodeID(0, $graph, $name = null, $path, null);
-			foreach ($tree->Viev_Zpc as $id => $obj) {
-				graph__addNodeID($id, $graph, $obj->DESC, null, ((isset($obj->PARENT))? $obj->PARENT : null), $tree->Childs[$id]->TYPE);
-				foreach ($obj->EXTERNAL_LINK as $link) {
-					graph__addNodeID($link, $graph, $tree->Viev_Zpc[$link]->DESC, null, $id, 'PROCES_INIT');
-				}
-			}
-			if (!empty($_REQUEST['RESOURCES'])) {
-				$resources = $cp->get_resources_by_proceses_id($tree->Childs, $id_proces, $id_zasob);
-				foreach ($resources['PARENT_ID'] as $ID => $DESC) {
-					graph__addNodeID("Z_{$ID}", $graph, $DESC, null, null, 'RESOURCE');
-				}
-				foreach ($resources['ID'] as $ID => $DESC) {
-					graph__addNodeID("Z_{$ID}", $graph, $DESC['DESC'], null, $id_proces, 'RESOURCE');
-					graph__addNodeID("Z_{$ID}", $graph, $DESC['DESC'], null, "Z_{$DESC['PARENT_ID']}", 'RESOURCE', 'once');
-				}
-			}
-			unset($tree);
+
+		if ($lvl > 1) {
+		//	return;
 		}
-	}
-	else {
-		$cp = new GraphViewProcessParser();
-		$tree = $cp->build_proces_init_tree($id_proces);
-		$cp->build_tree_flat_info($tree, null);
-		$cp->detect_tree_where_to_detail_cut($tree);
-		$cp->build_path_zoom_proces_cut($tree, $id_proces);
-		DEBUG_S(3,'get_proces_init',$init);
-		DEBUG_S(3,'tree->childs',$tree->Childs);
-		DEBUG_S(3,'tree->Parents',$tree->Parents);
-		DEBUG_S(-3,'tree->Viev_Zpc',$tree->Viev_Zpc);
-		DEBUG_S(3,'tree->Viev_Zpc_Parent',$tree->Viev_Zpc_Parent);
-		DEBUG_S(3,'tree->Viev_Zpc_Parent_cut',$tree->Viev_Zpc_Parent_cut);
-		DEBUG_S(3,'tree->Viev_Zpc_found',$tree->Viev_Zpc_found);
-		graph__addNodeID(0, $graph, $name = null, $path, null);
-		foreach ($tree->Viev_Zpc as $id => $obj) {
-			graph__addNodeID($id, $graph, $obj->DESC, null, ((isset($obj->PARENT))? $obj->PARENT : null), $tree->Childs[$id]->TYPE);
-			foreach ($obj->INTERNAL_LINK as $link) {
-				graph__addNodeID($id, $graph, $tree->Viev_Zpc[$link]->DESC, null, $link, null);
-			}
-			foreach ($obj->EXTERNAL_LINK as $link) {
-				graph__addNodeID($link, $graph, $tree->Viev_Zpc[$link]->DESC, null, $id, 'PROCES_INIT');
+
+		if (!empty($tree[$id])) {
+			foreach ($tree[$id] as $vChildID) {
+				$graph->elements->edges[] = array('data'=>array('source'=>$id, 'target'=>$vChildID));
+				createGraphRec($vChildID, $tree, $graph, $lvl + 1);
 			}
 		}
-		if (!empty($_REQUEST['RESOURCES'])) {
-			$resources = $cp->get_resources_by_proceses_id($tree->Childs, $id_proces, $id_zasob);
-			foreach ($resources['PARENT_ID'] as $ID => $DESC) {
-				graph__addNodeID("Z_{$ID}", $graph, $DESC, null, null, 'RESOURCE');
+	}
+
+	createGraphRec($id_proces, $graph->procesTreeFlat, $graph);
+
+*/
+/*
+	// addGraphGoto
+	foreach ($graph->procesTreeGoto as $kID => $vGotoIds) {
+		//$graph->treeItems[$id] = true;
+		if (array_key_exists($kID, $graph->treeItems)) {
+			foreach ($vGotoIds as $vGotoID) {
+				graph__addNodeID($vGotoID, $graph);
+				$graph->elements->edges[] = array('data'=>array('source'=>$kID, 'target'=>$vGotoID, 'type'=>'GOTO'));
 			}
-			foreach ($resources['ID'] as $ID => $DESC) {
-				graph__addNodeID("Z_{$ID}", $graph, $DESC['DESC'], null, $id_proces, 'RESOURCE');
-				graph__addNodeID("Z_{$ID}", $graph, $DESC['DESC'], null, "Z_{$DESC['PARENT_ID']}", 'RESOURCE');
+		} else {
+			foreach ($vGotoIds as $vGotoID) {
+				if (array_key_exists($vGotoID, $graph->treeItems)) {
+//echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r("TODO: add node ($kID); add edge from $kID to $vGotoID");echo'</pre>';
+					graph__addNodeID($kID, $graph);
+					//$graph->elements->edges[] = array('data'=>array('source'=>$kID, 'target'=>$vGotoID, 'type'=>'GOTO'));
+				}
 			}
 		}
 	}
-
-	foreach($graph->elements->nodes as $var) {
-		$nodes[$var['data']['id']] = $var['data']['id'];
-	}
-	foreach($graph->elements->edges as $var) {
-		if (!isset($nodes[$var['data']['source']])) echo "<br>FAIL1 ".$var['data']['source'];
-		if (!isset($nodes[$var['data']['target']])) echo "<br>FAIL2 ".$var['data']['target'];
-	}
-	DEBUG_S(3,'nodes',$graph->elements->nodes);
-	DEBUG_S(3,'edges',$graph->elements->edges);
+*/
 ?>
 <style type="text/css">
 #<?php echo $graph->htmlID; ?>_wrap {
@@ -209,7 +627,9 @@ function GRAPH_VIEW_PROCES() {
 }
 #<?php echo $graph->htmlID; ?>_wrap .actions { position:absolute; top:20px; left:-40px; margin:0; padding:0; list-style:none; }
 #<?php echo $graph->htmlID; ?>_wrap .actions button { border-radius:0; background:#fff; border:1px solid #ccc; }
+
 </style>
+
 <script src="./stuff/cytoscape.js/arbor.js"></script>
 <script src="./stuff/cytoscape.js/cytoscape.js"></script>
 <script>
@@ -356,216 +776,3 @@ jQuery(document).ready(function(){
 
 <?php
 }
-
-class GraphViewProcessParser {
-
-// var $this->get_proces_init=array();
-// [proces_init]  - A
-//    [step]      - flat 0
-//    [step]      - flat 3 , tree 2 , cut
-//     [step]     - flat 0 , tree 0
-//     [step]     - flat 1 , tree 1
-//       [step]   - flat 1 , tree 1
-//         [step] - flat 0 , tree 0
-//     [step]     - flat 1 , tree 1
-//       [step]   - flat 0 , tree 0
-
-	public function get_proces_init($id_proces) {
-		$db = DB::getDB();
-		$sql = "select
-				p.`ID`
-				, p.`DESC`
-			from `CRM_PROCES` as p
-				left join `_CRM_PROCES_INIT_STATS` as cs on(cs.`ID` = p.`ID`)
-			where
-				p.`A_STATUS` in('WAITING','NORMAL')
-				and p.`TYPE`='PROCES_INIT'
-				and (cs.`path` like '%/{$id_proces}/%' or cs.`path` like '%/{$id_proces}'  or cs.`path` like '{$id_proces}/%')
-		";
-		$res = $db->query($sql);
-		while ($h = $db->fetch($res)) {
-			$this->get_proces_init[] = $h->ID;
-		}
-		return $this->get_proces_init;
-	}
-
-	public function build_proces_init_tree($id_proces) {
-		$db = DB::getDB();
-		$tree->Childs[$id_proces]->PARENT = 0;
-		$tree->Childs[$id_proces]->SOURCE = 'build_tree_for_proces';
-		$tree->Parents[0]->CHILD[$id_proces] = $id_proces;
-		$obj = $db->get_by_id('CRM_PROCES', $id_proces);
-		$tree->Childs[$id_proces]->TYPE = $obj->TYPE;
-		$this->build_tree_for_proces($tree, $id_proces, $id_proces);
-		return $tree;
-	}
-
-	public function build_tree_for_proces(&$tree, $cursor, $init_once = null) {
-		$db = DB::getDB();
-		$sqlOr = (!empty($init_once))? " or cp.ID={$init_once} " : "";
-		$sql = "select
-			cp.`ID`
-			, cp.`IF_TRUE_GOTO`
-			, cp.`IF_TRUE_GOTO_FLAG`
-			, cp.`TYPE`
-		from `CRM_PROCES` as cp
-		where
-			(cp.PARENT_ID={$cursor} {$sqlOr})
-			and  cp.`A_STATUS` in('WAITING','NORMAL')
-		";
-		$res = $db->query($sql);
-		while ($h = $db->fetch($res)) {
-			if (empty($init_once)) $tree->Childs[$h->ID]->PARENT = $cursor;
-			if (empty($init_once)) $tree->Parents[$cursor]->CHILD[$h->ID] = $h->ID;
-			$tree->Childs[$h->ID]->TYPE = $h->TYPE;
-			$tree->Childs[$h->ID]->SOURCE = 'build_tree_for_proces';
-			if ($h->IF_TRUE_GOTO > 0) {
-				$tree->Childs[$h->ID]->GOTO_FLAG = $h->IF_TRUE_GOTO_FLAG;
-				$tree->Childs[$h->ID]->IF_TRUE_GOTO = $h->IF_TRUE_GOTO;
-				$tree->Childs[$h->IF_TRUE_GOTO]->IS_EXECUTED_BY[$h->ID] = $h->ID;
-			}
-			$this->build_tree_for_proces($tree, $h->ID, null);
-		}
-	}
-
-	public function get_resources_by_proceses_id($id_proces_obj, $id_proces, $filter_zasob) {
-		$db = DB::getDB();
-		$filter = "";
-		if (is_array($filter_zasob)) {
-			$filter = " and cz.ID in (".implode(',', $filter_zasob).") ";
-		}
-		else if (!empty($filter_zasob)) {
-			$filter = " and cz.ID={$filter_zasob}";
-		}
-		$sql = "select
-				cz.ID
-				, cz.PARENT_ID
-				, cz.`DESC`
-				, cz.`TYPE`
-				, czp.`DESC` as DESC_czp
-				, czp.`TYPE` as TYPE_czp
-			from CRM_WSKAZNIK as cw
-				left join CRM_LISTA_ZASOBOW as cz on(cz.ID=cw.ID_ZASOB)
-				left join CRM_LISTA_ZASOBOW as czp on(czp.ID=cz.PARENT_ID)
-			where cw.ID_PROCES in(".implode(',', array_keys($id_proces_obj)).")
-				and cw.A_STATUS in ('NORMAL','WAITING')
-				and czp.`TYPE` in ('TABELA')
-				{$filter}
-		";
-		$res = $db->query($sql);
-		while ($h = $db->fetch($res)) {
-			$found['ID'][$h->ID]['PARENT_ID'] = $h->PARENT_ID;
-			$found['ID'][$h->ID]['DESC'] = $h->DESC;
-			$found['PARENT_ID'][$h->PARENT_ID] = $h->DESC_czp;
-		}
-		return $found;
-	}
-
-	public function build_tree_flat_info(&$tree, $flat) {
-		foreach ($tree->Childs as $id => $obj) {
-			//sprawdzmy czy nasz parent wymaga wyswietlenia osobnego podkroku w widoku szczegolowego procesu
-			foreach ($tree->Parents[$id]->CHILD as $child) {
-				$tree->Childs[$id]->CHILD[$child] = count($tree->Parents[$child]->CHILD);
-			}
-		}
-	}
-
-	public function detect_tree_where_to_detail_cut(&$tree, $flag_not_to_cut = null) {
-		foreach ($tree->Childs as $id => $obj) {
-			//sprawdzmy czy nasz parent wymaga wyswietlenia osobnego podkroku w widoku szczegolowego procesu
-			$control = 0;
-			foreach ($obj->CHILD as $child) {
-				if ($child > 0) $control++;
-			}
-			if (empty($flag_not_to_cut)) {
-				if ($control > 1) {
-					//przeciecie jezeli jest wiecej wyjsc niz jedno z zaglebieniami
-					$tree->Childs[$id]->TO_DETAIL_CUT_FLAG = true;
-				}
-				if (isset($tree->Childs[$id]->GOTO_FLAG)) {
-					//przeciecie, jezeli jest wyjscie z kroku procesu do innego 
-					$tree->Childs[$id]->TO_DETAIL_CUT_FLAG = true;
-				}
-				if (isset($tree->Childs[$id]->IS_EXECUTED_BY)) {
-					//trzeba zbadac tez czy nie jest do niego dowiazywany w jakims miejscu proces
-					$tree->Childs[$id]->TO_DETAIL_CUT_FLAG = true;
-				}
-			} else {
-				$tree->Childs[$id]->NO_CUT_FLAG = true;
-			}
-		}
-	}
-
-	public function search_parent_ids_till_cut(&$tree, $init, &$find) {
-		//szukam lancuchow do optymalizacji do miejsca flagi CUT, kojarzac od razu linki
-		if (isset($tree->Childs[$init]->TO_DETAIL_CUT_FLAG)) {
-			$this->zoom_process_links($tree, $init, $init);
-		}
-		if (!isset($tree->Childs[$init]->TO_DETAIL_CUT_FLAG)) {
-			$find[] = $init;
-			$this->zoom_process_links($tree, $init, $find[0]);
-			foreach($tree->Childs[$init]->CHILD as $id => $count) {
-				$this->search_parent_ids_till_cut($tree, $id, $find);
-			}
-		}
-	}
-
-	public function zoom_process_links($tree, $id, $root_id) {
-		$db = DB::getDB();
-		if (isset($tree->Childs[$id]->GOTO_FLAG)) {
-			if (isset($tree->Childs[$tree->Childs[$id]->IF_TRUE_GOTO])) {
-				if (isset($tree->Childs[$tree->Childs[$id]->IF_TRUE_GOTO]->SOURCE)) {
-					$tree->Viev_Zpc[$root_id]->INTERNAL_LINK[$tree->Childs[$id]->IF_TRUE_GOTO] = $tree->Childs[$id]->IF_TRUE_GOTO;
-				} else {
-					$tree->Viev_Zpc[$root_id]->EXTERNAL_LINK[$tree->Childs[$id]->IF_TRUE_GOTO] = $tree->Childs[$id]->IF_TRUE_GOTO;
-				}
-			} else {
-				$tree->Viev_Zpc[$root_id]->EXTERNAL_LINK[$tree->Childs[$id]->IF_TRUE_GOTO] = $tree->Childs[$id]->IF_TRUE_GOTO;
-				$obj = $db->get_by_id('CRM_PROCES',$tree->Childs[$id]->IF_TRUE_GOTO);
-				$tree->Viev_Zpc[$tree->Childs[$id]->IF_TRUE_GOTO]->DESC = "{" . $obj->ID . "}" . V::strShortUtf8($obj->DESC, 50);
-				if ($tree->Childs[$id]->GOTO_FLAG == 'GOTO_AND_RETURN') {
-					$tree->Viev_Zpc[$tree->Childs[$id]->IF_TRUE_GOTO]->EXTERNAL_LINK[$root_id] = $root_id;
-				}
-			}
-		}
-	}
-
-	public function build_path_zoom_proces_cut(&$tree, $init, $path_zpc = array()) {
-		$db = DB::getDB();
-		foreach ($tree->Childs as $id => $obj) {
-			if (!isset($tree->Viev_Zpc_found[$id])) {
-				$find = array();
-				$this->search_parent_ids_till_cut($tree, $id, $find);
-				foreach ($find as $find_id) {
-					$tree->Viev_Zpc_found[$find_id] = $find[0];
-					if ($find_id != $find[0]) {
-						$tree->Viev_Zpc_Parent[$find_id] = $find[0];// TODO: moze byc to z bledem jak nadrzedny bedzie zbitym ciagiem
-					}
-					else {
-						$tree->Viev_Zpc_Parent[$find_id] = $tree->Childs[$find_id]->PARENT;
-					}
-				}
-				$tree->Viev_Zpc[$id]->PATH = $find;
-				$obj = $db->get_by_id('CRM_PROCES', $id);
-				$tree->Viev_Zpc[$id]->DESC = "{" . $id . "}" . V::strShortUtf8($obj->DESC, 50, '...');
-			}
-		}
-
-		foreach($tree->Viev_Zpc as $id => $obj) {
-			if (!isset($obj->PARENT)) {
-				foreach($tree->Viev_Zpc as $id_=>$obj_) {
-					if (isset($tree->Childs[$id_]->SOURCE)) {
-						if (in_array($tree->Childs[$id]->PARENT, $obj_->PATH)) {
-							$tree->Viev_Zpc[$id]->PARENT = $id_;
-						}
-					}
-				}
-			}
-
-			if (!isset($tree->Viev_Zpc[$id]->PARENT)) {
-				$tree->Viev_Zpc[$id]->PARENT = $tree->Childs[$id]->PARENT;
-			}
-		}
-	}
-
-}

+ 9 - 4
SE/superedit-INSTALL_SES_PROCESY_A.php

@@ -591,6 +591,8 @@ if($SERVER_VERSION=='10.9Maverick') $cmd[]['rsh']="gcc 2>&1 |grep 'no input file
 ';//  $cmd[]['rsh']='installer -package /tmp/MacPorts-2.2.0-10.8-MountainLion.pkg -target "'.$SERVER_MOUNT_POINT_ROOT.'" -verbose';
 	}
 
+ $cmd[]['rsh']=' port selfupdate';
+ $cmd[]['rsh']=' port selfupdate';
 if($SERVER_VERSION=='10.9Maverick') $cmd[]['scp']=array('/Applications/SourceGuardian.app/Contents/Loaders/Mac\ OS\ X/ixed.5.4.dar','/usr/lib/php/extensions/no-debug-non-zts-20100525/');//  $cmd[]['rsh']='installer -package /tmp/MacPorts-2.2.0-10.8-MountainLion.pkg -target "'.$SERVER_MOUNT_POINT_ROOT.'" -verbose';
 if($SERVER_VERSION=='10.9Maverick') $cmd[]['rsh']='cat /etc/php.ini |grep "extension=ixed.5.4.dar" || echo "\nextension=ixed.5.4.dar\n" >> /etc/php.ini';
 
@@ -1380,14 +1382,14 @@ database=\"SES_USERS2\"
   $cmd[]['scp_root']=array(''.$INSTALL_ROOT.'/.config_base_structure_dump.sql','/Library/Server/Web/Data/Sites/Default/SE/');   //todo do przeniesienia wyzej - struktura musi byc wygenerowana
   $cmd[]['rsh']='/opt/local/lib/mysql55/bin/mysql  -uroot -p'.$ADMIN_USERNAME_PASSWD.' '.$REMOTE_FOLDER_ROOT.' < /Library/Server/Web/Data/Sites/Default/SE/.config_base_structure_dump.sql'; //TODO powinno byc osobne miejsce do bazy i struktur bo kasuje to baze zamiast aktualizacji!
 
- $cmd[]['rsh']=' echo " update CRM_LISTA_ZASOBOW set \\`DESC\\`=\''.$SERVER_ADDRESS.'\' where \\`DESC\\`=\'biuro.biall-net.pl\' and \\`TYPE\\`=\'SERWER\' and ID=1 " |mysql -uroot -p'.$ADMIN_USERNAME_PASSWD.' -D'.$REMOTE_FOLDER_ROOT.' '; //poprawa danych z referencyjnej bazy BIALL-NET
- $cmd[]['rsh']=' echo " update CRM_LISTA_ZASOBOW set \\`DESC\\`=\''.$REMOTE_FOLDER_ROOT.'\' where \\`DESC\\`=\'SES_USERS2\' and \\`TYPE\\`=\'BAZA_DANYCH\' and ID=2 " |mysql -uroot -p'.$ADMIN_USERNAME_PASSWD.' -D'.$REMOTE_FOLDER_ROOT.' '; //poprawa danych z referencyjnej bazy BIALL-NET
-
-
 // TODO @2014-06-16 sprawdzic dodawanie struktur DB_STRUCTURES_CREATE - czy jest potrzebne - imho TAK
  $cmd[]['rsh']='php -r"include(\'/Library/Server/Web/Data/Sites/Default/SE/superedit-DB_PROCEDURES_CREATE.php\') ; DB_PROCEDURES_CREATE(); " '.$SERVER_ADDRESS.' '; 
 
 
+ $cmd[]['rsh']=' echo " update CRM_LISTA_ZASOBOW set \\`DESC\\`=\''.$SERVER_ADDRESS.'\' where \\`DESC\\`=\'biuro.biall-net.pl\' and \\`TYPE\\`=\'SERWER\' and ID=1 " |mysql -uroot -p'.$ADMIN_USERNAME_PASSWD.' -D'.$REMOTE_FOLDER_ROOT.' '; //poprawa danych z referencyjnej bazy BIALL-NET
+ $cmd[]['rsh']=' echo " update CRM_LISTA_ZASOBOW set \\`DESC\\`=\''.$REMOTE_FOLDER_ROOT.'\' where \\`DESC\\`=\'SES_USERS2\' and \\`TYPE\\`=\'BAZA_DANYCH\' and ID=2 " |mysql -uroot -p'.$ADMIN_USERNAME_PASSWD.' -D'.$REMOTE_FOLDER_ROOT.' '; //poprawa danych z referencyjnej bazy BIALL-NET
+
+
 
  $cmd[]['rsh']=' echo " delete from ADMIN_USERS  where ADM_ACCOUNT=\''.$ADMIN_USERNAME_L1.'\'" |mysql -uroot -p'.$ADMIN_USERNAME_PASSWD.' -D'.$REMOTE_FOLDER_ROOT.' '; //zalozenie 1 usera TODO synchronizacja z ldap
  $cmd[]['rsh']=' echo " delete from ADMIN_USERS  where ADM_ACCOUNT=\''.$ADMIN_USERNAME_DIRECTORY.'\'" |mysql -uroot -p'.$ADMIN_USERNAME_PASSWD.' -D'.$REMOTE_FOLDER_ROOT.' '; //zalozenie 1 usera TODO synchronizacja z ldap
@@ -1805,6 +1807,9 @@ function INSTALL_SES_PROCESY_A() {
 			//polecenia do gita:
 
 			//$ git clone /Library/Server/Web/Data/Sites/SE-production-git/ NOWY_KATALOG
+			$cmd='rm -Rf '.$installer_dir_tar.'/'.$h->ID.'.'.$REMOTE_FOLDER_ROOT.'.git';
+			DEBUG_S(-3,'Usuwam stare pliki git ',$cmd,__FILE__,__FUNCTION__,__LINE__);
+			exec($cmd);
 			$cmd='git clone /Library/Server/Web/Data/Sites/SE-production-git/ '.$installer_dir_tar.'/'.$h->ID.'.'.$REMOTE_FOLDER_ROOT.'.git';
 			DEBUG_S(-3,'Running command',$cmd,__FILE__,__FUNCTION__,__LINE__);
 			exec($cmd);

+ 84 - 6
SE/superedit-USER_OCENA_PRACOWNIKA.php

@@ -3,7 +3,16 @@
 /**
  * @see procesy5.php?task=USER_EDIT&_user_id=4865&_p=0
  */
+
+include_once('se-lib/Data_Source.php');
+
+Lib::loadClass('DB');
+
 function USER_OCENA_PRACOWNIKA() {
+	$db = DB::getDB();
+	Lib::loadClass('ProcesHelper');
+	$tblCRM_PROCES_USER_OCENA_OKRESId = ProcesHelper::getZasobTableID('CRM_PROCES_USER_OCENA_OKRES');
+
 
 	$usrLogin = V::get('usrLogin', '', $_GET);
 	$_print = ('1' == V::get('_print', '', $_GET));
@@ -28,7 +37,29 @@ function USER_OCENA_PRACOWNIKA() {
 		return;
 	}
 
-	Lib::loadClass('ProcesHelper');
+	/*
+	$obj_search->L_APPOITMENT_USER=$usrLogin;
+	$obj_search->ID='%';	
+	$obj_search->DATE=V::get('DATE','',$_GET);	
+	$obj_search->CW_ID='%';	
+	$obj_search->ID_PROCES='%';	
+	$obj_search->DESC='%';	
+	$obj_search->FUNCTION='%';	
+	$obj_search->OPIS_ZASOB='%';	
+	$obj_search->OCENA_PRACOWNIK='%';	
+	$obj_search->OCENA_KIEROWNIK='%';	
+	$obj_search->UWAGI_KIEROWNIK='%';	
+	$obj_search->OCENA_SDJ='%';			
+	$obj_search->UWAGI_SDJ='%';			
+	$obj_search->OCENA_PREZESA='%';			
+	$obj_search->UWAGI_PREZESA='%';			
+	$obj_search->OCENA_SDJ='%';			
+	$obj_search->OCENA_SDJ='%';			
+
+	$procesy_list=$db->get_searched_obj('CRM_PROCES_USER_OCENA_OKRES',$obj_search,$obj_search,null,(object)'DATE'=>'DESC'); 
+	unset($obj_search);
+*/
+/*	Lib::loadClass('ProcesHelper');
 	$procesy_list = ProcesHelper::get_procesy_by_stanowiska( array_keys($stanowiska) );
 	// update proces_list data
 	foreach ($procesy_list as $k => $p) {
@@ -37,25 +68,72 @@ function USER_OCENA_PRACOWNIKA() {
 			$procesy_list[$k]->stanowisko = $stanowiska[$p->z__ID]->DESC;
 		}
 	}
-
+*/
 	// TODO: _task=EXPORT  exit;
 
 
+
 	echo '<h3>';
 		echo $user->ADM_NAME;
+		//echo '<span style="float:right">' . "data: " . date("Y-m-d") . '</span>';
+		    echo " </h3>";
+		    //! Javascript CRM_PROCES_USER_OCENA_OKRES_select_date
+		
+		/*
+			Lib::loadClass('TableAcl');
+
+			Lib::loadClass('ViewAjax');
+		   	Lib::loadClass('TableAjax');
+		   	Lib::loadClass('TreeAjax');
+
+		   //	=new TableAcl(12859);
+		   	$TableAcl=TableAcl::getInstance(12859);
+		   //	print_r($TableAcl);
+		   	$ta=new TreeAjax($TableAcl);
+
+		   */
+		    echo "Wybierz okres oceny:
+		    <form action='index.php' method='get'>
+		    <input type='hidden' name='MENU_INIT' value='VIEWTABLE_AJAX'>
+		    <input type='hidden' name='ff_L_APPOITMENT_USER' value='".V::get('usrLogin','',$_GET)."'>
+		    <input type='hidden' name='ZASOB_ID' value='".$tblCRM_PROCES_USER_OCENA_OKRESId."'>
+
+		    <input type='hidden' name='_hash' value='".rand(0,9999999)."'>
+		    <select name='f_DATE' id='ff_DATE' onChange=this.form.submit()>
+		    <option value=' '>---</option>";
+			
+		$obj_search->L_APPOITMENT_USER=$usrLogin;
+		$obj_search->DATE='%';
+		$obj_order->DATE='DESC';
+		$res= $db->get_searched_obj('CRM_PROCES_USER_OCENA_OKRES',$obj_search,$obj_search,$obj_search,$obj_order); 
+		unset($obj_search,$obj_order);
+		while($h=$db->fetch($res)) {
+			echo "\n<option value='".$h->DATE."'" ;
+			if(V::get('DATE','',$_GET)==$h->DATE) echo " selected=1 ";
+			echo ">".$h->DATE."</option>";
+			
+		}
+		    echo "</select></form><h3>";		
+
 		echo '<span style="float:right">' . "data: " . date("Y-m-d") . '</span>';
-	echo '</h3>';
+	echo '</h3>
+	<a href="procesy5.php?task=TEST_SORT" target="_blank">Ustal kolejność testów</a>
+
+	
+	';
+		DIE('');
+		
 
 	if (!$_print) {
 		?>
 		<a href="index.php?MENU_INIT=USER_OCENA_PRACOWNIKA&usrLogin=<?php echo $usrLogin; ?>&_print=1&HIDE_PANEL=1" target="_blank">Drukuj <img src="icon/print.gif" height="16" alt="Drukuj"></a>
 		|
 		<a href="index.php?MENU_INIT=USER_OCENA_PRACOWNIKA&usrLogin=<?php echo $usrLogin; ?>&_task=EXPORT&HIDE_PANEL=1" target="_blank">Export <img src="icon/excel.gif" height="16" alt="Export"></a>
-		|
-		<a href="procesy5.php?task=TEST_SORT" target="_blank">Ustal kolejność testów</a>
+		
 		<?php
 	}
 
+
 	echo '<table cellspacing="0" cellpadding="0" border="1" class="tbl-view">';
 	echo '<thead>';
 	echo '<tr>';
@@ -65,7 +143,7 @@ function USER_OCENA_PRACOWNIKA() {
 		echo '<th colspan="2">' . "ocena pracownika" . '</th>';
 		echo '<th colspan="2">' . "ocena kierownika" . '</th>';
 		echo '<th colspan="2">' . "ocena specjalisty ds. jakości" . '</th>';
-		echo '<th colspan="2">' . "ocena prezesa" . '</th>';
+		echo '<th colspan="2">' . "ocena kierownika jednostki" . '</th>';
 	echo '</tr>';
 	echo '<tr>';
 		echo '<th>' . "%" . '</th>';

+ 431 - 0
SE/superedit-ZLECENIE.php

@@ -0,0 +1,431 @@
+<?php
+
+function iso2utf($s) {
+	return iconv("iso-8859-2","utf8",$s);
+}
+
+function KONFIGURACJA($SES_A) {
+	$query="select c.*,bo.name1 as OPERATOR from COMPANIES c join BILLING_OWNER bo on c.BILLING_OWNER=bo.ID where c.ID='".$SES_A['ID_BILLING_USERS']."'";
+	$result=DB::query($query);
+	$COMPANIES=DB::fetch($result) or die("Error 2");
+
+	if ($SES_A['S_IP']=="") $SES_A['S_IP']="<b>Nie przydzielono adresu IP!</b>";
+	else {
+		$IP_a=explode('.',$SES_A['S_IP']);
+		$SUBNET_MASK="255.255.255.0";
+		$GATEWAY=$IP_a[0].".".$IP_a[1].".".$IP_a[2].".1";
+	}
+	if (preg_match("/^[[:alpha:]]*/",$SES_A['S_ADDRESS_STREET'],$ULICA)) {
+		$BUDYNEK_MIESZKANIE=substr($SES_A['S_ADDRESS_STREET'],strlen($ULICA[0]));
+		if (preg_match("/^[[:digit:]]*/",$BUDYNEK_MIESZKANIE,$BUDYNEK)) {
+			$query="select * from BUILDINGS where S_ADDRESS_STREET like '".$ULICA[0].$BUDYNEK[0]."%' limit 1";
+			$result=DB::query($query);
+			if ($BUILDINGS=DB::fetch($result)) {
+				$ADRES=$BUILDINGS->S_ADDRESS_CITY.", ". preg_replace("/[[:digit:]].*/","",$BUILDINGS->S_ADDRESS_STREET_FULL)." ".$BUDYNEK_MIESZKANIE;
+			}
+		}
+	}
+	if (!isset($ADRES)) $ADRES=$SES_A['S_ADDRESS_STREET'];
+
+	$DOWNLOAD=$SES_A['P_SERVICE_QUOTA'];
+	$UPLOAD=$DOWNLOAD*$SES_A['P_SERVICE_UPLOAD_RATIO'];
+	if ($DOWNLOAD<1024) $DOWNLOAD.=" Kbps";
+	else $DOWNLOAD=($DOWNLOAD/1024)." Mbps";
+	if ($UPLOAD<1024) $UPLOAD.=" Kbps";
+	else $UPLOAD=($UPLOAD/1024)." Mbps";
+
+	$STATUSY=array("YES"=>"Tak","NO"=>"Nie","UNKNOWN"=>"Nie wiadomo");
+	$DZIERZAWA_ROUTERA=$STATUSY[$SES_A['S_SOHO_WIFI_ROUTER_1292']];
+	$PODZIAL_LACZA=$STATUSY[$SES_A['CONN_DIV']];
+	$PUBLICZNY_ADRES_IP=$STATUSY[$SES_A['S_PUBLIC_IP']];
+	$PRZEKIEROWANIE_PORTOW=$STATUSY[$SES_A['S_E_PORT_1293']];
+
+	if ($PODZIAL_LACZA=="Nie" && $DZIERZAWA_ROUTERA=="Tak") $PODZIAL_LACZA.=iso2utf(" <b>(Jest dzier¿awa routera, a nie ma podzia³u ³±cza!)</b>");
+
+	$query="select * from EXTRA_SERVICES where ID_SERVICES='".$SES_A['ID_SERVICES']."' and E_SERVICE='E_NAT_IP' and T_NETWORK_SERVER='".$SES_A['T_NETWORK_SERVER']."'";
+	$result=DB::query($query);
+	if (!DB::num_rows($result)) {
+		if ($PUBLICZNY_ADRES_IP=="Tak") $PUBLICZNY_ADRES_IP.=" <b>(Nie przydzielono!)</b>";
+		elseif ($PUBLICZNY_ADRES_IP=="Nie wiadomo") $PUBLICZNY_ADRES_IP="Nie";
+	}
+	elseif (DB::num_rows($result)>1) {
+		if ($PUBLICZNY_ADRES_IP=="Nie wiadomo") $PUBLICZNY_ADRES_IP="Tak";
+		$PUBLICZNY_ADRES_IP.=iso2utf(" <b>(Przydzielono wiêcej ni¿ jeden adres IP!)</b>");
+	}
+	else {
+		$EXTRA_SERVICES=DB::fetch($result);
+		if ($PUBLICZNY_ADRES_IP=="Nie wiadomo") $PUBLICZNY_ADRES_IP="Tak";
+		if ($PUBLICZNY_ADRES_IP=="Tak") $PUBLICZNY_ADRES_IP.=" (".$EXTRA_SERVICES->E_S_V.")";
+		else $PUBLICZNY_ADRES_IP.=" <b>(A jest przydzielony adres IP ".$EXTRA_SERVICES->E_S_V."!)";
+	}
+
+	$query="select * from EXTRA_SERVICES where ID_SERVICES='".$SES_A['ID_SERVICES']."' and E_SERVICE='E_PORT' and T_NETWORK_SERVER='".$SES_A['T_NETWORK_SERVER']."'";
+	$result=DB::query($query);
+	if (!DB::num_rows($result)) {
+		if ($PRZEKIEROWANIE_PORTOW=="Tak") $PRZEKIEROWANIE_PORTOW.=iso2utf(" <b>(Nie przekierowano ¿adnych portów!)</b>");
+		elseif ($PRZEKIEROWANIE_PORTOW=="Nie wiadomo") $PRZEKIEROWANIE_PORTOW="Nie";
+	}
+	else {
+		while ($EXTRA_SERVICES=DB::fetch($result)) {
+			if ($EXTRA_SERVICES->E_S_V=="TCP_UDP") $PORTY_a[]=$EXTRA_SERVICES->E_S_V2;
+			elseif ($EXTRA_SERVICES->E_S_V=="TCP_UDP_RANGE") $PORTY_a[]=$EXTRA_SERVICES->E_S_V2."-".$EXTRA_SERVICES->E_S_V3;
+		}
+		$PORTY=implode(",",$PORTY_a);
+		if ($PRZEKIEROWANIE_PORTOW=="Nie wiadomo") $PRZEKIEROWANIE_PORTOW="Tak";
+		if ($PRZEKIEROWANIE_PORTOW=="Tak") $PRZEKIEROWANIE_PORTOW.=" (".$PORTY.")";
+		else $PRZEKIEROWANIE_PORTOW.=iso2utf(" <b>(A s± przekierowano porty ".$PORTY."!)</b>");
+	}
+
+	echo "
+		<style type=\"text/css\">
+			@media print {
+				.noPrint { display: none; }
+			}
+		</style>
+		<table>
+		<tr><td colspan=2><h4>".$COMPANIES->OPERATOR."<h4><hr></td></tr>
+		<tr><td>Abonent:</td><td>".$COMPANIES->P_NAME." ".$COMPANIES->P_NAME_SECOND."</td></tr>
+		<tr><td>Adres instalacji:</td><td>".$ADRES."</td></tr>
+		<tr><td>".iso2utf("ID us³ugi:")."</td><td>".$SES_A['ID_SERVICES']."</td></tr>
+		<tr><td colspan=2><br>".iso2utf("Parametry us³ugi dostêpu do Internetu:")."</td></tr>
+		<tr><td>".iso2utf("Prêdko¶æ pobierania:")."</td><td>".$DOWNLOAD."</td></tr>
+		<tr><td>".iso2utf("Prêdko¶æ wysy³ania:")."</td><td>".$UPLOAD."</td></tr>
+		<tr><td>".iso2utf("Podzia³ ³±cza:")."</td><td>".$PODZIAL_LACZA."</td></tr>
+		<tr><td>".iso2utf("Dzier¿awa routera:")."</td><td>".$DZIERZAWA_ROUTERA."</td></tr>
+		<tr><td>".iso2utf("Publiczny adres IP:")."</td><td>".$PUBLICZNY_ADRES_IP."</td></tr>
+		<tr><td>".iso2utf("Przekierowanie portów:")."</td><td>".$PRZEKIEROWANIE_PORTOW."</td></tr>
+		<tr><td colspan=2><br>Konfiguracja protoko".iso2utf("³")."u TCP/IP:</td></tr>
+		<tr><td>Adres IP:</td><td>".$SES_A['S_IP']."</td></tr>
+		<tr><td>Maska podsieci:</td><td>".$SUBNET_MASK."</td></tr>
+		<tr><td>Brama domy".iso2utf("¶")."lna:</td><td>".$GATEWAY."</td></tr>
+		<tr><td>Preferowany serwer DNS:</td><td>".$GATEWAY."</td></tr>
+		<td><td colspan=2></td></tr>
+		<tr><td>Zarejestrowany adres fizyczny (MAC):</td><td>
+	";
+	if ($_GET['action']=="se-detect") {
+		if ($SES_A['S_HWSTAT']=="FIXED") {
+			$result=file_get_contents("http://se.dev.webone.pl/odblokuj.php?action=se-detect&komp=".$SES_A['S_IP']."&ADM_ACCOUNT=".$_SESSION['ADM_ACCOUNT']);
+			$result_a=explode("\n",$result);
+			if ($result_a[0]=="OK") $SES_A['S_HWSTAT']="DETECT";
+			else $result_a[0].=" (".$result_a[1].")";
+		} else $result_a[0]=iso2utf("ERROR (adres MAC ju¿ wcze¶niej zosta³ odblokowany!)");
+	}
+	if ($SES_A['S_HWSTAT']=="FIXED") echo $SES_A['S_HW']." <span class=\"noPrint\">(<a href=\"".$_SERVER['REQUEST_URI']."&action=se-detect\">odblokuj</a>)</span>";
+	else echo "odblokowany";
+	if ($_GET['action']=="se-detect") echo "</td><tr><tr class=\"noPrint\"><td>Wynik odblokowania:</td><td>".$result_a[0];
+#echo "<pre>";
+#print_r($_SESSION);
+#echo "</pre>";
+	echo "</td></tr></table>";
+}
+
+function ZLECENIE() {
+	$TYP_ZLECENIA=$_GET['TYP_ZLECENIA'];
+	$ID_SERVICES=$_GET['ID_SERVICES'];
+
+	$query="select NAME_LIST_SERVICES from SERVICES where ID='".$ID_SERVICES."';";
+	$result=DB::query($query);
+	$row=DB::fetch($result) or die('Error 0');
+	$NAME_LIST_SERVICES=$row->NAME_LIST_SERVICES;
+
+	$query="select * from SES_".$NAME_LIST_SERVICES."_A where ID_SERVICES='".$ID_SERVICES."';";
+	$result=DB::query($query);
+	$SES_A=DB::fetch_array($result) or die('Error 1');
+
+	if ($TYP_ZLECENIA=="KONFIGURACJA" && $NAME_LIST_SERVICES == "USERS2") {
+		KONFIGURACJA($SES_A);
+		exit();
+	}
+
+	$WHILECNT = "0";
+	$A_DB_TELBOX_TRACE_PATH_GO = "GO";
+	$A_DB_TELBOX_TRACE_PATH_CUST = "";
+	$A_DB_TELBOX_TRACE_PATH = "";
+	$UNTIL1 = $SES_A['T_TELBOX_ADDRESS'];
+
+	while (($A_DB_TELBOX_TRACE_PATH_GO == 'GO') && ($WHILECNT < 50)) {
+		$query = "select T_TELBOX_NEIGHBOUR_IN from TELBOXES where T_TELBOX_NAME='$UNTIL1' ORDER BY ID limit 0,1 ";
+		$result=DB::query($query) or die("Error 2");
+		while ($h = DB::fetch_row($result)) {
+			$WHILECNT++;
+			$UNTIL1 = $h[0];
+		}
+		if (DB::num_rows($result) == 0) {
+			$A_DB_TELBOX_TRACE_PATH_GO = "STOP";
+		} else {
+			$A_DB_TELBOX_TRACE_PATH = $A_DB_TELBOX_TRACE_PATH . " " . $UNTIL1;
+		}
+	}
+
+	if (($SES_A['T_TELBOX_ADDRESS']) && (!($SES_A['T_TELBOX_ADDRESS'] == "N/S;"))) {
+		if ($NAME_LIST_SERVICES == "USERS2") {
+			$query="select '<b>',S_ADDRESS_STREET,'</b> ',A_STATUS,' ',S_IP,'<b> ',A_PROBLEM,'</b> ',A_PROBLEM_DESC,'<br> ' from SES_".$NAME_LIST_SERVICES."_A where T_TELBOX_ADDRESS='" . $SES_A['T_TELBOX_ADDRESS'] . "' and A_ADM_COMPANY like '" . $_SESSION['ADM_COMPANY'] . "' ORDER BY A_STATUS,(substring_index(S_ADDRESS_STREET,'/',-1)+0),ID ;";
+		} else {
+			$query="select '<b>',S_ADDRESS_STREET,'</b> ',A_STATUS,' <b> ',A_PROBLEM,'</b> ',A_PROBLEM_DESC,'<br> ' from SES_".$NAME_LIST_SERVICES."_A where T_TELBOX_ADDRESS='" . $SES_A['T_TELBOX_ADDRESS'] . "' and A_ADM_COMPANY like '" . $_SESSION['ADM_COMPANY'] . "' ORDER BY ID ;";
+		}
+		$result=DB::query($query);
+		while ($h = DB::fetch_row($result)) {
+			foreach ($h as $value) {
+				$MAKE_ORDERER_TELBOX_USERS_LIST = $MAKE_ORDERER_TELBOX_USERS_LIST . " $value";
+			}
+		}
+
+		$query = "select ID from SES_".$NAME_LIST_SERVICES."_A where T_TELBOX_ADDRESS='".$SES_A['T_TELBOX_ADDRESS']."' and ( A_STATUS='NORMAL' or A_STATUS='WARNING' or  A_STATUS='OFF_SOFT' or A_STATUS='MONITOR' ) and A_ADM_COMPANY like '".$_SESSION['ADM_COMPANY']."' ORDER BY ID ;";
+		$result=DB::query($query);
+		$MAKE_ORDERER_TELBOX_USERS = DB::num_rows($result);
+		$MAKE_ORDERER_TELBOX_USERS="( <b>$MAKE_ORDERER_TELBOX_USERS</b> aktywnych )";
+
+		$query = "select T_TELBOX_NAME,' | ' from TELBOXES where T_TELBOX_NEIGHBOUR_IN='".$SES_A['T_TELBOX_ADDRESS']."' and A_ADM_COMPANY like '".$_SESSION['ADM_COMPANY']."' ORDER BY T_TELBOX_NAME ";
+		$result=DB::query($query);
+		while ($h = DB::fetch_row($result)) {
+			foreach ($h as $value) {
+				$MAKE_ORDERER_TELBOX_MAGISTRAL = $MAKE_ORDERER_TELBOX_MAGISTRAL . " $value";
+			}
+		}
+		$MAKE_ORDERER_TELBOX_MAGISTRAL_OUT_COUNT = DB::num_rows($result);
+
+		//PATCH 2003-09-30 for BUILDINGS
+		$query="select '<b>',t1.S_ADDRESS_STREET,'</b> | ',t1.A_STATUS,t1.S_ADMIN_NAME,t1.P_ADMIN_NAME from BUILDINGS as t1, TELBOXES as t2 where t2.T_TELBOX_NAME='".$SES_A['T_TELBOX_ADDRESS']."' and t1.S_ADDRESS_STREET = t2.T_TELBOX_BUILDING_IN and t1.A_ADM_COMPANY like '".$_SESSION['ADM_COMPANY']."' ORDER BY t1.S_ADDRESS_STREET ";
+		$result=DB::query($query);
+		while ($h = DB::fetch_row($result)) {
+			foreach ($h as $value) {
+				$MAKE_ORDERER_BUILDING_INFO = $MAKE_ORDERER_BUILDING_INFO . " $value";
+			}
+		}
+		$MAKE_ORDERER_BUILDING_INFO_COUNT = DB::num_rows($result);
+
+		$query = "select t1.B_INVENTORY_DATE from BUILDINGS as t1, TELBOXES as t2 where t2.T_TELBOX_NAME='".$SES_A['T_TELBOX_ADDRESS']."' and t1.S_ADDRESS_STREET = t2.T_TELBOX_BUILDING_IN and t1.A_ADM_COMPANY like '".$_SESSION['ADM_COMPANY']."' ORDER BY t1.S_ADDRESS_STREET ";
+		$result=DB::query($query);
+		while ($h = DB::fetch_row($result)) {
+			$MAKE_ORDERER_BUILDING_INVENTORY_DATE = $h[0];
+		}
+		//EOF BUILDING PATCH
+
+		$query = "select T_TELBOX_NEIGHBOUR_IN,' | ' from TELBOXES where T_TELBOX_NAME='".$SES_A['T_TELBOX_ADDRESS']."' and A_ADM_COMPANY like '".$_SESSION['ADM_COMPANY']."' ORDER BY T_TELBOX_NAME ";
+		$result=DB::query($query);
+		while ($h = DB::fetch_row($result)) {
+			foreach ($h as $value) {
+				$MAKE_ORDERER_TELBOX_MAGISTRAL_IN  = $MAKE_ORDERER_TELBOX_MAGISTRAL_IN . " $value";
+			}
+		}
+
+		$query = "select ID from SES_".$NAME_LIST_SERVICES."_A where T_TELBOX_ADDRESS='".$SES_A['T_TELBOX_ADDRESS']."' and ( A_STATUS='NORMAL' or A_STATUS='WARNING' or A_STATUS='OFF_SOFT' or A_STATUS='MONITOR' ) and A_ADM_COMPANY like '".$_SESSION['ADM_COMPANY']."' ORDER BY ID ;";
+		$result=DB::query($query);
+		$MAKE_ORDERER_TELBOX_USERS_COUNT = DB::num_rows($result);
+
+		$query="select '<b>',T_DEVICE_TYPE,T_PRODUCER,'</b>(',T_DEVICE_PORTS_OK,')<b>',A_STATUS,A_STATUS_INFO,A_PROBLEM,'</b><font size=-2>',A_PROBLEM_DESC,S_ADDRESS_STREET,T_DEVICE_POWER,T_DEVICE_INFO,'Awar:',T_WORKPOINTS,'gwar.',T_GUARRANTY_EXPIRE,'</font><br>' from DEVICES where T_TELBOX_NEIGHBOUR_IN='".$SES_A['T_TELBOX_ADDRESS']."' and A_ADM_COMPANY like '".$_SESSION['ADM_COMPANY']."' ORDER BY ID ;";
+		$result=DB::query($query);
+		while ($h = DB::fetch_row($result)) {
+			foreach ($h as $value) {
+				$MAKE_ORDERER_DEVICES_LIST  = $MAKE_ORDERER_DEVICES_LIST . " $value";
+			}
+		}
+		$MAKE_ORDERER_DEVICES_COUNT = DB::num_rows($result);
+
+		$query = "select sum(T_DEVICE_PORTS_OK) from DEVICES where T_TELBOX_NEIGHBOUR_IN='".$SES_A['T_TELBOX_ADDRESS']."' and A_ADM_COMPANY like '".$_SESSION['ADM_COMPANY']."' ORDER BY ID ;";
+		$result=DB::query($query);
+		while ($h = DB::fetch_row($result)) {
+			$MAKE_ORDERER_DEVICES_PORTS = $h[0];
+		}
+
+		$query = "select '&nbsp; <b>',T_TELBOX_NAME,'</b> &nbsp;&nbsp;','STATUS:<b>', A_STATUS,'</b>(', A_STATUS_INFO, ') <br>Problemy:<b>', A_PROBLEM,'</b>(',A_PROBLEM_DESC,A_PROBLEM_DATE,')Termin_usuniecia:',S_OTHER_INFO, '<BR>Adresy:<b>',S_ADDRESS_CITY,S_ADDRESS_POST_CODE,S_ADDRESS_POST_OFFICE,S_ADDRESS_STREET,S_ADDRESS_HOUSE,'</b><br> Typ:<b>',T_TELBOX_TYPE,'</b><br>Zamkniecie:<b>',T_TELBOX_SAVE,'</b><br>Zasilanie:<b>',T_TELBOX_POWER,'</b><br>Inne inf: ',T_NETWORK_SERVER,'Instalowal:',T_WHO_CONNECTED,T_WHEN_CONNECTED from TELBOXES where T_TELBOX_NAME='".$SES_A['T_TELBOX_ADDRESS']."' and A_ADM_COMPANY like '".$_SESSION['ADM_COMPANY']."' ORDER BY ID limit 0,1 ;";
+		$result=DB::query($query);
+		while ($h = DB::fetch_row($result)) {
+			foreach ($h as $value) {
+				$MAKE_ORDERER_DEVICE_TELBOX_INFO = $MAKE_ORDERER_DEVICE_TELBOX_INFO . " $value";
+			}
+		}
+		if ($MAKE_ORDERER_DEVICES_COUNT == 0) {
+			$MAKE_ORDERER_DEVICES_PORTS_FREE = "<table border=1><tr><td colspan=2 align=center><font size=-1 face=arial><b>Nieznana/niewykryta ilosc wolnych portow - ZINWENTARYZOWAC URZADZENIA W SZAFCE !!!!!!!</td></tr><tr><td width=30%> NrSeryjny:</td><td>&nbsp; </td></tr><tr><td>Typ (np.SW8):</td><td>&nbsp;</td></tr><tr><td>Producent:</td><td>&nbsp;</td></tr><tr><td>Termin_gwarancji:</td><td align=center> - </td></tr><tr><td>Dostawca:</td><td>&nbsp;</td></tr><tr><td>Il.Sprawnych Portow:</td><td>&nbsp;</td></tr></table></font>";
+		} else {
+			if (!($MAKE_ORDERER_DEVICES_COUNT == 1)) {
+				$MAKE_ORDERER_DEVICES_PORTS_FREE = $MAKE_ORDERER_DEVICES_PORTS - ($MAKE_ORDERER_DEVICES_COUNT * 2 ) + 1 - $MAKE_ORDERER_TELBOX_USERS_COUNT - $MAKE_ORDERER_TELBOX_MAGISTRAL_OUT_COUNT;
+			} else {
+				$MAKE_ORDERER_DEVICES_PORTS_FREE = $MAKE_ORDERER_DEVICES_PORTS - 1 - $MAKE_ORDERER_TELBOX_USERS_COUNT - $MAKE_ORDERER_TELBOX_MAGISTRAL_OUT_COUNT ;
+			}
+			$MAKE_ORDERER_DEVICES_PORTS_FREE = "Ilosc wolnych portow: <b>$MAKE_ORDERER_DEVICES_PORTS_FREE </b>";
+		}
+	}
+
+	if (!($MAKE_ORDERER_DEVICE_TELBOX_INFO)) {
+		$MAKE_ORDERER_DEVICE_TELBOX_INFO = "<table border=1><tr><td colspan=2 align=center><font size=-1 face=arial><b>ZINWENTARYZOWAC SZAFKE !!!!!!!</td></tr><tr><td width=30%> SZAFKA:</td><td>Ul.:_________ Nr:_____ Kl.:_____ Pietro:_____ </td></tr><tr><td>Typ :</td><td>&nbsp;</td></tr><tr><td>Zamkniecie:</td><td>&nbsp;</td></tr><tr><td>Zasilanie:</td><td align=center> &nbsp; </td></tr><tr><td>Magistrale IN/OUT:</td><td align=left>IN: &nbsp;</td></tr><tr><td>Abonenci:</td><td>&nbsp;</td></tr>
+                <tr><td colspan=2 align=center><font size=-1 face=arial><b>ZINWENTARYZOWAC URZADZENIA W SZAFCE !!!!!!!</td></tr>
+                <tr><td width=30%> NrSeryjny:</td><td>&nbsp; </td></tr><tr><td>Typ (np.SW8):</td><td>&nbsp;</td></tr><tr><td>Producent:</td><td>&nbsp;</td></tr><tr><td>Termin_gwarancji:</td><td align=center> - </td></tr><tr><td>Dostawca:</td><td>&nbsp;</td></tr><tr><td>Il.Sprawnych Portow:</td><td>&nbsp;</td></tr></table></font>
+                ";
+	} else if (($MAKE_ORDERER_BUILDING_INFO_COUNT == 1) && (strlen($MAKE_ORDERER_BUILDING_INVENTORY_DATE) < 3)) {
+		$MAKE_ORDERER_BUILDING_INFO = "<table border=1><tr><td colspan=2 align=center><font size=-1 face=arial><b>ZINWENTARYZOWAC BUDYNEK (ost. akt. $MAKE_ORDERER_BUILDING_INVENTORY_DATE) !!!!!!!</td></tr><tr><td colspan=2><font size=-1>$MAKE_ORDERER_BUILDING_INFO</font></td></tr></table></font>";
+	} else if (($MAKE_ORDERER_BUILDING_INFO_COUNT == 1) && (strlen($MAKE_ORDERER_BUILDING_INVENTORY_DATE) > 3)) {
+		$MAKE_ORDERER_BUILDING_INFO="<br>Inf.Budynkowa: $MAKE_ORDERER_BUILDING_INFO , data akt.: $MAKE_ORDERER_BUILDING_INVENTORY_DATE";
+	}
+	echo "
+                  <HTML><BODY onload=\"javascript:printit();\">
+                  <SCRIPT Language=\"Javascript\">
+                 function printit(){
+                  if (window.print) {
+                   window.print() ;
+                  } else {
+                   var WebBrowser = '<OBJECT ID=\"WebBrowser1\" WIDTH=0 HEIGHT=0 CLASSID=\"CLSID:8856F961-340A-11D0-A96B-00C04FD705A2\"></OBJECT>';M
+                   document.body.insertAdjacentHTML('beforeEnd', WebBrowser);M
+                   WebBrowser1.ExecWB(6, 2);//Use a 1 vs. a 2 for a prompting dialog box    WebBrowser1.outerHTML = \"\";  M
+                  }
+                 }
+                 </script>";
+
+	// 2012-10-03
+        // TODO: empty $MAKE_ORDERER_BUILDING_INFO
+        // TODO: pole P_SERVICE: $_SESSION[$thiss->DETECT_TABLE_COLUMN]['EDITRECORD']['P_SERVICE']
+        // TODO: brak pola P_SERVICE_CLASS: $_SESSION[$thiss->DETECT_TABLE_COLUMN]['EDITRECORD']['P_SERVICE_CLASS']
+        // TODO: brak pola P_DEVICE: $_SESSION[$thiss->DETECT_TABLE_COLUMN]['EDITRECORD']['P_DEVICE']
+
+        // fetch user data from `BILLING_USERS_ADD`
+	$out_P_NAME = $SES_A['P_NAME'];
+	$out_P_PHONE = $SES_A['P_PHONE'];
+	$out_P_FAX = $SES_A['P_FAX'];
+	$query="select
+                        P_NAME
+                        , P_NAME_SECOND
+                        , P_ADDRESS_STREET
+                        , P_ADDRESS_HOME
+                        , P_ADDRESS_HOUSE
+                        , id_users
+                        , P_PHONE
+                        , P_FAX
+                        , P_CONTACT_PERSON
+                from `BILLING_USERS_ADD`
+                where `id_users`='" . $SES_A['ID_BILLING_USERS'] . "'
+        ";
+	$result=DB::query($query);
+	if ($h = DB::fetch_assoc($result)) {
+		$out_P_NAME = $h['P_NAME'] . ' ' . $h['P_NAME_SECOND'];
+		$out_P_PHONE = $h['P_PHONE'];
+		$out_P_FAX = $h['P_FAX'];
+	}
+
+	// fetch user deal data from `DEALS_TABLE`
+	$out_P_DEALNUMBER = $SES_A['P_DEALNUMBER'];
+	$out_P_DEAL_DATE = $SES_A['P_DEAL_DATE'];
+//      DEALS_TABLE.P_DEALPREFIX as DEALS_TABLE_P_DEALPREFIX , DEALS_TABLE.P_DEALNUMBER as DEALS_TABLE_P_DEALNUMBER , DEALS_TABLE.P_DEALNUMBER_OLD as DEALS_TABLE_P_DEALNUMBER_OLD ,
+//      DEALS_TABLE.P_DEALDATE as DEALS_TABLE_P_DEALDATE,  DEALS_TABLE.P_DEALDATE_TERM  as DEALS_TABLE_P_DEALDATE_TERM
+//echo "P_DEAL_DATE".$TAB2."'$h->DEALS_TABLE_P_DEALDATE'".$TAB ;
+//echo "P_DEALNUMBER".$TAB2."'".strstr($h->t6_BILLING_OWNER_EMAIL,'@')."/$h->DEALS_TABLE_P_DEALPREFIX/$h->DEALS_TABLE_P_DEALNUMBER $h->DEALS_TABLE_P_DEALNUMBER_OLD'".$TAB ;
+//echo "P_DEALEXPIRE".$TAB2."'$h->DEALS_TABLE_P_DEALDATE_TERM'".$TAB ;
+//echo "P_BILLING_NO".$TAB2."'$h->ID_SERVICES'".$TAB ;
+	$query="select
+                        t2.A_STATUS as A_STATUS
+                        , t2.HANGUP_FROM
+                        , t2.HANGUP_TILL
+                        , t2.HANGUP_STATUS
+                        , t2.ABONAMENT_VALUE
+                        , d.P_DEALNUMBER
+                        , d.P_DEALDATE
+                from `SERVICES` as t2
+                        left join `DEALS_TABLE` as d on (d.`ID`=t2.`ID_DEALS_TABLE`)
+                where t2.`ID`='" . $ID_SERVICES . "'
+        ";
+	$result=DB::query($query);
+	if ($h = DB::fetch_assoc($result)) {
+		$out_P_DEALNUMBER = $h['P_DEALNUMBER'];
+		$out_P_DEAL_DATE = $h['P_DEALDATE'];
+	}
+
+	// fetch user billing owner data from `BILLING_OWNER
+	$query = "select
+                        BO.name1 as OPERATOR
+                from BILLING_USERS BU
+                        join BILLING_OWNER BO on BU.BILLING_OWNER=BO.ID
+                where BU.`ID`='" . $SES_A['ID_BILLING_USERS'] . "'
+        ";
+	$result=DB::query($query);
+	if ($h = DB::fetch_assoc($result)) {
+		$out_OPERATOR = $h['OPERATOR'];
+	}
+?>
+<style type="text/css">
+.table td {
+  padding: 8px;
+  line-height: 100%;
+  text-align: left;
+  vertical-align: top;
+  border-top: 1px solid #dddddd;
+}
+</style>
+<?
+	$USLUGI=array("USERS2"=>"Internet","TV"=>"Telewizja","VOIP"=>"Telefon");
+
+        echo "<TABLE border=2 cellspacing=0 cellpadding=0 width=100% stle=\"line-height=100%\">
+                <TR><TD COLSPAN=2><font size=+1>
+
+                <b>".$TYP_ZLECENIA."</b></font> <font size=-1>status: <b>" . $SES_A['A_STATUS'] . "</b> Nr <b>" . $SES_A['ID'] . "</b>  z dnia <b>" . $SES_A['A_PROBLEM_DATE'] . "</b></font><br>
+                <font size=-2>Dodatk. Info: <b>" . $SES_A['A_STATUS_INFO'] . "</b> , Other Info:<b> " . $SES_A['S_OTHER_INFO'] . " </b>  Wystawil: <b>
+                " . $_SESSION['ADM_NAME'] . "  <i>(" . $_SESSION['ADM_ACCOUNT'] . ")</i></b> Poziom:<b>" . $_SESSION['ADM_ADMIN_LEVEL'] . "</b> Zasieg: <b>" . $_SESSION['ADM_COMPANY'] . "</b>
+                </TD></TR>
+                <TR><TD COLSPAN=2>
+                <b>Poziom problemu:</b><b>" . $SES_A['A_PROBLEM'] . "</font> </b><br>
+                Opis Problemu:<b> " . $SES_A['A_PROBLEM_DESC'] . " </b>
+                </TD></TR>
+                <TR>
+                <TD><b><i>Dane Klienta</b></i></TD>
+                <TD><b><i>Dane Uslugi</b></i></TD>
+                </TR>
+
+                <TR>
+                <TD style=\"line-height: 1.1\">
+                Operator: <b>" .$out_OPERATOR . "</b><br>
+                Umowa: <b>" . $out_P_DEALNUMBER . "</b> z dnia: <b>" . $out_P_DEAL_DATE . "</b><br>
+                Abonent: <b>" . $out_P_NAME . "</b><br>
+                Kontakty: <b>" . $out_P_PHONE . "</b> Fax:<b>" . $out_P_FAX . " </b><br>
+                Adres: <b>" . $SES_A['S_ADDRESS_STREET'] . "</b>
+                <font size='-2'>
+                Budynek: $MAKE_ORDERER_BUILDING_INFO
+                <hr>
+                Telbox_info:$MAKE_ORDERER_DEVICE_TELBOX_INFO<hr>
+                Dev: $MAKE_ORDERER_DEVICES_LIST<br>
+                Port: $MAKE_ORDERER_DEVICES_PORTS_FREE<hr>
+                Magist: $MAKE_ORDERER_TELBOX_MAGISTRAL IN: $MAKE_ORDERER_TELBOX_MAGISTRAL_IN<br>
+                Sciezka: $A_DB_TELBOX_TRACE_PATH
+                </font>
+                </TD>
+                <TD style=\"font-size: 9px; line-height: 1.1\">
+                <font size='-2'>
+                Usluga: <b>".$USLUGI[$NAME_LIST_SERVICES]." (" . $SES_A['P_SERVICE'] . ")</b><br>
+                Klasa uslugi: <b>" . $SES_A['P_SERVICE_CLASS'] . "</b><br>
+                Dodatkowe urzadzenie: <b>".  $SES_A['P_DEVICE'] . "</b><br>
+                Hostname: <b>" . $SES_A['S_HOST'] . "</b>  Domena: <b>" . $SES_A['S_DOMAIN'] . "</b><br>
+                Username: <b>" . $SES_A['S_ACCOUNT'] . "</b> (" . $SES_A['S_ALIAS'] . ")<br>
+                Password: <b>" . $SES_A['S_PASSWD'] . "</b><br>
+                IP: <b>" . $SES_A['S_IP'] . "</b><br>
+                MAC: <b>" . $SES_A['S_HW'] . "</b>  MAC_STATUS: <b>" . $SES_A['S_HWSTAT'] . "</b><br>
+                Telbox: <b>" . $SES_A['T_TELBOX_ADDRESS'] . "</b> / <b>" . $SES_A['T_TELBOX_PORT'] . "</b><br>
+                Serwer Sieciowy : <b>" . $SES_A['T_NETWORK_SERVER'] . "</b> / <b>" . $SES_A['T_TOPOLOGY_PLACE'] . "</b><br>
+                Spotkania : Data <b> ".$SES_A['L_APPOITMENT_DATE']."</b> Pracownik:<b> ".$SES_A['L_APPOITMENT_USER']."</b>
+                <br>Dlugosc spotkania: <b>".$SES_A['L_APPOITMENT_PERIOD']."min </b> Informacje dodatkowe:".$SES_A['L_APPOITMENT_INFO']." </b>
+                <br>Typ spotkania:<b>".$SES_A['L_APPOITMENT_TYPE']." </b>  <font size=-1>(ARRANGED=umowione)</font>
+                <hr>
+                </font>
+                $MAKE_ORDERER_TELBOX_USERS_LIST $MAKE_ORDERER_TELBOX_USERS
+                </TD>
+                </TR>
+                <tr height=2></tr>
+                <tr><td><font size=+0><b>Potwierdzenie Wykonania</b></font></td><td><font size=+0><b>".$TYP_ZLECENIA." Wykonal</b></font></td></tr>
+                <tr>
+                <td style=\"font-size: 11px; line-height: 1.1\">
+                Rozpoczete platne 30 minut [....] x 30PLN<br><br><br>
+                Dnia .....................................................<br>
+                <br><br>
+                Podpis Abonenta .................................</td>
+                <td style=\"font-size: 11px; line-height: 1.1\"><br>Dnia .....................................................<br>
+                <br><br>
+                Podpis Pracownika ..............................</td>
+                </tr>
+                </table>
+                <font size=-2><i>Copyright &copy; 2014 Procesy5</i></font>
+		</table>
+	";
+
+	if ($TYP_ZLECENIA=="ZLECENIE_MONTAZU") {
+		echo "<p style=\"page-break-before: always\">";
+		KONFIGURACJA($SES_A);
+	}
+}
+
+?>

+ 6 - 5
SE/superedit-view_L_APPOITMENT_OVERWIEV.php

@@ -24,6 +24,7 @@ $trans['A_PROBLEM_DESC']='A_PROBLEM_DESC';
 $trans['L_APPOITMENT_USER']='L_APPOITMENT_USER';
 $trans['L_APPOITMENT_DATE']='L_APPOITMENT_DATE';
 $trans['L_APPOITMENT_PERIOD']='L_APPOITMENT_PERIOD';
+$trans['L_APPOITMENT_INFO']='L_APPOITMENT_INFO';
 $trans['L_APPOITMENT_TYPE']='L_APPOITMENT_TYPE';
 $trans['A_ADM_COMPANY']='A_ADM_COMPANY';
 $trans['A_CLASSIFIED']='A_CLASSIFIED';
@@ -74,11 +75,11 @@ foreach($tbls as $tbl) {
 			foreach($trans as $fld=>$as) {
 			 $sql_[]="`".$fld."` as `".$as."`";
 			}
-			$sql[]=" ( select  `ID`, '".$tbl."' as `TABLE`,".implode(',', $sql_).$transform_." from `".$tbl."` where ( L_APPOITMENT_DATE!='' and unix_timestamp(L_APPOITMENT_DATE>unix_timestamp(now()-62000000)) )  order by A_RECORD_UPDATE_DATE DESC limit 100 ) ";
+			$sql[]=" ( select  `ID`, '".$tbl."' as `TABLE`,".implode(',', $sql_).$transform_." from `".$tbl."` where ( L_APPOITMENT_DATE!='' )   order by A_RECORD_UPDATE_DATE DESC  ) ";
 			
 			
 			$msc=microtime(true);
-			$conn->query("select  `ID`, '".$tbl."' as `TABLE`,".implode(',', $sql_).$transform_." from `".$tbl."` where L_APPOITMENT_DATE!=''   order by A_RECORD_UPDATE_DATE DESC limit 100 ");
+			$conn->query("select  `ID`, '".$tbl."' as `TABLE`,".implode(',', $sql_).$transform_." from `".$tbl."` where L_APPOITMENT_DATE!=''   order by A_RECORD_UPDATE_DATE DESC   ");
 			$msc=microtime(true)-$msc;
 			$czas[]="Czas ".$msc." dla tabeli ".$tbl;
 			
@@ -92,13 +93,13 @@ foreach($tbls as $tbl) {
 
 
 
-		DEBUG_S(-3,'sql',$sql,__FILE__,__FUNCTION__,__LINE__);
+		DEBUG_S(3,'sql',$sql,__FILE__,__FUNCTION__,__LINE__);
 
 		$sql_alter=$sql_drop." ".$sql_create." ".implode(" ", $sql);
 		DEBUG_S(-3,'sql_alter',$sql_alter,__FILE__,__FUNCTION__,__LINE__);
 		DEBUG_S(-3,'czasy',$czas,__FILE__,__FUNCTION__,__LINE__);
-
-
+		$res=$conn->query($sql_alter);
+		DEBUG_S(-3,'res',$res);
 //$struct=$conn->STRUCTURE_GENERATE($tbls);