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', '', $data['projectInfo']); $data['KONIEC_BUDOWY'] = V::get('KONIEC_BUDOWY', '', $data['projectInfo']); $data['days_to_finish'] = null; // 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']); // TODO: tylko ZATWIERDZONE, OCZEKUJE_ZATWIERDZENIA i OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA $data['ordersRaw'] = DB::getPDO()->fetchAll(" select r.ID , r.ORDER_LABEL , r.ORDER_DATE , r.APPROVE_STATUS , 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} -- and r.APPROVE_STATUS in('ZATWIERDZONE', 'OCZEKUJE_ZATWIERDZENIA', 'OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA') 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( '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(), '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) { $styleZyskStrata = 'color: black'; if ($data['TODO__sum_zysk_strata'] > 0) $styleZyskStrata = 'color:green'; if ($data['TODO__sum_zysk_strata'] < 0) $styleZyskStrata = 'color:red'; $costs = $data['costs']; foreach ($costs as $idx => $cost) { $cost['is_order'] = ($cost['order_cost'] && $cost['order_nr']); if ($cost['is_order']) { $cost['cell_order_color'] = '#aaa'; $cost['cell_order_title'] = ''; switch ($cost['order_approve_status']) { case 'ZATWIERDZONE': $cost['cell_order_color'] = 'black'; break; case 'OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA': $cost['cell_order_color'] = '#777'; break; case 'OCZEKUJE_ZATWIERDZENIA': $cost['cell_order_color'] = '#777'; break; case 'WERSJA_ROBOCZA': $cost['cell_order_color'] = '#aaa'; break; } switch ($cost['order_approve_status']) { case 'ZATWIERDZONE': $cost['cell_order_title'] = "Zamówienie zatwierdzone"; break; case 'OCZEKUJE_OSTATECZNEGO_ZATWIERDZENIA': $cost['cell_order_title'] = "Zamówienie oczekuje ostatecznego zatwierdzenia"; break; case 'OCZEKUJE_ZATWIERDZENIA': $cost['cell_order_title'] = "Zamówienie oczekuje zatwierdzenia"; break; case 'ODRZUCONE': $cost['cell_order_title'] = "Zamówienie odrzucone"; break; case 'WERSJA_ROBOCZA': $cost['cell_order_title'] = "Wersja robocza"; break; } } $costs[$idx] = $cost; } ?>

Projekt:

data data rozpoczęcia umowy data zakończenia umowy pozostało dni: Wartość kosztorysu ROBOCIZNA Koszty dodatkowe (reprezentacyjne) Zamówienia Zaliczki Zgody wejścia w teren Wynajem sprzętu Koszty projektu
Kwota Umowy (netto) Aneks (netto) kary, potrącenia (netto) Osprzęt Materiały
Zysk/Strata koszty pracowników koszt firmy podwykonawczej
numer zamówienia (kwota netto) numer faktury kwota po weryfikacji zaliczka kwota rozliczanie zaliczki koszty dzienne służebności odszkodowania Sprzęt własny sprzęt wynajęty organizacja ruchu zajętość pasa drogowego
nr:
$obcyNrFV) : ?>
fv:
2', 'data', $data, __CLASS__, __FUNCTION__, __LINE__); } public function addCostAjaxAction() { $response = array(); $response['type'] = 'danger'; $response['msg'] = 'Unknown error'; try { $idProject = V::get('ID_PROJECT', 0, $_REQUEST, 'int'); if (!$idProject) throw new Exception("Missing id project"); $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($price)) throw new Exception("Missing price"); if (empty($type)) throw new Exception("Missing type"); $response['price'] = $price; $response['type'] = $type; $cost = array(); $cost['COST_VALUE'] = $price; $cost['COST_TYPE'] = $type; $cost['ID_PROJECT'] = $idProject; // $cost['NOTES'] = $notes;// TODO: add notes to form? $idItem = DB::getDB()->ADD_NEW_OBJ('PROJECT_COSTS', (object)$cost); if ($idItem <= 0) throw new Exception("Wystąpiły błędy podczas tworzenia nowego rekordu w bazie danych"); $response['type'] = 'success'; $response['id'] = $idItem; $response['msg'] = "Koszt został dodany"; } catch (Exception $e) { $response['type'] = 'danger'; $response['msg'] = $e->getMessage(); } Response::sendJsonExit($response); } } /* -- `PROJECT_COSTS`.`COST_VALUE` max 1000000123456,78 CREATE TABLE IF NOT EXISTS `PROJECT_COSTS` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `ID_PROJECT` int(11) NOT NULL DEFAULT 0, `A_RECORD_CREATE_DATE` datetime DEFAULT NULL, `A_RECORD_CREATE_AUTHOR` varchar(20) DEFAULT NULL, `SYNC_SQIX_STATUS` varchar(100) NOT NULL DEFAULT '', `A_RECORD_UPDATE_DATE` datetime DEFAULT NULL, `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT '', `A_STATUS` enum('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD','DELETED') DEFAULT NULL, `A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT '', `A_CLASSIFIED` varchar(100) NOT NULL DEFAULT '', `COST_VALUE` decimal(16,2) NOT NULL DEFAULT '', `COST_TYPE` varchar(32) NOT NULL DEFAULT '', `NOTES` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`ID`) KEY `ID_PROJECT` (`ID_PROJECT`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; CREATE TABLE IF NOT EXISTS `PROJECT_COSTS_HIST` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `ID_USERS2` int(11) NOT NULL, `ID_PROJECT` varchar(255) NOT NULL DEFAULT 'N/S;', `A_RECORD_CREATE_DATE` varchar(255) NOT NULL DEFAULT 'N/S;', `A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;', `SYNC_SQIX_STATUS` varchar(255) NOT NULL DEFAULT 'N/S;', `A_RECORD_UPDATE_DATE` varchar(255) NOT NULL DEFAULT 'N/S;', `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;', `A_STATUS` varchar(255) NOT NULL DEFAULT 'N/S;', `A_STATUS_INFO` varchar(255) NOT NULL DEFAULT 'N/S;', `A_ADM_COMPANY` varchar(255) NOT NULL DEFAULT 'N/S;', `A_CLASSIFIED` varchar(255) NOT NULL DEFAULT 'N/S;', `COST_VALUE` varchar(16) NOT NULL DEFAULT 'N/S;', `COST_TYPE` varchar(32) NOT NULL DEFAULT 'N/S;', `NOTES` varchar(255) NOT NULL DEFAULT 'N/S;', PRIMARY KEY (`ID`), KEY `ID_USERS2` (`ID_USERS2`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; */