Explorar el Código

added approve functions in ProNetMediaZam

Piotr Labudda hace 10 años
padre
commit
799bc4a4d3

+ 1 - 0
SE/se-lib/Route/UrlAction.php

@@ -142,6 +142,7 @@ class Route_UrlAction extends RouteBase {// TODO: UrlActionBase
 		}
 		$functions = array();
 		foreach ($rows as $row) {
+			// TODO: Router::getRoute("UrlAction_{$row['fun_name']}")->isRecordAllowed($idTbl, $idRecord, $tblName);
 			if (!array_key_exists($row['ID'], $functions)) {
 				$fun = array();
 				$fun['label'] = $row['fun_label'];

+ 100 - 0
SE/se-lib/Route/UrlAction/ProjektyProNetMediaApproveZam.php

@@ -0,0 +1,100 @@
+<?php
+
+Lib::loadClass('RouteBase');
+Lib::loadClass('TypespecialVariable');
+Lib::loadClass('Request');
+Lib::loadClass('Response');
+
+class Route_UrlAction_ProjektyProNetMediaApproveZam extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
+
+	public function handleAuth() {
+		if (!User::logged()) {
+			User::authByRequest();
+		}
+	}
+
+	public function defaultAction() {
+		SE_Layout::gora();
+		if (1 != V::get('_print', '', $_GET)) SE_Layout::menu();
+		try {
+			$data = array();
+			$data['id_order'] = V::get('ID_ORDER', 0, $_REQUEST, 'int');
+			if (!$data['id_order']) throw new Exception("Error: Brak nr zamówienia!");
+			$data = $this->setProps($data);
+			$this->approveFormView($data);
+		} catch (Exception $e) {
+			SE_Layout::alert('danger', "Error #" . $e->getCode() .  "|" . $e->getLine() .  ": " . $e->getMessage());
+		}
+		SE_Layout::dol();
+	}
+
+	public function approveOrderAction() {
+	}
+
+	public function rejectOrderAction() {
+	}
+
+	public function setProps($data) {
+		$idOrder = V::get('id_order', 0, $data, 'int');
+		if (!$idOrder) throw new Exception("Error: Brak nr zamówienia!");
+		$data['id_order'] = $idOrder;
+		$data['zamowienie_label'] = '';
+
+		$data['orderRaw'] = DB::getPDO()->fetchAll("
+			select r.ID
+					, r.ORDER_LABEL
+					, r.ID_PROJECT
+					, sum(o.OFFER_PRICE_PER_UNIT * o.OFFER_QUANTITY) as SUM_NETTO
+					, p.M_DIST_DESC
+			from CRM_LISTA_ZASOBOW_ORDERS r
+				join IN7_MK_BAZA_DYSTRYBUCJI p on(p.ID = r.ID_PROJECT)
+				left join CRM_LISTA_ZASOBOW_OFFERS o on(
+					o.ID_ORDER = r.ID
+					and (o.A_STATUS is null or o.A_STATUS not in('DELETED'))
+				)
+			where (r.A_STATUS is null or r.A_STATUS not in('DELETED'))
+				and r.ID = {$idOrder}
+		");
+		if (empty($data['orderRaw'])) throw new Exception("Error: Brak danych dla zamówienia {$idOrder}!");
+		$data['orderRaw'] = $data['orderRaw'][0];
+		$data['zamowienie_label'] = $data['orderRaw']['ORDER_LABEL'];
+		$data['zamowienie_suma'] = number_format($data['orderRaw']['SUM_NETTO'], 2, ',', ' ');
+		$data['id_project'] = $data['orderRaw']['ID_PROJECT'];
+		$data['project_label'] = $data['orderRaw']['M_DIST_DESC'];
+
+		return $data;
+	}
+
+	public function approveFormView($data) {
+		?>
+<div class="container">
+	<h1>Zamówienie: <?php echo $data['zamowienie_label']; ?>
+		<br><small>Dotyczy projektu: <?php echo $data['project_label']; ?></small>
+	</h1>
+
+	<?php echo SE_Layout::alert('info', "Suma netto zamówienia: <b>{$data['zamowienie_suma']}</b>"); ?>
+
+	<form style="text-align:center">
+		<input type="hidden" name="_route" value="UrlAction_ProjektyProNetMediaApproveZam">
+		<button onClick="return approveOrder(this);" class="btn btn-lg btn-primary">Zatwierdzam</button>
+		<button onClick="return rejectOrder(this);" class="btn btn-lg btn-danger" style="margin-left:30px">Nie zatwierdzam</button>
+	</form>
+
+	<hr>
+	<?php Router::getRoute('UrlAction_ProjektyProNetMediaZamZlec')->previewOrder($data['id_order']); ?>
+</div>
+<script>
+function approveOrder(fld) {
+	var frm = fld.form;
+	frm['_task'].value='approveOrder';
+}
+function rejectOrder(fld) {
+	var frm = fld.form;
+	frm['_task'].value='rejectOrder';
+}
+</script>
+		<?php
+		DBG::_(true, true, 'data', $data, __CLASS__, __FUNCTION__, __LINE__);
+	}
+
+}

+ 161 - 0
SE/se-lib/Route/UrlAction/ProjektyProNetMediaBudget.php

@@ -0,0 +1,161 @@
+<?php
+
+Lib::loadClass('RouteBase');
+Lib::loadClass('TypespecialVariable');
+Lib::loadClass('Request');
+Lib::loadClass('Response');
+
+class Route_UrlAction_ProjektyProNetMediaBudget extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
+
+	public function handleAuth() {
+		if (!User::logged()) {
+			User::authByRequest();
+		}
+	}
+
+/*
+
+Kwota planowana:	`M_DIST_COST_PROJECT` Budżet projektu
+Zamówienie:				sumy z CRM_LISTA_ZASOBOW_ORDERS (CRM_LISTA_ZASOBOW_OFFERS)
+zaliczki
+ilość pracowników / koszty pracownicze: powiązanie z raportami X współczynnik
+koszty sprzętu/ wynajmowany na budowie: rozdział na różne rodzaj sprzętu: koparka itp.
+koszty własne: naprawy sprzętu
+koszty materiałów
+osprzet
+dodatkowe koszty związane z nadwyżkami - rozbieżności odnośnie ustaleń
+
+dostęp dla zarządu i os. odp.	kwota końcowa
+
+*/
+
+	public function defaultAction() {
+		SE_Layout::gora();
+		if (1 != V::get('_print', '', $_GET)) SE_Layout::menu();
+		try {
+			$data = array();
+			$data['id_project'] = V::get('ID_PROJECT', 0, $_REQUEST, 'int');
+			if (!$data['id_project']) throw new Exception("Error: Brak nr projektu!");
+			$data = $this->setProps($data);
+			$this->budgetView($data);
+		} catch (Exception $e) {
+			SE_Layout::alert('danger', "Error #" . $e->getCode() .  "|" . $e->getLine() .  ": " . $e->getMessage());
+		}
+		SE_Layout::dol();
+	}
+
+	public function setProps($data) {
+		$idProj = V::get('id_project', 0, $data, 'int');
+		if (!$idProj) return $data;// throw errro?
+		$data['budget'] = 0;
+		$data['projectInfo'] = null;
+		$data['projectLabel'] = '';
+		$data['costs'] = array();
+
+		$rows = DB::getPDO()->fetchAll("
+			select p.ID
+					, p.M_DIST_DESC
+					, p.M_DIST_DEALNUM
+					, p.M_DIST_COST_PROJECT
+			from IN7_MK_BAZA_DYSTRYBUCJI p
+			where p.A_STATUS not in('DELETED')
+				and p.ID = {$idProj}
+		");
+		if (empty($rows)) return $data;// throw errro?
+		$data['projectInfo'] = $rows[0];
+		$data['budget'] = V::get('M_DIST_COST_PROJECT', 0, $data['projectInfo']);
+		$data['projectLabel'] = $data['projectInfo']['M_DIST_DESC'];
+		$data['budget'] = V::get('DBG_M_DIST_COST_PROJECT', $data['budget'], $_GET);// TODO: TEST
+
+		$data['ordersRaw'] = DB::getPDO()->fetchAll("
+			select r.ID
+					, r.ORDER_LABEL
+					, sum(o.OFFER_PRICE_PER_UNIT * o.OFFER_QUANTITY) as SUM_NETTO
+			from CRM_LISTA_ZASOBOW_ORDERS r
+				left join CRM_LISTA_ZASOBOW_OFFERS o on(
+					o.ID_ORDER = r.ID
+					and (o.A_STATUS is null or o.A_STATUS not in('DELETED'))
+				)
+			where (r.A_STATUS is null or r.A_STATUS not in('DELETED'))
+				and r.ID_PROJECT = {$idProj}
+			group by r.ID
+		");
+
+		// $data['costs'] = array();
+		{
+			$idx = 0;
+			foreach ($data['ordersRaw'] as $idxOrders => $order) {
+				if (count($data['costs']) < $idxOrders + 1) {
+					$data['costs'][] = array(
+						'cost_zamowienia'=>$order['SUM_NETTO'],
+						'cost_zaliczki'=>0,
+						'cost_pracownicy'=>0,
+						'cost_wynajem'=>0,
+						'cost_serwis'=>0,
+						'cost_materialy'=>0,
+						'cost_osprzet'=>0,
+						'cost_dodatkowe'=>0,
+						'sum'=>0,
+						'orderRaw'=>$order
+					);
+				}
+			}
+			$budget = $data['budget'];
+			foreach ($data['costs'] as $idx => $cost) {
+				$sum = $cost['cost_zamowienia']
+				 	+ $cost['cost_zaliczki']
+				 	+ $cost['cost_pracownicy']
+				 	+ $cost['cost_wynajem']
+				 	+ $cost['cost_serwis']
+				 	+ $cost['cost_materialy']
+				 	+ $cost['cost_osprzet']
+				 	+ $cost['cost_dodatkowe']
+				;
+				$budget -= $sum;
+				$data['costs'][$idx]['budget_minus_sum'] = $budget;
+				$data['costs'][$idx]['sum'] = $sum;
+			}
+		}
+		return $data;
+	}
+
+	public function budgetView($data) {
+		?>
+<div class="container">
+	<h1>Projekt: <?php echo $data['projectLabel']; ?></h1>
+	<table class="table table-bordered">
+		<thead>
+			<tr>
+				<th>Kwota planowana<br><?php echo number_format($data['budget'], 2, ',', ' '); ?></th>
+				<th>Zamówienie</th>
+				<th>zaliczki</th>
+				<th>ilość pracowników / koszty pracownicze: powiązanie z raportami X współczynnik</th>
+				<th>koszty sprzętu/ wynajmowany na budowie: rozdział na różne rodzaj sprzętu: koparka itp.</th>
+				<th>koszty własne: naprawy sprzętu</th>
+				<th>koszty materiałów</th>
+				<th>osprzet</th>
+				<th>dodatkowe koszty związane z nadwyżkami - rozbieżności odnośnie ustaleń</th>
+			</tr>
+		</thead>
+		<tbody>
+			<?php foreach ($data['costs'] as $cost) : ?>
+				<tr>
+					<td><?php echo $cost['budget_minus_sum']; ?></td>
+					<td><?php echo $cost['cost_zamowienia']; ?></td>
+					<td><?php echo $cost['cost_zaliczki']; ?></td>
+					<td><?php echo $cost['cost_pracownicy']; ?></td>
+					<td><?php echo $cost['cost_wynajem']; ?></td>
+					<td><?php echo $cost['cost_serwis']; ?></td>
+					<td><?php echo $cost['cost_materialy']; ?></td>
+					<td><?php echo $cost['cost_osprzet']; ?></td>
+					<td><?php echo $cost['cost_dodatkowe']; ?></td>
+				</tr>
+			<?php endforeach; ?>
+		</tbody>
+	</table>
+</div>
+		<?php
+		//DBG::_(true, true, 'data', $data, __CLASS__, __FUNCTION__, __LINE__);
+	}
+
+}

+ 94 - 0
SE/se-lib/Route/UrlAction/ProjektyProNetMediaRequestApproveZam.php

@@ -0,0 +1,94 @@
+<?php
+
+Lib::loadClass('RouteBase');
+Lib::loadClass('TypespecialVariable');
+Lib::loadClass('Request');
+Lib::loadClass('Response');
+
+class Route_UrlAction_ProjektyProNetMediaRequestApproveZam extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
+
+	public function handleAuth() {
+		if (!User::logged()) {
+			User::authByRequest();
+		}
+	}
+
+	public function defaultAction() {
+		SE_Layout::gora();
+		if (1 != V::get('_print', '', $_GET)) SE_Layout::menu();
+		try {
+			$data = array();
+			$data['id_order'] = V::get('ID_ORDER', 0, $_REQUEST, 'int');
+			if (!$data['id_order']) throw new Exception("Error: Brak nr zamówienia!");
+			$data = $this->setProps($data);
+			$this->approveFormView($data);
+		} catch (Exception $e) {
+			SE_Layout::alert('danger', "Error #" . $e->getCode() .  "|" . $e->getLine() .  ": " . $e->getMessage());
+		}
+		SE_Layout::dol();
+	}
+
+	public function setProps($data) {
+		$idOrder = V::get('id_order', 0, $data, 'int');
+		if (!$idOrder) throw new Exception("Error: Brak nr zamówienia!");
+		$data['id_order'] = $idOrder;
+		$data['zamowienie_label'] = '';
+
+		$data['orderRaw'] = DB::getPDO()->fetchAll("
+			select r.ID
+					, r.ORDER_LABEL
+					, r.ID_PROJECT
+					, sum(o.OFFER_PRICE_PER_UNIT * o.OFFER_QUANTITY) as SUM_NETTO
+					, p.M_DIST_DESC
+			from CRM_LISTA_ZASOBOW_ORDERS r
+				join IN7_MK_BAZA_DYSTRYBUCJI p on(p.ID = r.ID_PROJECT)
+				left join CRM_LISTA_ZASOBOW_OFFERS o on(
+					o.ID_ORDER = r.ID
+					and (o.A_STATUS is null or o.A_STATUS not in('DELETED'))
+				)
+			where (r.A_STATUS is null or r.A_STATUS not in('DELETED'))
+				and r.ID = {$idOrder}
+		");
+		if (empty($data['orderRaw'])) throw new Exception("Error: Brak danych dla zamówienia {$idOrder}!");
+		$data['orderRaw'] = $data['orderRaw'][0];
+		$data['zamowienie_label'] = $data['orderRaw']['ORDER_LABEL'];
+		$data['zamowienie_suma'] = number_format($data['orderRaw']['SUM_NETTO'], 2, ',', ' ');
+		$data['id_project'] = $data['orderRaw']['ID_PROJECT'];
+		$data['project_label'] = $data['orderRaw']['M_DIST_DESC'];
+
+		return $data;
+	}
+
+	public function approveFormView($data) {
+		?>
+<div class="container">
+	<h1>Zamówienie: <?php echo $data['zamowienie_label']; ?>
+		<br><small>Dotyczy projektu: <?php echo $data['project_label']; ?></small>
+	</h1>
+
+	<?php echo SE_Layout::alert('info', "Suma netto zamówienia: <b>{$data['zamowienie_suma']}</b>"); ?>
+
+	<form style="text-align:center">
+		<input type="hidden" name="_route" value="UrlAction_ProjektyProNetMediaRequestApproveZam">
+		<button onClick="return approveOrder(this);" class="btn btn-lg btn-primary">Zatwierdzam</button>
+		<button onClick="return rejectOrder(this);" class="btn btn-lg btn-danger" style="margin-left:30px">Nie zatwierdzam</button>
+	</form>
+
+	<hr>
+	<?php Router::getRoute('UrlAction_ProjektyProNetMediaZamZlec')->previewOrder($data['id_order']); ?>
+</div>
+<script>
+function approveOrder(fld) {
+	var frm = fld.form;
+	frm['_task'].value='approveOrder';
+}
+function rejectOrder(fld) {
+	var frm = fld.form;
+	frm['_task'].value='rejectOrder';
+}
+</script>
+		<?php
+		DBG::_(true, true, 'data', $data, __CLASS__, __FUNCTION__, __LINE__);
+	}
+
+}

+ 97 - 32
SE/se-lib/Route/UrlAction/ProjektyProNetMediaZamZlec.php

@@ -4,6 +4,8 @@ Lib::loadClass('RouteBase');
 Lib::loadClass('TypespecialVariable');
 Lib::loadClass('Request');
 Lib::loadClass('Response');
+Lib::loadClass('ProcesHelper');
+Lib::loadClass('Route_UrlAction');
 
 class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
 
@@ -13,24 +15,6 @@ class Route_UrlAction_ProjektyProNetMediaZamZlec extends RouteBase {// TODO: Url
 		}
 	}
 
-/*
-
-Kwota planowana
-Zamówienie
-zaliczki
-ilość pracowników / koszty pracownicze: powiązanie z raportami X współczynnik
-koszty sprzętu/ wynajmowany na budowie: rozdział na różne rodzaj sprzętu: koparka itp.
-koszty własne: naprawy sprzętu
-koszty materiałów
-osprzet
-dodatkowe koszty związane z nadwyżkami - rozbieżności odnośnie ustaleń
-
-
-podkład fv	podkład fv
-dostęp dla zarządu i os. odp.	kwota końcowa
-
-*/
-
 	public function typespecialAction() {
 		$DBG = ('1' == V::get('DBG', '', $_REQUEST));
 		header("Content-type: application/json");
@@ -205,15 +189,28 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 			$data['id_company'] = $id_company;
 			$data['id_project'] = $id_project;
 			$data = $this->setProps($data);
-			$this->zamowienieView($data);
+			$mode = (V::get('_print', '', $_REQUEST))? 'print' : 'view';
+			$this->zamowienieView($data, $mode);
 		} catch (Exception $e) {
 			SE_Layout::alert('danger', "Error #" . $e->getCode() .  "|" . $e->getLine() .  ": " . $e->getMessage());
 		}
 		SE_Layout::dol();
 	}
 
+	public function previewOrder($idOrder) {
+		try {
+			$id_order = $idOrder;
+			$data = array();
+			$data['id'] = $id_order;
+			$data = $this->setProps($data);
+			$this->zamowienieView($data, $mode = 'preview');
+		} catch (Exception $e) {
+			SE_Layout::alert('danger', "Error #" . $e->getCode() .  "|" . $e->getLine() .  ": " . $e->getMessage());
+		}
+	}
+
 	public function setProps($data) {
-		$data['_nr_budowy'] = '';// TODO: fetch from project - field M_DIST_DESC
+		$data['_nr_budowy'] = '';// fetch from project - field M_DIST_DESC
 
 		$sqlIdOrder = V::get('id', 0, $data, 'int');
 		if ($sqlIdOrder > 0) {
@@ -360,7 +357,7 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 					<input type="hidden" name="_task" value="">
 					<label>Dodaj nowe </label>
 		      <button type="submit" class="btn btn-primary" onclick="return submitZamowienie(this);">Zamówienie</button>
-		      <button type="submit" class="btn btn-primary" onclick="return submitZlecenie(this);">Zlecenie</button>
+		      <!-- <button type="submit" class="btn btn-primary" onclick="return submitZlecenie(this);">Zlecenie</button> -->
 		    </div>
 		  </div>
 	</form>
@@ -370,19 +367,46 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 		<thead>
 			<tr>
 				<th>#</th>
-				<th>id</th>
+				<th>status</th>
 				<th>nr zlecenia</th>
 				<th>nr budowy</th>
 			</tr>
 		</thead>
 		<tbody>
 		<?php foreach ($projOrders as $order) : ?>
+			<?php
+			$changeState = array();
+			$idTableOrders = ProcesHelper::getZasobTableID('CRM_LISTA_ZASOBOW_ORDERS');
+			$urlFunctions = Route_UrlAction::getTableFunctions($idTableOrders, $order['ID'], 'CRM_LISTA_ZASOBOW_ORDERS', User::getLogin());
+			//DBG::_(true, true, 'urlFunctions', $urlFunctions);
+			if ('WERSJA_ROBOCZA' == $order['APPROVE_STATUS']) {
+				foreach ($urlFunctions as $fun) {
+					if ('ProjektyProNetMediaRequestApproveZam' == $fun['name']) {
+						$changeState['OCZEKUJE_ZATWIERDZENIA'] = $fun;
+					}
+				}
+			}
+			else if ('OCZEKUJE_ZATWIERDZENIA' == $order['APPROVE_STATUS']) {
+				foreach ($urlFunctions as $fun) {
+					if ('ProjektyProNetMediaApproveZam' == $fun['name']) {
+						$changeState['ZATWIERDZONE'] = $fun;
+					}
+				}
+			}
+			?>
 			<tr>
 				<td>
+					<?php echo $order['ID']; ?>
 					<a href="index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=<?php echo $order['ORDER_TYPE']; ?>&id=<?php echo $order['ID']; ?>"
 						class="btn btn-link btn-xs">Edytuj <?php echo $order['ORDER_TYPE']; ?></a>
 				</td>
-				<td><?php echo $order['ID']; ?></td>
+				<td><?php echo $order['APPROVE_STATUS']; ?>
+					<?php if (!empty($changeState)) : ?>
+						<?php foreach ($changeState as $key => $fun) : ?>
+							<a href="<?php echo $this->generateFunctionLink($fun, $idTableOrders, $order['ID'], $order); ?>" class="btn btn-xs btn-default">Zmień na: <?php echo $key; ?></a>
+						<?php endforeach; ?>
+					<?php endif; ?>
+				</td>
 				<td><?php echo $order['ORDER_LABEL']; ?></td>
 				<td><?php echo $order['obcy_nr_sprawy']; ?></td>
 			</tr>
@@ -403,6 +427,46 @@ function submitZlecenie(fld) {
 <?php
 	}
 
+	public function generateFunctionLink($fun, $idTableOrders, $idOrder, $order) {
+		$link = $fun['baseLink'];
+		if (empty($fun['cell_id_params'])) return $link;
+		$fieldMap = array();
+		{
+			$rows = DB::getPDO()->fetchAll("
+				select z.ID, z.`DESC`
+				from CRM_LISTA_ZASOBOW z
+				where z.PARENT_ID = '{$idTableOrders}'
+					and z.`TYPE` = 'KOMORKA'
+			");
+			if (empty($rows)) return '#';
+			foreach ($rows as $row) {
+				$fieldMap[ $row['ID'] ] = $row['DESC'];
+			}
+			if (empty($fieldMap)) return '#';
+		}
+		$record = null;
+		{
+			$rows = DB::getPDO()->fetchAll("
+				select r.*
+				from CRM_LISTA_ZASOBOW_ORDERS r
+				where r.ID = '{$idOrder}'
+			");
+			if (empty($rows)) return '#';
+			$record = $rows[0];
+		}
+		if (!$record) return '#';
+		$urlParams = array();// [ "{$urlParamName}={$paramValue}" ]
+		foreach ($fun['cell_id_params'] as $idField => $urlParamName) {
+			$paramValue = '';
+			if (array_key_exists($idField, $fieldMap)) {
+				$paramValue = V::get($fieldMap[$idField], '', $record);
+				$urlParams[] = "{$urlParamName}={$paramValue}";
+			}
+		}
+		if (!empty($urlParams)) $link .= "&" . implode("&", $urlParams);
+		return $link;
+	}
+
 	public function zlecenieView($data) {
 		$ile_pozycji = V::get('ile_pozycji', 10, $data);
 		?>
@@ -712,7 +776,7 @@ body { font-size:12px; line-height:1.3em }
 		return $orderPosList;
 	}
 
-	public function zamowienieView($data) {
+	public function zamowienieView($data, $mode = 'view') {
 		$id_order = V::get('id', 0, $data);
 		$id_company = V::get('id_company', 0, $data);
 		$id_project = V::get('id_project', 0, $data);
@@ -739,10 +803,10 @@ body { font-size:12px; line-height:1.3em }
 #tbl-items td { padding:3px !important }
 @media print {
 	body { font-size:9px; line-height:1.2em }
-		h4 { font-size:1.1em; margin-top:8px; margin-bottom:6px }
-		h3 { font-size:1.2em; margin-top:8px; margin-bottom:6px }
-		h2 { font-size:1.3em; margin-top:8px; margin-bottom:6px }
-		h1 { font-size:1.4em; margin-top:8px; margin-bottom:6px }
+		h4 { font-size:1.3em; margin-top:8px; margin-bottom:6px }
+		h3 { font-size:1.5em; margin-top:8px; margin-bottom:6px }
+		h2 { font-size:1.6em; margin-top:8px; margin-bottom:6px }
+		h1 { font-size:1.8em; margin-top:8px; margin-bottom:6px }
 
  table { page-break-inside:auto }
 		tr { page-break-inside:avoid; page-break-after:auto }
@@ -766,7 +830,7 @@ body { font-size:12px; line-height:1.3em }
 <script src="stuff/vendors.js"></script>
 <script src="stuff/bundle.se_route_orders.js"></script>
 <script>
-var _mode = '<?php echo (V::get('_print', '', $_REQUEST))? 'print' : 'view'; ?>';
+var _mode = '<?php echo $mode; ?>';
 var _projectInfo = {id: 5130};// TODO: ID PROJECT - use only fields?
 var _notes = 'NA FAKTURZE VAT NALEŻY UMIESZCZAĆ CZYTELNY NR ZAMÓWIENIA';
 var _pos = <?php echo json_encode($orderPosList); ?>;
@@ -892,7 +956,7 @@ jQuery("#widget-orders").p5_Orders({
     city: '',
     nip: ''
   },
-	backLink: 'index.php?_route=UrlAction_ProjektyProNetMediaZamZlec',
+	backLink: 'index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&ID_PROJECT=<?php echo $id_project; ?>',
 	printLink: 'index.php?_route=UrlAction_ProjektyProNetMediaZamZlec&_task=zamowienie&_print=1',
   printIdOrderArg: 'id',
 	projectInfo: _projectInfo,
@@ -950,7 +1014,7 @@ jQuery("#widget-orders").p5_Orders({
 </script>
 <script>
 jQuery(document).ready(function() {
-	var _mode = '<?php echo (V::get('_print', '', $_REQUEST))? 'print' : 'view'; ?>';
+	var _mode = '<?php echo $mode; ?>';
 	document.title = 'zamowienie_nr_<?php echo V::get('ORDER_LABEL', 'nr zamówienia / inicjały zamawiającego / numer budowy / miesiąc / rok', $data); ?>';
 	if ('print' == _mode) {
 		window.print();
@@ -1074,7 +1138,8 @@ CREATE TABLE IF NOT EXISTS `CRM_LISTA_ZASOBOW_ORDERS_HIST` (
   KEY `ID_USERS2` (`ID_USERS2`)
 ) ENGINE=MyISAM  DEFAULT CHARSET=latin2;
 
-CREATE VIEW `CRM_LISTA_ZASOBOW_ORDERS_summary_view` AS SELECT o.`ID`
+CREATE VIEW `CRM_LISTA_ZASOBOW_ORDERS_summary_view` AS
+	SELECT o.`ID`
 		, o.`ID_COMPANIES`
 		, o.`ID_PROJECT`
 		, o.`ID_PROJECT_path`