ZaliczkiNajemcow.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. Lib::loadClass('TypespecialVariable');
  4. Lib::loadClass('Router');
  5. class Route_ZaliczkiNajemcow extends RouteBase {
  6. public function handleAuth() {
  7. if (!User::logged()) {
  8. throw new HttpException('Unauthorized', 401);
  9. }
  10. }
  11. public function defaultAction() {
  12. SE_Layout::gora();
  13. //SE_Layout::menu();
  14. $this->menu();
  15. SE_Layout::dol();
  16. }
  17. public function menu($selectedYear = null, $selectedNajemca = null, $selectedCostGroup = null) {
  18. $typeSpecialNajemca = TypespecialVariable::getInstance(-1, '__ZALICZKI_NAJEMCOW__NAJEMCA');
  19. $typeSpecialCostGroup = TypespecialVariable::getInstance(-1, '__USER_GROUPS');
  20. $year = ($selectedYear)? $selectedYear : date("Y");
  21. ?>
  22. <div class="jumbotron">
  23. <div class="container">
  24. <h3>Rozliczenia najemców</h3>
  25. <form class="form-inline" method="POST">
  26. <input type="hidden" name="_task" value="zaliczki" />
  27. <label for="year">Wybierz rok:</label>
  28. <div class="input-group date" id="fldYear">
  29. <input type="text" name="year" class="form-control" value="" />
  30. <span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span>
  31. </div>
  32. <br>
  33. <br>
  34. <label for="telbox">Wybierz najemcę:</label>
  35. <?php if ($typeSpecialNajemca) : ?>
  36. <?php
  37. $fName = 'najemca';
  38. $fldParams = array();
  39. $fldParams['allowCreate'] = false;
  40. $fldParams['ajaxDataUrlBase'] = "index.php?_route=ZaliczkiNajemcow&_task=typespecial&fld={$fName}";
  41. //$fldParams['ajaxDataUrlBase'] .= "&DBG_TS=3";
  42. echo $typeSpecialNajemca->showFormItem($tblID = -1, $fName, $selValue = $selectedNajemca, $fldParams);
  43. ?>
  44. <?php endif; ?>
  45. <br>
  46. <label for="group">Wybierz grupę kosztów:</label>
  47. <?php if ($typeSpecialCostGroup) : ?>
  48. <?php
  49. $fName = 'cost_group';
  50. // TODO: default group [6388] DZIAL ADMINISTRACJI
  51. $fldParams = array();
  52. $fldParams['allowCreate'] = false;
  53. $fldParams['ajaxDataUrlBase'] = "index.php?_route=ZaliczkiNajemcow&_task=typespecial&fld={$fName}";
  54. //$fldParams['ajaxDataUrlBase'] .= "&DBG_TS=3";
  55. if (!empty($selectedCostGroup)) {
  56. $tsValue = '';
  57. $tsValues = $typeSpecialCostGroup->getValuesWithExports($selectedCostGroup);
  58. if (!empty($tsValues)) {
  59. foreach ($tsValues as $tsItem) {
  60. if ($selectedCostGroup == $tsItem->id) {
  61. $tsValue = $tsItem->param_out;
  62. }
  63. }
  64. }
  65. $fldParams['typespecialValue'] = $tsValue;
  66. }
  67. echo $typeSpecialCostGroup->showFormItem($tblID = -1, $fName, $selValue = $selectedCostGroup, $fldParams);
  68. ?>
  69. <?php endif; ?>
  70. <br>
  71. <button type="submit" id="fldGenerateBtn" class="btn btn-primary" autocomplete="off">
  72. Zaliczki
  73. </button>
  74. </form>
  75. <!--
  76. <div style="text-align:right">
  77. Edytuj
  78. <a href="index.php?_route=Budget&_task=plan&year=<?php echo $year; ?>"
  79. class="btn btn-xs btn-default"
  80. title="Plan budżetu (projects_budget_year_month)">plan budżetu</a>
  81. na rok <?php echo $year; ?>
  82. </div>
  83. -->
  84. </div>
  85. </div>
  86. <script type="text/javascript">
  87. jQuery(document).ready(function () {
  88. jQuery('#fldGenerateBtn').on('click', function () {
  89. jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
  90. jQuery(this).parent().submit();
  91. })
  92. jQuery("#fldYear").datetimepicker({
  93. format: "YYYY",
  94. defaultDate: new Date(<?php echo $year; ?>, <?php echo intval(date("m")); ?>, 1),
  95. // minDate: new Date(2014, 11, 1),
  96. // maxDate: "<?php echo date("Y"); ?>"
  97. });
  98. });
  99. </script>
  100. <?php
  101. }
  102. public function typespecialAction() {
  103. header("Content-type: application/json");
  104. $fld = V::get('fld', '', $_GET);
  105. switch ($fld) {
  106. case 'najemca': {
  107. $typeSpecialNajemca = TypespecialVariable::getInstance(-1, '__ZALICZKI_NAJEMCOW__NAJEMCA');
  108. $query = V::get('q', '', $_REQUEST);
  109. $rawRows = null;
  110. $rows = $typeSpecialNajemca->getValuesWithExports($query);
  111. DBG::_('DBG', '>0', "rows({$query})", $rows, __CLASS__, __FUNCTION__, __LINE__);
  112. foreach ($rows as $kID => $vItem) {
  113. $itemJson = new stdClass();
  114. $itemJson->id = $vItem->id;
  115. $itemJson->name = $vItem->param_out;
  116. if (!empty($vItem->exports)) {
  117. $itemJson->exports = $vItem->exports;
  118. }
  119. $jsonData[] = $itemJson;
  120. }
  121. echo json_encode($jsonData);
  122. }
  123. break;
  124. case 'cost_group': {
  125. $typeSpecialCostGroup = TypespecialVariable::getInstance(-1, '__USER_GROUPS');
  126. $query = V::get('q', '', $_REQUEST);
  127. $rawRows = null;
  128. $rows = $typeSpecialCostGroup->getValuesWithExports($query);
  129. DBG::_('DBG', '>0', "rows({$query})", $rows, __CLASS__, __FUNCTION__, __LINE__);
  130. foreach ($rows as $kID => $vItem) {
  131. $itemJson = new stdClass();
  132. $itemJson->id = $vItem->id;
  133. $itemJson->name = $vItem->param_out;
  134. if (!empty($vItem->exports)) {
  135. $itemJson->exports = $vItem->exports;
  136. }
  137. $jsonData[] = $itemJson;
  138. }
  139. echo json_encode($jsonData);
  140. }
  141. break;
  142. }
  143. }
  144. public function zaliczkaAction() {
  145. SE_Layout::gora();
  146. //SE_Layout::menu();
  147. try {
  148. $id = V::get('nrZaliczki', 0, $_REQUEST, 'int');
  149. if (!$id) throw new Exception("Wrong param id");
  150. $zaliczka = $this->findZaliczkaById($id);
  151. $this->validateRowZaliczka($zaliczka);
  152. $lastCountCostDate = $this->getLastCountMonthCost($zaliczka);
  153. if (null === $lastCountCostDate) {
  154. $zaliczka = $this->recountMonthCost($zaliczka, $zaliczka['A_LAST_COST_COUNT_ID_GROUP']);
  155. }
  156. $this->zaliczka($zaliczka);
  157. } catch (Exception $e) {
  158. SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  159. }
  160. SE_Layout::dol();
  161. }
  162. public function zaliczkiAction() {
  163. $selectedYear = V::get('year', '', $_REQUEST);
  164. $selectedNajemca = V::get('najemca', '', $_REQUEST);
  165. $selectedCostGroup = V::get('cost_group', '', $_REQUEST);
  166. SE_Layout::gora();
  167. //SE_Layout::menu();
  168. try {
  169. $this->menu($selectedYear, $selectedNajemca, $selectedCostGroup);
  170. if (!empty($selectedYear)) {
  171. if (empty($selectedCostGroup)) throw new Exception("Wybierz grupę");
  172. $groups = array($selectedCostGroup);
  173. $zaliczka = $this->findZaliczkaByNameYear($selectedNajemca, $selectedYear);
  174. $this->validateRowZaliczka($zaliczka);
  175. $lastCountCostDate = $this->getLastCountMonthCost($zaliczka);
  176. if (null === $lastCountCostDate || $selectedCostGroup != $zaliczka['A_LAST_COST_COUNT_ID_GROUP']) {
  177. $zaliczka = $this->recountMonthCost($zaliczka, $selectedCostGroup);
  178. }
  179. $this->zaliczka($zaliczka);
  180. }
  181. } catch (Exception $e) {
  182. SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  183. }
  184. SE_Layout::dol();
  185. }
  186. public function zaliczka($zaliczka) {//$selectedYear = null, $selectedNajemca = null, $selectedCostGroup = null) {
  187. $incomeByMonth = array();
  188. $localCostByMonth = array();
  189. for ($month = 1; $month <= 12; $month++) {
  190. $fldMonth = sprintf("%02d", $month);
  191. $incomeByMonth[$month] = $zaliczka["m{$fldMonth}"];
  192. $localCostByMonth[$month] = $zaliczka["c{$fldMonth}"];
  193. }
  194. $localCostTotal = 0; for($month = 1; $month <= 12; $month++) $localCostTotal += $localCostByMonth[$month];
  195. $incomeTotal = 0; for($month = 1; $month <= 12; $month++) $incomeTotal += $incomeByMonth[$month];
  196. $diff = array(); for($month = 1; $month <= 12; $month++) $diff[$month] = $localCostByMonth[$month] - $incomeByMonth[$month];
  197. $sumTotalDiff = 0; for($month = 1; $month <= 12; $month++) $sumTotalDiff += $diff[$month];
  198. $payTotal = -1 * ($incomeTotal + $localCostTotal);
  199. ?>
  200. <div class="container">
  201. <div class="row">
  202. <div class="col-md-3" style="text-align:right">Najemca</div>
  203. <div class="col-md-3"><?php echo $zaliczka['NAJEMCA']; ?></div>
  204. <div class="col-md-3" style="text-align:right">Powierzchnia całkowita do wynajęcia [m<sup>2</sup>]</div>
  205. <div class="col-md-3"><?php echo $zaliczka['POW_CALK']; ?></div>
  206. </div>
  207. <div class="row">
  208. <div class="col-md-3" style="text-align:right">Nr lokalu</div>
  209. <div class="col-md-3"><?php echo $zaliczka['NR_LOKALU']; ?></div>
  210. <div class="col-md-3" style="text-align:right">Powierzchnia lokalu przyjęta do obliczeń [m<sup>2</sup>]</div>
  211. <div class="col-md-3"><?php echo $zaliczka['POW_LOKALU']; ?></div>
  212. </div>
  213. <div class="row">
  214. <div class="col-md-3" style="text-align:right">Czy bierze udział w opdziale kosztów opłat administracyjnych</div>
  215. <div class="col-md-3"><?php echo $zaliczka['CZY_ROZLICZENIE']; ?></div>
  216. <div class="col-md-3" style="text-align:right">Rozliczenie za okres</div>
  217. <div class="col-md-3"><?php echo $zaliczka['KOSZT_OD']; ?> - <?php echo $zaliczka['KOSZT_DO']; ?></div>
  218. </div>
  219. <div class="row">
  220. <div class="col-md-3" style="text-align:right">Rok</div>
  221. <div class="col-md-3"><?php echo $zaliczka['ROK']; ?></div>
  222. </div>
  223. <h4 style="margin:12px;text-align:center">Załącznik do faktury za rozliczenie opłat serwisowych</h4>
  224. <table class="table table-bordered">
  225. <tr>
  226. <th></th>
  227. <?php for($month = 1; $month <= 12; $month++) : ?>
  228. <th><?php echo sprintf("%02d", $month); ?></th>
  229. <?php endfor; ?>
  230. <th>suma</th>
  231. <th>stawka średnia za m<sup>2</sup></th>
  232. </tr>
  233. <tr>
  234. <th style="text-align:right">Wpłacone zaliczki</th>
  235. <?php for($month = 1; $month <= 12; $month++) : ?>
  236. <td class="success"><?php echo number_format($incomeByMonth[$month], 2, '.', ','); ?></td>
  237. <?php endfor; ?>
  238. <th><?php echo number_format($incomeTotal, 2, '.', ','); ?></th>
  239. <th><?php echo number_format($incomeTotal / 12 / $zaliczka['POW_LOKALU'], 2, '.', ','); ?></th>
  240. </tr>
  241. <tr>
  242. <th style="text-align:right">Koszty przypadające na lokal</th>
  243. <?php for($month = 1; $month <= 12; $month++) : ?>
  244. <td class="success"><?php echo number_format($localCostByMonth[$month], 2, '.', ','); ?></td>
  245. <?php endfor; ?>
  246. <th><?php echo number_format($localCostTotal, 2, '.', ','); ?></th>
  247. <th><?php echo number_format($localCostTotal / 12 / $zaliczka['POW_LOKALU'], 2, '.', ','); ?></th>
  248. </tr>
  249. <tr>
  250. <th style="text-align:right">Różnica</th>
  251. <?php for($month = 1; $month <= 12; $month++) : ?>
  252. <td class="info"><?php echo number_format($diff[$month], 2, '.', ','); ?></td>
  253. <?php endfor; ?>
  254. <th><?php echo number_format($sumTotalDiff, 2, '.', ','); ?></th>
  255. <th><?php echo number_format($sumTotalDiff / 12 / $zaliczka['POW_LOKALU'], 2, '.', ','); ?></th>
  256. </tr>
  257. </table>
  258. <div class="row" style="margin-top:60px">
  259. <div class="col-md-12">
  260. Kwota netto w PLN do zapłaty za rozliczenie kosztów eksploatacyjnych za rok <?php echo $zaliczka['ROK']; ?> wynosi:
  261. <br>Razem do zapłaty <?php echo number_format($payTotal, 2, '.', ','); ?> zł
  262. <br><br>Przygotowane przez: <?php echo User::getFullName(); ?>
  263. </div>
  264. </div>
  265. </div>
  266. <?php
  267. }
  268. public function recountMonthCostAction() {
  269. SE_Layout::gora();
  270. //SE_Layout::menu();
  271. try {
  272. $id = V::get('nrZaliczki', 0, $_REQUEST, 'int');
  273. if (!$id) throw new Exception("Wrong param id");
  274. $zaliczka = $this->findZaliczkaById($id);
  275. if (!$zaliczka['A_LAST_COST_COUNT_ID_GROUP']) throw new Exception("Group not set");
  276. $zaliczka = $this->recountMonthCost($zaliczka, $zaliczka['A_LAST_COST_COUNT_ID_GROUP']);
  277. DBG::_(true, true, "zaliczka", $zaliczka, __CLASS__, __FUNCTION__, __LINE__);
  278. } catch (Exception $e) {
  279. SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
  280. }
  281. SE_Layout::dol();
  282. }
  283. public function recountMonthCost($zaliczka, $idGroup) {
  284. $idGroup = (int)$idGroup;
  285. if (!$idGroup) throw new Exception("Podano niepoprawną grupę");
  286. if ('TAK' != $zaliczka['CZY_ROZLICZENIE']) {
  287. return $zaliczka;
  288. }
  289. $budget = Router::getRoute('Budget');
  290. $groups = array($idGroup);
  291. //$budget->fetchDataByYear($selectedYear, $groups);
  292. {
  293. $budget->_fetchCostsByYear($zaliczka['ROK']);
  294. //$budget->_fetchPlanByYear($year);
  295. $budget->_fetchProjectInfo();
  296. $budget->_buildProjectTree();
  297. $budget->_reacountCostsFromKoresp();
  298. $budget->_filterProjectsByGroups($groups);
  299. }
  300. {
  301. $sumCostByMonth = array(); for ($month = 1; $month <= 12; $month++) $sumCostByMonth[$month] = 0;
  302. foreach ($budget->_projectInfo as $idProject => $projectInfo) {
  303. if (!$projectInfo->hasAccess) continue;
  304. if ($projectInfo->filteredByGroups) continue;
  305. for ($month = 1; $month <= 12; $month++) {
  306. $cost = $budget->getCost($idProject, $month);
  307. if (!$cost) continue;
  308. $sumCostByMonth[$month] += $cost->COST_SELF;
  309. }
  310. }
  311. }
  312. DBG::_('DBG', '>1', "sumCostByMonth", $sumCostByMonth, __CLASS__, __FUNCTION__, __LINE__);
  313. {// only months between KOSZT_OD and KOSZT_DO
  314. $strMonthFrom = substr($zaliczka['KOSZT_OD'], 0, 7);
  315. $strMonthTo = substr($zaliczka['KOSZT_DO'], 0, 7);
  316. for ($month = 1; $month <= 12; $month++) {
  317. $strMonth = "{$zaliczka['ROK']}-" . sprintf("%02d", $month);
  318. if ($strMonth < $strMonthFrom) $sumCostByMonth[$month] = 0;
  319. if ($strMonth > $strMonthTo) $sumCostByMonth[$month] = 0;
  320. }
  321. }
  322. DBG::_('DBG', '>1', "sumCostByMonth", $sumCostByMonth, __CLASS__, __FUNCTION__, __LINE__);
  323. DBG::_('DBG', '>2', "budget", $budget, __CLASS__, __FUNCTION__, __LINE__);
  324. $kosztOd = new DateTime($zaliczka['KOSZT_OD']);
  325. $kosztDo = new DateTime($zaliczka['KOSZT_DO']);
  326. $daysBilled = 1 + $kosztDo->diff($kosztOd)->format("%a");
  327. if ($daysBilled < 1) throw new Exception("Niepoprawne wartości w polach KOSZT_OD i KOSZT_DO");
  328. DBG::_('DBG', '>1', "daysBilled", $daysBilled, __CLASS__, __FUNCTION__, __LINE__);
  329. DBG::_('DBG', '>1', "zaliczka", $zaliczka, __CLASS__, __FUNCTION__, __LINE__);
  330. $localCostByMonth = array();
  331. for ($month = 1; $month <= 12; $month++) {
  332. $localCostByMonth[$month] = ($zaliczka['POW_LOKALU'] / $zaliczka['POW_CALK']) * $sumCostByMonth[$month] * $daysBilled / 365;
  333. }
  334. $zaliczkaPatch = array();
  335. $zaliczkaPatch['ID'] = $zaliczka['ID'];
  336. $zaliczkaPatch['A_LAST_COST_COUNT_ID_GROUP'] = $idGroup;
  337. $zaliczkaPatch['A_LAST_COST_COUNT_DATE'] = 'NOW()';
  338. for ($month = 1; $month <= 12; $month++) {
  339. $fldMonth = sprintf("%02d", $month);
  340. $zaliczkaPatch["c{$fldMonth}"] = $localCostByMonth[$month];
  341. }
  342. DBG::_('DBG', '>1', "zaliczkaPatch", $zaliczkaPatch, __CLASS__, __FUNCTION__, __LINE__);
  343. $tblAcl = User::getAcl()->getObjectAcl('default_db', 'ZALICZKI_NAJEMCOW');
  344. //DBG::_(true, true, "tblAcl", $tblAcl, __CLASS__, __FUNCTION__, __LINE__);
  345. $ds = $tblAcl->getDataSource();
  346. //DBG::_(true, true, "ds", $ds, __CLASS__, __FUNCTION__, __LINE__);
  347. $ds->updateItem($zaliczkaPatch);
  348. return $this->findZaliczkaById($zaliczka['ID']);
  349. }
  350. public function getLastCountMonthCost($zaliczka) {
  351. return $zaliczka['A_LAST_COST_COUNT_DATE'];
  352. }
  353. public function findZaliczkaByNameYear($najemca, $rok) {
  354. $pdo = DB::getPDO();
  355. if (empty($najemca)) throw new Exception("Nie podano najemcy");
  356. if (empty($rok)) throw new Exception("Nie podano roku");
  357. if (!is_numeric($rok) || 4 != strlen($rok)) throw new Exception("Podano nieprawidłowy rok");
  358. $sth = $pdo->prepare("
  359. select z.*
  360. from ZALICZKI_NAJEMCOW z
  361. where z.ROK = :rok
  362. and z.NAJEMCA = :najemca
  363. ");
  364. $sth->bindValue(':rok', $rok, PDO::PARAM_STR);
  365. $sth->bindValue(':najemca', $najemca, PDO::PARAM_STR);
  366. $sth->execute();
  367. $zaliczka = $sth->fetch();
  368. if (!$zaliczka) throw new Exception("Brak danych dla wybrancyh kryteriów");
  369. return $zaliczka;
  370. }
  371. public function findZaliczkaById($id) {
  372. $pdo = DB::getPDO();
  373. $id = (int)$id;
  374. if (!$id) throw new Exception("Podano nieprawidłowy nr rekordu");
  375. $sth = $pdo->prepare("
  376. select z.*
  377. from ZALICZKI_NAJEMCOW z
  378. where z.ID = :id
  379. ");
  380. $sth->bindValue(':id', $id, PDO::PARAM_INT);
  381. $sth->execute();
  382. $zaliczka = $sth->fetch();
  383. if (!$zaliczka) throw new Exception("Brak danych dla wybrancyh kryteriów");
  384. return $zaliczka;
  385. }
  386. public function validateRowZaliczka($zaliczka) {
  387. //DBG::_(true, true, "zaliczka", $zaliczka, __CLASS__, __FUNCTION__, __LINE__);
  388. // TODO: validate $zaliczka
  389. if (empty($zaliczka['KOSZT_OD'])) throw new Exception("Brak KOSZT_OD");
  390. if (empty($zaliczka['KOSZT_DO'])) throw new Exception("Brak KOSZT_DO");
  391. if ($zaliczka['KOSZT_OD'] > $zaliczka['KOSZT_DO']) throw new Exception("KOSZT_OD nie może być później niż KOSZT_DO");
  392. if (empty($zaliczka['POW_CALK'])) throw new Exception("Brak POW_CALK");
  393. if (empty($zaliczka['POW_LOKALU'])) throw new Exception("Brak POW_LOKALU");
  394. }
  395. public function reinstallAction() {
  396. $force = (1 == V::get('_force', '', $_REQUEST));
  397. try {
  398. $this->_reinstall($force);
  399. echo "\n" . '.END';
  400. } catch (Exception $e) {
  401. echo "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage();
  402. }
  403. }
  404. public function insertTestDataAction() {
  405. try {
  406. $pdo = DB::getPDO();
  407. $pdo->exec("
  408. insert into `ZALICZKI_NAJEMCOW` values('1',
  409. '0',
  410. 'test1',
  411. '',
  412. 'test1',
  413. '2015',
  414. 'TAK',
  415. '21736.91',
  416. '1735.24',
  417. '2015-05-12',
  418. '2015-12-31',
  419. '0.00',
  420. '0.00',
  421. '0.00',
  422. '0.00',
  423. '13962.75',
  424. '21642.26',
  425. '21642.26',
  426. '21642.26',
  427. '21642.26',
  428. '21642.26',
  429. '21642.26',
  430. '21642.26',
  431. '0.00',
  432. '0.00',
  433. '0.00',
  434. '0.00',
  435. '0.00',
  436. '0.00',
  437. '0.00',
  438. '0.00',
  439. '0.00',
  440. '0.00',
  441. '0.00',
  442. '0.00',
  443. NULL,
  444. '0',
  445. '2016-02-22-15:34',
  446. 'plabudda',
  447. '2016-02-23-11:21',
  448. 'plabudda',
  449. 'WAITING',
  450. '',
  451. ''
  452. )
  453. ");
  454. echo "\n" . '.END';
  455. } catch (Exception $e) {
  456. echo "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage();
  457. }
  458. }
  459. public function _reinstall($force = false) {
  460. $sqlList = array();
  461. $pdo = DB::getPDO();
  462. $sqlHistCreate = <<<EOF_SQL_HIST_CREATE
  463. CREATE TABLE IF NOT EXISTS `ZALICZKI_NAJEMCOW_HIST` (
  464. `ID` int(11) NOT NULL AUTO_INCREMENT,
  465. `ID_USERS2` int(11) NOT NULL,
  466. `ID_BILLING_USERS` varchar(11) NOT NULL DEFAULT 'N/S;',
  467. `NAJEMCA` varchar(255) NOT NULL DEFAULT 'N/S;',
  468. `T_TELBOX_NEIGHBOUR_IN` varchar(32) NOT NULL DEFAULT 'N/S;',
  469. `NR_LOKALU` varchar(32) NOT NULL DEFAULT 'N/S;',
  470. `ROK` varchar(5) NOT NULL DEFAULT 'N/S;',
  471. `CZY_ROZLICZENIE` varchar(10) NOT NULL DEFAULT 'N/S;',
  472. `POW_CALK` varchar(11) NOT NULL DEFAULT 'N/S;',
  473. `POW_LOKALU` varchar(11) NOT NULL DEFAULT 'N/S;',
  474. `KOSZT_OD` varchar(10) NOT NULL DEFAULT 'N/S;',
  475. `KOSZT_DO` varchar(10) NOT NULL DEFAULT 'N/S;',
  476. `m01` varchar(20) NOT NULL DEFAULT 'N/S;',
  477. `m02` varchar(20) NOT NULL DEFAULT 'N/S;',
  478. `m03` varchar(20) NOT NULL DEFAULT 'N/S;',
  479. `m04` varchar(20) NOT NULL DEFAULT 'N/S;',
  480. `m05` varchar(20) NOT NULL DEFAULT 'N/S;',
  481. `m06` varchar(20) NOT NULL DEFAULT 'N/S;',
  482. `m07` varchar(20) NOT NULL DEFAULT 'N/S;',
  483. `m08` varchar(20) NOT NULL DEFAULT 'N/S;',
  484. `m09` varchar(20) NOT NULL DEFAULT 'N/S;',
  485. `m10` varchar(20) NOT NULL DEFAULT 'N/S;',
  486. `m11` varchar(20) NOT NULL DEFAULT 'N/S;',
  487. `m12` varchar(20) NOT NULL DEFAULT 'N/S;',
  488. `c01` varchar(20) NOT NULL DEFAULT 'N/S;',
  489. `c02` varchar(20) NOT NULL DEFAULT 'N/S;',
  490. `c03` varchar(20) NOT NULL DEFAULT 'N/S;',
  491. `c04` varchar(20) NOT NULL DEFAULT 'N/S;',
  492. `c05` varchar(20) NOT NULL DEFAULT 'N/S;',
  493. `c06` varchar(20) NOT NULL DEFAULT 'N/S;',
  494. `c07` varchar(20) NOT NULL DEFAULT 'N/S;',
  495. `c08` varchar(20) NOT NULL DEFAULT 'N/S;',
  496. `c09` varchar(20) NOT NULL DEFAULT 'N/S;',
  497. `c10` varchar(20) NOT NULL DEFAULT 'N/S;',
  498. `c11` varchar(20) NOT NULL DEFAULT 'N/S;',
  499. `c12` varchar(20) NOT NULL DEFAULT 'N/S;',
  500. `A_LAST_COST_COUNT_DATE` varchar(30) NOT NULL DEFAULT 'N/S;',
  501. `A_LAST_COST_COUNT_ID_GROUP` varchar(11) NOT NULL DEFAULT 'N/S;',
  502. `A_RECORD_CREATE_DATE` varchar(30) NOT NULL DEFAULT 'N/S;',
  503. `A_RECORD_CREATE_AUTHOR` varchar(40) NOT NULL DEFAULT 'N/S;',
  504. `A_RECORD_UPDATE_DATE` varchar(30) NOT NULL DEFAULT 'N/S;',
  505. `A_RECORD_UPDATE_AUTHOR` varchar(40) NOT NULL DEFAULT 'N/S;',
  506. `A_STATUS` varchar(100) NOT NULL DEFAULT 'N/S;',
  507. `A_ADM_COMPANY` varchar(255) DEFAULT 'N/S;',
  508. `A_CLASSIFIED` varchar(255) DEFAULT 'N/S;',
  509. PRIMARY KEY (`ID`),
  510. KEY `ID_USERS2` (`ID_USERS2`)
  511. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  512. EOF_SQL_HIST_CREATE;
  513. $sqlCreate = <<<EOF_SQL_CREATE
  514. CREATE TABLE IF NOT EXISTS `ZALICZKI_NAJEMCOW` (
  515. `ID` int(11) NOT NULL AUTO_INCREMENT,
  516. `ID_BILLING_USERS` int(11) NOT NULL DEFAULT 0,
  517. `NAJEMCA` varchar(255) NOT NULL DEFAULT '',
  518. `T_TELBOX_NEIGHBOUR_IN` varchar(32) NOT NULL DEFAULT '',
  519. `NR_LOKALU` varchar(32) NOT NULL DEFAULT '',
  520. `ROK` int(4) NOT NULL,
  521. `CZY_ROZLICZENIE` enum('TAK','NIE') NOT NULL DEFAULT 'NIE',
  522. `POW_CALK` double NOT NULL,
  523. `POW_LOKALU` double NOT NULL,
  524. `KOSZT_OD` date NOT NULL,
  525. `KOSZT_DO` date NOT NULL,
  526. `m01` decimal(16,2) NOT NULL DEFAULT 0,
  527. `m02` decimal(16,2) NOT NULL DEFAULT 0,
  528. `m03` decimal(16,2) NOT NULL DEFAULT 0,
  529. `m04` decimal(16,2) NOT NULL DEFAULT 0,
  530. `m05` decimal(16,2) NOT NULL DEFAULT 0,
  531. `m06` decimal(16,2) NOT NULL DEFAULT 0,
  532. `m07` decimal(16,2) NOT NULL DEFAULT 0,
  533. `m08` decimal(16,2) NOT NULL DEFAULT 0,
  534. `m09` decimal(16,2) NOT NULL DEFAULT 0,
  535. `m10` decimal(16,2) NOT NULL DEFAULT 0,
  536. `m11` decimal(16,2) NOT NULL DEFAULT 0,
  537. `m12` decimal(16,2) NOT NULL DEFAULT 0,
  538. `c01` decimal(16,2) NOT NULL DEFAULT 0,
  539. `c02` decimal(16,2) NOT NULL DEFAULT 0,
  540. `c03` decimal(16,2) NOT NULL DEFAULT 0,
  541. `c04` decimal(16,2) NOT NULL DEFAULT 0,
  542. `c05` decimal(16,2) NOT NULL DEFAULT 0,
  543. `c06` decimal(16,2) NOT NULL DEFAULT 0,
  544. `c07` decimal(16,2) NOT NULL DEFAULT 0,
  545. `c08` decimal(16,2) NOT NULL DEFAULT 0,
  546. `c09` decimal(16,2) NOT NULL DEFAULT 0,
  547. `c10` decimal(16,2) NOT NULL DEFAULT 0,
  548. `c11` decimal(16,2) NOT NULL DEFAULT 0,
  549. `c12` decimal(16,2) NOT NULL DEFAULT 0,
  550. `A_LAST_COST_COUNT_DATE` datetime,
  551. `A_LAST_COST_COUNT_ID_GROUP` int(11) NOT NULL,
  552. `A_RECORD_CREATE_DATE` datetime NOT NULL,
  553. `A_RECORD_CREATE_AUTHOR` varchar(40) NOT NULL,
  554. `A_RECORD_UPDATE_DATE` datetime,
  555. `A_RECORD_UPDATE_AUTHOR` varchar(40) NOT NULL,
  556. `A_STATUS` enum('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD','DELETED') NOT NULL DEFAULT 'WAITING',
  557. `A_CLASSIFIED` varchar(100) NOT NULL,
  558. `A_ADM_COMPANY` varchar(100) NOT NULL,
  559. PRIMARY KEY (`ID`)
  560. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  561. EOF_SQL_CREATE;
  562. /*
  563. `ZALICZKI_NAJEMCOW`:
  564. - who - user login
  565. - when - shedule (once a day, once on houd)
  566. - what - action type
  567. - last_exec_time
  568. */
  569. $pdo->exec($sqlHistCreate);
  570. $pdo->exec($sqlCreate);
  571. if($force){
  572. $pdo->exec("DROP TABLE IF EXISTS ZALICZKI_NAJEMCOW_HIST");
  573. $pdo->exec("DROP TABLE IF EXISTS ZALICZKI_NAJEMCOW");
  574. $pdo->exec($sqlHistCreate);
  575. $pdo->exec($sqlCreate);
  576. }
  577. if(1){// TODO: assertTableStruct ZALICZKI_NAJEMCOW
  578. $expectedStruct = array();
  579. $expectedStruct['ID'] = array('type'=>'int', 'extra'=>'AUTO_INCREMENT');// `ID` int(11) NOT NULL AUTO_INCREMENT,
  580. $expectedStruct['ID_BILLING_USERS'] = array('type'=>'int', 'default_value'=>0);// `ID_BILLING_USERS` int(11) NOT NULL DEFAULT 0,
  581. $expectedStruct['NAJEMCA'] = array('type'=>'varchar', 'max_length'=>'255', 'default_value'=>'');// `NAJEMCA` varchar(255) NOT NULL DEFAULT '',
  582. $expectedStruct['T_TELBOX_NEIGHBOUR_IN'] = array('type'=>'varchar', 'max_length'=>'32', 'default_value'=>'');// `T_TELBOX_NEIGHBOUR_IN` varchar(32) NOT NULL DEFAULT '',
  583. $expectedStruct['NR_LOKALU'] = array('type'=>'varchar', 'max_length'=>'32', 'default_value'=>'');// `NR_LOKALU` varchar(255) NOT NULL DEFAULT '',
  584. $expectedStruct['ROK'] = array('type'=>'int');// `ROK` int(4) NOT NULL,
  585. $expectedStruct['CZY_ROZLICZENIE'] = array('type'=>'enum', 'values'=>array('TAK','NIE'), 'default_value'=>'NIE');// `CZY_ROZLICZENIE` enum('TAK','NIE') NOT NULL DEFAULT 'NIE',
  586. $expectedStruct['POW_CALK'] = array('type'=>'double');// `POW_CALK` double NOT NULL,
  587. $expectedStruct['POW_LOKALU'] = array('type'=>'double');// `POW_LOKALU` double NOT NULL,
  588. $expectedStruct['KOSZT_OD'] = array('type'=>'date');// `KOSZT_OD` datetime NOT NULL,
  589. $expectedStruct['KOSZT_DO'] = array('type'=>'date');// `KOSZT_DO` datetime NOT NULL,
  590. $expectedStruct['m01'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m01` decimal(16,2) NOT NULL DEFAULT 0,
  591. $expectedStruct['m02'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m02` decimal(16,2) NOT NULL DEFAULT 0,
  592. $expectedStruct['m03'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m03` decimal(16,2) NOT NULL DEFAULT 0,
  593. $expectedStruct['m04'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m04` decimal(16,2) NOT NULL DEFAULT 0,
  594. $expectedStruct['m05'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m05` decimal(16,2) NOT NULL DEFAULT 0,
  595. $expectedStruct['m06'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m06` decimal(16,2) NOT NULL DEFAULT 0,
  596. $expectedStruct['m07'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m07` decimal(16,2) NOT NULL DEFAULT 0,
  597. $expectedStruct['m08'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m08` decimal(16,2) NOT NULL DEFAULT 0,
  598. $expectedStruct['m09'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m09` decimal(16,2) NOT NULL DEFAULT 0,
  599. $expectedStruct['m10'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m10` decimal(16,2) NOT NULL DEFAULT 0,
  600. $expectedStruct['m11'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m11` decimal(16,2) NOT NULL DEFAULT 0,
  601. $expectedStruct['m12'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m12` decimal(16,2) NOT NULL DEFAULT 0,
  602. $expectedStruct['c01'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c01` decimal(16,2) NOT NULL DEFAULT 0,
  603. $expectedStruct['c02'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c02` decimal(16,2) NOT NULL DEFAULT 0,
  604. $expectedStruct['c03'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c03` decimal(16,2) NOT NULL DEFAULT 0,
  605. $expectedStruct['c04'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c04` decimal(16,2) NOT NULL DEFAULT 0,
  606. $expectedStruct['c05'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c05` decimal(16,2) NOT NULL DEFAULT 0,
  607. $expectedStruct['c06'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c06` decimal(16,2) NOT NULL DEFAULT 0,
  608. $expectedStruct['c07'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c07` decimal(16,2) NOT NULL DEFAULT 0,
  609. $expectedStruct['c08'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c08` decimal(16,2) NOT NULL DEFAULT 0,
  610. $expectedStruct['c09'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c09` decimal(16,2) NOT NULL DEFAULT 0,
  611. $expectedStruct['c10'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c10` decimal(16,2) NOT NULL DEFAULT 0,
  612. $expectedStruct['c11'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c11` decimal(16,2) NOT NULL DEFAULT 0,
  613. $expectedStruct['c12'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c12` decimal(16,2) NOT NULL DEFAULT 0,
  614. $expectedStruct['A_LAST_COST_COUNT_DATE'] = array('type'=>'datetime', 'is_nullable'=>true);
  615. $expectedStruct['A_LAST_COST_COUNT_ID_GROUP'] = array('type'=>'int');
  616. $expectedStruct['A_RECORD_CREATE_DATE'] = array('type'=>'datetime');
  617. $expectedStruct['A_RECORD_CREATE_AUTHOR'] = array('type'=>'varchar', 'max_length'=>20);
  618. $expectedStruct['A_RECORD_UPDATE_DATE'] = array('type'=>'datetime', 'is_nullable'=>true);
  619. $expectedStruct['A_RECORD_UPDATE_AUTHOR'] = array('type'=>'varchar', 'max_length'=>20);
  620. $expectedStruct['A_STATUS'] = array('type'=>'enum', 'values'=>array('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD','DELETED'), 'default_value'=>'WAITING');
  621. $expectedStruct['A_CLASSIFIED'] = array('type'=>'varchar');// `A_CLASSIFIED` varchar(100) NOT NULL,
  622. $expectedStruct['A_ADM_COMPANY'] = array('type'=>'varchar');// `A_ADM_COMPANY` varchar(100) NOT NULL,
  623. $expectedStruct['key_id'] = array('type'=>'PRIMARY KEY', 'key_fields'=>array('ID'));// PRIMARY KEY (`ID`)
  624. DBG::_(true, true, "sqlCreate - raw", $sqlCreate, __CLASS__, __FUNCTION__, __LINE__);
  625. $sqlCreate = $pdo->showCreateStruct('ZALICZKI_NAJEMCOW', $expectedStruct, array('char_encoding'=>'latin2'));
  626. DBG::_(true, true, "sqlCreate - generated", $sqlCreate, __CLASS__, __FUNCTION__, __LINE__);
  627. if(0){
  628. $pdo->assertTableStruct('ZALICZKI_NAJEMCOW', $expectedStruct, array('char_encoding'=>'latin2'));
  629. }
  630. if(0){// force - drop/create
  631. $pdo->exec("DROP TABLE IF EXISTS ZALICZKI_NAJEMCOW");
  632. $pdo->exec($sqlCreate);
  633. }
  634. }
  635. }
  636. }