|
|
@@ -4,7 +4,16 @@ Lib::loadClass('RouteBase');
|
|
|
Lib::loadClass('TypespecialVariable');
|
|
|
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
|
|
|
+/*
|
|
|
+DBG:
|
|
|
+ &DBG_M_DIST_COST_PROJECT=10000
|
|
|
+ &DBG_KONIEC_BUDOWY=2016-08-01
|
|
|
+
|
|
|
+*/
|
|
|
class Route_UrlAction_ProjektyProNetMediaBudget extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
|
|
|
|
|
|
public function handleAuth() {
|
|
|
@@ -31,13 +40,17 @@ 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 {
|
|
|
+ $viewParams = array();
|
|
|
+ $viewParams['print_mode'] = (1 == V::get('_print', '', $_GET));
|
|
|
+ if (!$viewParams['print_mode']) SE_Layout::menu();
|
|
|
+
|
|
|
$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);
|
|
|
+
|
|
|
+ $this->budgetView($data, $viewParams);
|
|
|
} catch (Exception $e) {
|
|
|
SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
|
|
|
}
|
|
|
@@ -57,6 +70,10 @@ dostęp dla zarządu i os. odp. kwota końcowa
|
|
|
, p.M_DIST_DESC
|
|
|
, p.M_DIST_DEALNUM
|
|
|
, p.M_DIST_COST_PROJECT
|
|
|
+ , p.POCZATEK_UMOWY
|
|
|
+ , p.KONIEC_BUDOWY
|
|
|
+ , p.COST_OSPRZET
|
|
|
+ , p.COST_MATERIALY
|
|
|
from IN7_MK_BAZA_DYSTRYBUCJI p
|
|
|
where p.A_STATUS not in('DELETED')
|
|
|
and p.ID = {$idProj}
|
|
|
@@ -65,7 +82,19 @@ dostęp dla zarządu i os. odp. kwota końcowa
|
|
|
$data['projectInfo'] = $rows[0];
|
|
|
$data['budget'] = V::get('M_DIST_COST_PROJECT', 0, $data['projectInfo']);
|
|
|
$data['projectLabel'] = $data['projectInfo']['M_DIST_DESC'];
|
|
|
+ $data['POCZATEK_UMOWY'] = V::get('POCZATEK_UMOWY', 0, $data['projectInfo']);
|
|
|
+ $data['KONIEC_BUDOWY'] = V::get('KONIEC_BUDOWY', 0, $data['projectInfo']);
|
|
|
+ $data['days_to_finish'] = 0; // pozostało dni - // ilość dni wyliczana z różnicy dat [13513] KONIEC_BUDOWY - [13512] POCZATEK_UMOWY (raczej today)
|
|
|
$data['budget'] = V::get('DBG_M_DIST_COST_PROJECT', $data['budget'], $_GET);// TODO: TEST
|
|
|
+ $data['KONIEC_BUDOWY'] = V::get('DBG_KONIEC_BUDOWY', $data['KONIEC_BUDOWY'], $_GET);// TODO: TEST
|
|
|
+ if ($data['KONIEC_BUDOWY']) {
|
|
|
+ $dStart = new DateTime(date('Y-m-d'));
|
|
|
+ $dEnd = new DateTime($data['KONIEC_BUDOWY']);
|
|
|
+ $dDiff = $dStart->diff($dEnd);
|
|
|
+ $data['days_to_finish'] = ('-' == $dDiff->format('%R')) ? -1 * $dDiff->days : $dDiff->days;
|
|
|
+ }
|
|
|
+ $data['COST_OSPRZET'] = V::get('COST_OSPRZET', 0, $data['projectInfo']);
|
|
|
+ $data['COST_MATERIALY'] = V::get('COST_MATERIALY', 0, $data['projectInfo']);
|
|
|
|
|
|
$data['ordersRaw'] = DB::getPDO()->fetchAll("
|
|
|
select r.ID
|
|
|
@@ -81,13 +110,18 @@ dostęp dla zarządu i os. odp. kwota końcowa
|
|
|
group by r.ID
|
|
|
");
|
|
|
|
|
|
- // $data['costs'] = array();
|
|
|
+ $toFindKoresp = array();// Order.ID => Order.label
|
|
|
{
|
|
|
$idx = 0;
|
|
|
foreach ($data['ordersRaw'] as $idxOrders => $order) {
|
|
|
+ $idOrder = $order['ID'];
|
|
|
+ $labelOrder = $order['ORDER_LABEL'];
|
|
|
+ $toFindKoresp[$idOrder] = $labelOrder;
|
|
|
if (count($data['costs']) < $idxOrders + 1) {
|
|
|
$data['costs'][] = array(
|
|
|
'cost_zamowienia'=>$order['SUM_NETTO'],
|
|
|
+ 'nr_zamowienia'=>$labelOrder,
|
|
|
+ 'nr_fv_do_zamowienia'=>array(),
|
|
|
'cost_zaliczki'=>0,
|
|
|
'cost_pracownicy'=>0,
|
|
|
'cost_wynajem'=>0,
|
|
|
@@ -100,8 +134,36 @@ dostęp dla zarządu i os. odp. kwota końcowa
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
+ if (!empty($toFindKoresp)) {// TODO: find fv nr - from Koresp. (nr_fv_do_zamowienia) - Koresp.ORDER_NR
|
|
|
+ $sqlOrderLabels = array();
|
|
|
+ foreach ($toFindKoresp as $idOrder => $labelOrder) {
|
|
|
+ $sqlOrderLabels[] = "'{$labelOrder}'";
|
|
|
+ }
|
|
|
+ $sqlOrderLabels = implode(",", $sqlOrderLabels);
|
|
|
+ // TODO: tylko określone typy z Koresp?
|
|
|
+ // TODO: co jeśli brakuje obcy_nr_koresp(`K_NR_OTRZYM_KORESP`) - ID?
|
|
|
+ $data['fvToOrdersRaw'] = DB::getPDO()->fetchAll("
|
|
|
+ select k.ID
|
|
|
+ , k.ORDER_NR
|
|
|
+ , k.K_NR_OTRZYM_KORESP as obcy_nr_koresp
|
|
|
+ from IN7_DZIENNIK_KORESP k
|
|
|
+ where k.ORDER_NR in({$sqlOrderLabels})
|
|
|
+ ");
|
|
|
+ foreach ($data['fvToOrdersRaw'] as $fv) {
|
|
|
+ $labelOrder = $fv['ORDER_NR'];
|
|
|
+ foreach ($data['costs'] as $cost) {
|
|
|
+ if ($isOrder && $labelOrder == $cost['nr_zamowienia']) {
|
|
|
+ $idKoresp = $fv['ID'];
|
|
|
+ $cost['nr_fv_do_zamowienia'][$idKoresp] = $fv['obcy_nr_koresp'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
$budget = $data['budget'];
|
|
|
foreach ($data['costs'] as $idx => $cost) {
|
|
|
+ // TODO: fix - `cost_wynajem` pewnie będzie częścią z zamówienia - minus od project COST_OSPRZET
|
|
|
+ // TODO: fix - `cost_materialy` pewnie będzie częścią z zamówienia - minus od project COST_MATERIALY
|
|
|
$sum = $cost['cost_zamowienia']
|
|
|
+ $cost['cost_zaliczki']
|
|
|
+ $cost['cost_pracownicy']
|
|
|
@@ -119,20 +181,42 @@ dostęp dla zarządu i os. odp. kwota końcowa
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
- public function budgetView($data) {
|
|
|
+ public function budgetView($data, $viewParams) {
|
|
|
?>
|
|
|
<div class="container">
|
|
|
- <h1>Projekt: <?php echo $data['projectLabel']; ?></h1>
|
|
|
+ <div class="row">
|
|
|
+ <div class="col-md-6">
|
|
|
+ <?php if (!$viewParams['print_mode']) : ?>
|
|
|
+ <a class="btn btn-primary"
|
|
|
+ href="index.php?_route=UrlAction_ProjektyProNetMediaBudget&ID_PROJECT=<?php echo $data['id_project']; ?>&_print=1"
|
|
|
+ target="_blank">drukuj</a>
|
|
|
+ <?php endif; ?>
|
|
|
+ </div>
|
|
|
+ <div class="col-md-6" style="text-align:right">
|
|
|
+ <?php echo date("Y-m-d"); ?>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <h3>Projekt: <?php echo $data['projectLabel']; ?></h3>
|
|
|
+ <blockquote style="font-size:1em">
|
|
|
+ Data rozpoczęcia umowy: <?php echo $data['POCZATEK_UMOWY']; ?>
|
|
|
+ <br>Data zakończenia umowy: <?php echo $data['KONIEC_BUDOWY']; ?>
|
|
|
+ <!-- <br>Kwota Umowy (netto): <?php echo $data['M_DIST_COST_PROJECT']; ?> ? == $data['budget'] -->
|
|
|
+ <br>Pozostało dni: <?php echo $data['days_to_finish']; ?>
|
|
|
+ </blockquote>
|
|
|
<table class="table table-bordered">
|
|
|
<thead>
|
|
|
<tr>
|
|
|
- <th>Kwota planowana<br><?php echo number_format($data['budget'], 2, ',', ' '); ?></th>
|
|
|
+ <th title="Kwota Umowy (netto)">Kwota planowana<br><?php echo UI::price($data['budget']); ?></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 sprzętu / wynajmowany na budowie: rozdział na różne rodzaj sprzętu: koparka itp.
|
|
|
+ <br><?php echo UI::price($data['COST_OSPRZET']); ?>
|
|
|
+ </th>
|
|
|
<th>koszty własne: naprawy sprzętu</th>
|
|
|
- <th>koszty materiałów</th>
|
|
|
+ <th>koszty materiałów
|
|
|
+ <br><?php echo UI::price($data['COST_MATERIALY']); ?>
|
|
|
+ </th>
|
|
|
<th>osprzet</th>
|
|
|
<th>dodatkowe koszty związane z nadwyżkami - rozbieżności odnośnie ustaleń</th>
|
|
|
</tr>
|
|
|
@@ -140,22 +224,34 @@ dostęp dla zarządu i os. odp. kwota końcowa
|
|
|
<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>
|
|
|
+ <td><?php echo UI::price($cost['budget_minus_sum']); ?></td>
|
|
|
+ <td style="color:<?php echo ($cost['cost_zamowienia']) ? 'black' : 'silver'; ?>">
|
|
|
+ <?php echo UI::price($cost['cost_zamowienia']); ?>
|
|
|
+ <div style="white-space:nowrap; color:silver">nr: <?php echo $cost['nr_zamowienia']; ?></div>
|
|
|
+ <?php if (!empty($cost['nr_fv_do_zamowienia'])) : ?>
|
|
|
+ <?php foreach ($cost['nr_fv_do_zamowienia'] as $idKoresp => $obcyNrFV) : ?>
|
|
|
+ <?php // TODO: link do edycji koresp by $idKoresp ?>
|
|
|
+ <div style="white-space:nowrap; color:silver">fv: <?php echo ($obcyNrFV) ? $obcyNrFV : " nr {$idKoresp}"; ?></div>
|
|
|
+ <?php endforeach; ?>
|
|
|
+ <?php endif; ?>
|
|
|
+ </td>
|
|
|
+ <td style="color:<?php echo ($cost['cost_zaliczki']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['cost_zaliczki']); ?></td>
|
|
|
+ <td style="color:<?php echo ($cost['cost_pracownicy']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['cost_pracownicy']); ?></td>
|
|
|
+ <td style="color:<?php echo ($cost['cost_wynajem']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['cost_wynajem']); ?></td>
|
|
|
+ <td style="color:<?php echo ($cost['cost_serwis']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['cost_serwis']); ?></td>
|
|
|
+ <td style="color:<?php echo ($cost['cost_materialy']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['cost_materialy']); ?></td>
|
|
|
+ <td style="color:<?php echo ($cost['cost_osprzet']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['cost_osprzet']); ?></td>
|
|
|
+ <td style="color:<?php echo ($cost['cost_dodatkowe']) ? 'black' : 'silver'; ?>"><?php echo UI::price($cost['cost_dodatkowe']); ?></td>
|
|
|
</tr>
|
|
|
<?php endforeach; ?>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
</div>
|
|
|
+<?php if ($viewParams['print_mode']) : ?>
|
|
|
+<script>window.print();</script>
|
|
|
+<?php endif; ?>
|
|
|
<?php
|
|
|
- //DBG::_(true, true, 'data', $data, __CLASS__, __FUNCTION__, __LINE__);
|
|
|
+ DBG::_('DBG', '>2', 'data', $data, __CLASS__, __FUNCTION__, __LINE__);
|
|
|
}
|
|
|
|
|
|
}
|