* SPDX-License-Identifier: AGPL-3.0-only
************************************/
require_once('modules/Reports/ReportRun.php');
class ReportRunAccounts extends ReportRun {
var $enableExportPdf = true;
var $enableExportXls = true;
var $enablePrint = true;
var $hideParamsBlock = true;
function __construct($reportid) {
$this->reports = Reports::getInstance($reportid); // crmv@172034
$this->reportid = $reportid;
$this->primarymodule = 'Accounts';
$this->reporttype = '';
$this->reportname = 'Account con sito';
$this->reportlabel = getTranslatedString($this->reportname, 'Reports');
}
function getSDKBlock() {
global $mod_strings;
$sdkblock = '
Questo report mostra le aziende con sito
';
// here I can also add custom inputs to filter the report or any html I need
return $sdkblock;
}
// overridden, always hide the summary tab
function hasSummary() {
return false;
}
// overridden, always show the total tab
function hasTotals() {
return true;
}
// generate the report
function GenerateReport($outputformat = "", $filterlist = null, $directOutput=false) {
global $adb;
// compatibility, please use set them with the proper methods
if (!empty($outputformat)) {
$format = "HTML";
$tab = "MAIN";
if (strpos($outputformat, 'HTML') !== false) $format = "HTML";
if (strpos($outputformat, 'PRINT') !== false) $format = "PRINT";
if (strpos($outputformat, 'PDF') !== false) $format = "PDF";
if (strpos($outputformat, 'XLS') !== false) $format = "XLS";
if (strpos($outputformat, 'JSON') !== false) $format = "JSON";
if (strpos($outputformat, 'CV') !== false) $format = "NULL";
if (strpos($outputformat, 'COUNT') !== false) $tab = "COUNT";
if (strpos($outputformat, 'TOTAL') !== false) $tab = "TOTAL";
if (strpos($outputformat, 'CV') !== false) $tab = "CV";
$this->setOutputFormat($format, $directOutput);
$this->setReportTab($tab);
} else {
$format = $this->outputFormat;
$tab = $this->reportTab;
}
$format = $this->outputFormat;
$direct = $this->directOutput;
$tab = $this->reportTab;
// prepare the output class
$output = $this->getOutputClass();
$output->clearAll();
$return_data = array();
if ($tab == 'COUNT' && $this->hasSummary()) {
// no summary for this custom report
} elseif ($tab == 'CV') {
// no customview for this report
} elseif ($tab == 'MAIN') {
$sSQL = $this->getReportQuery($outputformat, $filterlist);
$result = $adb->query($sSQL);
$this->total_count = $adb->num_rows($result);
$error_msg = $adb->database->ErrorMsg();
if(!$result && $error_msg!=''){
// Performance Optimization: If direct output is requried
if($direct) {
echo getTranslatedString('LBL_REPORT_GENERATION_FAILED', 'Reports') . "
" . $error_msg;
$error_msg = false;
}
// END
return $error_msg;
}
if($result) {
$this->generateHeader($result, $output);
while ($row = $adb->fetchByAssoc($result)) {
$colcount = count($row);
foreach ($row as $column => $value) {
$cell = array(
'value' => $value,
'column' => $column,
'class' => 'rptData',
);
$output->addCell($cell);
}
$output->endCurrentRow();
}
$output->countTotal = $this->total_count;
$output->countFiltered = $this->total_count;
if ($format == 'XLS') {
$head = $output->getSimpleHeaderArray();
$data = $output->getSimpleDataArray();
foreach ($data as $row) {
$return_data[] = array_combine($head, $row);
}
} else {
$return_data[] = $output->output(!$direct);
$return_data[] = $this->total_count;
$return_data[] = $sSQL;
$return_data[] = $colcount;
}
}
} elseif ($tab == "TOTAL" && $this->hasTotals()) {
$output->addHeader(array('column' => 'fieldname', 'label' => getTranslatedString('Totals')));
$output->addHeader(array('column' => 'sum', 'label' => getTranslatedString('SUM')));
$output->addHeader(array('column' => 'avg', 'label' => getTranslatedString('AVG')));
$output->addHeader(array('column' => 'min', 'label' => getTranslatedString('MIN')));
$output->addHeader(array('column' => 'max', 'label' => getTranslatedString('MAX')));
// fixed totals
$rows = array(
array(
array('column'=> 'fieldname', 'value' => 'Fatturato totale', 'class' => 'rptData'),
array('column'=> 'sum', 'value' => 2000, 'class' => 'rptTotal'),
array('column'=> 'avg', 'value' => null, 'class' => 'rptTotal'), // not used
array('column'=> 'min', 'value' => 850, 'class' => 'rptTotal'),
array('column'=> 'max', 'value' => null, 'class' => 'rptTotal'), // not used
),
);
// add them to the output class
foreach ($rows as $row) {
foreach ($row as $cell) {
$output->addCell($cell);
}
$output->endCurrentRow();
}
// format for xls or html
if ($format == "XLS") {
// change the output array to match the expected format for XLS export
$return_data = array();
$data = $output->getSimpleDataArray();
$fieldName = '';
foreach ($data as $row) {
$nrow = array();
foreach ($row as $key => $value) {
if ($key == 'fieldname') {
$fieldName = $value;
continue;
}
$klabel = $fieldName.'_'.strtoupper($key);
$nrow[$klabel] = $value;
}
$return_data[] = $nrow;
}
} else {
$return_data = $output->output(!$direct);
}
}
return $return_data;
}
// generate a fixed header for the report
function generateHeader($result, $output, $options = array()) {
global $adb, $table_prefix;
$module = 'Accounts';
$tabid = getTabid($module);
$count = $adb->num_fields($result);
for ($x=0; $x<$count; ++$x) {
$fld = $adb->field_name($result, $x);
// get the field label from the column (if possible)
$res = $adb->pquery("SELECT fieldlabel FROM {$table_prefix}_field WHERE columnname = ? and tabid = ?", array($fld->name, $tabid));
if ($res && $adb->num_rows($res) > 0) {
$fieldlabel = $adb->query_result_no_html($res, 0, 'fieldlabel');
$headerLabel = getTranslatedString($fieldlabel, $module);
} else {
$headerLabel = $fld->name;
}
$hcell = array(
'column' => $fld->name,
'label' => $headerLabel,
'orderable' => false,
'searchable' => false,
);
$output->addHeader($hcell);
}
}
// generate the report query
function getReportQuery($outputformat, $filterlist) {
global $table_prefix;
$query = 'SELECT accountid, accountname, website, phone FROM '.$table_prefix.'_account WHERE website <> "" ';
return $query;
}
}