Ver Fonte

added ajax functions in Budget for pro-netmedia

Piotr Labudda há 9 anos atrás
pai
commit
a8a798ffec
1 ficheiros alterados com 136 adições e 21 exclusões
  1. 136 21
      SE/se-lib/Route/UrlAction/ProjektyProNetMediaBudget.php

+ 136 - 21
SE/se-lib/Route/UrlAction/ProjektyProNetMediaBudget.php

@@ -234,13 +234,13 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 	<table class="table table-bordered">
 		<thead>
 			<tr>
-				<td rowspan="6" colspan="1" style="width:80px; text-align:center; vertical-align:middle">data</td>
+				<td rowspan="7" colspan="1" style="width:80px; text-align:center; vertical-align:middle">data</td>
 				<td rowspan="1" colspan="2" style="text-align:center; vertical-align:middle">data rozpoczęcia umowy</td>
 				<td rowspan="1" colspan="2" style="text-align:center; vertical-align:middle">data zakończenia umowy</td>
 				<td rowspan="1" colspan="2" style="text-align:center; vertical-align:middle">pozostało dni:</td>
 				<td rowspan="2" colspan="2" style="text-align:center; vertical-align:middle">Wartość kosztorysu</td>
 				<td rowspan="3" colspan="2" style="text-align:center; vertical-align:middle">ROBOCIZNA</td>
-				<td rowspan="6" colspan="1" style="text-align:center; vertical-align:middle">Koszty dodatkowe (reprezentacyjne)</td>
+				<td rowspan="6" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">Koszty dodatkowe (reprezentacyjne)</td>
 				<td rowspan="4" colspan="2" style="text-align:center; vertical-align:middle">Zamówienia</td>
 				<td rowspan="4" colspan="2" style="text-align:center; vertical-align:middle">Zaliczki</td>
 				<td rowspan="4" colspan="2" style="text-align:center; vertical-align:middle">Zgody wejścia w teren</td>
@@ -260,32 +260,47 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 				<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>
+				<th rowspan="4" 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="3" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap"><?php echo UI::price($data['TODO__aneks_netto']); ?></th>
-				<th rowspan="3" colspan="2" style="text-align:center; vertical-align:middle; white-space:nowrap"><?php echo UI::price($data['TODO__kary_netto']); ?></th>
+				<th rowspan="3" 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="3" colspan="2" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none"><?php echo UI::price($data['TODO__kary_netto']); ?></th>
 				<td rowspan="1" colspan="1" style="text-align:center; vertical-align:middle">???</td>
-				<th rowspan="3" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap"><?php echo UI::price($data['COST_OSPRZET']); ?></th>
-				<th rowspan="3" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap"><?php echo UI::price($data['COST_MATERIALY']); ?></th>
-				<td rowspan="3" colspan="1" style="text-align:center; vertical-align:middle">koszty pracowników</td>
-				<td rowspan="3" colspan="1" style="text-align:center; vertical-align:middle">koszt firmy podwykonawczej</td>
+				<th rowspan="3" 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="3" colspan="1" style="text-align:center; vertical-align:middle; white-space:nowrap; border-bottom:none"><?php echo UI::price($data['COST_MATERIALY']); ?></th>
+				<td rowspan="3" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">koszty pracowników</td>
+				<td rowspan="3" 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="3" 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="1" colspan="1" style="text-align:center; vertical-align:middle">???</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="2" colspan="1" style="text-align:center; vertical-align:middle">zaliczka kwota</td>
-				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">rozliczanie zaliczki koszty dzienne</td>
-				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">służebności</td>
-				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">odszkodowania</td>
-				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">Sprzęt własny</td>
-				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">sprzęt wynajęty</td>
-				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">organizacja ruchu</td>
-				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">zajętość pasa drogowego</td>
+				<td rowspan="3" colspan="1" style="text-align:center; vertical-align:middle">numer zamówienia (kwota netto)</td>
+				<td rowspan="3" colspan="1" style="text-align:center; vertical-align:middle">numer faktury kwota po weryfikacji</td>
+				<td rowspan="3" colspan="1" style="text-align:center; vertical-align:middle">zaliczka kwota</td>
+				<td rowspan="3" colspan="1" style="text-align:center; vertical-align:middle">rozliczanie zaliczki koszty dzienne</td>
+				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">służebności</td>
+				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">odszkodowania</td>
+				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">Sprzęt własny</td>
+				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">sprzęt wynajęty</td>
+				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle; border-bottom:none">organizacja ruchu</td>
+				<td rowspan="2" 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="text-align:center; vertical-align:middle">???</td>
+				<td rowspan="2" colspan="1" style="text-align:center; vertical-align:middle">???</td>
+			</tr>
+			<tr>
+				<td rowspan="1" colspan="1" style="padding:0; text-align:center; vertical-align:middle; border-top:none"><button onClick="return budget_addCost(this, 'ANEKS')" class="btn btn-link" style="padding:0"><i class="glyphicon glyphicon-plus-sign"></i></button></td>
+				<td rowspan="1" colspan="2" style="padding:0; text-align:center; vertical-align:middle; border-top:none"><button onClick="return budget_addCost(this, '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 budget_addCost(this, 'OSPRZET')" 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 budget_addCost(this, 'MATERIALY')" 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 budget_addCost(this, 'PRACOWNICY')" 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 budget_addCost(this, 'PODWYKONAWCY')" 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 budget_addCost(this, 'REPREZENTACYJNE')" 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 budget_addCost(this, 'ZGODY_SLUZEBNOSCI')" 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 budget_addCost(this, 'ZGODY_ODSZKODOWANIA')" 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 budget_addCost(this, 'SPRZET_WLASNY')" 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 budget_addCost(this, 'SPRZET_WYNAJETY')" 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 budget_addCost(this, 'ORGANIZACJA_RUCHU')" 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 budget_addCost(this, 'ZAJETOSC_PASA')" class="btn btn-link" style="padding:0"><i class="glyphicon glyphicon-plus-sign"></i></button></td>
 			</tr>
 		</thead>
 		<tbody>
@@ -338,6 +353,85 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 		</tbody>
 	</table>
 </div>
+<link rel="stylesheet" href="static/sweetalert2.min.css" type="text/css">
+<script src="static/sweetalert2.min.js"></script>
+<script>
+var _saveLink = '<?php echo Request::getPathUri(); ?>index.php?_route=UrlAction_ProjektyProNetMediaBudget&_task=addCostAjax';
+var _dbg = <?php echo V::get('DBG', 0, $_REQUEST, 'int'); ?>;
+
+function p5Utils_parseFloatOrZero(strToParse) {
+	if (!strToParse) return 0
+	if ("string" === typeof strToParse) {
+		strToParse = strToParse.replace(/,/g, '.')
+		strToParse = strToParse.replace(/ /g, '')
+	}
+	var floatVal = parseFloat(strToParse)
+	return (!isNaN(floatVal))? floatVal : 0
+}
+
+function budget_addCost(n, type) {
+	var labels = {}
+	labels['ANEKS'] = "Aneks"
+	labels['KARY'] = "kary, potrącenia "
+	var labelType = (type in labels) ? labels[type] : type
+
+	swal({
+	  title: 'Kwota netto dla kosztu "' + labelType + '"',
+		animation: false,
+	  input: 'text',
+		inputPlaceholder: '0,00',
+		// inputAttributes: {'step': '0.01'},
+	  showCancelButton: true,
+	  confirmButtonText: 'Dodaj koszt',
+	  showLoaderOnConfirm: true,
+	  preConfirm: function(price) {
+	    return new Promise(function(resolve, reject) {
+				price = p5Utils_parseFloatOrZero(price)
+        if (price <= 0) {
+          reject('Kwota musi być większa od zera.')
+        } else {
+					superagent
+						.post(_saveLink)
+						.type('json') // header ĺapplication/x-www-form-urlencoded' requires type('form');
+						.send({
+							type: type,
+							price: price
+						})
+						.set('Accept', 'application/json')
+						.end(function(err, res) {
+							if(_dbg)console.log('#widget-budget/addCost: res:', res, 'res.body:', res.body)
+							if (err || !res.ok) {
+								// jQuery(document).trigger('DBG:notify', {type: 'warning', msg: 'Req error', err: err});
+								reject("Request error")
+							} else {
+								if ('application/json' !== res.type) {
+									reject("Wrong response type - required json")
+									return
+								}
+								if (!res.body.id || res.body.id <= 0) reject(res.body.msg || "Wystąpiły błędy podczas dodawaniu kosztu")
+								resolve({
+									id: res.body.id,
+									price: res.body.price,
+									type: res.body.type
+								})
+							}
+						})
+	      }
+	    })
+	  },
+	  allowOutsideClick: false
+	}).then(function(responseBody) {
+	  swal({
+	    type: 'success',
+			animation: false,
+	    title: 'Koszt dodano!',
+	    html: 'Add cost: ' + responseBody.price + ' for type('+responseBody.type+') ' + labelType + '.'
+	  })
+	}).catch(function(e) {
+		// eg. hit Cancel
+	})
+}
+</script>
 <?php if ($viewParams['print_mode']) : ?>
 <script>window.print();</script>
 <?php endif; ?>
@@ -345,4 +439,25 @@ dostęp dla zarządu i os. odp.	kwota końcowa
 		DBG::_('DBG', '>2', 'data', $data, __CLASS__, __FUNCTION__, __LINE__);
 	}
 
+	public function addCostAjaxAction() {
+		$response = array();
+		$response['type'] = 'danger';
+		$response['msg'] = 'TODO';
+		try {
+			$json = Request::getRequestBody();
+			if (empty($json)) throw new Exception("Error Processing Request - json expected");
+			$json = @json_decode($json, $assoc = true);
+			if (null == $json && 0 !== json_last_error()) throw new Exception("Error Processing Request - Parse json error: " . json_last_error());
+			$price = V::get('price', '', $json);
+			$type = V::get('type', '', $json);
+			if (empty($json['price'])) throw new Exception("Missing price");
+			if (empty($json['type'])) throw new Exception("Missing type");
+throw new Exception("Missing price X");
+		} catch (Exception $e) {
+			$response['type'] = 'danger';
+			$response['msg'] = $e->getMessage();
+		}
+		Response::sendJsonExit($response);
+	}
+
 }