[ '@namespace' => 'default_db/ZALICZKA/Zaliczka',// Api_WfsNs::getBaseWfsUri() . '/default_db/Zaliczka' '@implements' => 'default_types/Infrastructure', 'id' => 'xsd:integer', 'created' => 'xsd:date', 'worker' => [ '@ref' => 'default_objects/AccessOwner' ],// 'alias_ref:default_objects:AccessOwner' // 'worker' => [ '@ref' => 'Worker' ], 'kwota' => [ '@type' => 'xsd:decimal', '@totalDigits' => 16, '@fractionDigits' => 2 ], 'nierozliczona_kwota' => [ '@type' => 'xsd:decimal', '@totalDigits' => 16, '@fractionDigits' => 2 ], 'pozycja' => [ '@ref' => 'ZaliczkaPozycja', '@maxOccurs' => 'unbounded' ] ], 'ZaliczkaPozycja' => [ '@namespace' => 'default_db/ZALICZKA_POZYCJA/ZaliczkaPozycja',// Api_WfsNs::getBaseWfsUri() . '/default_db/Zaliczka' 'id' => 'xsd:integer', 'kwota' => [ '@type' => 'xsd:decimal', '@totalDigits' => 16, '@fractionDigits' => 2 ], 'korespondencja' => [ '@ref' => 'Korespondencja' ], 'projekt' => [ '@ref' => 'Projekt' ] ], 'Korespondencja' => [ '@namespace' => 'default_db/IN7_DZIENNIK_KORESP', 'id' => [ '@type' => 'xsd:integer', '@alias' => 'ID' ], 'title' => [ '@type' => 'xsd:string', '@alias' => 'K_ZAWARTOS' ], 'kategoriaKosztu' => [ '@type' => 'xsd:string', '@alias' => 'KATEGORIA_KOSZTU' ] ], 'Projekt' => [ '@namespace' => 'default_db/IN7_MK_BAZA_DYSTRYBUCJI', 'id' => [ '@type' => 'xsd:integer', '@alias' => 'ID' ], 'nrBudowy' => [ '@type' => 'xsd:string', '@alias' => 'M_DIST_DEALNUM' ],// TODO: ? M_DIST_DESC (szerszy opis) ], // 'worker' => [ // '@namespace' => 'default_objects/AccessOwner', // 'login' => 'xsd:string', // 'name' => 'xsd:string' // ] ]; // [ // '@typeName' => 'default_db__x3A__ZALICZKA:Zaliczka', // '@baseTypeName' => 'default_db:ZALICZKA', // '@namespace' => 'default_db/ZALICZKA/Zaliczka',// Api_WfsNs::getBaseWfsUri() . '/default_db/Zaliczka' // 'id' => 'xsd:integer', // 'created' => 'xsd:date', // 'worker' => [ // '@namespace' => 'default_objects/AccessOwner',// alias_ref:default_objects:AccessOwner // ], // 'kwota' => 'xsd:decimal', // 'pozycja' => [ // '@namespace' => 'default_db/ZALICZKA_POZYCJA/ZaliczkaPozycja',// alias_ref:default_db__x3A__ZALICZKA_POZYCJA:ZaliczkaPozycja // '@maxOccurs' => 'unbounded', // // 'id' => 'xsd:integer', // // 'kwota' => 'xsd:decimal', // // 'korespondencja' => [// 'ref:korespondencja' // // '@namespace' => 'default_db/IN7_DZIENNIK_KORESP', // // 'id' => 'xsd:integer', // // 'title' => 'xsd:string', // // 'kategoriaKosztu' => 'xsd:string' // // ], // // 'projekt' => [// 'ref:projekt' // // '@namespace' => 'default_db/IN7_MK_BAZA_DYSTRYBUCJI', // // 'id' => 'xsd:integer', // // 'nrBudowy' => 'xsd:string' // // ] // ] // ]; public function addItem($itemTodo) { // TODO: btn "Dodaj Zaliczkę" $acl->addItem($item); // @require only 'worker' => [ 'id', 'login', 'name' ] DBG::nicePrint($itemTodo, '$itemTodo');// TODO: DBG if (!is_array($itemTodo) || empty($itemTodo['worker'])) throw new Exception("Missing worker"); if (empty($itemTodo['worker']['id'])) throw new Exception("Missing worker id"); $idUser = intval($itemTodo['worker']['id']); if ($idUser <= 0) throw new Exception("Wrong worker id"); $userLogin = DB::getPDO()->fetchValue(" select u.ADM_ACCOUNT from `ADMIN_USERS` u where u.ID = {$idUser} "); if (empty($userLogin)) throw new Exception("User not exists ID={$idUser}"); DBG::nicePrint($userLogin, '$userLogin');// TODO: DBG $idTransaction = Core_AclHelper::startTransaction('ZALICZKA', $idUser, $userLogin); $zaliczkaRefWorker = Core_AclHelper::getRefTable('Zaliczka', 'worker');// `Zaliczka__#REF__worker` $idActiveZaliczka = DB::getPDO()->fetchValue(" select MAX(t.ID) from `ZALICZKA` t -- join `ADMIN_USERS` u on(t.L_APPOITMENT_USER = u.ADM_ACCOUNT) left join `{$zaliczkaRefWorker}` ref on(ref.PRIMARY_KEY = t.ID and ref.A_STATUS != 'DELETED') left join `ADMIN_USERS` r on(r.ID = ref.REMOTE_PRIMARY_KEY) where r.ID = {$idUser} and t.A_STATUS in('WAITING', 'NORMAL') -- TODO cache use #INSTANCE table "); $zaliczkaRefWorker = Core_AclHelper::getRefTable('Zaliczka', 'worker');// `Zaliczka__#REF__worker` DBG::nicePrint(" select MAX(t.ID) from `ZALICZKA` t -- join `ADMIN_USERS` u on(t.L_APPOITMENT_USER = u.ADM_ACCOUNT) left join `{$zaliczkaRefWorker}` ref on(ref.PRIMARY_KEY = t.ID and ref.A_STATUS != 'DELETED') left join `ADMIN_USERS` r on(r.ID = ref.REMOTE_PRIMARY_KEY) where r.ID = {$idUser} and t.A_STATUS in('WAITING', 'NORMAL') -- TODO cache use #INSTANCE table ", 'sql');// TODO: DBG DBG::nicePrint($idActiveZaliczka, '$idActiveZaliczka');// TODO: DBG $userSaldo = 0; if ($idActiveZaliczka > 0) { $zaliczkaRefPozycja = Core_AclHelper::getRefTable('Zaliczka', 'pozycja');// `Zaliczka__#REF__pozycja` $userSaldo = DB::getPDO()->fetchValue(" select t.KWOTA + t.NIEROZLICZONA_KWOTA - sum(r.KWOTA) from `ZALICZKA` t left join `{$zaliczkaRefPozycja}` ref on(ref.PRIMARY_KEY = t.ID and ref.A_STATUS != 'DELETED') left join `ZALICZKA_POZYCJA` r on(r.ID = ref.REMOTE_PRIMARY_KEY) where t.ID = {$idActiveZaliczka} "); DBG::nicePrint($userSaldo, '$userSaldo');// TODO: DBG } $usrLogin = User::getLogin(); $execRet = DB::getPDO()->exec(" insert into `ZALICZKA` (A_RECORD_CREATE_AUTHOR, A_RECORD_CREATE_DATE , L_APPOITMENT_USER, NIEROZLICZONA_KWOTA) select '{$usrLogin}' as A_RECORD_CREATE_AUTHOR, NOW() as A_RECORD_CREATE_DATE , u.ADM_ACCOUNT, '{$userSaldo}' from ADMIN_USERS u where u.ID = {$idUser} "); DBG::nicePrint($execRet, '$execRet');// TODO: DBG $id = DB::getPDO()->lastInsertId(); DBG::nicePrint($id, '$id');// TODO: DBG $this->insertRef('worker', $id, $idUser); // TODO: legacy fill table ZALICZKA_HIST DB::getPDO()->exec(" insert into `ZALICZKA_HIST` (ID_USERS2, L_APPOITMENT_USER, NIEROZLICZONA_KWOTA) select z.ID as ID_USERS2, z.L_APPOITMENT_USER, z.NIEROZLICZONA_KWOTA from ZALICZKA z where z.ID = {$id} "); return $id; } public function reinstall() { // TODO: mv to Core_AclSimpleSchemaBase and reainstall by _simpleSchema - read current data from `information_schema` DB::getPDO()->exec(" CREATE TABLE IF NOT EXISTS `ZALICZKA` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `A_RECORD_CREATE_DATE` datetime DEFAULT NULL, `A_RECORD_CREATE_AUTHOR` varchar(20) DEFAULT NULL, `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 '', `L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT '', `KWOTA` decimal(16,2) NOT NULL DEFAULT 0, `NIEROZLICZONA_KWOTA` decimal(16,2) NOT NULL DEFAULT 0, PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; "); DB::getPDO()->exec(" CREATE TABLE IF NOT EXISTS `ZALICZKA_HIST` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `ID_USERS2` int(11) NOT NULL, `A_RECORD_CREATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;', `A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;', `A_RECORD_UPDATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;', `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;', `A_STATUS` varchar(20) NOT NULL DEFAULT 'N/S;', `A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT 'N/S;', `A_CLASSIFIED` varchar(100) NOT NULL DEFAULT 'N/S;', `L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT 'N/S;', `KWOTA` varchar(16) NOT NULL DEFAULT 'N/S;', `NIEROZLICZONA_KWOTA` varchar(16) NOT NULL DEFAULT 'N/S;', PRIMARY KEY (`ID`), KEY `ID_USERS2` (`ID_USERS2`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; "); DB::getPDO()->exec(" CREATE TABLE IF NOT EXISTS `ZALICZKA_POZYCJA` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `A_RECORD_CREATE_DATE` datetime DEFAULT NULL, `A_RECORD_CREATE_AUTHOR` varchar(20) DEFAULT NULL, `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 '', `L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT '', `KWOTA` decimal(16,2) NOT NULL DEFAULT 0, PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; "); DB::getPDO()->exec(" CREATE TABLE IF NOT EXISTS `ZALICZKA_POZYCJA_HIST` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `ID_USERS2` int(11) NOT NULL, `A_RECORD_CREATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;', `A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;', `A_RECORD_UPDATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;', `A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;', `A_STATUS` varchar(20) NOT NULL DEFAULT 'N/S;', `A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT 'N/S;', `A_CLASSIFIED` varchar(100) NOT NULL DEFAULT 'N/S;', `L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT 'N/S;', `KWOTA` varchar(16) NOT NULL DEFAULT 'N/S;', PRIMARY KEY (`ID`), KEY `ID_USERS2` (`ID_USERS2`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; "); Core_AclHelper::getRefTable('Zaliczka', 'worker');// `ZaliczkaPozycja__#REF__worker` Core_AclHelper::getRefTable('Zaliczka', 'pozycja');// `Zaliczka__#REF__pozycja` Core_AclHelper::getRefTable('ZaliczkaPozycja', 'korespondencja');// `ZaliczkaPozycja__#REF__Kkorespondencja` Core_AclHelper::getRefTable('ZaliczkaPozycja', 'projekt');// `ZaliczkaPozycja__#REF__projekt` Core_AclHelper::getInstanceTable('ZALICZKA');// `ZALICZKA__#INSTANCE` // TODO: ZaliczkaOczekujaca A_STATUS = WAITING -- dodane przez pracownika // TODO: ZaliczkaAktywna A_STATUS = NORMAL -- zakceptowane / wyplacone przez ... // TODO: pole na dane wypłacającego zaliczkę // TODO: dopiero teraz wyliczyć saldo / nierozliczona_kwota? Saldo pokazywać zawsze, aktualizować po akceptacji (Oczekujaca --> Aktywna) // TODO: ZaliczkaArchiwalna A_STATUS = OFF_HARD -- poprzednie zaliczki // TODO: ZaliczkaUsunieta A_STATUS = DELETED -- usunieta przez workera lub anulowana przez osobę uprawnioną Core_AclHelper::getTransactionTable('ZALICZKA');// `ZALICZKA__#TRANSACTION` Core_AclHelper::getTransactionTable('ZALICZKA_POZYCJA');// `ZALICZKA_POZYCJA__#TRANSACTION` foreach ($this->_simpleSchema['root'] as $childName => $schema) { if ('@' == substr($childName, 0, 1)) continue; Core_AclHelper::getChildHistTable('ZALICZKA', $childName, $schema); DBG::nicePrint($schema, '$childName('.$childName.')');// TODO: DBG } } }