addItem($item); // @require only 'worker' => [ 'id', 'login', 'name' ] // TODO: lista 10 najnowszych + btn "load more ..." // TODO: Rozlicz / Podgląd - tylko najnowsza Zaliczka // TODO: Rozlicz / Podgląd - edytowć może tylko właściciel / grupa / user connected by REF ? // TODO: create view for printZaliczka to view older rows class Route_UrlAction_UserProNetMediaZaliczka extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction public function handleAuth() { if (!User::logged()) { User::authByRequest(); } } public function defaultAction() { UI::gora(); UI::emptyTag('link', ['href'=>'static/zaliczka/main.css', 'rel'=>'stylesheet']); if (1 != V::get('_print', '', $_GET)) UI::menu(); try { $data = array(); $data['idUser'] = V::get('idUser', User::getID(), $_REQUEST, 'int'); $data['idZaliczka'] = V::get('idZaliczka', 0, $_REQUEST, 'int');// TODO: idZaliczka is always MAX(z.ID); if (!$data['idZaliczka']) { $this->zaliczkaListaView($data); } else { UI::startContainer(); UI::tag('a', [ 'href' => "index.php?_route=UrlAction_UserProNetMediaZaliczka&idUser={$data['idUser']}", 'class' => "btn btn-link" ], " wróć"); UI::endContainer(); $this->zaliczkaFormView($data); } } catch (Exception $e) { UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } if (1 != V::get('_print', '', $_GET)) UI::dol(); } public function syncStataAjaxAction() { Response::sendTryCatchJson(array($this, 'syncStataAjaxReponseCallback'), $args = 'JSON_FROM_REQUEST_BODY');// try to read json from request body } public function syncStataAjaxReponseCallback($args) { if (empty($args) || !array_key_exists('updates', $args)) throw new HttpException("Error Parsing Request - missing args", 400); $args['idUser'] = V::get('idUser', 0, $_REQUEST, 'int');// (int)$args['idUser']; if ($args['idUser'] <= 0) throw new HttpException("Error Parsing Request - missing idUser", 400); $args['idZaliczka'] = V::get('idZaliczka', 0, $_REQUEST, 'int');// (int)$args['idZaliczka']; if ($args['idZaliczka'] <= 0) throw new HttpException("Error Parsing Request - missing idZaliczka", 400); $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka"); $schema = $acl->getSimpleSchemaTree(); if (!empty($args['updates'])) { throw new Exception("TODO: F." . __FUNCTION__ . " L." . __LINE__); } $zaliczkaData = $this->fetchDataBySchema($schema, $args['idUser']); return [ 'nierozliczonaKwota' => V::get('nierozliczona_kwota', 0, $zaliczkaData), 'schema' => [ 'zaliczka' => $schema, ], 'zaliczka' => $zaliczkaData, ]; } public function fetchDataAjaxAction() { Response::sendTryCatchJson(array($this, 'fetchDataAjaxReponseCallback'), $args = 'JSON_FROM_REQUEST_BODY');// try to read json from request body } public function fetchDataAjaxReponseCallback($args) { if (empty($args) || empty($args['schema']['@namespace']) || empty($args['schema']['@namespace'])) throw new HttpException("Error Parsing Request - missing @namespace", 400); $nsUri = $args['schema']['@namespace']; if ('default_db/IN7_DZIENNIK_KORESP' == $nsUri) { return [ 'options' => [ [ 'id' => "65432", 'title' => "testowa koresp 1", 'kategoriaKosztu' => "KOSZT1" ], [ 'id' => "10008", 'title' => "testowa koresp 8", 'kategoriaKosztu' => "KOSZT8" ], [ 'id' => "10009", 'title' => "testowa koresp 9", 'kategoriaKosztu' => "KOSZT9" ], ] ]; } if ('default_db/IN7_MK_BAZA_DYSTRYBUCJI' == $nsUri) { return [ 'options' => [ [ 'id' => 100, 'nrBudowy' => 'Budowa 100/2016' ], [ 'id' => 101, 'nrBudowy' => 'Budowa 101/2016' ], [ 'id' => 102, 'nrBudowy' => 'Budowa 102/2016' ], ] ]; } return null;// msg? } public function fetchDataBySchema($schema, $idUser, $primaryKey = null) {// if $primaryKey is null then search for last row return [// TODO: fetch data from DB 'id' => 123, 'created' => '2016-11-22', // data wydania zaliczki - data utworzenia rekordu 'worker' => [ 'id' => 666, 'name' => 'Kowalski', // 'TODO' => get name from admin_users - imię i nazwisko pracownika pobierającego zaliczkę 'login' => 'kowalski' ], 'kwota' => 555.55, // kwota wypłaconej zaliczki 'nierozliczona_kwota' => 123.56, 'pozycja' => [ [ 'id' => 1, 'kwota' => 100.22, 'korespondencja' => [ 'id' => 65432, 'title' => 'testowa koresp 1', 'kategoriaKosztu' => 'KOSZT1' ], 'projekt' => [ 'nrBudowy' => 'Budowa/1' ] ], [ 'id' => 2, 'kwota' => 200.55, 'korespondencja' => [ 'id' => 76543, 'title' => 'testowa koresp 2', 'kategoriaKosztu' => 'KOSZT2' ], 'projekt' => [ 'id' => 123, 'nrBudowy' => 'Budowa/2' ] ] ] ]; } public function zaliczkaListaView($data) { $idUser = V::get('idUser', User::getID(), $data); $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka"); $schema = $acl->getSimpleSchemaTree(); $zaliczkaData = $this->fetchDataBySchema($schema, $idUser); UI::startContainer(); UI::setTitle("Zaliczka"); UI::startTag('form', ['action'=>'', 'method'=>'POST']); UI::emptyTag('input', ['type'=>"hidden", 'name'=>'_route', 'value'=>"UrlAction_UserProNetMediaZaliczka"]); UI::emptyTag('input', ['type'=>"hidden", 'name'=>'_task', 'value'=>"add"]); UI::emptyTag('input', ['type'=>"hidden", 'name'=>'idUser', 'value'=>$idUser]); UI::emptyTag('input', ['type'=>"submit", 'value'=>"Dodaj nową zaliczkę", 'class'=>'btn btn-primary']); UI::endTag('form'); UI::table([ 'caption' => "Zaliczki:", 'rows' => array_map( function ($row) use ($idUser) { static $isFirst = true; $editLink = Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&idUser={$idUser}&idZaliczka={$row['ID']}"; $editLabel = ($isFirst) ? "Rozlicz / Podgląd" : "Podgląd"; if ($isFirst) $isFirst = false; $histLink = Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=hist&idUser={$idUser}&idZaliczka={$row['ID']}"; return [ 'Nr' => $row['ID'], 'Status' => $row['A_STATUS'], 'INSTANCE' => DB::getPDO()->fetchValue("select INSTANCE_NAME from `ZALICZKA__#INSTANCE` where PRIMARY_KEY = {$row['ID']}"), 'L_APPOITMENT_USER' => $row['L_APPOITMENT_USER'], 'KWOTA' => $row['KWOTA'], 'NIEROZLICZONA_KWOTA' => $row['NIEROZLICZONA_KWOTA'], '#' => '' . $editLabel . '', 'DBG' => '' . "DBG HIST" . '' ]; }, DB::getPDO()->fetchAll(" select z.* from ZALICZKA z join ADMIN_USERS u on(z.L_APPOITMENT_USER = u.ADM_ACCOUNT and u.ID = {$idUser}) order by z.ID DESC ") ), 'empty_msg' => "Brak", 'disable_lp' => true, ]); UI::alert('danger', "TODO: pierwsza na liście - aktualna - btn(Rozlicz)");// -> Edycja zaliczki UI::endContainer(); } public function addAction() { $idUser = V::get('idUser', User::getID(), $_REQUEST); try { $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka"); $id = $acl->addItem([ 'worker' => [ 'id' => $idUser ] ]); if (!$id) throw new Exception("Nie udało się utworzyć zaliczki"); } catch (Exception $e) { UI::gora(); // UI::menu();// TODO: show menu UI::startContainer(); UI::alert('danger', $e->getMessage()); UI::endContainer(); UI::dol(); exit; } $redirectUrl = Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&idUser={$idUser}&idZaliczka={$id}"; if (!headers_sent()) { header("Location: {$redirectUrl}"); } else { echo''; echo "\n".''; echo'

'.''."dalej".''.'

'; } } public function reinstallAction() { UI::gora(); try { Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka")->reinstall(); UI::startContainer(); UI::alert('success', "Structure for 'default_db/ZALICZKA/Zaliczka' created in a database"); $backUrl = Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka"; UI::tag('a', ['href'=>$backUrl, 'class'=>"btn btn-primary"], "wróć"); UI::table([ 'caption' => "Zaliczka", 'rows' => DB::getPDO()->fetchAll(" select t.TABLE_NAME, t.COLUMN_NAME, t.DATA_TYPE, t.COLUMN_TYPE from `information_schema`.`COLUMNS` t where t.TABLE_SCHEMA = 'SES_USERS2' and (t.TABLE_NAME like 'ZALICZKA' or t.TABLE_NAME like 'ZALICZKA\_\_%' or t.TABLE_NAME like 'ZALICZKA_HIST' or t.TABLE_NAME like 'Zaliczka\_\_%' ) order by t.TABLE_NAME asc, t.COLUMN_NAME asc ") ]); UI::table([ 'caption' => "Zaliczka Pozycja", 'rows' => DB::getPDO()->fetchAll(" select t.TABLE_NAME, t.COLUMN_NAME, t.DATA_TYPE, t.COLUMN_TYPE from `information_schema`.`COLUMNS` t where t.TABLE_SCHEMA = 'SES_USERS2' and (t.TABLE_NAME like 'ZALICZKA_POZYCJA' or t.TABLE_NAME like 'ZALICZKA_POZYCJA\_\_%' or t.TABLE_NAME like 'ZALICZKA_POZYCJA_HIST' or t.TABLE_NAME like 'ZaliczkaPozycja\_\_%' ) order by t.TABLE_NAME asc, t.COLUMN_NAME asc ") ]); $tableList = array_map( function($item) { return $item['TABLE_NAME']; } , DB::getPDO()->fetchAll(" select t.TABLE_NAME from `information_schema`.`COLUMNS` t where t.TABLE_SCHEMA = 'SES_USERS2' and (t.TABLE_NAME like 'ZALICZKA' or t.TABLE_NAME like 'ZALICZKA\_\_%' or t.TABLE_NAME like 'ZALICZKA_HIST' or t.TABLE_NAME like 'Zaliczka\_\_%' or t.TABLE_NAME like 'ZALICZKA_POZYCJA' or t.TABLE_NAME like 'ZALICZKA_POZYCJA\_\_%' or t.TABLE_NAME like 'ZALICZKA_POZYCJA_HIST' or t.TABLE_NAME like 'ZaliczkaPozycja\_\_%' ) group by t.TABLE_NAME ") ); foreach ($tableList as $tableName) { UI::startTag('div', ['style'=>"margin:10px 0; max-width:100%; overflow:scroll; border:1px solid #ccc"]); UI::table([ 'caption' => "Tabela '{$tableName}'", 'rows' => DB::getPDO()->fetchAll(" select t.* from `{$tableName}` t ") ]); UI::endTag('div'); } if ('1' == V::get('_clear', '', $_GET)) { foreach ($tableList as $tableName) { DB::getPDO()->exec("TRUNCATE `{$tableName}`"); } UI::tag('a', ['class'=>"btn btn-primary", 'href'=>"index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=reinstall"], "Dane usunięte - odśwież stronę"); } else { UI::tag('a', ['class'=>"btn btn-danger", 'href'=>"index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=reinstall&_clear=1"], "Wyczyść tabele"); } UI::startTag('pre'); foreach ($tableList as $tableName) { echo "DROP TABLE `{$tableName}`;\n"; } UI::endTag('pre'); UI::endContainer(); } catch (Exception $e) { UI::alert('danger', $e->getMessage()); } UI::dol(); } public function zaliczkaFormView($data) { $idUser = V::get('idUser', User::getID(), $data); $idZaliczka = V::get('idZaliczka', 0, $data); UI::tag('div', ['id'=>"zaliczka-app", 'data-dbg'=>V::get('DBG', '', $_GET), 'data-sync-js-function'=>"syncZaliczkaState", 'data-fetch-data-js-function'=>"zaliczkaFetchData"]); UI::emptyTag('br'); $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka"); $schema = $acl->getSimpleSchemaTree(); $zaliczkaData = $this->fetchDataBySchema($schema, $idUser); DBG::nicePrint($zaliczkaData, '$zaliczkaData');// TODO: DBG UI::inlineJS(__FILE__ . '.fetchData.js', [ '_initData' => $initData, 'syncUrl' => Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=fetchDataAjax&idUser={$idUser}&idZaliczka={$idZaliczka}" ]); UI::inlineJS(__FILE__ . '.syncState.js', [ '_initData' => $initData, 'syncUrl' => Request::getPathUri() . "index.php?_route=UrlAction_UserProNetMediaZaliczka&_task=syncStataAjax&idUser={$idUser}&idZaliczka={$idZaliczka}" ]); UI::tag('script', ['src'=>'static/vendor.js' . (V::get('DBG', '', $_GET) ? '?_ts=' . time() : ''), 'type'=>'text/javascript']); UI::tag('script', ['src'=>'static/zaliczka/main.js' . (V::get('DBG', '', $_GET) ? '?_ts=' . time() : ''), 'type'=>'text/javascript']); } public function histAction() { UI::gora(); // UI::menu(); try { $idZaliczka = V::get('idZaliczka', 0, $_GET, 'int'); if ($idZaliczka <= 0) throw new Exception("Missing idZaliczka"); $acl = Core_AclHelper::getAclByNamespace("default_db/ZALICZKA/Zaliczka"); $zaliczka = $acl->getItem($idZaliczka); if (!$zaliczka) throw new Exception("Zaliczka not found!"); DBG::nicePrint($zaliczka, '$zaliczka'); } catch (Exception $e) { UI::alert('danger', $e->getMessage()); } UI::dol(); } } /* Akcje # dodanie pierwszej zaliczki - 500 zł $data = [ worker => [ login => 'Kowalski' ], kwota => 500.00 ] insert into `ZALICZKA` (`L_APPOITMENT_USER`, `KWOTA`) values('{$data['worker']['login']}', '{$data['kwota']}'); -- return id = 123 # rozliczenie częściowe pierwszej zaliczki np. 500 zł $data = [ id => 123, pozycja => [ [ kwota => 200.00, korespondencja => [ ... ], projekt => [ ... ] ] ] ] update `ZALICZKA__#REF__POZYCJA` set `A_STATUS` = 'DELETED' where `PRIMARY_KEY` = 123; */