menu(); SE_Layout::dol(); } public function menu($selectedYear = null, $selectedNajemca = null, $selectedCostGroup = null) { $typeSpecialNajemca = TypespecialVariable::getInstance(-1, '__ZALICZKI_NAJEMCOW__NAJEMCA'); $typeSpecialCostGroup = TypespecialVariable::getInstance(-1, '__USER_GROUPS'); $year = ($selectedYear)? $selectedYear : date("Y"); ?>

Rozliczenia najemców



showFormItem($tblID = -1, $fName, $selValue = $selectedNajemca, $fldParams); ?>
getValuesWithExports($selectedCostGroup); if (!empty($tsValues)) { foreach ($tsValues as $tsItem) { if ($selectedCostGroup == $tsItem->id) { $tsValue = $tsItem->param_out; } } } $fldParams['typespecialValue'] = $tsValue; } echo $typeSpecialCostGroup->showFormItem($tblID = -1, $fName, $selValue = $selectedCostGroup, $fldParams); ?>
getValuesWithExports($query); DBG::_('DBG', '>0', "rows({$query})", $rows, __CLASS__, __FUNCTION__, __LINE__); foreach ($rows as $kID => $vItem) { $itemJson = new stdClass(); $itemJson->id = $vItem->id; $itemJson->name = $vItem->param_out; if (!empty($vItem->exports)) { $itemJson->exports = $vItem->exports; } $jsonData[] = $itemJson; } echo json_encode($jsonData); } break; case 'cost_group': { $typeSpecialCostGroup = TypespecialVariable::getInstance(-1, '__USER_GROUPS'); $query = V::get('q', '', $_REQUEST); $rawRows = null; $rows = $typeSpecialCostGroup->getValuesWithExports($query); DBG::_('DBG', '>0', "rows({$query})", $rows, __CLASS__, __FUNCTION__, __LINE__); foreach ($rows as $kID => $vItem) { $itemJson = new stdClass(); $itemJson->id = $vItem->id; $itemJson->name = $vItem->param_out; if (!empty($vItem->exports)) { $itemJson->exports = $vItem->exports; } $jsonData[] = $itemJson; } echo json_encode($jsonData); } break; } } public function zaliczkaAction() { SE_Layout::gora(); //SE_Layout::menu(); try { $id = V::get('nrZaliczki', 0, $_REQUEST, 'int'); if (!$id) throw new Exception("Wrong param id"); $zaliczka = $this->findZaliczkaById($id); $this->validateRowZaliczka($zaliczka); $lastCountCostDate = $this->getLastCountMonthCost($zaliczka); if (null === $lastCountCostDate) { $zaliczka = $this->recountMonthCost($zaliczka, $zaliczka['A_LAST_COST_COUNT_ID_GROUP']); } $this->zaliczka($zaliczka); } catch (Exception $e) { SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } SE_Layout::dol(); } public function zaliczkiAction() { $selectedYear = V::get('year', '', $_REQUEST); $selectedNajemca = V::get('najemca', '', $_REQUEST); $selectedCostGroup = V::get('cost_group', '', $_REQUEST); SE_Layout::gora(); //SE_Layout::menu(); try { $this->menu($selectedYear, $selectedNajemca, $selectedCostGroup); if (!empty($selectedYear)) { if (empty($selectedCostGroup)) throw new Exception("Wybierz grupę"); $groups = array($selectedCostGroup); $zaliczka = $this->findZaliczkaByNameYear($selectedNajemca, $selectedYear); $this->validateRowZaliczka($zaliczka); $lastCountCostDate = $this->getLastCountMonthCost($zaliczka); if (null === $lastCountCostDate || $selectedCostGroup != $zaliczka['A_LAST_COST_COUNT_ID_GROUP']) { $zaliczka = $this->recountMonthCost($zaliczka, $selectedCostGroup); } $this->zaliczka($zaliczka); } } catch (Exception $e) { SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } SE_Layout::dol(); } public function zaliczka($zaliczka) {//$selectedYear = null, $selectedNajemca = null, $selectedCostGroup = null) { $incomeByMonth = array(); $localCostByMonth = array(); for ($month = 1; $month <= 12; $month++) { $fldMonth = sprintf("%02d", $month); $incomeByMonth[$month] = $zaliczka["m{$fldMonth}"]; $localCostByMonth[$month] = $zaliczka["c{$fldMonth}"]; } $localCostTotal = 0; for($month = 1; $month <= 12; $month++) $localCostTotal += $localCostByMonth[$month]; $incomeTotal = 0; for($month = 1; $month <= 12; $month++) $incomeTotal += $incomeByMonth[$month]; $diff = array(); for($month = 1; $month <= 12; $month++) $diff[$month] = $localCostByMonth[$month] - $incomeByMonth[$month]; $sumTotalDiff = 0; for($month = 1; $month <= 12; $month++) $sumTotalDiff += $diff[$month]; $payTotal = -1 * ($incomeTotal + $localCostTotal); ?>
Najemca
Powierzchnia całkowita do wynajęcia [m2]
Nr lokalu
Powierzchnia lokalu przyjęta do obliczeń [m2]
Czy bierze udział w opdziale kosztów opłat administracyjnych
Rozliczenie za okres
-
Rok

Załącznik do faktury za rozliczenie opłat serwisowych

suma stawka średnia za m2
Wpłacone zaliczki
Koszty przypadające na lokal
Różnica
Kwota netto w PLN do zapłaty za rozliczenie kosztów eksploatacyjnych za rok wynosi:
Razem do zapłaty

Przygotowane przez:
findZaliczkaById($id); if (!$zaliczka['A_LAST_COST_COUNT_ID_GROUP']) throw new Exception("Group not set"); $zaliczka = $this->recountMonthCost($zaliczka, $zaliczka['A_LAST_COST_COUNT_ID_GROUP']); DBG::_(true, true, "zaliczka", $zaliczka, __CLASS__, __FUNCTION__, __LINE__); } catch (Exception $e) { SE_Layout::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage()); } SE_Layout::dol(); } public function recountMonthCost($zaliczka, $idGroup) { $idGroup = (int)$idGroup; if (!$idGroup) throw new Exception("Podano niepoprawną grupę"); if ('TAK' != $zaliczka['CZY_ROZLICZENIE']) { return $zaliczka; } $budget = Router::getRoute('Budget'); $groups = array($idGroup); //$budget->fetchDataByYear($selectedYear, $groups); { $budget->_fetchCostsByYear($zaliczka['ROK']); //$budget->_fetchPlanByYear($year); $budget->_fetchProjectInfo(); $budget->_buildProjectTree(); $budget->_reacountCostsFromKoresp(); $budget->_filterProjectsByGroups($groups); } { $sumCostByMonth = array(); for ($month = 1; $month <= 12; $month++) $sumCostByMonth[$month] = 0; foreach ($budget->_projectInfo as $idProject => $projectInfo) { if (!$projectInfo->hasAccess) continue; if ($projectInfo->filteredByGroups) continue; for ($month = 1; $month <= 12; $month++) { $cost = $budget->getCost($idProject, $month); if (!$cost) continue; $sumCostByMonth[$month] += $cost->COST_SELF; } } } DBG::_('DBG', '>1', "sumCostByMonth", $sumCostByMonth, __CLASS__, __FUNCTION__, __LINE__); {// only months between KOSZT_OD and KOSZT_DO $strMonthFrom = substr($zaliczka['KOSZT_OD'], 0, 7); $strMonthTo = substr($zaliczka['KOSZT_DO'], 0, 7); for ($month = 1; $month <= 12; $month++) { $strMonth = "{$zaliczka['ROK']}-" . sprintf("%02d", $month); if ($strMonth < $strMonthFrom) $sumCostByMonth[$month] = 0; if ($strMonth > $strMonthTo) $sumCostByMonth[$month] = 0; } } DBG::_('DBG', '>1', "sumCostByMonth", $sumCostByMonth, __CLASS__, __FUNCTION__, __LINE__); DBG::_('DBG', '>2', "budget", $budget, __CLASS__, __FUNCTION__, __LINE__); $kosztOd = new DateTime($zaliczka['KOSZT_OD']); $kosztDo = new DateTime($zaliczka['KOSZT_DO']); $daysBilled = 1 + $kosztDo->diff($kosztOd)->format("%a"); if ($daysBilled < 1) throw new Exception("Niepoprawne wartości w polach KOSZT_OD i KOSZT_DO"); DBG::_('DBG', '>1', "daysBilled", $daysBilled, __CLASS__, __FUNCTION__, __LINE__); DBG::_('DBG', '>1', "zaliczka", $zaliczka, __CLASS__, __FUNCTION__, __LINE__); $localCostByMonth = array(); for ($month = 1; $month <= 12; $month++) { $localCostByMonth[$month] = ($zaliczka['POW_LOKALU'] / $zaliczka['POW_CALK']) * $sumCostByMonth[$month] * $daysBilled / 365; } $zaliczkaPatch = array(); $zaliczkaPatch['ID'] = $zaliczka['ID']; $zaliczkaPatch['A_LAST_COST_COUNT_ID_GROUP'] = $idGroup; $zaliczkaPatch['A_LAST_COST_COUNT_DATE'] = 'NOW()'; for ($month = 1; $month <= 12; $month++) { $fldMonth = sprintf("%02d", $month); $zaliczkaPatch["c{$fldMonth}"] = $localCostByMonth[$month]; } DBG::_('DBG', '>1', "zaliczkaPatch", $zaliczkaPatch, __CLASS__, __FUNCTION__, __LINE__); $tblAcl = User::getAcl()->getObjectAcl('default_db', 'ZALICZKI_NAJEMCOW'); //DBG::_(true, true, "tblAcl", $tblAcl, __CLASS__, __FUNCTION__, __LINE__); $ds = $tblAcl->getDataSource(); //DBG::_(true, true, "ds", $ds, __CLASS__, __FUNCTION__, __LINE__); $ds->updateItem($zaliczkaPatch); return $this->findZaliczkaById($zaliczka['ID']); } public function getLastCountMonthCost($zaliczka) { return $zaliczka['A_LAST_COST_COUNT_DATE']; } public function findZaliczkaByNameYear($najemca, $rok) { $pdo = DB::getPDO(); if (empty($najemca)) throw new Exception("Nie podano najemcy"); if (empty($rok)) throw new Exception("Nie podano roku"); if (!is_numeric($rok) || 4 != strlen($rok)) throw new Exception("Podano nieprawidłowy rok"); $sth = $pdo->prepare(" select z.* from ZALICZKI_NAJEMCOW z where z.ROK = :rok and z.NAJEMCA = :najemca "); $sth->bindValue(':rok', $rok, PDO::PARAM_STR); $sth->bindValue(':najemca', $najemca, PDO::PARAM_STR); $sth->execute(); $zaliczka = $sth->fetch(); if (!$zaliczka) throw new Exception("Brak danych dla wybrancyh kryteriów"); return $zaliczka; } public function findZaliczkaById($id) { $pdo = DB::getPDO(); $id = (int)$id; if (!$id) throw new Exception("Podano nieprawidłowy nr rekordu"); $sth = $pdo->prepare(" select z.* from ZALICZKI_NAJEMCOW z where z.ID = :id "); $sth->bindValue(':id', $id, PDO::PARAM_INT); $sth->execute(); $zaliczka = $sth->fetch(); if (!$zaliczka) throw new Exception("Brak danych dla wybrancyh kryteriów"); return $zaliczka; } public function validateRowZaliczka($zaliczka) { //DBG::_(true, true, "zaliczka", $zaliczka, __CLASS__, __FUNCTION__, __LINE__); // TODO: validate $zaliczka if (empty($zaliczka['KOSZT_OD'])) throw new Exception("Brak KOSZT_OD"); if (empty($zaliczka['KOSZT_DO'])) throw new Exception("Brak KOSZT_DO"); if ($zaliczka['KOSZT_OD'] > $zaliczka['KOSZT_DO']) throw new Exception("KOSZT_OD nie może być później niż KOSZT_DO"); if (empty($zaliczka['POW_CALK'])) throw new Exception("Brak POW_CALK"); if (empty($zaliczka['POW_LOKALU'])) throw new Exception("Brak POW_LOKALU"); } public function reinstallAction() { $force = (1 == V::get('_force', '', $_REQUEST)); try { $this->_reinstall($force); echo "\n" . '.END'; } catch (Exception $e) { echo "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage(); } } public function insertTestDataAction() { try { $pdo = DB::getPDO(); $pdo->exec(" insert into `ZALICZKI_NAJEMCOW` values('1', '0', 'test1', '', 'test1', '2015', 'TAK', '21736.91', '1735.24', '2015-05-12', '2015-12-31', '0.00', '0.00', '0.00', '0.00', '13962.75', '21642.26', '21642.26', '21642.26', '21642.26', '21642.26', '21642.26', '21642.26', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', NULL, '0', '2016-02-22-15:34', 'plabudda', '2016-02-23-11:21', 'plabudda', 'WAITING', '', '' ) "); echo "\n" . '.END'; } catch (Exception $e) { echo "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage(); } } public function _reinstall($force = false) { $sqlList = array(); $pdo = DB::getPDO(); $sqlHistCreate = <<exec($sqlHistCreate); $pdo->exec($sqlCreate); if($force){ $pdo->exec("DROP TABLE IF EXISTS ZALICZKI_NAJEMCOW_HIST"); $pdo->exec("DROP TABLE IF EXISTS ZALICZKI_NAJEMCOW"); $pdo->exec($sqlHistCreate); $pdo->exec($sqlCreate); } if(1){// TODO: assertTableStruct ZALICZKI_NAJEMCOW $expectedStruct = array(); $expectedStruct['ID'] = array('type'=>'int', 'extra'=>'AUTO_INCREMENT');// `ID` int(11) NOT NULL AUTO_INCREMENT, $expectedStruct['ID_BILLING_USERS'] = array('type'=>'int', 'default_value'=>0);// `ID_BILLING_USERS` int(11) NOT NULL DEFAULT 0, $expectedStruct['NAJEMCA'] = array('type'=>'varchar', 'max_length'=>'255', 'default_value'=>'');// `NAJEMCA` varchar(255) NOT NULL DEFAULT '', $expectedStruct['T_TELBOX_NEIGHBOUR_IN'] = array('type'=>'varchar', 'max_length'=>'32', 'default_value'=>'');// `T_TELBOX_NEIGHBOUR_IN` varchar(32) NOT NULL DEFAULT '', $expectedStruct['NR_LOKALU'] = array('type'=>'varchar', 'max_length'=>'32', 'default_value'=>'');// `NR_LOKALU` varchar(255) NOT NULL DEFAULT '', $expectedStruct['ROK'] = array('type'=>'int');// `ROK` int(4) NOT NULL, $expectedStruct['CZY_ROZLICZENIE'] = array('type'=>'enum', 'values'=>array('TAK','NIE'), 'default_value'=>'NIE');// `CZY_ROZLICZENIE` enum('TAK','NIE') NOT NULL DEFAULT 'NIE', $expectedStruct['POW_CALK'] = array('type'=>'double');// `POW_CALK` double NOT NULL, $expectedStruct['POW_LOKALU'] = array('type'=>'double');// `POW_LOKALU` double NOT NULL, $expectedStruct['KOSZT_OD'] = array('type'=>'date');// `KOSZT_OD` datetime NOT NULL, $expectedStruct['KOSZT_DO'] = array('type'=>'date');// `KOSZT_DO` datetime NOT NULL, $expectedStruct['m01'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m01` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m02'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m02` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m03'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m03` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m04'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m04` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m05'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m05` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m06'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m06` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m07'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m07` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m08'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m08` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m09'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m09` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m10'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m10` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m11'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m11` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['m12'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `m12` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c01'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c01` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c02'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c02` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c03'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c03` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c04'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c04` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c05'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c05` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c06'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c06` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c07'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c07` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c08'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c08` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c09'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c09` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c10'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c10` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c11'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c11` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['c12'] = array('type'=>'decimal', 'num_precision'=>16, 'num_scale'=>2);// `c12` decimal(16,2) NOT NULL DEFAULT 0, $expectedStruct['A_LAST_COST_COUNT_DATE'] = array('type'=>'datetime', 'is_nullable'=>true); $expectedStruct['A_LAST_COST_COUNT_ID_GROUP'] = array('type'=>'int'); $expectedStruct['A_RECORD_CREATE_DATE'] = array('type'=>'datetime'); $expectedStruct['A_RECORD_CREATE_AUTHOR'] = array('type'=>'varchar', 'max_length'=>20); $expectedStruct['A_RECORD_UPDATE_DATE'] = array('type'=>'datetime', 'is_nullable'=>true); $expectedStruct['A_RECORD_UPDATE_AUTHOR'] = array('type'=>'varchar', 'max_length'=>20); $expectedStruct['A_STATUS'] = array('type'=>'enum', 'values'=>array('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD','DELETED'), 'default_value'=>'WAITING'); $expectedStruct['A_CLASSIFIED'] = array('type'=>'varchar');// `A_CLASSIFIED` varchar(100) NOT NULL, $expectedStruct['A_ADM_COMPANY'] = array('type'=>'varchar');// `A_ADM_COMPANY` varchar(100) NOT NULL, $expectedStruct['key_id'] = array('type'=>'PRIMARY KEY', 'key_fields'=>array('ID'));// PRIMARY KEY (`ID`) DBG::_(true, true, "sqlCreate - raw", $sqlCreate, __CLASS__, __FUNCTION__, __LINE__); $sqlCreate = $pdo->showCreateStruct('ZALICZKI_NAJEMCOW', $expectedStruct, array('char_encoding'=>'latin2')); DBG::_(true, true, "sqlCreate - generated", $sqlCreate, __CLASS__, __FUNCTION__, __LINE__); if(0){ $pdo->assertTableStruct('ZALICZKI_NAJEMCOW', $expectedStruct, array('char_encoding'=>'latin2')); } if(0){// force - drop/create $pdo->exec("DROP TABLE IF EXISTS ZALICZKI_NAJEMCOW"); $pdo->exec($sqlCreate); } } } }