ProjektyProNetMediaBudget.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. Lib::loadClass('TypespecialVariable');
  4. Lib::loadClass('Request');
  5. Lib::loadClass('Response');
  6. class Route_UrlAction_ProjektyProNetMediaBudget extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
  7. public function handleAuth() {
  8. if (!User::logged()) {
  9. User::authByRequest();
  10. }
  11. }
  12. /*
  13. Kwota planowana: `M_DIST_COST_PROJECT` Budżet projektu
  14. Zamówienie: sumy z CRM_LISTA_ZASOBOW_ORDERS (CRM_LISTA_ZASOBOW_OFFERS)
  15. zaliczki
  16. ilość pracowników / koszty pracownicze: powiązanie z raportami X współczynnik
  17. koszty sprzętu/ wynajmowany na budowie: rozdział na różne rodzaj sprzętu: koparka itp.
  18. koszty własne: naprawy sprzętu
  19. koszty materiałów
  20. osprzet
  21. dodatkowe koszty związane z nadwyżkami - rozbieżności odnośnie ustaleń
  22. dostęp dla zarządu i os. odp. kwota końcowa
  23. */
  24. public function defaultAction() {
  25. SE_Layout::gora();
  26. if (1 != V::get('_print', '', $_GET)) SE_Layout::menu();
  27. try {
  28. $data = array();
  29. $data['id_project'] = V::get('ID_PROJECT', 0, $_REQUEST, 'int');
  30. if (!$data['id_project']) throw new Exception("Error: Brak nr projektu!");
  31. $data = $this->setProps($data);
  32. $this->budgetView($data);
  33. } catch (Exception $e) {
  34. SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  35. }
  36. SE_Layout::dol();
  37. }
  38. public function setProps($data) {
  39. $idProj = V::get('id_project', 0, $data, 'int');
  40. if (!$idProj) return $data;// throw errro?
  41. $data['budget'] = 0;
  42. $data['projectInfo'] = null;
  43. $data['projectLabel'] = '';
  44. $data['costs'] = array();
  45. $rows = DB::getPDO()->fetchAll("
  46. select p.ID
  47. , p.M_DIST_DESC
  48. , p.M_DIST_DEALNUM
  49. , p.M_DIST_COST_PROJECT
  50. from IN7_MK_BAZA_DYSTRYBUCJI p
  51. where p.A_STATUS not in('DELETED')
  52. and p.ID = {$idProj}
  53. ");
  54. if (empty($rows)) return $data;// throw errro?
  55. $data['projectInfo'] = $rows[0];
  56. $data['budget'] = V::get('M_DIST_COST_PROJECT', 0, $data['projectInfo']);
  57. $data['projectLabel'] = $data['projectInfo']['M_DIST_DESC'];
  58. $data['budget'] = V::get('DBG_M_DIST_COST_PROJECT', $data['budget'], $_GET);// TODO: TEST
  59. $data['ordersRaw'] = DB::getPDO()->fetchAll("
  60. select r.ID
  61. , r.ORDER_LABEL
  62. , sum(o.OFFER_PRICE_PER_UNIT * o.OFFER_QUANTITY) as SUM_NETTO
  63. from CRM_LISTA_ZASOBOW_ORDERS r
  64. left join CRM_LISTA_ZASOBOW_OFFERS o on(
  65. o.ID_ORDER = r.ID
  66. and (o.A_STATUS is null or o.A_STATUS not in('DELETED'))
  67. )
  68. where (r.A_STATUS is null or r.A_STATUS not in('DELETED'))
  69. and r.ID_PROJECT = {$idProj}
  70. group by r.ID
  71. ");
  72. // $data['costs'] = array();
  73. {
  74. $idx = 0;
  75. foreach ($data['ordersRaw'] as $idxOrders => $order) {
  76. if (count($data['costs']) < $idxOrders + 1) {
  77. $data['costs'][] = array(
  78. 'cost_zamowienia'=>$order['SUM_NETTO'],
  79. 'cost_zaliczki'=>0,
  80. 'cost_pracownicy'=>0,
  81. 'cost_wynajem'=>0,
  82. 'cost_serwis'=>0,
  83. 'cost_materialy'=>0,
  84. 'cost_osprzet'=>0,
  85. 'cost_dodatkowe'=>0,
  86. 'sum'=>0,
  87. 'orderRaw'=>$order
  88. );
  89. }
  90. }
  91. $budget = $data['budget'];
  92. foreach ($data['costs'] as $idx => $cost) {
  93. $sum = $cost['cost_zamowienia']
  94. + $cost['cost_zaliczki']
  95. + $cost['cost_pracownicy']
  96. + $cost['cost_wynajem']
  97. + $cost['cost_serwis']
  98. + $cost['cost_materialy']
  99. + $cost['cost_osprzet']
  100. + $cost['cost_dodatkowe']
  101. ;
  102. $budget -= $sum;
  103. $data['costs'][$idx]['budget_minus_sum'] = $budget;
  104. $data['costs'][$idx]['sum'] = $sum;
  105. }
  106. }
  107. return $data;
  108. }
  109. public function budgetView($data) {
  110. ?>
  111. <div class="container">
  112. <h1>Projekt: <?php echo $data['projectLabel']; ?></h1>
  113. <table class="table table-bordered">
  114. <thead>
  115. <tr>
  116. <th>Kwota planowana<br><?php echo number_format($data['budget'], 2, ',', ' '); ?></th>
  117. <th>Zamówienie</th>
  118. <th>zaliczki</th>
  119. <th>ilość pracowników / koszty pracownicze: powiązanie z raportami X współczynnik</th>
  120. <th>koszty sprzętu/ wynajmowany na budowie: rozdział na różne rodzaj sprzętu: koparka itp.</th>
  121. <th>koszty własne: naprawy sprzętu</th>
  122. <th>koszty materiałów</th>
  123. <th>osprzet</th>
  124. <th>dodatkowe koszty związane z nadwyżkami - rozbieżności odnośnie ustaleń</th>
  125. </tr>
  126. </thead>
  127. <tbody>
  128. <?php foreach ($data['costs'] as $cost) : ?>
  129. <tr>
  130. <td><?php echo $cost['budget_minus_sum']; ?></td>
  131. <td><?php echo $cost['cost_zamowienia']; ?></td>
  132. <td><?php echo $cost['cost_zaliczki']; ?></td>
  133. <td><?php echo $cost['cost_pracownicy']; ?></td>
  134. <td><?php echo $cost['cost_wynajem']; ?></td>
  135. <td><?php echo $cost['cost_serwis']; ?></td>
  136. <td><?php echo $cost['cost_materialy']; ?></td>
  137. <td><?php echo $cost['cost_osprzet']; ?></td>
  138. <td><?php echo $cost['cost_dodatkowe']; ?></td>
  139. </tr>
  140. <?php endforeach; ?>
  141. </tbody>
  142. </table>
  143. </div>
  144. <?php
  145. //DBG::_(true, true, 'data', $data, __CLASS__, __FUNCTION__, __LINE__);
  146. }
  147. }