Przeglądaj źródła

added aneks, kary, recalculate costs in Budget for pro-netmedia

Piotr Labudda 9 lat temu
rodzic
commit
d85c624179

+ 152 - 94
SE/se-lib/Route/UrlAction/ProjektyProNetMediaBudget.php

@@ -6,8 +6,8 @@ Lib::loadClass('Request');
 Lib::loadClass('Response');
 Lib::loadClass('UI');
 
-// TODO: Typepsecial do Koresp.ORDER_NR
-// TODO: widoki zamówień wg statusu - ustalić dostępy za pomocą procesów
+// - [ ] TODO: widoki zamówień wg statusu - ustalić dostępy za pomocą procesów
+// - [x] Typepsecial do Koresp.ORDER_NR
 /*
 DBG:
 	&DBG_M_DIST_COST_PROJECT=10000
@@ -127,9 +127,7 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 						'data'=>$order['ORDER_DATE'],
 						'order_approve_status'=>$order['APPROVE_STATUS'],
 						'order_cost'=>$order['SUM_NETTO'],
-						'cost_zamowienia'=>$order['SUM_NETTO'],// TODO: RMME -> mved to `order_cost`
 						'order_nr'=>$labelOrder,
-						'nr_zamowienia'=>$labelOrder,// TODO: RMME -> mved to `order_nr`
 						'nr_fv_do_zamowienia'=>array(),
 						'sum'=>$order['SUM_NETTO'],
 						'orderRaw'=>$order
@@ -155,7 +153,7 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 				foreach ($data['fvToOrdersRaw'] as $fv) {
 					$labelOrder = $fv['ORDER_NR'];
 					foreach ($data['costs'] as $cost) {
-						if ($isOrder && $labelOrder == $cost['nr_zamowienia']) {
+						if ($isOrder && $labelOrder == $cost['order_nr']) {
 							$idKoresp = $fv['ID'];
 							// $cost['nr_fv_do_zamowienia'][$idKoresp] = $fv['obcy_nr_koresp'];
 							$cost['nr_fv_do_zamowienia'][] = array('id'=>$idKoresp, 'nr'=>$fv['obcy_nr_koresp'], 'cost'=>$fv['cost']);
@@ -184,21 +182,21 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 						'costRaw'=>$projCost
 					);
 					switch ($projCost['COST_TYPE']) {
-						case 'ANEKS': $item['TODO__budget_aneks'] = $projCost['COST_VALUE']; break;
-						case 'KARY': $item['TODO__budget_kary'] = $projCost['COST_VALUE']; break;
-						case 'OSPRZET': $item['TODO__budget_osprzet'] = $projCost['COST_VALUE']; break;
-						case 'MATERIALY': $item['TODO__budget_materialy'] = $projCost['COST_VALUE']; break;
-						case 'PRACOWNICY': $item['TODO__budget_koszt_pracownikow'] = $projCost['COST_VALUE']; break;
-						case 'PODWYKONAWCY': $item['TODO__budget_koszt_podwykonawcow'] = $projCost['COST_VALUE']; break;
-						case 'REPREZENTACYJNE': $item['TODO__budget_koszt_reprezentacyjny'] = $projCost['COST_VALUE']; break;
-						case 'ZALICZKA_KWOTA': $item['TODO__budget_zaliczki'] = $projCost['COST_VALUE']; break;
-						case 'ZALICZKA_KOSZTY_DZIENNE': $item['TODO__budget_rozliczone_zaliczki'] = $projCost['COST_VALUE']; break;
-						case 'ZGODY_SLUZEBNOSCI': $item['TODO__budget_zgoda_sluzebnosci'] = $projCost['COST_VALUE']; break;
-						case 'ZGODY_ODSZKODOWANIA': $item['TODO__budget_zgoda_odszkodowania'] = $projCost['COST_VALUE']; break;
-						case 'SPRZET_WLASNY': $item['TODO__budget_sprzet_wlasny'] = $projCost['COST_VALUE']; break;
-						case 'SPRZET_WYNAJETY': $item['TODO__budget_sprzet_wynajety'] = $projCost['COST_VALUE']; break;
-						case 'ORGANIZACJA_RUCHU': $item['TODO__budget_organizacja_ruchu'] = $projCost['COST_VALUE']; break;
-						case 'ZAJETOSC_PASA': $item['TODO__budget_zajetosc_pasa'] = $projCost['COST_VALUE']; break;
+						case 'ANEKS': $item['budget_aneks'] = (float)$projCost['COST_VALUE']; break;
+						case 'KARY': $item['budget_kary'] = (float)$projCost['COST_VALUE']; break;
+						case 'OSPRZET': $item['budget_osprzet'] = (float)$projCost['COST_VALUE']; break;
+						case 'MATERIALY': $item['budget_materialy'] = (float)$projCost['COST_VALUE']; break;
+						case 'PRACOWNICY': $item['budget_koszt_pracownikow'] = (float)$projCost['COST_VALUE']; break;
+						case 'PODWYKONAWCY': $item['budget_koszt_podwykonawcow'] = (float)$projCost['COST_VALUE']; break;
+						case 'REPREZENTACYJNE': $item['budget_koszt_reprezentacyjny'] = (float)$projCost['COST_VALUE']; break;
+						case 'ZALICZKA_KWOTA': $item['budget_zaliczki'] = (float)$projCost['COST_VALUE']; break;
+						case 'ZALICZKA_KOSZTY_DZIENNE': $item['budget_rozliczone_zaliczki'] = (float)$projCost['COST_VALUE']; break;
+						case 'ZGODY_SLUZEBNOSCI': $item['budget_zgoda_sluzebnosci'] = (float)$projCost['COST_VALUE']; break;
+						case 'ZGODY_ODSZKODOWANIA': $item['budget_zgoda_odszkodowania'] = (float)$projCost['COST_VALUE']; break;
+						case 'SPRZET_WLASNY': $item['budget_sprzet_wlasny'] = (float)$projCost['COST_VALUE']; break;
+						case 'SPRZET_WYNAJETY': $item['budget_sprzet_wynajety'] = (float)$projCost['COST_VALUE']; break;
+						case 'ORGANIZACJA_RUCHU': $item['budget_organizacja_ruchu'] = (float)$projCost['COST_VALUE']; break;
+						case 'ZAJETOSC_PASA': $item['budget_zajetosc_pasa'] = (float)$projCost['COST_VALUE']; break;
 					}
 					$data['costs'][] = $item;
 				}
@@ -263,7 +261,7 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 		<thead>
 			<tr>
 				<td rowspan="5" colspan="1" style="width:80px; text-align:center; vertical-align:middle">data</td>
-				<td rowspan="1" colspan="6" style="padding:0">
+				<td rowspan="1" colspan="5" style="padding:0">
 					<table class="table table-bordered" style="width:100%; margin:0; border:0">
 						<tr>
 							<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle; border-top:0; border-left:0">data rozpoczęcia umowy</td>
@@ -287,24 +285,23 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 				<td rowspan="3" colspan="2" style="text-align:center; vertical-align:middle">Koszty projektu</td>
 			</tr>
 			<tr>
-				<td rowspan="1" colspan="2" style="text-align:center; vertical-align:middle">Kwota Umowy (netto)</td>
+				<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle">Kwota Umowy (netto)</td>
 				<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle">Aneks (netto)</td>
 				<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle">kary, potrącenia (netto)</td>
 				<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle">Osprzęt</td>
 				<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle">Materiały</td>
 			</tr>
 			<tr>
-				<th rowspan="3" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap"><?php echo UI::price($data['budget']); ?></th>
-				<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle">Zysk/Strata</td>
-				<th rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none"><?php echo UI::price($data['TODO__aneks_netto']); ?></th>
-				<th rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none"><?php echo UI::price($data['TODO__kary_netto']); ?></th>
-				<th rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none"><?php echo UI::price($data['COST_OSPRZET']); ?></th>
-				<th rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none"><?php echo UI::price($data['COST_MATERIALY']); ?></th>
+				<th rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none"><?php echo UI::price($data['budget']); ?><br><span id="p5Budget__zysk_strata" style="font-size:11px; font-weight:normal; white-space:nowrap"></span></th>
+				<th rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none" id="p5Budget__aneks"></th>
+				<th rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none" id="p5Budget__kary"></th>
+				<th rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none"><?php echo UI::price($data['COST_OSPRZET']); ?><br><span id="p5Budget__osprzet_zysk_strata" style="font-size:11px; font-weight:normal; white-space:nowrap"></span></th>
+				<th rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none"><?php echo UI::price($data['COST_MATERIALY']); ?><br><span id="p5Budget__materialy_zysk_strata" style="font-size:11px; font-weight:normal; white-space:nowrap"></span></th>
 				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">koszty pracowników</td>
 				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">koszt firmy podwykonawczej</td>
 			</tr>
 			<tr>
-				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; <?php echo $styleZyskStrata; ?>"><?php echo UI::price($data['TODO__sum_zysk_strata']); ?></td>
+				<!-- <td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; <?php echo $styleZyskStrata; ?>"><?php echo UI::price($data['TODO__sum_zysk_strata']); ?></td> -->
 				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">numer zamówienia (kwota netto)</td>
 				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">numer faktury kwota po weryfikacji</td>
 				<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">zaliczka kwota</td>
@@ -317,6 +314,7 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 				<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">zajętość pasa drogowego</td>
 			</tr>
 			<tr>
+				<td rowspan="1" colspan="1" style="padding:0; text-align:center; vertical-align:middle; border-top:none"></td>
 				<td rowspan="1" colspan="1" style="padding:0; text-align:center; vertical-align:middle; border-top:none"><button onClick="return p5UI__Clickable(this, 'p5:Budget:addCost', {type: 'ANEKS'})" class="btn btn-link" style="padding:0"><i class="glyphicon glyphicon-plus-sign"></i></button></td>
 				<td rowspan="1" colspan="1" style="padding:0; text-align:center; vertical-align:middle; border-top:none"><button onClick="return p5UI__Clickable(this, 'p5:Budget:addCost', {type: 'KARY'})" class="btn btn-link" style="padding:0"><i class="glyphicon glyphicon-plus-sign"></i></button></td>
 				<td rowspan="1" colspan="1" style="padding:0; text-align:center; vertical-align:middle; border-top:none"><button onClick="return p5UI__Clickable(this, 'p5:Budget:addCost', {type: 'OSPRZET'})" class="btn btn-link" style="padding:0"><i class="glyphicon glyphicon-plus-sign"></i></button></td>
@@ -344,6 +342,9 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 	var _saveLink = '<?php echo Request::getPathUri(); ?>index.php?_route=UrlAction_ProjektyProNetMediaBudget&_task=addCostAjax&ID_PROJECT=<?php echo $data['id_project']; ?>';
 	var _dbg = <?php echo V::get('DBG', 0, $_REQUEST, 'int'); ?>;
 	var _initCosts = <?php echo json_encode($costs); ?>;
+	var _initBudgetValue = <?php echo ($data['budget']) ? $data['budget'] : 0; ?>;
+	var _initOsprzetValue = <?php echo ($data['COST_OSPRZET']) ? $data['COST_OSPRZET'] : 0; ?>;
+	var _initMaterialyValue = <?php echo ($data['COST_MATERIALY']) ? $data['COST_MATERIALY'] : 0; ?>;
 
 	if (_initCosts) {
 		budget__renderCosts(_initCosts);
@@ -352,10 +353,70 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 	function budget__renderCosts(costs) {
 		var _tbody = document.getElementById('p5Budget__costs');
 		if (!_tbody) throw "Missing node #p5Budget__costs";
-		if(_dbg)console.log('TODO: render costs: ', costs);
-		var lastNode;
-    while (lastNode = _tbody.lastChild) _tbody.removeChild(lastNode);
+		if(_dbg)console.log('render costs: ', costs);
 
+		function budget__renderNodePrice(idNode, value) {
+			var node = document.getElementById(idNode);
+			p5Utils__clearNode(node);
+			if (value != 0) node.appendChild(document.createTextNode(p5Utils__pricePrintPL(value)));
+			else node.appendChild(document.createTextNode('0,00'));
+		}
+		function budget__renderZyskStrataPrice(idNode, value) {
+			var node = document.getElementById(idNode);
+			if(_dbg)console.log('budget__renderZyskStrataPrice('+idNode+') value: ', value, 'node', node);
+			var sign = '';
+			if (value > 0) {
+				sign = '+';
+				node.style.color = '#009600';
+			} else {
+				sign = '';
+				node.style.color = '#f00';
+			}
+			p5Utils__clearNode(node);
+			node.appendChild(document.createTextNode(sign + '' + p5Utils__pricePrintPL(value)));
+		}
+		{
+			var budgetZyskStrata = costs.reduce(function (prevValue, currCost) {
+				return currCost['budget_minus_sum'];// get last value - calculated in php
+			}, _initBudgetValue);
+			budget__renderZyskStrataPrice('p5Budget__zysk_strata', budgetZyskStrata);
+		}
+		{
+			var osprzetZyskStrata = _initOsprzetValue - costs.reduce(function (prevValue, currCost) {
+				if (!currCost['budget_osprzet']) return prevValue;
+				return prevValue + currCost['budget_osprzet'];
+			}, 0);
+			if(_dbg)console.log('osprzetZyskStrata: _initOsprzetValue', _initOsprzetValue, 'osprzetZyskStrata', osprzetZyskStrata);
+			budget__renderZyskStrataPrice('p5Budget__osprzet_zysk_strata', osprzetZyskStrata);
+		}
+		{
+			var materialyZyskStrata = _initMaterialyValue - costs.reduce(function (prevValue, currCost) {
+				if (!currCost['budget_materialy']) return prevValue;
+				return prevValue + currCost['budget_materialy'];
+			}, 0);
+			if(_dbg)console.log('materialyZyskStrata: _initMaterialyValue', _initMaterialyValue, 'materialyZyskStrata', materialyZyskStrata);
+			budget__renderZyskStrataPrice('p5Budget__materialy_zysk_strata', materialyZyskStrata);
+		}
+
+		{
+			var aneksValue = costs.reduce(function (prevValue, currCost) {
+				if (!currCost['budget_aneks']) return prevValue;
+				return prevValue + currCost['budget_aneks'];
+			}, 0);
+			if(_dbg)console.log('aneksValue', aneksValue);
+			// budget__renderNodePrice('p5Budget__aneks', aneksValue);
+			budget__renderZyskStrataPrice('p5Budget__aneks', -1 * aneksValue);
+		}
+		{
+			var karyValue = costs.reduce(function (prevValue, currCost) {
+				if (!currCost['budget_kary']) return prevValue;
+				return prevValue + currCost['budget_kary'];
+			}, 0);
+			if(_dbg)console.log('karyValue', karyValue);
+			budget__renderNodePrice('p5Budget__kary', karyValue);
+		}
+
+		p5Utils__clearNode(_tbody);
 		var costNodes = costs.map(function(cost) {
 			var costNode = document.createElement('tr')
 			var tdNode = null
@@ -372,59 +433,48 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_minus_sum'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_zysk_strata']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_zysk_strata']); ?></td>
-			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_zysk_strata']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_zysk_strata'], '0,00')))
-			costNode.appendChild(tdNode)
-
-			// <td style="color:<?php echo ($cost['TODO__budget_aneks']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_aneks']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_aneks']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_aneks']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_aneks']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_aneks'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_aneks']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_aneks'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_kary']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_kary']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_kary']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_kary']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_kary']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_kary'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_kary']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_kary'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_osprzet']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_osprzet']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_osprzet']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_osprzet']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_osprzet']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_osprzet'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_osprzet']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_osprzet'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_materialy']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_materialy']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_materialy']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_materialy']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_materialy']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_materialy'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_materialy']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_materialy'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_koszt_pracownikow']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_koszt_pracownikow']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_koszt_pracownikow']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_koszt_pracownikow']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_koszt_pracownikow']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_koszt_pracownikow'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_koszt_pracownikow']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_koszt_pracownikow'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_koszt_podwykonawcow']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_koszt_podwykonawcow']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_koszt_podwykonawcow']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_koszt_podwykonawcow']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_koszt_podwykonawcow']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_koszt_podwykonawcow'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_koszt_podwykonawcow']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_koszt_podwykonawcow'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_koszt_reprezentacyjny']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_koszt_reprezentacyjny']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_koszt_reprezentacyjny']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_koszt_reprezentacyjny']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_koszt_reprezentacyjny']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_koszt_reprezentacyjny'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_koszt_reprezentacyjny']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_koszt_reprezentacyjny'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo $cost['cell_order_color']; ?>" title="<?php echo $cost['cell_order_title']; ?>">
-			// 	<!-- nr zam/kwota -->
-			// 	<?php echo UI::price($cost['cost_zamowienia']); ?>
-			// 	<div style="white-space:nowrap; color:silver">nr: <?php echo $cost['nr_zamowienia']; ?></div>
-			// </td>
 			tdNode = document.createElement('td')
 			if (cost['order_nr']) {
 				var cellOrderColor = '#aaa';
@@ -468,52 +518,52 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['nr_fv_do_zamowienia']) ? 'black' : 'silver'))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_zaliczki']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_zaliczki']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_zaliczki']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_zaliczki']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_zaliczki']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_zaliczki'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_zaliczki']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_zaliczki'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_rozliczone_zaliczki']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_rozliczone_zaliczki']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_rozliczone_zaliczki']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_rozliczone_zaliczki']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_rozliczone_zaliczki']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_rozliczone_zaliczki'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_rozliczone_zaliczki']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_rozliczone_zaliczki'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_zgoda_sluzebnosci']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_zgoda_sluzebnosci']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_zgoda_sluzebnosci']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_zgoda_sluzebnosci']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_zgoda_sluzebnosci']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_zgoda_sluzebnosci'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_zgoda_sluzebnosci']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_zgoda_sluzebnosci'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_zgoda_odszkodowania']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_zgoda_odszkodowania']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_zgoda_odszkodowania']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_zgoda_odszkodowania']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_zgoda_odszkodowania']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_zgoda_odszkodowania'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_zgoda_odszkodowania']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_zgoda_odszkodowania'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_sprzet_wlasny']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_sprzet_wlasny']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_sprzet_wlasny']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_sprzet_wlasny']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_sprzet_wlasny']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_sprzet_wlasny'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_sprzet_wlasny']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_sprzet_wlasny'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_sprzet_wynajety']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_sprzet_wynajety']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_sprzet_wynajety']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_sprzet_wynajety']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_sprzet_wynajety']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_sprzet_wynajety'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_sprzet_wynajety']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_sprzet_wynajety'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_organizacja_ruchu']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_organizacja_ruchu']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_organizacja_ruchu']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_organizacja_ruchu']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_organizacja_ruchu']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_organizacja_ruchu'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_organizacja_ruchu']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_organizacja_ruchu'], '0,00')))
 			costNode.appendChild(tdNode)
 
-			// <td style="color:<?php echo ($cost['TODO__budget_zajetosc_pasa']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['TODO__budget_zajetosc_pasa']); ?></td>
+			// <td style="color:<?php echo ($cost['budget_zajetosc_pasa']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['budget_zajetosc_pasa']); ?></td>
 			tdNode = document.createElement('td')
-			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['TODO__budget_zajetosc_pasa']) ? 'black' : 'silver'))
-			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['TODO__budget_zajetosc_pasa'], '0,00')))
+			tdNode.setAttribute('style', 'white-space:nowrap; color:' + ((cost['budget_zajetosc_pasa']) ? 'black' : 'silver'))
+			tdNode.appendChild(document.createTextNode(p5Utils__pricePrintPL(cost['budget_zajetosc_pasa'], '0,00')))
 			costNode.appendChild(tdNode)
 
 			return costNode;
@@ -546,12 +596,18 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 		labels['SPRZET_WYNAJETY'] = "Sprzęt wynajęty"
 		labels['ORGANIZACJA_RUCHU'] = "Organizacja ruchu"
 		labels['ZAJETOSC_PASA'] = "Zajętość pasa drogowego"
-		// TODO: add labels ...
-		var labelType = (type in labels) ? labels[type] : type
+		var labelText = (type in labels) ? labels[type] : type
+		var desc = {}
+		desc['ANEKS'] = "<br>Proszę wprowadzić róznicę pomiędzy aktualnym <abbr title=\"kwotą na umowie lub poprzednim aneksie\">budżetem</abbr>, a kwotą na aneksie"
+		desc['ANEKS'] += ", np.:"
+		desc['ANEKS'] += "<br><small>- kwota na umowie: 100,000"
+		desc['ANEKS'] += "<br>- kwota na aneksie: 150,000"
+		desc['ANEKS'] += "<br>wprowadzamy: <code>-50,000</code></small>"
+		var descText = (type in desc) ? desc[type] : type
 
 		swal({
 		  title: 'Kwota netto dla kosztu:',
-			html: '"' + labelType + '"',
+			html: '"' + labelText + '"' + descText,
 			animation: false,
 		  input: 'text',
 			inputPlaceholder: '0,00',
@@ -562,8 +618,10 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 		  preConfirm: function(price) {
 		    return new Promise(function(resolve, reject) {
 					price = p5Utils__parseFloatOrZero(price)
-	        if (price <= 0) {
-	          reject('Kwota musi być większa od zera.')
+	        if ('ANEKS' != type && price <= 0) {
+	          reject('Kwota musi być większa od zera.')
+	        } else if ('ANEKS' == type && price == 0) {
+	          reject('Kwota musi być inna niż zera.')
 	        } else {
 						superagent
 							.post(_saveLink)
@@ -596,7 +654,7 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 		    type: 'success',
 				animation: false,
 		    title: responseBody.msg || 'Koszt dodano',
-		    html: 'Rodzaj kosztu: ' + (labelType || responseBody.type) + '<br>Kwota: ' + p5Utils__pricePrintPL(responseBody.price, '0') + '.'
+		    html: 'Rodzaj kosztu: ' + (labelText || responseBody.type) + '<br>Kwota: ' + p5Utils__pricePrintPL(responseBody.price, '0') + '.'
 		  })
 			if (responseBody.update_data) {
 				// TODO: budget__renderData(responseBody.update_data)

+ 6 - 0
SE/se-lib/tmpl/_layout_gora.php

@@ -234,6 +234,12 @@ function p5Utils__pricePrintFormat(value, defaultValue, decPoint, thousands_sep)
 	//console.log('pricePrint(value:'+value+'). END parts', parts, 'len', len, 'str', str);
 	return '' + minus + parts.join(thousands_sep) + decPoint + secondPart;
 }
+
+function p5Utils__clearNode(node) {
+	if (!node || !node.lastChild) return;
+	var lastNode;
+	while (lastNode = node.lastChild) node.removeChild(lastNode);
+}
 	</script>
 	<script>
 function initDateTimePicker(node) {