123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456 |
- <?php
- /**
- * Streets report base class
- */
- class ReportStreets {
- /**
- * Contains cities as id=>name
- *
- * @var array
- */
- protected $cities = array();
- /**
- * Contains streets as id=>streetdata
- *
- * @var array
- */
- protected $streets = array();
- /**
- * Contains builds as id=>builddata
- *
- * @var array
- */
- protected $builds = array();
- /**
- * contains apt related shit
- *
- * @var array
- */
- protected $apts = array();
- /**
- * Payments abstraction layer placeholder
- *
- * @var object
- */
- protected $payments = '';
- /**
- * Total user counter
- *
- * @var int
- */
- protected $totalusercount = 0;
- /**
- * Contains payments search year
- *
- * @var int
- */
- protected $year = '';
- /**
- * Contains payments search month with lezding zero
- *
- * @var string
- */
- protected $month = '';
- /**
- * Contains all preprocessed assigns for some agents as fullstreet=>agentid
- *
- * @var array
- */
- protected $allAssigns = array();
- /**
- * Contains available agents as id=>name
- *
- * @var array
- */
- protected $agents = array();
- /**
- * Build passports object placeholder
- *
- * @var object
- */
- protected $buildPassport = '';
- /**
- * Contains build passports enabling flag
- *
- * @var bool
- */
- protected $passportsFlag = false;
- public function __construct() {
- $this->setDates();
- $this->initPayments();
- $this->loadCities();
- $this->loadStreets();
- $this->initBuildPassports();
- $this->loadBuilds();
- $this->loadApts();
- $this->countApts();
- $this->countBuilds();
- $this->loadAllAssigns();
- $this->loadAgents();
- }
- /**
- * Internal dates setter
- *
- * @return void
- */
- protected function setDates() {
- if (ubRouting::checkPost(array('showyear', 'showmonth'))) {
- $this->year = ubRouting::post('showyear', 'int');
- $this->month = ubRouting::post('showmonth', 'int');
- } else {
- $this->year = curyear();
- $this->month = date("m");
- }
- }
- /**
- * Inits builds passports instance if enabled for further usage
- *
- * @global object $ubillingConfig
- *
- * @return void
- */
- protected function initBuildPassports() {
- global $ubillingConfig;
- if ($ubillingConfig->getAlterParam('BUILD_EXTENDED')) {
- $this->passportsFlag = true;
- $this->buildPassport = new BuildPassport();
- }
- }
- /**
- * Inits payments abstraction layer
- *
- * @return void
- */
- protected function initPayments() {
- $this->payments = new NyanORM('payments');
- if (!empty($this->year) AND ! empty($this->month)) {
- $dateFilter = $this->year . '-' . $this->month . '-%';
- $this->payments->where('date', 'LIKE', $dateFilter);
- $this->payments->where('summ', '>', 0);
- }
- }
- /**
- * loads available cities from database into private data property
- *
- * @return void
- */
- protected function loadCities() {
- $query = "SELECT * from `city`";
- $all = simple_queryall($query);
- if (!empty($all)) {
- foreach ($all as $io => $each) {
- $this->cities[$each['id']] = $each['cityname'];
- }
- }
- }
- /**
- * loads available assigns from database into private prop
- *
- * @return void
- */
- protected function loadAllAssigns() {
- $assignsTmp = zb_AgentAssignGetAllData();
- if (!empty($assignsTmp)) {
- foreach ($assignsTmp as $io => $each) {
- $this->allAssigns[$each['streetname']] = $each['ahenid'];
- }
- }
- }
- /**
- * loads contragent data into protected prop
- *
- * @return void
- */
- protected function loadAgents() {
- $tmpArr = array();
- $tmpArr = zb_ContrAhentGetAllData();
- if (!empty($tmpArr)) {
- foreach ($tmpArr as $io => $each) {
- $this->agents[$each['id']] = $each['contrname'];
- }
- }
- }
- /**
- * loads available streets from database into private data property
- *
- * @return void
- */
- protected function loadStreets() {
- $query = "SELECT * from `street`";
- $all = simple_queryall($query);
- if (!empty($all)) {
- foreach ($all as $io => $each) {
- $this->streets[$each['id']]['streetname'] = $each['streetname'];
- $this->streets[$each['id']]['cityid'] = $each['cityid'];
- $this->streets[$each['id']]['buildcount'] = 0;
- $this->streets[$each['id']]['usercount'] = 0;
- $this->streets[$each['id']]['aptstotal'] = 0;
- $this->streets[$each['id']]['anthills'] = 0;
- $this->streets[$each['id']]['anthillusers'] = 0;
- }
- }
- }
- /**
- * loads available builds from database into private data property
- *
- * @return void
- */
- protected function loadBuilds() {
- $query = "SELECT * from `build`";
- $all = simple_queryall($query);
- if (!empty($all)) {
- foreach ($all as $io => $each) {
- $this->builds[$each['id']]['buildnum'] = $each['buildnum'];
- $this->builds[$each['id']]['streetid'] = $each['streetid'];
- $this->builds[$each['id']]['aptcount'] = 0;
- $aptsTotal = 0;
- $antHill = 0;
- if ($this->passportsFlag) {
- $eachPassport = $this->buildPassport->getPassportData($each['id']);
- if (@$eachPassport['anthill']) {
- $aptsTotal = $eachPassport['apts'];
- $antHill = 1;
- }
- }
- $this->builds[$each['id']]['aptstotal'] = $aptsTotal;
- $this->builds[$each['id']]['anthill'] = $antHill;
- $this->builds[$each['id']]['anthillusers'] = 0;
- }
- }
- }
- /**
- * loads available apts from database into private data property
- *
- * @return void
- */
- protected function loadApts() {
- $query = "SELECT * from `apt`";
- $all = simple_queryall($query);
- if (!empty($all)) {
- foreach ($all as $io => $each) {
- $this->apts[$each['id']]['apt'] = $each['apt'];
- $this->apts[$each['id']]['buildid'] = $each['buildid'];
- }
- }
- }
- /**
- * prepares builds data for render report
- *
- * @return void
- */
- protected function countApts() {
- if (!empty($this->builds)) {
- if (!empty($this->apts)) {
- foreach ($this->apts as $io => $eachapt) {
- if (isset($this->builds[$eachapt['buildid']])) {
- $this->builds[$eachapt['buildid']]['aptcount'] ++;
- if ($this->builds[$eachapt['buildid']]['anthill']) {
- $this->builds[$eachapt['buildid']]['anthillusers'] ++;
- }
- $this->totalusercount++;
- }
- }
- }
- }
- }
- /**
- * prepares streets data for render report
- *
- * @return void
- */
- protected function countBuilds() {
- if (!empty($this->streets)) {
- if (!empty($this->builds)) {
- foreach ($this->builds as $io => $eachbuild) {
- if (isset($this->streets[$eachbuild['streetid']])) {
- $this->streets[$eachbuild['streetid']]['buildcount'] ++;
- $this->streets[$eachbuild['streetid']]['usercount'] = $this->streets[$eachbuild['streetid']]['usercount'] + $eachbuild['aptcount'];
- if ($eachbuild['anthill']) {
- $this->streets[$eachbuild['streetid']]['aptstotal'] += $eachbuild['aptstotal'];
- $this->streets[$eachbuild['streetid']]['anthillusers'] += $eachbuild['anthillusers'];
- $this->streets[$eachbuild['streetid']]['anthills'] ++;
- }
- }
- }
- }
- }
- }
- /**
- * returns colorized register level for street
- *
- * @param int $usercount Registered apts (users) count on the street
- * @param int $buildcount Builds count on the street
- *
- * @return string
- */
- protected function getLevel($usercount, $buildcount) {
- if (($usercount != 0) AND ( $buildcount != 0)) {
- $level = $usercount / $buildcount;
- } else {
- $level = 0;
- }
- $level = round($level, 2);
- $color = 'black';
- if ($level < 2) {
- $color = 'red';
- }
- if ($level >= 3) {
- $color = 'green';
- }
- $result = wf_tag('font', false, '', 'color="' . $color . '"') . $level . wf_tag('font', true);
- return ($result);
- }
- /**
- * renders report by prepeared data
- *
- * @return string
- */
- public function render() {
- $addrPayments = array(); //city + street => payments total
- $allPayments = $this->payments->getAll();
- $totalPaymentsSumm = 0;
- if (!empty($allPayments)) {
- $allUsers = zb_UserGetAllDataCache();
- foreach ($allPayments as $io => $each) {
- if (isset($allUsers[$each['login']])) {
- $userData = $allUsers[$each['login']];
- $userCity = $userData['cityname'];
- $userStreet = $userData['streetname'];
- $userAddr = $userCity . ' ' . $userStreet;
- if (isset($addrPayments[$userAddr])) {
- $addrPayments[$userAddr] += $each['summ'];
- } else {
- $addrPayments[$userAddr] = $each['summ'];
- }
- }
- }
- }
- if (!empty($this->streets)) {
- $cells = wf_TableCell(__('ID'));
- $cells .= wf_TableCell(__('City'));
- $cells .= wf_TableCell(__('Street'));
- $cells .= wf_TableCell(__('Contrahent name'));
- $cells .= wf_TableCell(__('Builds'));
- if ($this->passportsFlag) {
- $cells .= wf_TableCell(__('Anthill'));
- $cells .= wf_TableCell(__('Apartments'));
- }
- $cells .= wf_TableCell(__('Users'));
- if ($this->passportsFlag) {
- $cells .= wf_TableCell(wf_img_sized('skins/ymaps/build.png', __('Users') . ': ' . __('Apartment house'), 12));
- $cells .= wf_TableCell(wf_img_sized('skins/ymaps/coverage.png', __('Coverage'), 12));
- }
- $cells .= wf_TableCell(__('Visual'));
- $cells .= wf_TableCell(__('Level'));
- $cells .= wf_TableCell(__('Money'));
- $rows = wf_TableRow($cells, 'row1');
- foreach ($this->streets as $streetid => $each) {
- $streetAgentId = 0;
- $addrString = @$this->cities[$each['cityid']] . ' ' . $each['streetname'];
- if (!empty($this->allAssigns)) {
- foreach ($this->allAssigns as $streetAssign => $agentId) {
- if (ispos($addrString, $streetAssign)) {
- $streetAgentId = $agentId; //gotcha motherfucker!
- }
- }
- }
- if ($streetAgentId != 0) {
- $streetAgentName = $this->agents[$streetAgentId];
- $cellsClass = 'todaysig';
- } else {
- $streetAgentName = '';
- $cellsClass = 'row3';
- }
- $cells = wf_TableCell($streetid, '', $cellsClass);
- $cells .= wf_TableCell(@$this->cities[$each['cityid']]);
- $cells .= wf_TableCell($each['streetname']);
- $cells .= wf_TableCell($streetAgentName);
- $cells .= wf_TableCell($each['buildcount']);
- if ($this->passportsFlag) {
- $cells .= wf_TableCell($each['anthills']);
- $cells .= wf_TableCell($each['aptstotal']);
- }
- $usersCount = $each['usercount'];
- $cells .= wf_TableCell($usersCount);
- if ($this->passportsFlag) {
- $anthillUsers = $each['anthillusers'];
- $cells .= wf_TableCell($anthillUsers);
- if ($anthillUsers > 0) {
- $coveragePercent = zb_PercentValue($each['aptstotal'], $anthillUsers) . '%';
- } else {
- $coveragePercent = '';
- }
- $cells .= wf_TableCell($coveragePercent);
- }
- $cells .= wf_TableCell(web_bar($each['usercount'], $this->totalusercount), '15%', '', 'sorttable_customkey="' . $each['usercount'] . '"');
- $cells .= wf_TableCell($this->getLevel($each['usercount'], $each['buildcount']));
- $paymentsSumm = (isset($addrPayments[$addrString])) ? $addrPayments[$addrString] : '0';
- $totalPaymentsSumm += $paymentsSumm;
- $cells .= wf_TableCell($paymentsSumm);
- $rows .= wf_TableRow($cells, 'row5');
- }
- $result = wf_TableBody($rows, '100%', '0', 'sortable');
- $result .= __('Users') . ': ' . $this->totalusercount;
- $result .= wf_tag('br');
- $result .= __('Payments') . ': ' . $totalPaymentsSumm;
- } else {
- $messages = new UbillingMessageHelper();
- $result = $messages->getStyledMessage(__('Nothing found'), 'warning');
- }
- return ($result);
- }
- /**
- * Renders payments date selection form
- *
- * @return string
- */
- public function renderDateForm() {
- $result = '';
- $inputs = wf_YearSelectorPreset('showyear', __('Year'), false, $this->year) . ' ';
- $inputs .= wf_MonthSelector('showmonth', __('Month'), $this->month, false) . ' ';
- $inputs .= wf_Submit(__('Search') . ' ' . __('payments'));
- $result .= wf_Form('', 'POST', $inputs, 'glamour');
- return($result);
- }
- }
|