include_once($path_to_root . "/admin/db/company_db.inc");
include_once($path_to_root . "/admin/db/fiscalyears_db.inc");
include_once($path_to_root . "/config.php");
+define('MAX_ROW_SHEET', 65530);
// xls version
class FrontReport extends Spreadsheet_Excel_Writer_Workbook
{
var $bottomMargin = 0;
var $lineHeight;
var $leftMargin = 0;
+ var $pageWidth; // dummy
+ var $rightMargin; // dummy
var $cols;
var $params;
var $formatHeaderRight;
var $formatFooter;
var $formatAmount = array();
+ var $headerFunc;
var $sheet;
- function FrontReport($title, $filename, $size = 'A4', $fontsize = 9, $orientation = 'P', $margins = NULL, $excelColWidthFactor = 6.5)
+ function __construct($title, $filename, $size = 'A4', $fontsize = 9, $orientation = 'P', $margins = NULL, $excelColWidthFactor = 6.5)
{
- global $dateseps, $page_security;
+ global $SysPrefs, $page_security;
+
if (!$_SESSION["wa_current_user"]->can_access_page($page_security))
{
display_error(_("The security settings on your account do not permit you to print this report"));
$this->title = $title;
$this->lineHeight = 12;
$this->endLine = 760;
- $this->fontSize = $fontsize;
+ $this->SetFontSize($fontsize);
$this->oldFontSize = 0;
$this->y = 0;
$this->currency = '';
$rtl = ($_SESSION['language']->dir == 'rtl');
$this->code = strtolower($_SESSION['language']->encoding);
$this->filename = $filename.".xls";
- $this->unique_name = uniqid('').".xls";
+ $this->unique_name = random_id().".xls";
$this->path = company_path(). '/pdf_files';
- $this->Spreadsheet_Excel_Writer_Workbook($this->path."/".$this->unique_name);
- //$this->setCountry(48);
+ parent::__construct($this->path."/".$this->unique_name);
if ($this->code != "iso-8859-1")
$this->setVersion(8); // set biff version to 8 (0x0006 internal)
- $this->sheet =& $this->addWorksheet($this->worksheetNameGenerator($this->title));
+ $this->sheet = $this->addWorksheet($this->worksheetNameGenerator($this->title));
if ($this->code != "iso-8859-1")
$this->sheet->setInputEncoding($this->code); // set sheet encoding
if ($rtl)
$this->formatTitle->setTopColor('gray');
$how = user_date_format();
- $sep = $dateseps[user_date_sep()];
+ $sep = $SysPrefs->dateseps[user_date_sep()];
if ($sep == '.')
$sep = "\\.";
if ($how == 0)
$this->formatFooter =& $this->addFormat();
$this->formatFooter->setTop(2);
$this->formatFooter->setTopColor('gray');
+ $this->SetHeaderType("header");
}
+ /*
+ Set header handler
+ */
+ function SetHeaderType($name) {
+ $this->headerFunc = $name;
+ }
// Check a given name to see if it's a valid Excel worksheet name,
// and fix if necessary
function worksheetNameGenerator($name)
{
if (!isset($this->formatAmount[$dec]))
{
- //global $thoseps,$decseps;
$dec = (int)$dec;
- //$tsep = $thoseps[user_tho_sep()];
- //$dsep = $decseps[user_dec_sep()];
$tsep = ',';
$dsep = '.';
$format = "###{$tsep}###{$tsep}###{$tsep}##0";
function Font($fontname = '', $style = 'normal')
{
}
+
+ function SetFontSize($size)
+ {
+ $this->fontSize = $size;
+ }
function Info($params, $cols, $headers, $aligns,
$cols2 = null, $headers2 = null, $aligns2 = null)
{
- global $app_title, $version, $power_by, $power_url;
$this->company = get_company_prefs();
$year = get_current_fiscalyear();
if ($year['closed'] == 0)
$this->headers2 = $headers2;
$this->aligns2 = $aligns2;
$this->numcols = count($this->headers);
- $tcols = count($this->headers2);
+ $tcols = count_array($this->headers2);
if ($tcols > $this->numcols)
$this->numcols = $tcols;
for ($i = 0; $i < $this->numcols; $i++)
{
if (!$conv)
$txt = date2sql($txt);
- list($year, $mo, $day) = explode("-", $txt);
+ list($year, $mo, $day) = explode("-", $txt);
$date = $this->ymd2date((int)$year, (int)$mo, (int)$day);
$this->sheet->writeNumber($this->y, $c, $date, $this->formatDate);
}
function NewLine($l=1, $np=0, $h=NULL)
{
$this->y += $l;
+ if ($this->y > MAX_ROW_SHEET)
+ {
+ $this->y = 0;
+ $this->sheet = $this->addWorksheet();
+ if ($this->code != "iso-8859-1")
+ $this->sheet->setInputEncoding($this->code); // set sheet encoding
+ if ($_SESSION['language']->dir == 'rtl')
+ $this->sheet->setRTL();
+ for ($i = 0; $i < $this->numcols; $i++)
+ $this->sheet->setColumn($i, $i, $this->px2units($this->cols[$i + 1] - $this->cols[$i]));
+ }
}
function NewPage()
{
- return;
+ if (method_exists($this, $this->headerFunc)) // draw predefined page layout if any
+ $this->{$this->headerFunc}();
}
function ymd2Date($year, $mon, $day) // XLS internal date representation is a number between 1900-01-01 and 2078-12-31
return ($px / $unit_offset_length);
}
- function End($email=0, $subject=null, $myrow=null, $doctype = 0)
+ function End($email=0, $subject='')
{
+ global $path_to_root;
+ ++$this->y;
for ($i = 0; $i < $this->numcols; $i++)
$this->sheet->writeBlank($this->y, $i, $this->formatFooter);
$this->sheet->mergeCells($this->y, 0, $this->y, $this->numcols - 1);
}
closedir($d);
}
- meta_forward($_SERVER['PHP_SELF'], "xls=1&filename=$this->filename&unique=$this->unique_name");
+
+ meta_forward($path_to_root.'/reporting/prn_redirect.php', "xls=1&filename=$this->filename&unique=$this->unique_name");
exit();
}
}
-?>
\ No newline at end of file