runManualReport($roo, $q); } if (!empty($q['period'])) { return $this->runReport($roo, $q); } if (!empty($q['_tree'])) { $this->asTree($roo, $q); } } function toRooArray($q) { if (!empty($q['_to_json'])) { return $this->toJsonTree(); } return $this->toArray(); } function runReport($roo, $q) { $g = DB_DataObject::Factory('groups'); // use dashboard perms.. if (!$roo->authUser->hasPerm('Xtuple.Dashboard','S')) { $roo->jerr("You do not have Dashboard View permissions."); } $head = $this->factory('flhead'); if (empty($q['flhead_name']) || !$head->get('flhead_name', $q['flhead_name'])) { $q['flhead_name'] = isset($q['flhead_name']) ? $q['flhead_name'] : 'flhead_name=NOT SET'; $roo->jerr("no report named '{$q['flhead_name']}' exists"); } if (empty($q['interval'])) { $roo->jerr("no interval set"); } if (empty($q['period'])) { $roo->jerr("no period set"); } $ar = explode(',', $q['period']); $periods= array(); foreach($ar as $dt) { $pp = DB_DataObject::Factory('period'); if (!$pp->get('period_start' , date('Y-m-d', strtotime($dt)))) { $roo->jerr("no period for " . date('Y-m-d', strtotime($dt))); } $periods[] = $pp->pid(); } //if (!preg_match('/hk$/', $this->database()) && empty($q['no_timewarp'])) { if (preg_match('/(sg|au)$/', $this->database()) && empty($q['no_timewarp'])) { $rpt = $this->factory('flhead'); $rpt->query("SET search_path TO timewarp,public"); } // remove old reports.. // current user is fake (as we chuser at some point..)... but php always runs report as admin. $rpt = $this->factory('flhead'); $rpt->query(" DELETE FROM flrpt WHERE ((flrpt_username='admin') AND (flrpt_flhead_id={$head->pid()}))"); $rpt = $this->factory('flhead'); $rpt->query(" SELECT * FROM financialReport({$head->pid()} , ARRAY[ " . implode(',', $periods) . "] , '" . $this->escape($q['interval']) . "' , true, NULL ) ") ; $ret = array(); while ($rpt->fetch()) { $ret[] = $rpt->toArray('%s', true); } if (!empty($q['_return_result'])) { return $ret; } $roo->jdata($ret); } function asTree($roo,$q) { $ret = array(); $ret[] = array( 'id' => 99999, 'text' => 'Dashboard', 'leaf' => true, ); $flhead = $this->factory($this->tableName()); $flhead->orderBy('flhead_name ASC'); $flhead->whereAdd("flhead_name != ''"); $ff = clone($flhead); $flhead->whereAdd("flhead_name like 'DRAGON%'"); $res = $flhead->fetchAll('flhead_id','flhead_name'); if (empty($res)) { $res = $ff->fetchAll('flhead_id','flhead_name'); } foreach($res as $k=>$v) { $ret[] = array( 'id' => $k, 'text' => $v, 'leaf' => true ); } $roo->jdata($ret); } function groups() { $x = DB_DataObject::Factory('flgrp'); $x->flgrp_flhead_id = $this->pid(); $x->orderBy('flgrp_order ASC'); return $x->fetchAll(); } function items() { $x = DB_DataObject::Factory('flitem'); $x->flitem_flhead_id = $this->pid(); $x->orderBy('flitem_order ASC'); return $x->fetchAll(); } /* function runManualReport($roo, $q) { $g = DB_DataObject::Factory('groups'); if (!$g->get('name', 'Administrators') ) { $roo->jerr('no admin group?'); } if (!in_array($roo->authUser->id , $g->memberIds())) { $roo->jerr("Administrators only"); } $head = $this->factory('flhead'); if (empty($q['flhead_name']) || !$head->get('flhead_name', $q['flhead_name'])) { $q['flhead_name'] = isset($q['flhead_name']) ? $q['flhead_name'] : 'flhead_name=NOT SET'; $roo->jerr("no report named '{$q['flhead_name']}' exists"); } if (empty($q['interval'])) { $roo->jerr("no interval set"); } $interval = $q['interval']; if (empty($q['period'])) { $roo->jerr("no period set"); } $rperiods = explode(',', $q['period']); foreach($rperiods as $dt) { $edt = date('Y-m-d', strtotime($dt . (($interval == 'Y') ? ' + 1 YEAR' : ' + 1 MONTH)'))); // what's the period in $startp = DB_DataObject::factory('period'); $startp->get('period_start',$dt); $endp = DB_DataObject::factory('period'); $endp->get('period_start', $edt); echo '
'; print_R($head); $gs = $head->groups(); foreach($gs as $gi) { print_R($gi); $is = $gi->items(); foreach($is as $i) { $i->runReport($startp->pid(), $endp->pid()); } print_R($is); } } exit; $periods= array(); foreach($ar as $dt) { $pp = DB_DataObject::Factory('period'); if (!$pp->get('period_start' , date('Y-m-d', strtotime($dt)))) { $roo->jerr("no period for " . date('Y-m-d', strtotime($dt))); } $periods[] = $pp->pid(); } $rpt = $this->factory('flhead'); $rpt->query(" SELECT * FROM financialReport({$head->pid()} , ARRAY[ " . implode(',', $periods) . "] , '" . $this->escape($q['interval']) . "' , true, NULL ) ") ; $ret = array(); while ($rpt->fetch()) { $ret[] = $rpt->toArray('%s', true); } $roo->jdata($ret); } */ function toJsonTree() { $ret = $this->toArray(); // loop through sub depence //$ret['items'] = ... $groups = array(); $flgrp = DB_DataObject::factory('flgrp'); $flgrp->flgrp_flhead_id = $this->pid(); $flgrp->whereAdd('flgrp_flgrp_id < 0'); $flgrp->find(); while ($flgrp->fetch()){ $groups[$flgrp->flgrp_name] = $flgrp->toArray(); $groups[$flgrp->flgrp_name]['groups'] = $flgrp->groupAsArrays(); $groups[$flgrp->flgrp_name]['items'] = $flgrp->itemsAsArrays(); } $ret['groups'] = $groups; $cols = array(); $flcol = DB_DataObject::factory('flcol'); $flcol->flcol_flhead_id = $this->pid(); $flcol->find(); while ($flcol->fetch()){ $cols[$flcol->pid()] = $flcol->toArray(); $cols[$flcol->pid()]['report'] = $flcol->report()->toArray(); } $ret['col'] = $cols; HTML_FlexyFramework::get()->page->jok($ret); } }