Initial Commit of AgileBill Open Source
This commit is contained in:
310
modules/report/report.inc.php
Normal file
310
modules/report/report.inc.php
Normal file
@@ -0,0 +1,310 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AgileBill - Open Billing Software
|
||||
*
|
||||
* This body of work is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the Open AgileBill License
|
||||
* License as published at http://www.agileco.com/agilebill/license1-4.txt
|
||||
*
|
||||
* For questions, help, comments, discussion, etc., please join the
|
||||
* Agileco community forums at http://forum.agileco.com/
|
||||
*
|
||||
* @link http://www.agileco.com/
|
||||
* @copyright 2004-2008 Agileco, LLC.
|
||||
* @license http://www.agileco.com/agilebill/license1-4.txt
|
||||
* @author Tony Landis <tony@agileco.com>
|
||||
* @package AgileBill
|
||||
* @version 1.4.93
|
||||
*/
|
||||
|
||||
/**
|
||||
* Agileco Report Module
|
||||
*/
|
||||
class report
|
||||
{
|
||||
/**
|
||||
* Get the list of available modules
|
||||
*/
|
||||
function module_menu($VAR)
|
||||
{
|
||||
global $C_translate;
|
||||
|
||||
if(!empty($VAR['report_module']))
|
||||
$default = $VAR['report_module'];
|
||||
else
|
||||
$default = false;
|
||||
|
||||
$return = '';
|
||||
|
||||
$path = PATH_AGILE . 'reports/';
|
||||
chdir($path);
|
||||
$dir = opendir($path);
|
||||
$count = 0;
|
||||
while ($file_name = readdir($dir))
|
||||
{
|
||||
if( $file_name != '..' && $file_name != '.' && !ereg(".xml", $file_name) && !ereg(".php", $file_name))
|
||||
{
|
||||
$name = $C_translate->translate('menu', $file_name, '');
|
||||
if(empty($name) && eregi("^[a-zA-Z0-9\-\_]{1,}", $file_name)) $name = strtoupper($file_name);
|
||||
if(!empty($name))
|
||||
{
|
||||
$return .= "<option value=\"{$file_name}\"";
|
||||
if($default == $file_name) $return .= " selected";
|
||||
$return .= ">{$name}</option>\n";
|
||||
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($count > 10) $count = 10;
|
||||
|
||||
echo '<select id="report_module" name="report_module" size="'.$count.'" onChange="submit()" multiple>';
|
||||
if($count==0)
|
||||
echo '<option value="">No Reports Available</option>';
|
||||
echo $return;
|
||||
echo '</select>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of available reports
|
||||
*/
|
||||
function report_menu($VAR)
|
||||
{
|
||||
global$C_translate;
|
||||
$C_xml = new CORE_xml;
|
||||
|
||||
if(empty($VAR['report_module'])) {
|
||||
echo $C_translate->translate('no_reports','report','');
|
||||
return;
|
||||
} else {
|
||||
$module = $VAR['report_module'];
|
||||
}
|
||||
|
||||
|
||||
if(!empty($VAR['report_template']))
|
||||
$default = $VAR['report_template'];
|
||||
else
|
||||
$default = false;
|
||||
|
||||
$return = '<select id="report_template" name="report_template" width="150" size="5" onChange="submit()" multiple>';
|
||||
|
||||
$path = PATH_AGILE . 'reports/'.$module.'/';
|
||||
chdir($path);
|
||||
$dir = opendir($path);
|
||||
$count = 0;
|
||||
while ($file_name = readdir($dir))
|
||||
{
|
||||
if($file_name != '..' && $file_name != '.' && ereg(".xml$", $file_name)) {
|
||||
$template = $C_xml->xml_to_array($path.$file_name);
|
||||
$name = $template['report']['title'];
|
||||
|
||||
|
||||
$return .= "<option value=\"{$file_name}\"";
|
||||
if($default == $file_name) $return .= " selected";
|
||||
$return .= ">{$name}</option>\n";
|
||||
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($count==0)
|
||||
$return .= '<option value="">'. $C_translate->translate('no_reports','report','').'</option>';
|
||||
$return .= '</select>';
|
||||
echo $return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get user criteria
|
||||
*/
|
||||
function get_user_criteria($VAR)
|
||||
{
|
||||
# validation
|
||||
if(empty($VAR['report_module']) || empty($VAR['report_template'])) return false;
|
||||
$module = $VAR['report_module'];
|
||||
$report = $VAR['report_template'];
|
||||
|
||||
# include reporting classess
|
||||
require_once PATH_MODULES . 'report/class.Report.php';
|
||||
require_once PATH_MODULES . 'report/class.Level.php';
|
||||
require_once PATH_MODULES . 'report/class.ReportParser.php';
|
||||
$f = new HTML_ReportFormatter;
|
||||
$r = new Reporting($f, true);
|
||||
$p = new ReportParser($r);
|
||||
$result = $p->setInputFile(PATH_AGILE.'reports/'.$module.'/'.$report);
|
||||
$result = $p->parse();
|
||||
|
||||
# pre-process the user criteria array
|
||||
$arr = $p->getUserCriteria();
|
||||
if(is_array($arr)) {
|
||||
foreach($arr as $cond) {
|
||||
if($cond['type']=='menu') {
|
||||
//print_r($cond);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
global $smarty;
|
||||
$smarty->assign('userCriteria', $arr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set user criteria and display report
|
||||
*/
|
||||
function view($VAR)
|
||||
{
|
||||
# validation
|
||||
if(empty($VAR['report_module']) || empty($VAR['report_template'])) return false;
|
||||
$module = $VAR['report_module'];
|
||||
$report = $VAR['report_template'];
|
||||
$format = $VAR['report_format'];
|
||||
|
||||
# include reporting classess
|
||||
require_once PATH_MODULES . 'report/class.Report.php';
|
||||
require_once PATH_MODULES . 'report/class.Level.php';
|
||||
require_once PATH_MODULES . 'report/class.ReportParser.php';
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
if($format=='text')
|
||||
$f = new TXT_ReportFormatter;
|
||||
elseif($format=='html')
|
||||
$f = new HTML_ReportFormatter;
|
||||
elseif($format=='pdf')
|
||||
$f = new PDF_ReportFormatter;
|
||||
|
||||
# Tell the formatter where to save the output
|
||||
$dir = md5(tempnam(PATH_FILES, "s"));
|
||||
$path = PATH_FILES.'reports/'.$dir;
|
||||
@unlink($path);
|
||||
mkdir($path, 0775);
|
||||
$f->setOutputDirectory($path);
|
||||
|
||||
# set report construct file to use
|
||||
$r = new Reporting($f, true);
|
||||
$p = new ReportParser($r);
|
||||
$result = $p->setInputFile(PATH_AGILE.'reports/'.$module.'/'.$report);
|
||||
|
||||
# Get user criteria
|
||||
$arr = $p->getUserCriteria();
|
||||
|
||||
# Set the user criteria
|
||||
if(!empty($VAR['report']['conditions']) && is_array($VAR['report']['conditions'])) {
|
||||
foreach($VAR['report']['conditions'] as $arr) {
|
||||
$exp = $arr['exp'];
|
||||
$col = $arr['col'];
|
||||
$val = $arr['value'];
|
||||
$type= $arr['type'];
|
||||
foreach($col as $i=>$name) {
|
||||
if($type[$i] == 'date_year_month') {
|
||||
$val[$i] = array('month'=> $val['month'][$i], 'year'=> $val['year'][$i]);
|
||||
}
|
||||
$this->setSQLCondition($p, $col[$i], $exp[$i], $val[$i], $type[$i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
#echo '<pre>'.print_r($p,true).'</pre>'; exit;
|
||||
$result = $p->parse();
|
||||
#echo '<pre>'.print_r($p,true).'</pre>'; exit;
|
||||
$r->display();
|
||||
|
||||
if($format=='text') {
|
||||
header('Content-type: text/txt');
|
||||
header('Content-Disposition: inline; filename="report.txt"');
|
||||
echo file_get_contents($f->getOutput());
|
||||
@unlink($f->getOutput());
|
||||
|
||||
} elseif($format=='html') {
|
||||
$f->getOutput();
|
||||
$url=URL.'includes/files/reports/'.$dir.'/report.html';
|
||||
echo "<script>document.location='$url';</script>";
|
||||
|
||||
} elseif ($format=='pdf') {
|
||||
header('Content-type: application/pdf');
|
||||
header('Content-Disposition: inline; filename="report.pdf"');
|
||||
readfile($f->getOutput());
|
||||
@unlink($f->getOutput());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get actual SQL contition from user input and add to userCondtions
|
||||
*/
|
||||
function setSQLCondition(&$reportObj, $column, $condition, $value=false, $type=false)
|
||||
{
|
||||
$o["EQ"] = '=';
|
||||
$o["NOT"] = '<>';
|
||||
|
||||
$o["GT"] = '>';
|
||||
$o["LT"] = '<';
|
||||
$o["GTEQ"] = '>=';
|
||||
$o["LTEQ"] = '<=';
|
||||
|
||||
$o["LIKE"] = 'LIKE';
|
||||
$o["NLIKE"] = 'IS NOT LIKE';
|
||||
|
||||
$o["NULL"] = 'IS NULL';
|
||||
$o["NNULL"] = 'IS NOT NULL';
|
||||
|
||||
// actual SQL condition
|
||||
$c = $o["$condition"];
|
||||
|
||||
// determine value
|
||||
if( $condition=="NULL" || $condition=="NNULL" )
|
||||
$v=false;
|
||||
elseif ($value=='')
|
||||
return false;
|
||||
else
|
||||
$v=$value;
|
||||
|
||||
if($type=='date') {
|
||||
$v=$this->convert_date_time($value);
|
||||
$reportObj->setUserCriteria($column, $c, $v);
|
||||
} elseif ($type=='date_year') {
|
||||
$v=mktime(0,0,0,1,1,$value);
|
||||
$reportObj->setUserCriteria($column, $c, $v);
|
||||
} elseif ($type=='date_year_month') {
|
||||
if(!empty($value['year'])) {
|
||||
if(empty($value['month'])) $month=1; else $month=$value['month'];
|
||||
$v=mktime(0,0,0,$month,1,$value['year']);
|
||||
$reportObj->setUserCriteria($column, $c, $v);
|
||||
}
|
||||
} else {
|
||||
$reportObj->setUserCriteria($column, $c, $v);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* convert DEFAULT_DATE_TIME_FORMT to unix time stamp
|
||||
*/
|
||||
function convert_date_time ($date, $constraint=false)
|
||||
{
|
||||
if($date == '0' || $date == '')
|
||||
return '';
|
||||
|
||||
$Arr_format = split(DEFAULT_DATE_DIVIDER, UNIX_DATE_FORMAT);
|
||||
$Arr_date = split(DEFAULT_DATE_DIVIDER, $date);
|
||||
|
||||
for($i=0; $i<3; $i++)
|
||||
{
|
||||
if($Arr_format[$i] == 'd')
|
||||
$day = $Arr_date[$i];
|
||||
|
||||
if($Arr_format[$i] == 'm')
|
||||
$month = $Arr_date[$i];
|
||||
|
||||
if($Arr_format[$i] == 'Y')
|
||||
$year = $Arr_date[$i];
|
||||
}
|
||||
|
||||
$timestamp = mktime(23, 59, 59, $month, $day, $year);
|
||||
|
||||
return $timestamp;
|
||||
}
|
||||
}
|
||||
?>
|
Reference in New Issue
Block a user