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);
    }
    
}