| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- <?php
- 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() {
- 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();
- 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, $viewParams);
- } 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
- , 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}
- ");
- 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['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
- , 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
- ");
- $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,
- 'cost_serwis'=>0,
- 'cost_materialy'=>0,
- 'cost_osprzet'=>0,
- 'cost_dodatkowe'=>0,
- 'sum'=>0,
- 'orderRaw'=>$order
- );
- }
- }
- 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']
- + $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, $viewParams) {
- ?>
- <div class="container">
- <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 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.
- <br><?php echo UI::price($data['COST_OSPRZET']); ?>
- </th>
- <th>koszty własne: naprawy sprzętu</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>
- </thead>
- <tbody>
- <?php foreach ($data['costs'] as $cost) : ?>
- <tr>
- <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::_('DBG', '>2', 'data', $data, __CLASS__, __FUNCTION__, __LINE__);
- }
- }
|