Files
crm.clientright.ru/modules/ITS4YouReports/GenerateObj.php
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

11244 lines
661 KiB
PHP

<?php
/*+********************************************************************************
* The content of this file is subject to the Reports 4 You license.
* ("License"); You may not use this file except in compliance with the License
* The Initial Developer of the Original Code is IT-Solutions4You s.r.o.
* Portions created by IT-Solutions4You s.r.o. are Copyright(C) IT-Solutions4You s.r.o.
* All Rights Reserved.
********************************************************************************/
require_once('modules/ITS4YouReports/ITS4YouReports.php');
require_once('modules/ITS4YouReports/classes/UIUtils.php');
if(file_exists('modules/ITS4YouReports/highcharts/highcharts.php')){
require_once('modules/ITS4YouReports/highcharts/highcharts.php');
}
require_once('modules/ITS4YouReports/helpers/ITS4YouErrorLog.php');
use ITS4YouReports_XlsCurrencyColumn_Config as XlsCurrencyColumn;
use ITS4YouReports_TabularCalculations_Config as TabularCalculations;
class GenerateObj extends ITS4YouReports_GenerateObjUtils_Helper {
public $filename = '';
public $generate_type = '';
public $outputformat = '';
public $ch_image_name = '';
public $report_filename = '';
public $pdf_filename = '';
public static $temp_files_path = 'test/ITS4YouReports/';
private $groupslist = array();
private $header_style = 'background-color:#737373;color:#F6F6F6;font-weight:bold;font-size:11px;vertical-align:middle;';
var $qf_array = array();
var $convert_currency = array();
var $append_currency_symbol_to_value = array();
var $skip_fields = array('invoicing_currency_id', 'currency_id', 'record_id', 'lineitem_id', 'crmid__COUNT');
var $skip_currency_fields = array('val_czk');
public $ch_image_url = '';
var $g_chart_types = array('vertical' => 'column',
'horizontal' => 'bar',
'verticalstacked' => 'column',
'horizontalstacked' => 'bar',
'linechart' => 'line',
'pie' => 'pie',
'piepercentage' => 'pie',
// 'pie3d' => 'PieChart',
'funnel' => 'funnel',
);
protected static $pieTypes = [
'pie',
'piepercentage',
];
public $calculation_type_array = array('count', 'sum', 'avg', 'min', 'max');
public $special_columns = array('access_count', 'duration_sum_time',);
private $summaries_columns = array();
private $summaries_columns_count = 0;
private $summaries_header = array();
private $selectedcolumns_header_row = '';
private $display_group_totals = true;
private $selectedcolumns_arr = array();
private $detail_selectedcolumns_arr = array();
private $data_record_id = '';
private $grouping_totals_bg_color = 'background-color: #CCCCCC;';
public $create_pdf_schedule = false;
public $generate_for = false;
public $schedule_all_records = 0;
public $schedule_skip_empty = 0;
public $schedule_skipped = 0;
private $userQuickFilterQuery = false;
protected $charts = array();
private static $custom_report_portrait_from = 15;
/*here you can define portrait from columns count*/
private $summaries_w_detail_portrait_from = 8;
private $chartPosition = '';
// ITS4YOU-CR SlOl 19. 1. 2016 9:48:41
var $key_metrics_alias = '';
var $key_metrics_calculation_type = '';
var $key_metrics_columns_str = '';
var $key_metrics_rows = '';
// ITS4YOU-CR SlOl 30. 5. 2016 9:40:40
var $is_hdn_fval = false;
// ITS4YOU-END
// ITS4YOU-CR SlOl 16. 6. 2017 6:32:52
var $totalVatSumGroup = '';
// ITS4YOU-CR SlOl 18. 5. 2016 14:10:07
// CUSTOM CALCULATION COLUMNS ARRAY
var $cc_array = array();
var $cc_values_array = array();
private $to_totals_res = array();
private $mifEntityTables = array();
// ITS4YOU-END
public static $R4YouFilename = 'Reports4You';
private static $summariesAvailableUiTypes = array('7', '9', '71', '72', '712');
private static $summaryAmountColumns = array('SUM', 'MIN', 'MAX', 'AVG');
private static $customSqlHrefColumn = 'href_id';
private static $customSqlCurrencyColumn = 'cur_id';
private static $customSqlColumns = [];
public $report_html_headerInfo;
private $doFormat = false;
private static $userList = [];
private static $groupList = [];
public $ch_array = [];
public $modules_to_access_query = [];
public function getGObjDifTime($t_txt = '') {
if (G_DEBUG) {
$c_time = time();
echo "<pre>$t_txt TIME: " . ($c_time - GT_START) . "</pre>";
}
return true;
}
function __construct($report, $qf_field = '', $generateFor = false, $schedule_partners = false)
{
$die_due = false;
$this->to_totals_res = array();
self::$currencyArray = Vtiger_Util_Helper::getBaseCurrency();
$this->generate_for = $generateFor;
if($schedule_partners==true){
$this->schedule_partners = $schedule_partners;
}
$this->setCurrentLanguage4You();
$this->setCurrentModule4You();
self::createTempFolderIfNotExists();
$this->time_debug = false;
// define('GT_START', time());
// define('G_DEBUG',true);
define('G_DEBUG', false);
if (G_DEBUG) {
ITS4YouReports::sshow('START T');
$this->getGObjDifTime();
}
$this->ui10_fields = array();
// ITS4YOU-CR SlOl 17. 2. 2017 6:53:07
ITS4YouReports::checkITS4YouUpdates();
// ITS4YOU-END
$this->report_obj = $report;
$this->reports4you_type = $report->reportinformations['reporttype'];
if(isset($this->reports4you_type) && 'custom_report' === $this->reports4you_type){
$custom_sql = ITS4YouReports::validateCustomSql($report->reportinformations['custom_sql'],'run');
$this->tf_sql = $custom_sql;
$this->r_permitted = $this->report_obj->CheckReportPermissions($this->report_obj->primarymodule, $this->report_obj->record, $die_due);
}else{
$this->generateQuery($this->report_obj, $qf_field);
$this->summaries_labels = array();
// setup currency array
$adb = PearDatabase::getInstance();
$this->currency_symbols = array();
$currencyres = $adb->pquery('SELECT id, currency_symbol FROM vtiger_currency_info ', array());
$nocurrency = $adb->num_rows($currencyres);
if ($nocurrency > 0) {
while ($currency_row = $adb->fetch_array($currencyres)) {
$this->currency_symbols[$currency_row['id']] = $currency_row['currency_symbol'];
}
}
}
}
public function populateQueryInformations($selectedcolumns_arr, &$join_array, &$columns_array) {
global $inventory_entities, $inventory_entities_tables, $related_join_array;
$access_query_tablename = false;
$this->selectedcolumns_arr = $selectedcolumns_arr;
$primary_focus = CRMEntity::getInstance($this->report_obj->primarymodule);
$primary_focus->modulename = $this->report_obj->primarymodule;
$this->parimary_table_name = $primary_table_name = $primary_focus->table_name;
$this->parimary_table_index = $primary_table_index = $primary_focus->table_index;
foreach ($primary_focus->tab_name as $other_table) {
$primary_join_array[$other_table] = $primary_focus->tab_name_index[$other_table];
}
// realted modules array to tables ->
if(isset($this->report_obj->relatedmodulesarray) && !empty($this->report_obj->relatedmodulesarray)){
foreach ($this->report_obj->relatedmodulesarray as $key => $rmod_tabid) {
$rmod_arr = explode("x", $rmod_tabid);
$r_module = vtlib_getModuleNameById($rmod_arr[0]);
if (vtlib_isModuleActive($r_module)) {
$related_focus = CRMEntity::getInstance($r_module);
$related_focus->modulename = $this->report_obj->primarymodule;
$realted_table_name = $related_focus->table_name;
$realted_table_index = $related_focus->table_index;
foreach ($related_focus->tab_name as $other_table) {
$related_join_array[$r_module][$other_table] = $related_focus->tab_name_index[$other_table];
}
}
}
}
$adb = PEARDatabase::getInstance();
$join_array = $columns_array = Array();
require_once("modules/ITS4YouReports/classes/UIFactory.php");
$debug_generation = false;
// $debug_generation = true;
if($debug_generation){
ITS4YouReports::sshow($selectedcolumns_arr);
}
/* * * QUERY INFORMATIONS PREPARING START ** */
foreach ($selectedcolumns_arr as $key => $arr) {
$fld_string = $arr["fieldcolname"];
$e_arr = explode(":", $fld_string);
// $e_arr 0 1 2 used to define columnstotal array
$columns_total_str = $e_arr[0] . ":" . $e_arr[1] . ":" . $e_arr[2];
$tablename = $e_arr[0];
$columnname = $e_arr[1];
$field_string = $e_arr[2];
$fieldname = $e_arr[3];
$last_key = ITS4YouReports_Functions_Helper::count($e_arr) - 1;
$field_uitype = $fieldid = $field_columnname = $column_tablename = "";
$field_module_arr = explode("_", $field_string);
$field_module = $field_module_arr[0];
$field_module_id = getTabid($field_module_arr[0]);
$as_prefix = $e_arr[$last_key];
if (is_numeric($as_prefix) || in_array(strtolower($as_prefix), array("inv", "mif"))) {
$relfieldres = $adb->pquery("SELECT uitype FROM vtiger_field WHERE fieldid = ? ", array($as_prefix));
if($adb->num_rows($relfieldres) > 0){
$rel_field_row = $adb->fetchByAssoc($relfieldres, 0);
$rel_field_uitype = $rel_field_row["uitype"];
if($rel_field_uitype=="10"){
$relModulesSql = "SELECT relmodule FROM vtiger_fieldmodulerel WHERE fieldid = ? ";
//$adb->setDebug(true);
$relModulesRes = $adb->pquery($relModulesSql, array($as_prefix));
//$adb->setDebug(false);
$fieldRelModules = array();
$numRels = $adb->num_rows($relModulesRes);
if ($numRels > 0) {
while ($relRow = $adb->fetchByAssoc($relModulesRes)) {
$fieldRelModules[] = $relRow["relmodule"];
}
}
if(!empty($fieldRelModules)){
foreach($fieldRelModules as $fieldRelModuleName){
$fieldRelModuleId = getTabid($fieldRelModuleName);
//$access_query_scope = "_$rel_field_uitype"."_".$fieldRelModuleId."_" . strtolower($as_prefix);
$access_query_scope = "_".$fieldRelModuleId."_" . strtolower($as_prefix);
if (empty($this->modules_to_access_query)
|| !array_key_exists($fieldRelModuleName, $this->modules_to_access_query)
|| !in_array($access_query_tablename, $this->modules_to_access_query)) {
$this->modules_to_access_query[$fieldRelModuleName] = $access_query_scope;
}
}
}
}else{
$access_query_scope = "_$rel_field_uitype"."_" . strtolower($as_prefix);
if (!array_key_exists($field_module, $this->modules_to_access_query) || !in_array($access_query_tablename, $this->modules_to_access_query)) {
$this->modules_to_access_query[$field_module] = $access_query_scope;
}
}
}
}
$joined = false;
$field_row = [];
global $inventory_entities;
/* * * PRIMARY FIELDS !!!!! ** */
if (in_array(intval($field_module_id), [9, 16])) {
if ('end_date' === $columnname) {
$rowRes = $adb->pquery('SELECT * FROM vtiger_field WHERE tablename=? AND columnname=? AND (tabid=? OR tabid=?)', [$tablename, 'due_date', 9, 16]);
} else {
$rowRes = $adb->pquery('SELECT * FROM vtiger_field WHERE tablename=? AND columnname=? AND (tabid=? OR tabid=?)', [$tablename, $columnname, 9, 16]);
}
} else {
$rowRes = $adb->pquery('SELECT * FROM vtiger_field WHERE tablename=? AND columnname=? AND tabid=?', [$tablename, $columnname, $field_module_id]);
}
$field_row = $adb->fetchByAssoc($rowRes, 0);
if (!empty($field_row)) {
$field_uitype = $field_row["uitype"];
}
if($debug_generation){
ITS4YouReports::sshow($tablename." - ".$columnname);
}
if($tablename=='vtiger_inventoryproductrel'){
if($this->totalVatSumGroup=='' && $columnname=='ps_producttotalvatsum'){
$this->totalVatSumGroup = true;
}else{
$this->totalVatSumGroup = false;
}
}
if (!in_array($columnname, ['converted', 'r4u_hyperlink', 'ps_producttotalvatsum']) && !is_numeric($e_arr[$last_key]) && array_key_exists(
$tablename,
$primary_join_array
) && $field_module_id == $this->report_obj->primarymoduleid && !empty($field_row)) {
if($debug_generation){
ITS4YouReports::sshow(1);
}
$fieldid = $field_row["fieldid"];
$params = Array('fieldid' => "$fieldid",
'report_id' => $this->report_id,
'fieldtabid' => $field_row["tabid"],
'field_uitype' => $field_uitype,
'fieldname' => $fieldname,
'columnname' => $columnname,
'tablename' => $tablename,
'table_index' => $primary_focus->tab_name_index,
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_table_name,
'primary_table_index' => $primary_table_index,
'primary_tableid' => $this->report_obj->primarymoduleid,
'using_aliastablename' => $primary_focus->table_name,
'using_columnname' => $primary_focus->table_index,
'fld_string' => $fld_string,
);
$using_array = getJoinInformation($params);
$params["using_array"] = $using_array;
$uifactory = new UIFactory($params);
$uifactory->getJoinSQL($field_uitype, $join_array, $columns_array);
$joined = true;
/* * * PRIMARY INVENTORY FIELDS !!!!! ** */
} elseif ($tablename == "vtiger_inventoryproductrel") {
if($debug_generation){
ITS4YouReports::sshow(2);
}
$fieldid = $field_row["fieldid"];
$params = Array('fieldid' => "",
'report_id' => $this->report_id,
'fieldtabid' => $field_row["tabid"],
'field_uitype' => $field_uitype,
'fieldname' => $fieldname,
'columnname' => $columnname,
'tablename' => $tablename,
'table_index' => $primary_focus->tab_name_index,
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_table_name,
'primary_table_index' => $primary_table_index,
'primary_tableid' => $this->report_obj->primarymoduleid,
'using_aliastablename' => $primary_focus->table_name,
'using_columnname' => $primary_focus->table_index,
'fld_string' => $fld_string,
);
$using_array = getJoinInformation($params);
$params["using_array"] = $using_array;
$uifactory = new UIFactory($params);
$uifactory->getInventoryJoinSQL($field_uitype, $join_array, $columns_array);
$joined = true;
}
// primary joined, continue
if ($joined) {
continue;
}
if ($e_arr[$last_key] != "MIF" && in_array($columnname, $this->special_columns)) {
if($debug_generation){
ITS4YouReports::sshow(3);
}
$params = Array('fieldid' => "",
'report_id' => $this->report_id,
'fieldtabid' => $this->report_obj->primarymoduleid,
'field_uitype' => "1",
'fieldname' => $columnname,
'columnname' => $columnname,
'tablename' => "",
'table_index' => $primary_focus->tab_name_index,
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_table_name,
'primary_table_index' => $primary_table_index,
'primary_tableid' => $this->report_obj->primarymoduleid,
'using_aliastablename' => $primary_focus->table_name,
'using_columnname' => $primary_focus->table_index,
'fld_string' => $fld_string,
);
$using_array = getJoinInformation($params);
$params["using_array"] = $using_array;
$uifactory = new UIFactory($params);
$uifactory->getJoinSQL($field_uitype, $join_array, $columns_array);
$joined = true;
}
if ($joined) {
continue;
}
/* * * OTHER INVENTORY FIELDS !!!!! ** */
if ($e_arr[$last_key] == "INV") {
if($debug_generation){
ITS4YouReports::sshow(4);
}
$field_uitype = "INV";
$params = Array('fieldid' => "",
'report_id' => $this->report_id,
'fieldtabid' => $field_module_id,
'fieldmodule' => $field_module,
'field_uitype' => $field_uitype,
'fieldname' => $fieldname,
'columnname' => $columnname,
'tablename' => $tablename,
'table_index' => $primary_focus->tab_name_index,
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_table_name,
'primary_table_index' => $primary_table_index,
'primary_tableid' => $this->report_obj->primarymoduleid,
'using_aliastablename' => $primary_focus->table_name,
'using_columnname' => $primary_focus->table_index,
'fld_string' => $fld_string,
);
$using_array["using"]["tablename"] = $primary_focus->table_name;
$using_array["using"]["columnname"] = $primary_focus->table_index;
$params["using_array"] = $using_array;
$uifactory = new UIFactory($params);
// going to UITypeINV
$uifactory->getInventoryJoinSQL($field_uitype, $join_array, $columns_array);
$joined = true;
}
// inventory joined, continue
if ($joined) {
continue;
}
/* * * MORE INFO FIELDS !!!!! ** */
if ($e_arr[$last_key] == "MIF") {
if($debug_generation){
ITS4YouReports::sshow(5);
}
$field_uitype = "MIF";
$params = Array('fieldid' => "",
'report_id' => $this->report_id,
'fieldtabid' => $field_module_id,
'fieldmodule' => $field_module,
'field_uitype' => $field_uitype,
'fieldname' => $fieldname,
'columnname' => $columnname,
'tablename' => $tablename,
'table_index' => $primary_focus->tab_name_index,
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_table_name,
'primary_table_index' => $primary_table_index,
'primary_tableid' => $this->report_obj->primarymoduleid,
'using_aliastablename' => $primary_focus->table_name,
'using_columnname' => $primary_focus->table_index,
'fld_string' => $fld_string,
);
$using_array["using"]["tablename"] = $primary_focus->table_name;
$using_array["using"]["columnname"] = $primary_focus->table_index;
$params["using_array"] = $using_array;
$uifactory = new UIFactory($params);
// going to UITypeDefault
$uifactory->getMoreInfoJoinSQL($field_uitype, $join_array, $columns_array);
$joined = true;
}
// more info joined, continue
if ($joined) {
continue;
}
/* * * RELATED FIELDS !!!!! fields with FIELDID = realted Fields ** */
if (is_numeric($e_arr[$last_key]) && trim($tablename, $e_arr[$last_key]) != "vtiger_inventoryproductrel") {
if($debug_generation){
ITS4YouReports::sshow(6);
}
$resRow = $adb->pquery('SELECT * FROM vtiger_field WHERE fieldid=?', [$e_arr[$last_key]]);
$field_row = $adb->fetchByAssoc($resRow, 0);
$field_uitype = $field_row["uitype"];
$fieldid = $e_arr[$last_key];
/* * * @!! using array loaded in getJoinSQLbyFieldRelation !!@ ** */
// for module start
if (is_numeric($e_arr[$last_key - 1])) {
$formodule = $e_arr[$last_key - 1];
} else {
$temp_fm = explode("_", $e_arr[2]);
$formodule = getTabid($temp_fm[0]);
}
// for module end
$params = Array('fieldid' => $fieldid,
'report_id' => $this->report_id,
'fieldtabid' => $field_row["tabid"],
'field_uitype' => $field_uitype,
'fieldname' => $fieldname,
'columnname' => $columnname,
'tablename' => trim($tablename, "_".$fieldid),
'table_index' => "",
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_table_name,
'primary_table_index' => $primary_table_index,
'primary_tableid' => $this->report_obj->primarymoduleid,
'using_aliastablename' => $field_row["tablename"],
'using_columnname' => $field_row["columnname"],
'formodule' => $formodule,
'fld_string' => $fld_string,
);
//ITS4YouReports::sshow($params);
//exit;
$uifactory = new UIFactory($params);
$uifactory->getJoinSQLbyFieldRelation($field_uitype, $join_array, $columns_array);
$joined = true;
}
// related fields joined, continue
if ($joined) {
continue;
}
// related inventoryproductrel control
/* * * RELATED INVENTORY FIELDS !!!!! ** */
$inv_array = explode("vtiger_inventoryproductrel", $tablename);
if (isset($inv_array[1]) && is_numeric($inv_array[1]) ) {
if($debug_generation){
ITS4YouReports::sshow(7);
}
$r_id = $inv_array[1];
$field_res = $adb->pquery("SELECT uitype,tabid,tablename,columnname FROM vtiger_field WHERE fieldid=?", array($r_id));
$field_rows = $adb->num_rows($field_res);
if ($field_rows > 0) {
$field_row = $adb->fetchByAssoc($field_res, 0);
// $field_uitype = $field_row["uitype"];
$field_uitype = "INV";
$forModuleArray = explode("_",$e_arr[2]);
$r_module = $forModuleArray[0];
if (vtlib_isModuleActive($r_module)) {
$r_tabid = getTabid($r_module);
$field_tablename = $field_row["tablename"];
$field_columnname = $field_row["columnname"];
//$related_focus = CRMEntity::getInstance($r_module);
//$related_focus->modulename = $r_module;
$params = Array('fieldid' => $r_id,
'report_id' => $this->report_id,
'fieldtabid' => $r_tabid,
'field_uitype' => $field_uitype,
'fieldname' => $fieldname,
'columnname' => $columnname,
'tablename' => trim($tablename, $r_id),
'table_index' => $primary_focus->table_index,
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_focus->table_name,
'primary_table_index' => $primary_focus->table_index[$primary_focus->table_name],
'primary_tableid' => '',
'using_aliastablename' => $field_tablename,
'using_columnname' => $field_columnname,
'formodule' => $r_module,
'fld_string' => $fld_string,
);
$using_array = getJoinInformation($params);
$params["using_array"] = $using_array;
$uifactory = new UIFactory($params);
$uifactory->getInventoryJoinSQL($field_uitype, $join_array, $columns_array);
}
}
$joined = true;
}
if($joined){
continue;
}
/* * * PRIMARY SPECIAL FIELDS (e.g. Invoice->AccountName etc.) !!!!! ** */
$resRow = $adb->pquery('SELECT * FROM vtiger_field WHERE fieldname=? AND tabid=?', array($fieldname, $this->report_obj->primarymoduleid));
$f_field_row = $adb->fetchByAssoc($resRow, 0);
if (is_array($f_field_row)) {
if($debug_generation){
ITS4YouReports::sshow(8);
}
$field_uitype = $f_field_row["uitype"];
$fieldid = $f_field_row["fieldid"];
$params = Array('fieldid' => $fieldid,
'report_id' => $this->report_id,
'fieldtabid' => $f_field_row["tabid"],
'field_uitype' => $field_uitype,
'fieldname' => $fieldname,
'columnname' => $columnname,
'tablename' => $tablename,
'table_index' => $primary_focus->tab_name_index,
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_table_name,
'primary_table_index' => $primary_table_index,
'primary_tableid' => $this->report_obj->primarymoduleid,
'using_aliastablename' => $primary_focus->table_name,
'using_columnname' => $columnname,
'fld_string' => $fld_string,
);
$using_array = getJoinInformation($params);
$params["using_array"] = $using_array;
$uifactory = new UIFactory($params);
$uifactory->getJoinSQL($field_uitype, $join_array, $columns_array);
$joined = true;
}
if ($joined) {
continue;
}
// ITS4YOU-CR SlOl 28. 6. 2016 9:59:07
if(in_array($columnname,ITS4YouReports::$modTrackerColumns)==true){
if($debug_generation){
ITS4YouReports::sshow(9);
}
$field_uitype = "Default";
$fieldid = "mif";
$f_field_row_tabid = getTabid("ModTracker");
$params = Array('fieldid' => $fieldid,
'report_id' => $this->report_id,
'fieldtabid' => $f_field_row_tabid,
'field_uitype' => $field_uitype,
'fieldname' => $fieldname,
'columnname' => $columnname,
'tablename' => $tablename,
'table_index' => $primary_focus->tab_name_index,
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_table_name,
'primary_table_index' => $primary_table_index,
'primary_tableid' => $this->report_obj->primarymoduleid,
'using_aliastablename' => $primary_focus->table_name,
'using_columnname' => $columnname,
'fld_string' => $fld_string,
);
$using_array = getJoinInformation($params);
$params["using_array"] = $using_array;
$uifactory = new UIFactory($params);
$uifactory->getJoinSQL($field_uitype, $join_array, $columns_array);
$joined = true;
}
if ($joined) {
continue;
}
// ITS4YOU-END
if ($columnname == "inviteeid" && $tablename == "vtiger_invitees") {
if($debug_generation){
ITS4YouReports::sshow(9);
}
$field_uitype = "Default";
$fieldid = '';
$params = Array('fieldid' => $fieldid,
'report_id' => $this->report_id,
'fieldtabid' => $field_module_id,
'field_uitype' => $field_uitype,
'fieldname' => $fieldname,
'columnname' => $columnname,
'tablename' => $tablename,
'table_index' => $primary_focus->tab_name_index,
'report_primary_table' => $primary_focus->table_name,
'primary_table_name' => $primary_table_name,
'primary_table_index' => $primary_table_index,
'primary_tableid' => $this->report_obj->primarymoduleid,
'using_aliastablename' => $primary_focus->table_name,
'using_columnname' => $columnname,
'fld_string' => $fld_string,
);
$using_array = getJoinInformation($params);
$params["using_array"] = $using_array;
$uifactory = new UIFactory($params);
$uifactory->getJoinSQL($field_uitype, $join_array, $columns_array);
$joined = true;
}
if ($joined) {
continue;
}
if ($columnname == "crmid" && $tablename == "vtiger_crmentity") {
if($debug_generation){
ITS4YouReports::sshow(10);
}
if (1 === intval($this->isentitytype)) {
$fld_cond = $tablename . "." . $columnname;
} else {
$fld_cond = $primary_focus->table_name . "." . $primary_focus->tab_name_index[$primary_focus->table_name];
}
$fld_alias = $columnname;
if (strpos($field_string, "LBL_RECORDS") !== false && strpos($e_arr[3], "count") !== false) {
$fld_alias .= "_r";
}
$columns_array_value = " $fld_cond AS $fld_alias";
$columns_array[] = $columns_array_value;
$columns_array[$fld_string]["fld_alias"] = $fld_alias;
$columns_array[$fld_string]["fld_sql_str"] = $columns_array_value;
$columns_array[$fld_string]["fld_cond"] = $fld_cond;
$columns_array["uitype_$fld_alias"] = "";
$columns_array[$fld_alias] = $fld_string;
$joined = true;
}
if ($joined) {
continue;
}
if ($columnname == "converted" && $tablename == "vtiger_leaddetails") {
if($debug_generation){
ITS4YouReports::sshow(11);
}
if (1 === intval($this->isentitytype)) {
$fld_cond = $tablename . "." . $columnname;
} else {
$fld_cond = $primary_focus->table_name . "." . $primary_focus->tab_name_index[$primary_focus->table_name];
}
$fld_alias = $columnname;
if (strpos($e_arr[3], "count") !== false) {
$fld_alias .= "_r";
}
$columns_array_value = " $fld_cond AS $fld_alias";
$columns_array[] = $columns_array_value;
$columns_array[$fld_string]["fld_alias"] = $fld_alias;
$columns_array[$fld_string]["fld_sql_str"] = $columns_array_value;
$columns_array[$fld_string]["fld_cond"] = $fld_cond;
$columns_array["uitype_$fld_alias"] = "";
$columns_array[$fld_alias] = $fld_string;
$joined = true;
}
if ($joined) {
continue;
}
if ($columnname == "r4u_hyperlink") {
if($debug_generation){
ITS4YouReports::sshow(12);
}
$fld_cond = "vtiger_crmentity.crmid";
$fld_alias = $columnname;
$columns_array_value = " $fld_cond AS $columnname";
$columns_array[] = $columns_array_value;
$columns_array[$fld_string]["fld_alias"] = $fld_alias;
$columns_array[$fld_string]["fld_sql_str"] = $columns_array_value;
$columns_array[$fld_string]["fld_cond"] = $fld_cond;
$columns_array["uitype_$fld_alias"] = "";
$columns_array[$fld_alias] = $fld_string;
$joined = true;
}
if ($joined) {
continue;
}
}
/* * * QUERY INFORMATIONS PREPARING END ** */
}
private function getColumnsStrToQuery($columns_array) {
$c_columns = "";
if ($this->generate_type == "grouping" && !empty($this->report_obj->reportinformations["summaries_columns"]) || ($this->generate_type == "grouping" && empty($this->report_obj->reportinformations["summaries_columns"]) && $this->report_obj->reportinformations["Group1"] != "none")) {
for ($gi = 1; $gi < 4; $gi++) {
$groupname = "Group$gi";
if ($this->report_obj->$groupname != "none") {
// ITS4YOU-CR SlOl | 15.5.2014 11:46
$fld_col_str_arr = explode(" AS ", $columns_array[$this->report_obj->$groupname]["fld_sql_str"]);
$gi_con_column = $fld_col_str_arr[0];
$gi_con_alias = $fld_col_str_arr[1];
//if (isset($this->report_obj->reportinformations["timeline_columnstr$gi"]) && $this->report_obj->reportinformations["timeline_columnstr$gi"] == $this->report_obj->$groupname && $this->report_obj->reportinformations["timeline_columnfreq$gi"] != "") {
if (isset($this->report_obj->reportinformations["timeline_columnstr$gi"]) && $this->report_obj->reportinformations["timeline_columnstr$gi"] != "" && $this->report_obj->reportinformations["timeline_columnstr$gi"] != "@vlv@") {
$gi_con_column = $this->getTimeLineColumnSql($gi_con_column, $this->report_obj->reportinformations["timeline_columnstr$gi"]);
}
// ITS4YOU-END 15.5.2014 11:46
$SUMcolumns_array[] = " $gi_con_column AS $gi_con_alias ";
}
}
foreach ($this->sum_col_sql_a as $column_str => $summaries_arr) {
$fld_sql_str_array = explode(" AS ", $columns_array[$column_str]["fld_sql_str"]);
$column_arr = explode(":", $column_str);
$tablename = $column_arr[0];
$columnname = $column_arr[1];
if($tablename=="vtiger_crmentity" && $columnname=="crmid" && !in_array($fld_sql_str_array[1],array("crmid","crmid_r"))){
$last_key = $column_arr[(ITS4YouReports_Functions_Helper::count($column_arr)-1)];
$last_key_as = "";
if (is_numeric($last_key) || in_array(strtolower($last_key), array("inv", "mif"))) {
$last_key_as = $last_key;
}
$fld_sql_str_array = array();
$fld_sql_str_array[] = "vtiger_crmentity.crmid";
$fld_sql_str_array[] = "crmid_$last_key_as";
}
$fld_str = $fld_sql_str_array[0];
$fld_str_as = trim($fld_sql_str_array[1]);
foreach ($summaries_arr as $calculation_type) {
/* if($calculation_type=="COUNT"){
$SUMcolumns_array[] = "$fld_str AS $fld_str_as";
} */
$SUMcolumns_array[] = "$calculation_type($fld_str) AS $fld_str_as" . "_$calculation_type";
$SUMcolumns_array["$fld_str_as" . "_$calculation_type"] = $column_str;
}
}
$columns_array = $SUMcolumns_array;
$this->sm_columns_array = $columns_array;
}
foreach ($columns_array as $r_key => $r_columns) {
if (is_numeric($r_key)) {
$c_columns .= "$r_columns,
";
}
}
$c_columns = trim($c_columns, ",
");
return $c_columns;
}
private function getJoinStrToQuery($join_array) {
$j_tables = "";
foreach ($join_array as $j_table => $j_array) {
if (' vtiger_crmentity AS vtiger_crmentity ' !== $j_table
&& false === strpos(decode_html($j_table), ' AS')
&& '.' !== substr($j_array['using'], -1)
&& '.' !== substr($j_array['joincol'], -1)
) {
$joinType = 'LEFT';
/** THIS part populate array with more info crmentity tables to use
* deleted=0 conditon
* = prevent deleted records displaying ! */
if (strpos($j_table, 'vtiger_crmentity AS vtiger_crmentity_') && array_key_exists($j_table, $join_array)) {
$this->mifEntityTables[] = $j_table;
}
if (isset($j_array["using"]) && $j_array["using"] != "") {
if ($j_array["joincol"] == "") {
$j_tables.="
$joinType JOIN $j_table ON " . $j_array["using"] . " ";
} else {
$j_tables.="
$joinType JOIN $j_table ON " . $j_array["joincol"] . " = " . $j_array["using"] . " ";
}
} else {
$primary_focus = CRMEntity::getInstance($this->report_obj->primarymodule);
$j_tables.="
$joinType JOIN $j_table ON " . $j_array["joincol"] . " = " . $primary_focus->table_name . "." . $primary_focus->table_index . " ";
}
}
}
return $j_tables;
}
private function generateQuery($report, $qf_field, $generate_type = "standard") {
$request = new Vtiger_Request($_REQUEST, $_REQUEST);
global $inventory_entities, $inventory_entities_tables, $related_join_array;
global $current_user;
global $list_max_entries_per_page;
$adb = PEARDatabase::getInstance();
$this->generate_type = $generate_type;
$this->mifEntityTables = array();
$this->isentitytype = $this->isEntityType($this->report_obj->primarymoduleid);
if (empty($this->report_obj->primarymodule)) {
return false;
}
$primary_focus = CRMEntity::getInstance($this->report_obj->primarymodule);
$primary_focus->modulename = $this->report_obj->primarymodule;
$no_field_res = $adb->pquery('SELECT columnname FROM vtiger_field WHERE uitype = ? AND tabid = ?', array(4,$this->report_obj->primarymoduleid));
if($adb->num_rows($no_field_res) > 0){
$no_field_row = $adb->fetchByAssoc($no_field_res, 0);
$this->primary_no_column = $no_field_row["columnname"];
}
$die_due = true;
if(isset($_REQUEST["view"]) && $_REQUEST["view"]=="ShowWidget"){
$die_due = false;
} elseif(isset($_REQUEST["view"]) && $_REQUEST["view"]=="ShowKeyMetrics"){
$die_due = false;
} elseif (!isset($_REQUEST) || $_REQUEST["service"]=="Schedule Reports4You"){
$die_due = false;
}
$this->r_permitted = $this->report_obj->CheckReportPermissions($this->report_obj->primarymodule, $this->report_obj->record, $die_due);
if(!$this->r_permitted) {
return false;
}
$primary_table_name = $primary_focus->table_name;
$primary_table_index = $primary_focus->table_index;
foreach ($primary_focus->tab_name as $other_table) {
$primary_join_array[$other_table] = $primary_focus->tab_name_index[$other_table];
}
// realted modules array to tables ->
if(!empty($this->report_obj->relatedmodulesarray)){
foreach ($this->report_obj->relatedmodulesarray as $key => $rmod_tabid) {
$rmod_arr = explode("x", $rmod_tabid);
$r_module = vtlib_getModuleNameById($rmod_arr[0]);
if (vtlib_isModuleActive($r_module)) {
$related_focus = CRMEntity::getInstance($r_module);
$related_focus->modulename = $this->report_obj->primarymodule;
$realted_table_name = $related_focus->table_name;
$realted_table_index = $related_focus->table_index;
foreach ($related_focus->tab_name as $other_table) {
$related_join_array[$r_module][$other_table] = $related_focus->tab_name_index[$other_table];
}
}
}
}
if (($this->generate_type == "grouping" && !empty($this->report_obj->reportinformations["summaries_columns"])) || ($this->generate_type == "grouping" && empty($this->report_obj->reportinformations["summaries_columns"]) && $this->report_obj->reportinformations["Group1"] != "none")) {
$selectedcolumns_arr = $mapped_cols = array();
global $default_charset;
// ITS4YOU-UP SlOl 19. 1. 2017 16:25:00
$summaries_columns_decoded = $this->report_obj->reportinformations["summaries_columns"];
if(!empty($summaries_columns_decoded)){
foreach($summaries_columns_decoded as $stdkey => $stdcol){
$summaries_columns_decoded[$stdkey]["columnname"] = html_entity_decode($stdcol["columnname"], ENT_QUOTES, $default_charset);
}
}
$this->summaries_columns = $summaries_columns_decoded;
// ITS4YOU-END
$this->summaries_columns_count = ITS4YouReports_Functions_Helper::count($this->report_obj->reportinformations["summaries_columns"]);
$this->summaries_columns_colspan = (ITS4YouReports_Functions_Helper::count($this->report_obj->reportinformations["summaries_columns"]) + 1);
for ($gi = 1; $gi < 4; $gi++) {
if ($this->report_obj->reportinformations["Group$gi"] != "none") {
$selectedcolumns_arr[] = array("fieldcolname" => $this->report_obj->reportinformations["Group$gi"], "selected" => "", "fieldlabel" => "Group$gi",);
}
}
foreach ($this->report_obj->reportinformations["summaries_columns"] as $key => $summaries_column_arr) {
$summaries_column_arr_columnname = "";
$to_join = array();
$summaries_column_arr_ex = explode(":", $summaries_column_arr["columnname"]);
if (is_numeric($summaries_column_arr_ex[5]) || in_array($summaries_column_arr_ex[5], ITS4YouReports::$customRelationTypes)) {
$f_ng = 6;
} else {
$f_ng = 5;
}
for ($ng = 0; $ng < $f_ng; $ng++) {
$to_join[] = $summaries_column_arr_ex[$ng];
}
$summaries_column_arr_columnname = implode(":", $to_join);
if (!in_array($summaries_column_arr_columnname, $mapped_cols)) {
$summaries_lbl_arr = $this->setSummariesLBLKeys($summaries_column_arr_columnname);
$this->summaries_labels = array_merge($this->summaries_labels, $summaries_lbl_arr);
$selectedcolumns_arr[] = array("fieldcolname" => $summaries_column_arr_columnname, "selected" => "", "fieldlabel" => "",);
$mapped_cols[] = $summaries_column_arr_columnname;
}
}
if ($this->report_obj->reportinformations["Group1"] != "none" && $this->summaries_columns_count == 0) {
$detail_selectedcolumns_arr = $this->report_obj->getSelectedColumnListArray($this->report_obj->record);
$this->detail_selectedcolumns_arr = $detail_selectedcolumns_arr;
}
// if($this->generate_type == "grouping" && empty($this->report_obj->reportinformations["summaries_columns"]) && $this->report_obj->reportinformations["Group1"] != "none"){
if ($this->generate_type == "grouping" && $this->report_obj->reportinformations["Group1"] != "none" && $this->report_obj->reportinformations["Group2"] == "none") {
$primarymodule = $this->report_obj->primarymodule;
$count_records_col = "vtiger_crmentity:crmid:" . $primarymodule . "_COUNT Records:" . $primarymodule . "_count:V";
if (!$this->report_obj->in_multiarray($count_records_col, $selectedcolumns_arr, "fieldcolname")) {
$selectedcolumns_arr[] = array("fieldcolname" => $count_records_col, "selected" => "", "fieldlabel" => "");
$this->sum_col_sql_a[$count_records_col][0] = "COUNT";
}
}
} else {
$selectedcolumns_arr = $this->report_obj->getSelectedColumnListArray($this->report_obj->record);
$this->detail_selectedcolumns_arr = $selectedcolumns_arr;
// pridam nakoniec sql quick filters, ktore neboli zvolene do selected columns
$this->qf_array = $this->report_obj->getSelectedQFColumnsArray($this->report_obj->record);
if(!empty($this->qf_array)){
foreach ($this->qf_array as $key => $value_arr) {
$selectedQFcolumns_arr[] = $value_arr;
if (!$this->report_obj->in_multiarray($value_arr["fieldcolname"], $selectedcolumns_arr, "fieldcolname")) {
array_push($selectedcolumns_arr, $value_arr);
}
}
}
if(!empty($this->report_obj->relatedmodulesarray)){
foreach ($this->report_obj->relatedmodulesarray as $key => $module_value) {
$val_arr = explode("x", $module_value);
$mv_tabid = $val_arr[0];
if (isset($val_arr[1]) && $val_arr[1] != "") {
$mv_fieldid = $val_arr[1];
$related_fields_arr[] = array($mv_tabid => $mv_fieldid);
}
}
}
for ($gi = 1; $gi < 4; $gi++) {
if ($this->report_obj->reportinformations["Group$gi"] != "none" && $this->report_obj->reportinformations["Group1"] != "none" && !$this->report_obj->in_multiarray($this->report_obj->reportinformations["Group$gi"], $selectedcolumns_arr, "fieldcolname")) {
$selectedcolumns_arr[] = array("fieldcolname" => $this->report_obj->reportinformations["Group$gi"], "selected" => "", "fieldlabel" => "Group$gi",);
}
}
// ITS4YOU-CR SlOl 18. 5. 2016 13:43:01
if(!empty($this->report_obj->reportinformations["cc_array"])){
$cc_res = $adb->pquery("SELECT columnname FROM its4you_reports4you_cc_columns WHERE reportid = ? ORDER BY columnindex ASC ",array($this->report_obj->record));
if($adb->num_rows($cc_res)>0){
while($cc_row = $adb->fetchByAssoc($cc_res)) {
$this->cc_array[] = decode_html($cc_row['columnname']);
if(!$this->report_obj->in_multiarray($cc_row["columnname"], $selectedcolumns_arr, "fieldcolname")) {
$value_arr = array("fieldcolname" => $cc_row["columnname"], "selected" => "", "fieldlabel" => "",);
array_push($selectedcolumns_arr, $value_arr);
}
}
}
}
// ITS4YOU-END
}
// if (!self::isAjax()) {
if (isset($_REQUEST['reload'])) {
$xyz = $this->getReqConditions($this->report_obj->adv_sel_fields);
} else {
$xyz = $this->getAdvFilterSql($this->report_obj->record, array());
}
// }
if (!empty($this->advf_col_array)) {
foreach ($this->advf_col_array as $key => $advf_col_str) {
if ($this->generate_type != "grouping" && strpos($advf_col_str, "campaignrelstatus") !== false) {
continue;
}
if ($this->generate_type != "grouping" && strpos($advf_col_str, "access_count") !== false) {
continue;
}
if ($advf_col_str != "" && !$this->report_obj->in_multiarray($advf_col_str, $selectedcolumns_arr, "fieldcolname")) {
$selectedcolumns_arr[] = array("fieldcolname" => $advf_col_str, "selected" => "", "fieldlabel" => "",);
}
}
}
// ITS4YOU-CR SlOl 10. 3. 2016 12:48:44
if($request->has('primarySearchBy') && !empty($request->get('primarySearchBy'))){
$widgetSearchBy = ITS4YouReports::getWidgetSearchArray($this->report_obj->record);
if(!in_array($widgetSearchBy['primary_search'],$selectedcolumns_arr)){
$this->primary_search = $widgetSearchBy['primary_search'];
$selectedcolumns_arr[] = array("fieldcolname" => $this->primary_search, "selected" => "", "fieldlabel" => "",);
}
}
// ITS4YOU-END
/* NEROZUMIEM PRECO JE TU TENTO KOD ... v tabular reportoch sposobi chybne naplnenenie stlpcov 2x
if ($this->generate_type == "standard" && !empty($this->detail_selectedcolumns_arr)) {
foreach ($this->detail_selectedcolumns_arr as $key => $col_arr_arr) {
$selectedcolumns_arr[] = $col_arr_arr;
}
}
*/
if($this->generate_for==true){
$generateFor = ITS4YouReports::getSchedulerGenerateFor($this->report_obj->record);
foreach ($generateFor as $key => $genForColStr) {
$selectedcolumns_arr[] = array("fieldcolname" => $genForColStr, "selected" => "", "fieldlabel" => "",);
}
}
if(!empty($this->report_obj->reportinformations['quick_filters'])) {
foreach ($this->report_obj->reportinformations['quick_filters'] as $qfColumn) {
if ($this->report_obj->in_multiarray($qfColumn, $selectedcolumns_arr, "fieldcolname") !== true) {
$selectedcolumns_arr[] = array("fieldcolname" => $qfColumn, "selected" => "", "fieldlabel" => "",);
}
}
}
if ('ApiMaps' === $generate_type && !empty($this->report_obj->reportinformations['maps'])) {
foreach ($this->report_obj->reportinformations['maps'] as $mi => $mapColumn) {
if (!in_array($mi, ITS4YouReports_BingMaps_View::$mapParameterColumns) && true !== $this->report_obj->in_multiarray($mapColumn, $selectedcolumns_arr, 'fieldcolname')) {
$selectedcolumns_arr[] = array('fieldcolname' => $mapColumn, 'selected' => '', 'fieldlabel' => '',);
}
}
}
$join_array = Array();
$columns_array = Array();
require_once("modules/ITS4YouReports/classes/UIFactory.php");
$this->populateQueryInformations($selectedcolumns_arr, $join_array, $columns_array);
if (!isset($this->groupslist) || empty($this->groupslist)) {
$this->groupslist = $this->getGroupingList();
}
$this->report_id = $this->report_obj->record;
$this->join_array = $join_array;
$this->columns_array = $columns_array;
/* * * QUERY CREATING START ** */
if ($qf_field != "") {
$c_columns[] = $qf_field;
foreach ($this->groupslist as $key => $value) {
if (isset($columns_array[$key]["fld_sql_str"])) {
$c_columns[] = $columns_array[$key]["fld_sql_str"];
}
}
$c_columns = implode(",", $c_columns);
} else {
$c_columns = $this->getColumnsStrToQuery($columns_array);
}
// global $inventory_modules;
if (ITS4YouReports::isInventoryModule($this->report_obj->primarymodule)) {
$group_by_currency_sql = $this->getCurrencyFieldSql($primary_focus->table_name);
$this->group_by_currency_sql = $group_by_currency_sql;
$c_columns .= $group_by_currency_sql;
}
/* NEED TO BE FINISHED
if(isset($this->columns_array["relatedCurrencyTables"]) && !empty($this->columns_array["relatedCurrencyTables"])){
foreach($this->columns_array["relatedCurrencyTables"] as $rel_currency_arr){
$rel_group_by_currency_sql = $this->getCurrencyFieldSql($rel_currency_arr["table"],$rel_currency_arr["fieldid_alias"]);
$rel_group_by_currency_arr = explode(" AS ",$rel_group_by_currency_sql);
$this->rel_group_by_currency_sql = $rel_group_by_currency_arr[0];
$c_columns .= $rel_group_by_currency_sql;
}
}*/
$j_tables = $this->getJoinStrToQuery($join_array);
$resRow = $adb->pquery('SELECT fieldid FROM vtiger_field WHERE tabid=? AND columnname=? ', array($this->report_obj->primarymoduleid, 'smownerid'));
$field_row = $adb->fetchByAssoc($resRow, 0);
$p_smownerid = $field_row['fieldid'];
$s_sql = 'SELECT DISTINCT
' . $c_columns . ' ';
if (1 === intval($this->isentitytype)) {
$s_sql .= ' , vtiger_crmentity.crmid AS record_id ';
}
$j_sql = '
FROM ' . $primary_focus->table_name . ' ';
if (1 === intval($this->isentitytype)) {
$j_sql .= '
INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = ' . $primary_focus->table_name . '.' . $primary_focus->table_index . ' AND vtiger_crmentity.deleted=0 ';
}
if(isset($this->schedule_partners) && $this->schedule_partners==true){
$primary_focus->schedule_partners = $this->schedule_partners;
}
if(method_exists($primary_focus, 'getNonAdminAccessControlQuery')){
$non_admin_sql = $primary_focus->getNonAdminAccessControlQuery($this->report_obj->primarymodule, $current_user);
}
$j_sql .= $non_admin_sql;
if (1 === intval($this->isentitytype)) {
if (!array_key_exists(" vtiger_users AS vtiger_users_$p_smownerid ", $join_array)) {
$j_sql .= " LEFT JOIN vtiger_users AS vtiger_users_$p_smownerid ON vtiger_users_$p_smownerid.id = vtiger_crmentity.smownerid ";
}
if (!array_key_exists(" vtiger_groups AS vtiger_groups_$p_smownerid ", $join_array)) {
$j_sql .= " LEFT JOIN vtiger_groups AS vtiger_groups_$p_smownerid ON vtiger_groups_$p_smownerid.groupid = vtiger_crmentity.smownerid ";
}
}
$j_sql .= " $j_tables ";
if (!empty($this->modules_to_access_query) && $this->generate_type!="grouping") {
foreach ($this->modules_to_access_query as $q_a_module => $q_a_scope) {
if(array_key_exists(" vtiger_crmentity AS vtiger_crmentity$q_a_scope ",$this->join_array)){
$j_sql .= $primary_focus->getNonAdminAccessControlQuery($q_a_module, $current_user, $q_a_scope);
}
}
}
$stdfilterlist = $this->getStdFilterList($this->report_obj->record, $join_array);
if (isset($stdfilterlist) && $stdfilterlist != "") {
$conditions[] = $stdfilterlist;
}
$default_charset = vglobal('default_charset');
if (self::isAjax()) {
$advfiltersql = $_SESSION['r4u_adv'][$this->report_obj->record];
//ITS4YouReports::sshow(3);
} else {
if ($request->has('reload')
|| 'GetXLS' === $request->get('mode')
|| 'GetPrintReport' === $request->get('mode')
) {
$advfiltersql = $this->getReqAdvFilterSql($this->report_obj->record, $join_array);
//ITS4YouReports::sshow(1);
} else {
$advfiltersql = $this->getAdvFilterSql($this->report_obj->record, $join_array);
$advfiltersql = html_entity_decode($advfiltersql, ENT_QUOTES, $default_charset);
//ITS4YouReports::sshow(2);
}
$_SESSION['r4u_adv'][$this->report_obj->record] = $advfiltersql;
}
if (isset($advfiltersql) && $advfiltersql != "") {
$conditions[] = $advfiltersql;
}
// standard date filter for generated report
if (isset($_REQUEST["stdDateFilterField"]) && $_REQUEST["stdDateFilterField"] != "") {
if (isset($this->columns_array[$_REQUEST["stdDateFilterField"]]["fld_alias"]) && $this->columns_array[$_REQUEST["stdDateFilterField"]]["fld_alias"] != "") {
$stdDateFilterField = $this->columns_array[$_REQUEST["stdDateFilterField"]]["fld_alias"];
if (isset($_REQUEST["startdate"]) && $_REQUEST["startdate"] != "" && isset($_REQUEST["enddate"]) && $_REQUEST["enddate"] != "") {
$conditions[] = " ($stdDateFilterField BETWEEN '" . vtlib_purify($_REQUEST["startdate"]) . "' AND '" . vtlib_purify($_REQUEST["enddate"]) . "' ) ";
}
}
}
$qfConditions = $this->getQFConditions($request);
$conditions = $this->getUserValuesConditions($conditions, $selectedcolumns_arr);
// ITS4YOU-CR SlOl 10. 3. 2016 13:01:32
if($request->has('primarySearchBy') && $request->get('primarySearchBy')!="" && $request->get('primarySearchBy')!="all"){
if(isset($this->columns_array[$this->primary_search])){
if(is_array($request->get('primarySearchBy'))) {
$primarySearchBy = implode("','", $request->get('primarySearchBy'));
} else {
$primarySearchBy = $request->get('primarySearchBy');
}
$primarySearchBy = trim($primarySearchBy);
$conditions[] = $this->columns_array[$this->primary_search]['fld_cond']." IN ('".$primarySearchBy."')";
// ITS4YouReports::sshow($conditions);
}
}
// ITS4YOU-END
if ('Calendar' === $this->report_obj->primarymodule) {
if (false !== strpos($j_sql, 'vt_tmp_u'.$current_user->id.'_t'.getTabid('Calendar').'_events')) {
$conditions[] = '(vt_tmp_u'.$current_user->id.'_t'.getTabid('Calendar').'_events.shared IS NOT NULL
OR vt_tmp_u'.$current_user->id.'_t'.getTabid('Calendar').'_task.shared IS NOT NULL )';
}
}
if(!empty($this->mifEntityTables)) {
$relatedCrmConditions = [];
foreach ($this->mifEntityTables as $crmJaliasString) {
$crmJaliasArray = explode(' AS ', $crmJaliasString);
$crmJalias = $crmJaliasArray[1];
$relatedCrmConditions[] = '(' . $crmJalias . '.deleted IS NULL OR ' . $crmJalias . '.deleted=0)';
}
$conditions[] = '(' . implode(' AND ', $relatedCrmConditions) . ')';
}
if (!empty($conditions)) {
$ft_sql = "
WHERE " . implode(" AND ", $conditions);
}
$qf_sql = '';
if(!empty($qfConditions)) {
if (!empty($conditions)) {
$qfOperator = 'AND';
}else{
$qfOperator = 'WHERE';
}
$qf_sql = ' ' . $qfOperator . ' ' . implode(' AND ', $qfConditions);
$this->userQuickFilterQuery = true;
}
$g_o_array = $this->getGOSQL($this->groupslist, $primary_focus->table_name);
$this->g_o_array = $g_o_array;
$group_by_sql_arr = $g_o_array["group_by_sql"];
$order_by_sql = $g_o_array["order_by_sql"];
// SUMMARIES CRITERIA START
$summaries_conditions = $this->getSummariesConditions($this->report_obj);
// SUMMARIES CRITERIA END
if (trim($order_by_sql) != "") {
$order_by_sql = " ORDER BY " . $order_by_sql;
}
// tf sql without group by for details
$gb_sql = "";
$gj_sql = $j_sql . $ft_sql;
$f_sql = $s_sql . $gj_sql;
$order_by_sql_Array = array();
if ($this->generate_type == "grouping" && !empty($group_by_sql_arr)) {
foreach ($group_by_sql_arr as $gkey => $gsql) {
$group_by_sql = " GROUP BY " . $gsql;
$gkeyStr = $gkey;
$g_this = "group_sql_$gkeyStr";
if ($summaries_conditions != "") {
$summaries_conditions_sql = " HAVING $summaries_conditions ";
}
// ITS4YOU-CR SlOl 24. 8. 2016 10:42:44
$order_by_sql_arr = explode(", ", $order_by_sql);
if(isset($order_by_sql_arr[$gkey])){
$order_by_sql_Array[] = $order_by_sql_arr[$gkey];
}
// ITS4YOU-END
$gb_sql = $f_sql;
$go_sql = $group_by_sql . $summaries_conditions_sql . implode(', ', $order_by_sql_Array);
$this->$g_this = $gb_sql . $this->qf_sql . $go_sql;
if ($gkey == 0) {
$go_sql = $group_by_sql . $summaries_conditions_sql . $order_by_sql_Array[0];
$tf_sql = $gb_sql . $this->qf_sql . $go_sql;
}
}
} else {
if (!empty($group_by_sql_arr)) {
$group_by_sql = " GROUP BY " . $group_by_sql_arr[(ITS4YouReports_Functions_Helper::count($group_by_sql_arr) - 1)];
}
if($this->totalVatSumGroup){
if($group_by_sql==''){
$group_by_sql = ' GROUP BY ';
}
$group_by_sql .= ' vtiger_inventoryproductrel.id ';
}
$gb_sql = $f_sql;
$go_sql = $group_by_sql . $order_by_sql;
$tf_sql = $f_sql . $go_sql;
}
// LIMIT start
$limit_sql = '';
if (!$this->generate_for
&& !$this->schedule_all_records
&& !self::isAllExport()
) {
if ($generate_type == "standard" && isset($this->report_obj->reportinformations["columns_limit"]) && $this->report_obj->reportinformations["columns_limit"] > 0) {
$limit_value = $this->report_obj->reportinformations["columns_limit"];
$limit_sql = " LIMIT $limit_value ";
}
if ($generate_type == "grouping" && isset($this->report_obj->reportinformations["summaries_limit"]) && $this->report_obj->reportinformations["summaries_limit"] > 0) {
$summaries_limit = $this->report_obj->reportinformations["summaries_limit"];
$limit_sql = " LIMIT $summaries_limit ";
}
if ((isset($_REQUEST) && !empty($_REQUEST['module']))
&& $this->isSupportedPagination()
&& !in_array($_REQUEST['service'], [
'Schedule Reports4You',
])
&& !in_array($_REQUEST['mode'], [
'GetXLS',
'GetPrintReport',
])
&& !in_array($_REQUEST['action'], [
'GeneratePDF',
])
) {
$this->limitValue = $limit_value;
$perPage = $list_max_entries_per_page;
if ($request->has('page')) {
$page = $request->get('page');
} else {
$page = 1;
}
$limit_sql = ' LIMIT ' . (($page-1) * $perPage) . ', ' . $perPage;
}
$tf_sql .= $limit_sql;
// LIMIT end
}
$this->f_sql = $f_sql;
// quick filters sql conditions
$this->qf_sql = $qf_sql;
// group and order sql part
$this->gb_sql = $go_sql;
// sql with quick filters
$this->tf_qf_sql = $this->f_sql . $this->qf_sql . $this->gb_sql . $limit_sql;
// final tabular sql
$this->tf_sql = $tf_sql;
if($this->generate_for==true){
$this->gj_sql = $gj_sql;
}
$this->select_body = $gj_sql;
$this->j_sql = $j_sql;
$this->columns_array = $columns_array;
}
/** Function to get the Standard filter columns for the reportid
* This function accepts the $reportid datatype Integer
* This function returns $stdfilterlist Array($columnname => $tablename:$columnname:$fieldlabel:$fieldname:$typeofdata=>$tablename.$columnname filtercriteria,
* $tablename1:$columnname1:$fieldlabel1:$fieldname1:$typeofdata1=>$tablename1.$columnname1 filtercriteria,
* )
*
*/
function getStdFilterList($reportid, $join_array) {
$stdfilterlist = "";
$adb = PEARDatabase::getInstance();
if (isset($_REQUEST["stdDateFilterField"]) && $_REQUEST["stdDateFilterField"] != "" && isset($_REQUEST["startdate"]) && $_REQUEST["startdate"] != "" && (in_array($_REQUEST["stdDateFilter"], ITS4YouReports::$sp_date_options) || isset($_REQUEST["enddate"]) && $_REQUEST["enddate"] != "")) {
$fieldcolname = vtlib_purify($_REQUEST["stdDateFilterField"]);
$column_info = explode(":", $fieldcolname);
$startdate = vtlib_purify($_REQUEST["startdate"]);
$stemp_val = explode(",", $startdate);
$sval = Array();
if (!empty($stemp_val)) {
for ($x = 0; $x < ITS4YouReports_Functions_Helper::count($stemp_val); $x++) {
if (trim($stemp_val[$x]) != '') {
$date = new DateTimeField(trim($stemp_val[$x]));
/*
if($column_info[4] == 'D') { */
$sval[$x] = DateTimeField::convertToDBFormat(trim($stemp_val[$x]));
/* } elseif($column_info[4] == 'DT') {
$sval[$x] = $date->getDBInsertDateTimeValue();
} else {
$sval[$x] = $date->getDBInsertTimeValue();
} */
}
}
}
$startdate = implode(",", $sval);
$enddate = vtlib_purify($_REQUEST["enddate"]);
$etemp_val = explode(",", $enddate);
$eval = Array();
if (!empty($etemp_val)) {
for ($x = 0; $x < ITS4YouReports_Functions_Helper::count($etemp_val); $x++) {
if (trim($etemp_val[$x]) != '') {
$date = new DateTimeField(trim($etemp_val[$x]));
/*
if($column_info[4] == 'D') {
*/
$eval[$x] = DateTimeField::convertToDBFormat(trim($etemp_val[$x]));
/* } elseif($column_info[4] == 'DT') {
$eval[$x] = $date->getDBInsertDateTimeValue();
} else {
$eval[$x] = $date->getDBInsertTimeValue();
} */
}
}
}
$enddate = implode(",", $eval);
$stdfilterrow["datecolumnname"] = $fieldcolname;
$stdfilterrow["datefilter"] = vtlib_purify($_REQUEST["stdDateFilter"]);
$stdfilterrow["startdate"] = $startdate;
$stdfilterrow["enddate"] = $enddate;
} else {
$stdfiltersql = "select its4you_reports4you_datefilter.* from its4you_reports4you";
$stdfiltersql .= " inner join its4you_reports4you_datefilter on its4you_reports4you.reports4youid = its4you_reports4you_datefilter.datefilterid";
$stdfiltersql .= " where its4you_reports4you.reports4youid = ?";
$result = $adb->pquery($stdfiltersql, array($reportid));
$stdfilterrow = $adb->fetch_array($result);
}
if (isset($stdfilterrow)) {
$fieldcolname = $stdfilterrow["datecolumnname"];
$datefilter = $stdfilterrow["datefilter"];
$startdate = $stdfilterrow["startdate"];
$enddate = $stdfilterrow["enddate"];
if ($fieldcolname != "none") {
$selectedfields = explode(":", $fieldcolname);
if ($selectedfields[0] == "vtiger_crmentity" . $this->primarymodule)
$selectedfields[0] = "vtiger_crmentity";
// ITS4YOU-UP SlOl 9. 1. 2014 13:44:18
$last_key = ITS4YouReports_Functions_Helper::count($selectedfields) - 1;
$exploded_name = explode("_", $selectedfields[3]);
$field_module_id = getTabid($exploded_name[0]);
if (is_numeric($selectedfields[$last_key])) {
$selected_field_col = trim($selectedfields[0], $selectedfields[$last_key]) . "_" . $selectedfields[$last_key] . "." . $selectedfields[1];
} elseif ($selectedfields[$last_key] == "MIF") {
$alias = "_mif_" . $field_module_id;
$selected_field_col = trim($selectedfields[0], "MIF") . $alias . "." . $selectedfields[1];
} else {
$tablename = $selectedfields[0];
$columnname = $selectedfields[1];
$resRow = $adb->pquery('SELECT uitype FROM vtiger_field WHERE columnname=? AND tabid=?', [$columnname, $field_module_id]);
$field_row = $adb->fetchByAssoc($resRow, 0);
if (!empty($field_row)) {
$field_uitype = $field_row["uitype"];
$uifactory = new UIFactory($field_row);
$selected_field_col = $uifactory->getSelectedFieldCol($field_uitype, $selectedfields);
} else {
$selected_field_col = $selectedfields[0] . "." . $selectedfields[1];
}
}
// ITS4YOU-END 9. 1. 2014 13:44:22
if ($datefilter == "custom") {
if ($startdate != "0000-00-00" && $enddate != "0000-00-00" && $selectedfields[0] != "" && $selectedfields[1] != "") {
// $stdfilterlist[$fieldcolname] = $selectedfields[0].".".$selectedfields[1]." between '".$startdate." 00:00:00' and '".$enddate." 23:59:59'";
$stdfilterlist = $selected_field_col . " between '" . $startdate . " 00:00:00' and '" . $enddate . " 23:59:59'";
}
} else {
$startenddate = self::getStandarFiltersStartAndEndDate($datefilter);
if ($startenddate[0] != "" && $startenddate[1] != "" && $selectedfields[0] != "" && $selectedfields[1] != "") {
// $stdfilterlist[$fieldcolname] = $selectedfields[0].".".$selectedfields[1]." between '".$startenddate[0]." 00:00:00' and '".$startenddate[1]." 23:59:59'";
$stdfilterlist = $selected_field_col . " between '" . $startenddate[0] . " 00:00:00' and '" . $startenddate[1] . " 23:59:59'";
}
if (in_array($datefilter, ITS4YouReports::$sp_date_options)) {
switch ($datefilter) {
case "todaymore":
$stdfilterlist = $selected_field_col . " > '" . $startenddate[0] . " 23:59:59'";
break;
default:
$stdfilterlist = $selected_field_col . " < '" . $startenddate[0] . " 00:00:00'";
break;
}
}
}
}
}
// Save the information
// $this->_stdfilterlist = $stdfilterlist;
return $stdfilterlist;
}
/** Function to get the advanced filter columns for the reportid
* This function accepts the $reportid
* This function returns $columnslist Array($columnname => $tablename:$columnname:$fieldlabel:$fieldname:$typeofdata=>$tablename.$columnname filtercriteria,
* $tablename1:$columnname1:$fieldlabel1:$fieldname1:$typeofdata1=>$tablename1.$columnname1 filtercriteria,
* |
* $tablenamen:$columnnamen:$fieldlabeln:$fieldnamen:$typeofdatan=>$tablenamen.$columnnamen filtercriteria
* )
*
*/
function getAdvFilterSql($reportid, $join_array) {
$adb = PEARDatabase::getInstance();
global $default_charset, $site_URL;
require_once("modules/ITS4YouReports/classes/UIFactory.php");
$advfiltersql = "";
$advfiltergroupssql = "SELECT * FROM its4you_reports4you_relcriteria_grouping WHERE queryid = ? and groupid != 0 ORDER BY groupid";
$advfiltergroups = $adb->pquery($advfiltergroupssql, array($reportid));
$numgrouprows = $adb->num_rows($advfiltergroups);
// ITS4YOU-CR SlOl 28. 3. 2014 10:34:19 to get select options array
$ITS4YouReports = $this->report_obj;
// ADV FILTER START
$ITS4YouReports->getPriModuleColumnsList($ITS4YouReports->primarymodule);
if (!empty($ITS4YouReports->related_modules[$ITS4YouReports->primarymodule])) {
foreach ($ITS4YouReports->related_modules[$ITS4YouReports->primarymodule] as $key => $value) {
$secondarymodules[] = $value["id"];
}
$secondary_modules_str = implode(":", $secondarymodules);
}
$ITS4YouReports->getSecModuleColumnsList($secondary_modules_str);
$sel_fields = $ITS4YouReports->adv_sel_fields;
// ITS4YOU-END 28. 3. 2014 10:34:37
$std_filter_columns = $this->report_obj->getStdFilterColumns();
$groupctr = 0;
while ($advfiltergroup = $adb->fetch_array($advfiltergroups)) {
$groupctr++;
$groupid = $advfiltergroup["groupid"];
$groupcondition = $advfiltergroup["group_condition"];
$advfiltercolumnssql = "select its4you_reports4you_relcriteria.* from its4you_reports4you";
$advfiltercolumnssql .= " inner join its4you_reports4you_selectquery on its4you_reports4you_selectquery.queryid = its4you_reports4you.reports4youid";
$advfiltercolumnssql .= " left join its4you_reports4you_relcriteria on its4you_reports4you_relcriteria.queryid = its4you_reports4you_selectquery.queryid";
$advfiltercolumnssql .= " where its4you_reports4you.reports4youid = ? AND its4you_reports4you_relcriteria.groupid = ?";
$advfiltercolumnssql .= " order by its4you_reports4you_relcriteria.columnindex";
//$adb->setDebug(true);
$result = $adb->pquery($advfiltercolumnssql, array($reportid, $groupid));
//$adb->setDebug(false);
$noofrows = $adb->num_rows($result);
if ($noofrows > 0) {
$advfiltergroupsql = "";
$columnctr = 0;
while ($advfilterrow = $adb->fetch_array($result)) {
$columnctr++;
$add_tags = true;
$fieldcolname = str_replace('@AMPKO@', '&', $advfilterrow["columnname"]);
$comparator = $advfilterrow["comparator"];
$value = $advfilterrow["value"];
$column_condition = $advfilterrow["column_condition"];
$this->advf_col_array[] = $fieldcolname;
$valuehdn = $advfilterrow["valuehdn"];
if($valuehdn!="" && !in_array($valuehdn, $this->advf_col_array)){
$this->is_hdn_fval = true;
$add_tags = false;
$this->advf_col_array[] = $valuehdn;
}
if ($this->generate_type == "grouping" && strpos($fieldcolname, "campaignrelstatus") !== false) {
continue;
}
if ($this->generate_type == "grouping" && strpos($fieldcolname, "access_count") !== false) {
continue;
}
if($valuehdn!="" && isset($this->columns_array[$valuehdn]["fld_cond"])){
$add_tags = false;
$value = $this->columns_array[$valuehdn]["fld_cond"];
}
if ($fieldcolname != "" && $comparator != "") {
$selectedfields = explode(":", $fieldcolname);
//Added to handle yes or no for checkbox field in reports advance filters. -shahul
if ($selectedfields[4] == 'C') {
if (strcasecmp(trim($value), "yes") == 0)
$value = "1";
if (strcasecmp(trim($value), "no") == 0)
$value = "0";
}
$valuearray = explode(",", trim($value));
$datatype = (isset($selectedfields[4])) ? $selectedfields[4] : "";
// ITS4YOU-UP SlOl 9. 1. 2014 13:44:18
if (in_array(html_entity_decode($fieldcolname, ENT_QUOTES, $default_charset), $std_filter_columns)
|| in_array($fieldcolname, $std_filter_columns)
|| false !== strpos($fieldcolname, ':D:')
|| false !== strpos($fieldcolname, ':T:')
|| false !== strpos($fieldcolname, ':DT:')
|| false !== strpos($fieldcolname, ':DT')
) {
if (isset($this->columns_array[html_entity_decode($fieldcolname, ENT_QUOTES, $default_charset)]["fld_cond"]) && $this->columns_array[html_entity_decode($fieldcolname, ENT_QUOTES, $default_charset)]["fld_cond"] != "") {
$selected_field_col = $this->columns_array[html_entity_decode($fieldcolname, ENT_QUOTES, $default_charset)]["fld_cond"];
} else {
$selected_field_col = $selectedfields[0] . "." . $selectedfields[1];
}
if ('isn' === $comparator) {
if (self::isMoreStrictMysql()) {
$advcolumnsql = ' (' . $selected_field_col . ' IS NULL) ';
} else {
$advcolumnsql = ' (' . $selected_field_col . ' IS NULL OR ' . $selected_field_col . ' = "") ';
}
} elseif ('isnn' === $comparator) {
if (self::isMoreStrictMysql()) {
$advcolumnsql = ' (' . $selected_field_col . ' IS NOT NULL) ';
} else {
$advcolumnsql = ' (' . $selected_field_col . ' IS NOT NULL AND ' . $selected_field_col . ' != "") ';
}
}elseif(in_array($comparator, ITS4YouReports::$fld_date_options)){
$advcolumnsql = " DATE($selected_field_col) " . $this->getStdComparator($comparator, trim($value), $datatype);
}else{
$advcolumnsql = $selected_field_col . " " . $this->getStdComparator($comparator, trim($value), $datatype);
}
$advfiltergroupsql .= " " . $advcolumnsql . " ";
} elseif (array_key_exists(html_entity_decode($fieldcolname, ENT_QUOTES, $default_charset), $sel_fields) && isset($valuearray)) {
if($selectedfields[3]=="assigned_user_id" && in_array("Current User",$valuearray)){
$valuearray = $this->getConditionCurrentUserName($valuearray);
}
if(in_array($comparator,array("e","n",))){
if($add_tags==true){
$value = "('".implode("','", $valuearray)."')";
}else{
$value = "(".implode(",", $valuearray).")";
}
}
$advcolumnsql = $this->getSelFieldsWhereSQL($fieldcolname,$comparator,$value,$selectedfields,$add_tags);
$advfiltergroupsql .= $advcolumnsql;
} else {
$last_key = ITS4YouReports_Functions_Helper::count($selectedfields) - 1;
$exploded_name = explode("_", $selectedfields[2]);
$field_module_id = getTabid($exploded_name[0]);
if (is_numeric($selectedfields[$last_key])) {
$tablename = $selectedfields[0];
$fieldname = $selectedfields[3];
$resRow = $adb->pquery('SELECT * FROM vtiger_field WHERE fieldname=? AND tabid=?', [$fieldname, $field_module_id]);
$field_row = $adb->fetchByAssoc($resRow, 0);
$selected_field_col_table = trim($selectedfields[0], $selectedfields[$last_key]);
if (array_key_exists(" $selected_field_col_table AS " . $selected_field_col_table . "_" . $field_row["fieldid"] . " ", $join_array)) {
$selected_field_col = $selected_field_col_table . "_" . $field_row["fieldid"] . "." . $selectedfields[1];
} elseif (array_key_exists(" $selected_field_col_table AS " . $selected_field_col_table . "_" . $selectedfields[$last_key] . " ", $join_array)) {
$selected_field_col = $selected_field_col_table . "_" . $selectedfields[$last_key] . "." . $selectedfields[1];
}
} elseif ($selectedfields[$last_key] == "MIF") {
$alias = "mif_" . $field_module_id;
$selected_field_col = trim($selectedfields[0], "MIF") . $alias . "." . $selectedfields[1];
} else {
$tablename = $selectedfields[0];
$fieldname = $selectedfields[3];
$resRow = $adb->pquery('SELECT * FROM vtiger_field WHERE fieldname=? AND tabid=?', [$fieldname, $field_module_id]);
$field_row = $adb->fetchByAssoc($resRow, 0);
if ($tablename == "vtiger_inventoryproductrel") {
$field_uitype = "INV";
$params = array("fieldid" => $selectedfields[$last_key],
);
$uifactory = new UIFactory($field_row);
$selected_field_col = $uifactory->getSelectedFieldCol($field_uitype, $selectedfields);
} elseif (!empty($field_row)) {
$field_uitype = $field_row["uitype"];
$uifactory = new UIFactory($field_row);
$selected_field_col = $uifactory->getSelectedFieldCol($field_uitype, $selectedfields);
} elseif (isset($this->columns_array[$fieldcolname]["fld_cond"]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$selected_field_col = $this->columns_array[$fieldcolname]["fld_cond"];
} else {
$selected_field_col = $selectedfields[0] . "." . $selectedfields[1];
}
}
// ITS4YOU-END 9. 1. 2014 13:44:22
if (isset($this->columns_array[$fieldcolname]["fld_cond"]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$filed_col = $this->columns_array[$fieldcolname]["fld_cond"];
} else {
$filed_col = $selected_field_col;
}
if($filed_col != "" && in_array($comparator, array('isn','isnn'))){
if ('isn' === $comparator) {
if (self::isMoreStrictMysql()) {
$fieldvalue = ' (' . $filed_col . ' IS NULL) ';
} else {
$fieldvalue = ' (' . $filed_col . ' IS NULL OR ' . $filed_col . ' = "") ';
}
} else {
if (self::isMoreStrictMysql()) {
$fieldvalue = ' (' . $filed_col . ' IS NOT NULL ) ';
} else {
$fieldvalue = ' (' . $filed_col . ' IS NOT NULL AND ' . $filed_col . ' != "") ';
}
}
} elseif(!empty($filed_col) && in_array($comparator, array('k',))){
$fieldvalue = $filed_col . $this->getAdvComparator($comparator, trim($value), $datatype);
if (self::isMoreStrictMysql()) {
$fieldvalue = ' (' . $fieldvalue . ' OR ' . $filed_col . ' IS NULL) ';
} else {
$fieldvalue = ' (' . $fieldvalue . ' OR ' . $filed_col . ' IS NULL OR ' . $filed_col . ' = "") ';
}
}else{
$fieldvalue = $filed_col . $this->getAdvComparator($comparator, trim($value), $datatype);
}
$advfiltergroupsql .= $fieldvalue;
}
if ($column_condition != NULL && $column_condition != '' && $noofrows > $columnctr) {
$advfiltergroupsql .= ' ' . $column_condition . ' ';
}
}
}
if (trim($advfiltergroupsql) != "") {
$advfiltergroupsql = "( $advfiltergroupsql ) ";
if ($groupcondition != NULL && $groupcondition != '' && $numgrouprows > $groupctr) {
$advfiltergroupsql .= ' ' . $groupcondition . ' ';
}
$advfiltersql .= $advfiltergroupsql;
}
}
}
if (trim($advfiltersql) != "")
$advfiltersql = '(' . $advfiltersql . ')';
return $advfiltersql;
}
function getReqConditions($sel_fields) {
$conditions = array();
$this->advf_col_array = array();
//<<<<<<<advancedfilter>>>>>>>>
$_REQUEST["advft_criteria"] = str_replace("<@AMPKO@>","&",$_REQUEST["advft_criteria"]);
$request = new Vtiger_Request($_REQUEST, $_REQUEST);
$advft_criteria = $request->get("advft_criteria");
$advft_criteria_groups = $request->get("advft_criteria_groups");
/*
$json = new Zend_Json();
$advft_criteria = vtlib_purify($_REQUEST['advft_criteria']);
$advft_criteria = $json->decode($advft_criteria);
$advft_criteria_groups = vtlib_purify($_REQUEST['advft_criteria_groups']);
$advft_criteria_groups = $json->decode($advft_criteria_groups);
*/
if (!is_array($sel_fields)) {
$sel_fields = Zend_Json::decode($sel_fields);
}
//<<<<<<<advancedfilter>>>>>>>>
if (!empty($advft_criteria)) {
foreach ($advft_criteria as $f_fol_i => $condition_array) {
if($condition_array["columnname"]!=""){
$is_sbox_item = "V";
$tmpSplit = explode(':', $condition_array['columnname']);
$c_tablename = $tmpSplit[0];
$c_colname = $tmpSplit[1];
$c_module_field = $tmpSplit[2];
$c_fieldname = $tmpSplit[3];
$c_typeofdata = $tmpSplit[4];
if (array_key_exists(trim($condition_array["columnname"]), $sel_fields) && in_array($condition_array["comparator"], ["e", "n"])) {
$sbox_vals = [];
if ('C' === $c_typeofdata) {
if (!is_array($condition_array['value'])) {
$condition_array['value'] = [$condition_array['value']];
}
foreach ($condition_array['value'] as $val) {
$sbox_vals[] = in_array($val, ['yes', '1']) ? 1 : 0;
}
} else {
$sbox_vals = $condition_array["value"];
}
$condition_array["value"] = "('" . implode("','", $sbox_vals) . "')";
$is_sbox_item = "S";
}
$this->advf_col_array[] = $condition_array["columnname"];
// ITS4YOU-CR SlOl 30. 5. 2016 9:08:00
if($condition_array["value_hdn"]!=""){
$this->advf_col_array[] = $condition_array["value_hdn"];
}
// ITS4YOU-END
$f_value = $condition_array["value"];
$skipTimeFields = [
'createdtime',
'modifiedtime',
];
if($c_typeofdata=="T" && !in_array($c_fieldname, $skipTimeFields)){
$checked = false;
if (preg_match('/^\d{2}:\d{2}$/', $f_value)) {
if (preg_match("/(2[0-3]|[0][0-9]|1[0-9]):([0-5][0-9])/", $f_value)) {
$checked = true;
}
}
$today = date("Y-m-d");
if($checked){
$f_value_long = Vtiger_Datetime_UIType::getDBDateTimeValue($today.' '.$f_value);
$f_value_arr = explode(' ', $f_value_long);
$f_value = $f_value_arr[1];
}else{
$f_value = date("H:i");
}
}
$conditions[$condition_array["groupid"]][$f_fol_i] = array("groupid" => $condition_array["groupid"],
"fcol$f_fol_i" => $condition_array["columnname"],
"fop$f_fol_i" => $condition_array["comparator"],
"fval$f_fol_i" => $f_value,
"hdn_fval$f_fol_i" => $condition_array["value_hdn"],
"fcon$f_fol_i" => $condition_array["column_condition"],
"gpcon$f_fol_i" => $advft_criteria_groups[$condition_array["groupid"]]["groupcondition"],
"dkey" => $f_fol_i,
"f_type$f_fol_i" => $is_sbox_item,
"from_req" => 1,);
}
}
}
return $conditions;
}
// ITS4YOU-CR SlOl 3. 3. 2014 12:04:10
function getReqAdvFilterSql($reportid, $join_array) {
$adb = PEARDatabase::getInstance();
global $default_charset;
$this->columns_array = self::decodeColumnsArray($this->columns_array);
$conditions = array();
$advfiltersql = '';
$add_tags = false;
// ITS4YOU-CR SlOl 28. 3. 2014 10:34:19 to get select options array
// $ITS4YouReports = new ITS4YouReports($record);
$ITS4YouReports = $this->report_obj;
// ADV FILTER START
$ITS4YouReports->getPriModuleColumnsList($ITS4YouReports->primarymodule);
if (!empty($ITS4YouReports->related_modules[$ITS4YouReports->primarymodule])) {
foreach ($ITS4YouReports->related_modules[$ITS4YouReports->primarymodule] as $key => $value) {
$secondarymodules[] = $value["id"];
}
$secondary_modules_str = implode(":", $secondarymodules);
}
$ITS4YouReports->getSecModuleColumnsList($secondary_modules_str);
$sel_fields = $ITS4YouReports->adv_sel_fields;
$conditions_rc = $this->getReqConditions($sel_fields);
// ITS4YOU-END 28. 3. 2014 10:34:37
$last_gid = $l_groupcondition = "";
$std_filter_columns = $this->report_obj->getStdFilterColumns();
foreach($std_filter_columns as $stdkey => $stdcol){
$std_filter_columns[$stdkey] = html_entity_decode($stdcol, ENT_QUOTES, $default_charset);
}
foreach ($conditions_rc as $groupid => $conditions) {
$adv_condition_sql = "";
$d_i = 1;
$d_num_rows = ITS4YouReports_Functions_Helper::count($conditions);
foreach ($conditions as $key => $d_conditions) {
$advfiltergroupsql = "";
$groupid = $d_conditions["groupid"];
if ($last_gid == "") {
$last_gid = $groupid;
}
$dkey = $d_conditions["dkey"];
$from_req = $d_conditions["from_req"];
$column_condition = "";
$fieldcolname = $d_conditions["fcol$dkey"];
$comparator = $d_conditions["fop$dkey"];
$value = $d_conditions["fval$dkey"];
$this->is_hdn_fval = false;
if (isset($d_conditions["fcon$dkey"])) {
$column_condition = $d_conditions["fcon$dkey"];
}
if (isset($d_conditions["gpcon$dkey"])) {
$groupcondition = $d_conditions["gpcon$dkey"];
}
if (isset($d_conditions["f_type$dkey"])) {
$f_type = $d_conditions["f_type$dkey"];
}
if (!empty($d_conditions["hdn_fval$dkey"])) {
$this->is_hdn_fval = true;
$hdn_fval = $d_conditions["hdn_fval$dkey"];
}
// ITS4YOU-CR SlOl 30. 5. 2016 9:12:33
if($hdn_fval!=""){
if (isset($this->columns_array[$fieldcolname]["fld_cond"]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$fld_cond = $this->columns_array[$fieldcolname]["fld_cond"];
} else {
$fld_arr = explode(":", $fieldcolname);
$fld_cond = $fld_arr[0] . "." . $fld_arr[1];
}
$compare_fld_cond = $this->columns_array[$hdn_fval]["fld_cond"];
if (in_array($comparator, ITS4YouReports::$fld_date_options)) {
$advfiltergroupsql .= " DATE($fld_cond) " . $this->getStdComparator($comparator, trim($compare_fld_cond), $datatype);
} else {
$advfiltergroupsql .= $fld_cond . " " . $this->getAdvComparator($comparator, trim($compare_fld_cond), $datatype);
}
}elseif($fieldcolname != "" && ($comparator=="isn" || $comparator=="isnn")){
// ITS4YOU-END
if (isset($this->columns_array[$fieldcolname]["fld_cond"]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$fld_cond = $this->columns_array[$fieldcolname]["fld_cond"];
} else {
$fld_arr = explode(":", $fieldcolname);
$fld_cond = $fld_arr[0] . "." . $fld_arr[1];
}
if ('isn' === $comparator) {
if (self::isMoreStrictMysql()) {
$advfiltergroupsql .= ' (' . $fld_cond . ' IS NULL) ';
} else {
$advfiltergroupsql .= ' (' . $fld_cond . ' IS NULL OR ' . $fld_cond . ' = "") ';
}
} else {
if (self::isMoreStrictMysql()) {
$advfiltergroupsql .= ' (' . $fld_cond . ' IS NOT NULL) ';
} else {
$advfiltergroupsql .= ' (' . $fld_cond . ' IS NOT NULL AND ' . $fld_cond . ' != "") ';
}
}
}elseif ($fieldcolname != "" && $comparator != "" && $f_type != "S" && !in_array($fieldcolname, $std_filter_columns)) {
$selectedfields = explode(":", $fieldcolname);
//Added to handle yes or no for checkbox field in reports advance filters. -shahul
if ($selectedfields[4] == 'C') {
if (strcasecmp(trim($value), "yes") == 0)
$value = "1";
if (strcasecmp(trim($value), "no") == 0)
$value = "0";
}
$valuearray = explode(",", trim($value));
$datatype = (isset($selectedfields[4])) ? $selectedfields[4] : "";
// ADV FILTER CONDITIONS START
if (isset($valuearray) && ITS4YouReports_Functions_Helper::count($valuearray) > 1 && $comparator != 'bw') {
$advcolumnsql = "";
if ('inviteeid' === $this->columns_array[$fieldcolname]['fld_alias']) {
$colSqlStr = $this->columns_array[$fieldcolname]["fld_cond"];
} else {
$colSqlStr = $selectedfields[0] . "." . $selectedfields[1];
}
for ($n = 0; $n < ITS4YouReports_Functions_Helper::count($valuearray); $n++) {
$advcolsql[] = $colSqlStr . $this->getAdvComparator($comparator, trim($valuearray[$n]), $datatype);
}
//If negative logic filter ('not equal to', 'does not contain') is used, 'and' condition should be applied instead of 'or'
if ($comparator == 'n' || $comparator == 'k') {
$advcolumnsql = implode(" and ", $advcolsql);
} else {
$advcolumnsql = implode(" or ", $advcolsql);
}
$fieldvalue = " (" . $advcolumnsql . ") ";
}else {
// ITS4YOU-UP SlOl 9. 1. 2014 13:44:18
$last_key = ITS4YouReports_Functions_Helper::count($selectedfields) - 1;
$exploded_name = explode("_", $selectedfields[2]);
$field_module_id = getTabid($exploded_name[0]);
if (is_numeric($selectedfields[$last_key])) {
$tablename = $selectedfields[0];
$fieldname = $selectedfields[3];
$resRow = $adb->pquery('SELECT * FROM vtiger_field WHERE fieldname=? AND tabid=?', [$fieldname, $field_module_id]);
$field_row = $adb->fetchByAssoc($resRow, 0);
$selected_field_col_table = trim($selectedfields[0], "_".$selectedfields[$last_key]);
// ITS4YOU-UP SlOl 22. 12. 2016 6:08:56
if (isset($this->columns_array[$fieldcolname]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$selected_field_col = $this->columns_array[$fieldcolname]["fld_cond"];
// ITS4YOU-END
} elseif (array_key_exists(" $selected_field_col_table AS " . $selected_field_col_table . "_" . $field_row["fieldid"] . " ", $join_array)) {
$selected_field_col = $selected_field_col_table . "_" . $field_row["fieldid"] . "." . $selectedfields[1];
} elseif (array_key_exists(" $selected_field_col_table AS " . $selected_field_col_table . "_" . $selectedfields[$last_key] . " ", $join_array)) {
$selected_field_col = $selected_field_col_table . "_" . $selectedfields[$last_key] . "." . $selectedfields[1];
}
} elseif (isset($this->columns_array[$fieldcolname]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$selected_field_col = $this->columns_array[$fieldcolname]["fld_cond"];
} elseif ($selectedfields[$last_key] == "MIF") {
$alias = "mif_" . $field_module_id;
$selected_field_col = trim($selectedfields[0], "MIF") . $alias . "." . $selectedfields[1];
} else {
$tablename = $selectedfields[0];
$fieldname = $selectedfields[3];
$resRow = $adb->pquery('SELECT * FROM vtiger_field WHERE fieldname=? AND tabid=?', [$fieldname, $field_module_id]);
$field_row = $adb->fetchByAssoc($resRow, 0);
if ('vtiger_inventoryproductrel' === $tablename) {
$field_uitype = "INV";
$params = array("fieldid" => $selectedfields[$last_key],
);
$uifactory = new UIFactory($field_row);
$selected_field_col = $uifactory->getSelectedFieldCol($field_uitype, $selectedfields);
} elseif (!empty($field_row)) {
$field_uitype = $field_row["uitype"];
//$uifactory = new UIFactory($field_row);
//$selected_field_col = $uifactory->getSelectedFieldCol($field_uitype, $selectedfields);
if (isset($this->columns_array[$fieldcolname]["fld_cond"]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$selected_field_col = $this->columns_array[$fieldcolname]["fld_cond"];
} else {
$table_alias = $tablename . "_$field_uitype";
$column_alias = $fieldname;
$selected_field_col = $table_alias . "." . $column_alias;
}
} elseif (isset($this->columns_array[$fieldcolname]["fld_cond"]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$selected_field_col = $this->columns_array[$fieldcolname]["fld_cond"];
} else {
$selected_field_col = $selectedfields[0] . "." . $selectedfields[1];
}
}
// ITS4YOU-END 9. 1. 2014 13:44:22
if ('k' === $comparator) {
$fieldvalue = $selected_field_col . $this->getAdvComparator($comparator, trim($value), $datatype);
if (self::isMoreStrictMysql()) {
$fieldvalue = ' (' . $fieldvalue . ' OR ' . $selected_field_col . ' IS NULL) ';
} else {
$fieldvalue = ' (' . $fieldvalue . ' OR ' . $selected_field_col . ' IS NULL OR ' . $selected_field_col . ' = "") ';
}
} else {
$fieldvalue = $selected_field_col . $this->getAdvComparator($comparator, trim($value), $datatype);
}
}
// ADV FILTER CONDITIONS END
$advfiltergroupsql .= $fieldvalue;
} elseif ($f_type == "S") {
$fld_arr = explode(":", $fieldcolname);
if($fld_arr[3]=="assigned_user_id" && strpos($value,"Current User") !== false){
$value = trim($value, "('");
$value = trim($value, "')");
$valuearray = explode("','", $value);
$valuearray = $this->getConditionCurrentUserName($valuearray);
$value = "('".implode("','", $valuearray)."')";
}
$advfiltergroupsql .= $this->getSelFieldsWhereSQL($fieldcolname,$comparator,$value,$fld_arr,$add_tags);
/*if ($comparator == "n") {
$advfiltergroupsql .= $this->columns_array[$fieldcolname]["fld_cond"] . " NOT IN " . $value;
} else {
$advfiltergroupsql .= $this->columns_array[$fieldcolname]["fld_cond"] . " IN " . $value;
}*/
} elseif (in_array($fieldcolname, $std_filter_columns)) {
$column_info = explode(":", $fieldcolname);
if (isset($this->columns_array[$fieldcolname]["fld_cond"]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$fld_cond = $this->columns_array[$fieldcolname]["fld_cond"];
} else {
$fld_arr = explode(":", $fieldcolname);
$fld_cond = $fld_arr[0] . "." . $fld_arr[1];
}
$advfiltergroupsql .= $fld_cond . " " . $this->getStdComparator($comparator, trim($value), $column_info[4]);
} else {
$column_info = explode(":", $fieldcolname);
$temp_val = explode(",", $value);
if (($column_info[4] == 'D' || ($column_info[4] == 'T' && $column_info[1] != 'time_start' && $column_info[1] != 'time_end') || ($column_info[4] == 'DT')) && ($column_info[4] != '' && $value != '' ) && !in_array($fieldcolname, $std_filter_columns)) {
$val = Array();
for ($x = 0; $x < ITS4YouReports_Functions_Helper::count($temp_val); $x++) {
if (trim($temp_val[$x]) != '') {
$date = new DateTimeField(trim($temp_val[$x]));
if ($column_info[4] == 'D') {
$val[$x] = DateTimeField::convertToDBFormat(trim($temp_val[$x]));
} elseif ($column_info[4] == 'DT') {
$val[$x] = $date->getDBInsertDateTimeValue();
} else {
$val[$x] = $date->getDBInsertTimeValue();
}
}
}
$value = implode(",", $val);
}
if (isset($this->columns_array[$fieldcolname]["fld_cond"]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
if (in_array($fieldcolname, $std_filter_columns)) {
$advfiltergroupsql .= $this->columns_array[$fieldcolname]["fld_cond"] . " " . $this->getStdComparator($comparator, trim($value), $column_info[4]);
} else {
$advfiltergroupsql .= $this->columns_array[$fieldcolname]["fld_cond"] . " " . $this->getAdvComparator($comparator, trim($value), $column_info[4]);
}
} else {
$this->adv_fcol[] = $fieldcolname;
// $selectedfields = explode(":",$fieldcolname);
if (in_array($fieldcolname, $std_filter_columns)) {
$advfiltergroupsql .= $fieldcolname . " " . $this->getStdComparator($comparator, trim($value), $column_info[4]);
} else {
$advfiltergroupsql .= $fieldcolname . " " . $this->getAdvComparator($comparator, trim($value), $column_info[4]);
}
}
}
if (trim($advfiltergroupsql) != "") {
//$advfiltergroupsql = "( $advfiltergroupsql ) ";
if ($column_condition != NULL && $column_condition != '' && $d_i < $d_num_rows) {
$advfiltergroupsql .= ' ' . $column_condition . ' ';
}
/*
if ($l_groupcondition != NULL && $l_groupcondition != '' && $groupid != $last_gid) {
$advfiltergroupsql = ' ' . $l_groupcondition . ' ' . $advfiltergroupsql;
$l_groupcondition = $groupcondition;
$last_gid = $groupid;
} else {
$l_groupcondition = $groupcondition;
$last_gid = $groupid;
}
*/
$l_groupcondition = $groupcondition;
$last_gid = $groupid;
$adv_condition_sql .= $advfiltergroupsql;
}
$d_i++;
}
$advfiltersql .= " ( $adv_condition_sql ) $l_groupcondition ";
}
// quick fix more and/or
$advfiltersql = trim($advfiltersql, ' and ');
$advfiltersql = trim($advfiltersql, ' or ');
if (trim($advfiltersql) != ""){
$advfiltersql = '(' . $advfiltersql . ')';
}
// Save the information
return $advfiltersql;
}
// ITS4YOU-END 3. 3. 2014 12:04:12
public static function getDateNDaysInterval($type,$value){
$datevalue = array("","");
$today = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d"), date("Y")));
$value = round(intval($value));
if($type!='daysago' && $type!='daysmore'){
$value = ($value-1);
}
switch($type){
case "olderNdays":
$olderNdays = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - $value, date("Y")));
$datevalue[0] = "";
$datevalue[1] = $olderNdays;
break;
case "lastNdays":
$lastNdays = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - $value, date("Y")));
$datevalue[0] = $lastNdays;
$datevalue[1] = $today;
break;
case "nextNdays":
$nextNdays = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + $value, date("Y")));
$datevalue[0] = $today;
$datevalue[1] = $nextNdays;
break;
case "moreNdays":
$moreNdays = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + $value, date("Y")));
$datevalue[0] = $moreNdays;
$datevalue[1] = "";
break;
case "daysago":
$daysago = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - $value, date("Y")));
$datevalue[0] = $daysago;
$datevalue[1] = $daysago;
break;
case "daysmore":
$daysmore = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + $value, date("Y")));
$datevalue[0] = $daysmore;
$datevalue[1] = $daysmore;
break;
}
return $datevalue;
}
/** Function to get standardfilter startdate and enddate for the given type
* @ param $type : Type String
* returns the $datevalue Array in the given format
* $datevalue = Array(0=>$startdate,1=>$enddate)
*/
public static function getStandarFiltersStartAndEndDate($type,$getDBFormat=false) {
$today = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d"), date("Y")));
$tomorrow = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")));
$yesterday = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y")));
$currentmonth0 = date("Y-m-d", mktime(0, 0, 0, date("m"), "01", date("Y")));
$currentmonth1 = date("Y-m-t");
$lastmonth0 = date('Y-m-d', strtotime('first day of previous month'));
$lastmonth1 = date('Y-m-t', strtotime('last day of previous month'));
$nextmonth0 = date('Y-m-d', strtotime('first day of next month'));
$nextmonth1 = date('Y-m-t', strtotime('last day of next month'));
global $current_user;
$dayoftheweek = $current_user->column_fields["dayoftheweek"];
$today_name = date("l");
if($today_name==$dayoftheweek){
$lastweek0 = date("Y-m-d", strtotime("-1 week $dayoftheweek"));
$lastweek1 = date("Y-m-d", strtotime("this $dayoftheweek -1 day"));
$thisweek0 = date("Y-m-d", strtotime("this $dayoftheweek"));
$thisweek1 = date("Y-m-d", strtotime("+1 week $dayoftheweek -1 day"));
$nextweek0 = date("Y-m-d", strtotime("+1 week $dayoftheweek"));
$nextweek1 = date("Y-m-d", strtotime("+2 week $dayoftheweek -1 day"));
}else{
$lastweek0 = date("Y-m-d", strtotime("-2 week $dayoftheweek"));
$lastweek1 = date("Y-m-d", strtotime("-1 week $dayoftheweek -1 day"));
$thisweek0 = date("Y-m-d", strtotime("-1 week $dayoftheweek"));
$thisweek1 = date("Y-m-d", strtotime("this $dayoftheweek -1 day"));
$nextweek0 = date("Y-m-d", strtotime("this $dayoftheweek"));
$nextweek1 = date("Y-m-d", strtotime("+1 week $dayoftheweek -1 day"));
}
$next7days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + 6, date("Y")));
$next15days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + 14, date("Y")));
$next30days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + 29, date("Y")));
$next60days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + 59, date("Y")));
$next90days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + 89, date("Y")));
$next120days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") + 119, date("Y")));
$last7days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 6, date("Y")));
$last15days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 14, date("Y")));
$last30days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 29, date("Y")));
$last60days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 59, date("Y")));
$last90days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 89, date("Y")));
$last120days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 119, date("Y")));
$currentFY0 = date("Y-m-d", mktime(0, 0, 0, "01", "01", date("Y")));
$currentFY1 = date("Y-m-t", mktime(0, 0, 0, "12", date("d"), date("Y")));
$lastFY0 = date("Y-m-d", mktime(0, 0, 0, "01", "01", date("Y") - 1));
$lastFY1 = date("Y-m-t", mktime(0, 0, 0, "12", date("d"), date("Y") - 1));
$nextFY0 = date("Y-m-d", mktime(0, 0, 0, "01", "01", date("Y") + 1));
$nextFY1 = date("Y-m-t", mktime(0, 0, 0, "12", date("d"), date("Y") + 1));
$todaymore_start = $today;
$todayless_end = $today;
$older1days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y")));
$older7days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 7, date("Y")));
$older15days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 15, date("Y")));
$older30days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 30, date("Y")));
$older60days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 60, date("Y")));
$older90days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 90, date("Y")));
$older120days = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 120, date("Y")));
if (date("m") <= 3) {
$cFq = date("Y-m-d", mktime(0, 0, 0, "01", "01", date("Y")));
$cFq1 = date("Y-m-d", mktime(0, 0, 0, "03", "31", date("Y")));
$nFq = date("Y-m-d", mktime(0, 0, 0, "04", "01", date("Y")));
$nFq1 = date("Y-m-d", mktime(0, 0, 0, "06", "30", date("Y")));
$pFq = date("Y-m-d", mktime(0, 0, 0, "10", "01", date("Y") - 1));
$pFq1 = date("Y-m-d", mktime(0, 0, 0, "12", "31", date("Y") - 1));
} else if (date("m") > 3 and date("m") <= 6) {
$pFq = date("Y-m-d", mktime(0, 0, 0, "01", "01", date("Y")));
$pFq1 = date("Y-m-d", mktime(0, 0, 0, "03", "31", date("Y")));
$cFq = date("Y-m-d", mktime(0, 0, 0, "04", "01", date("Y")));
$cFq1 = date("Y-m-d", mktime(0, 0, 0, "06", "30", date("Y")));
$nFq = date("Y-m-d", mktime(0, 0, 0, "07", "01", date("Y")));
$nFq1 = date("Y-m-d", mktime(0, 0, 0, "09", "30", date("Y")));
} else if (date("m") > 6 and date("m") <= 9) {
$nFq = date("Y-m-d", mktime(0, 0, 0, "10", "01", date("Y")));
$nFq1 = date("Y-m-d", mktime(0, 0, 0, "12", "31", date("Y")));
$pFq = date("Y-m-d", mktime(0, 0, 0, "04", "01", date("Y")));
$pFq1 = date("Y-m-d", mktime(0, 0, 0, "06", "30", date("Y")));
$cFq = date("Y-m-d", mktime(0, 0, 0, "07", "01", date("Y")));
$cFq1 = date("Y-m-d", mktime(0, 0, 0, "09", "30", date("Y")));
} else if (date("m") > 9 and date("m") <= 12) {
$nFq = date("Y-m-d", mktime(0, 0, 0, "01", "01", date("Y") + 1));
$nFq1 = date("Y-m-d", mktime(0, 0, 0, "03", "31", date("Y") + 1));
$pFq = date("Y-m-d", mktime(0, 0, 0, "07", "01", date("Y")));
$pFq1 = date("Y-m-d", mktime(0, 0, 0, "09", "30", date("Y")));
$cFq = date("Y-m-d", mktime(0, 0, 0, "10", "01", date("Y")));
$cFq1 = date("Y-m-d", mktime(0, 0, 0, "12", "31", date("Y")));
}
if ($type == "today") {
$datevalue[0] = $today;
$datevalue[1] = $today;
} elseif ($type == "yesterday") {
$datevalue[0] = $yesterday;
$datevalue[1] = $yesterday;
} elseif ($type == "tomorrow") {
$datevalue[0] = $tomorrow;
$datevalue[1] = $tomorrow;
} elseif ($type == "thisweek") {
$datevalue[0] = $thisweek0;
$datevalue[1] = $thisweek1;
} elseif ($type == "lastweek") {
$datevalue[0] = $lastweek0;
$datevalue[1] = $lastweek1;
} elseif ($type == "nextweek") {
$datevalue[0] = $nextweek0;
$datevalue[1] = $nextweek1;
} elseif ($type == "thismonth") {
$datevalue[0] = $currentmonth0;
$datevalue[1] = $currentmonth1;
} elseif ($type == "lastmonth") {
$datevalue[0] = $lastmonth0;
$datevalue[1] = $lastmonth1;
} elseif ($type == "nextmonth") {
$datevalue[0] = $nextmonth0;
$datevalue[1] = $nextmonth1;
} elseif ($type == "next7days") {
$datevalue[0] = $today;
$datevalue[1] = $next7days;
} elseif ($type == "next15days") {
$datevalue[0] = $today;
$datevalue[1] = $next15days;
} elseif ($type == "next30days") {
$datevalue[0] = $today;
$datevalue[1] = $next30days;
} elseif ($type == "next60days") {
$datevalue[0] = $today;
$datevalue[1] = $next60days;
} elseif ($type == "next90days") {
$datevalue[0] = $today;
$datevalue[1] = $next90days;
} elseif ($type == "next120days") {
$datevalue[0] = $today;
$datevalue[1] = $next120days;
} elseif ($type == "last7days") {
$datevalue[0] = $last7days;
$datevalue[1] = $today;
} elseif ($type == "last15days") {
$datevalue[0] = $last15days;
$datevalue[1] = $today;
} elseif ($type == "last30days") {
$datevalue[0] = $last30days;
$datevalue[1] = $today;
} elseif ($type == "last60days") {
$datevalue[0] = $last60days;
$datevalue[1] = $today;
} else if ($type == "last90days") {
$datevalue[0] = $last90days;
$datevalue[1] = $today;
} elseif ($type == "last120days") {
$datevalue[0] = $last120days;
$datevalue[1] = $today;
} elseif ($type == "thisfy") {
$datevalue[0] = $currentFY0;
$datevalue[1] = $currentFY1;
} elseif ($type == "prevfy") {
$datevalue[0] = $lastFY0;
$datevalue[1] = $lastFY1;
} elseif ($type == "nextfy") {
$datevalue[0] = $nextFY0;
$datevalue[1] = $nextFY1;
} elseif ($type == "nextfq") {
$datevalue[0] = $nFq;
$datevalue[1] = $nFq1;
} elseif ($type == "prevfq") {
$datevalue[0] = $pFq;
$datevalue[1] = $pFq1;
} elseif ($type == "thisfq") {
$datevalue[0] = $cFq;
$datevalue[1] = $cFq1;
} else if ($type == "todaymore") {
$datevalue[0] = $todaymore_start;
$datevalue[1] = "";
} else if ($type == "todayless") {
$datevalue[0] = $todayless_end;
$datevalue[1] = "";
} else if ($type == "older1days") {
$datevalue[0] = $older1days;
$datevalue[1] = "";
} else if ($type == "older7days") {
$datevalue[0] = $older7days;
$datevalue[1] = "";
} else if ($type == "older15days") {
$datevalue[0] = $older15days;
$datevalue[1] = "";
} else if ($type == "older30days") {
$datevalue[0] = $older30days;
$datevalue[1] = "";
} else if ($type == "older60days") {
$datevalue[0] = $older60days;
$datevalue[1] = "";
} else if ($type == "older90days") {
$datevalue[0] = $older90days;
$datevalue[1] = "";
} else if ($type == "older120days") {
$datevalue[0] = $older120days;
$datevalue[1] = "";
} else {
$datevalue[0] = "";
$datevalue[1] = "";
}
if($getDBFormat===true){
if($datevalue[0]!=""){
$datevalue[0] = GenerateObj::getDBDateFormat($datevalue[0]);
}
if($datevalue[1]!=""){
$datevalue[1] = GenerateObj::getDBDateFormat($datevalue[1]);
}
}
return $datevalue;
}
// ITS4YOU-CR SlOl | 23.7.2014 9:22
public function getStdComparator($comparator, $value, $datatype = "") {
$return = "";
global $default_charset;
$value = str_replace('undefined', '', $value);
if(in_array($comparator, ITS4YouReports::$dateNcomparators)){
$date_array = self::getDateNDaysInterval($comparator,$value);
} elseif ('custom' !== $comparator
&& !in_array($comparator, ['a', 'b'])
) {
$date_array = GenerateObj::getStandarFiltersStartAndEndDate($comparator,true);
} else {
$date_array = explode("<;@STDV@;>", html_entity_decode($value, ENT_QUOTES, $default_charset));
if (ITS4YouReports_Functions_Helper::count($date_array) < 2) {
$date_array = explode('&lt;;@STDV@;&gt;', html_entity_decode($value, ENT_QUOTES, $default_charset));
}
}
$s_date = $date_array[0];
$e_date = $date_array[1];
if ('DT' === $datatype) {
if ('--' !== $date_array[0]) {
$dateTime1 = new DateTime($date_array[0] . ' ' . '00:00:00');
switch ($comparator) {
case 'lastNdays':
$dateTime1->modify('-1 days');
break;
case 'todaymore':
$dateTime1->modify('+1 days');
break;
}
$date1 = $dateTime1->format('Y-m-d H:i:s');
}
if ('--' !== $date_array[1]) {
$dateTime2 = new DateTime($date_array[1] . ' ' . '00:00:00');
switch ($comparator) {
case 'today':
case 'yesterday':
case 'tomorrow':
case 'nextNdays':
case 'daysmore':
case 'daysago':
case 'custom':
case 'lastmonth':
$dateTime2->modify('+1 days');
break;
}
$date2 = $dateTime2->format('Y-m-d H:i:s');
$tempDate = strtotime($date2) - 1;
$date2 = date('Y-m-d H:i:s', $tempDate);
}
if (!empty($date1)) {
$s_date = getValidDBInsertDateTimeValue($date1);
}
if (!empty($date2)) {
$e_date = getValidDBInsertDateTimeValue($date2);
}
}
switch ($comparator) {
// ITS4YOU-CR SlOl 20. 11. 2015 14:41:09
case 'a':
$return = " > '$s_date' ";
break;
case 'b':
$return = " < '$s_date' ";
break;
case "olderNdays":
$return = " < '$e_date' ";
break;
case "lastNdays":
$return = " BETWEEN '$s_date' AND '$e_date' ";
break;
case "nextNdays":
$return = " BETWEEN '$s_date' AND '$e_date' ";
break;
case "moreNdays":
$return = " > '$s_date' ";
break;
case "daysago":
if ('DT' === $datatype) {
$return = " BETWEEN '$s_date' AND '$e_date' ";
} else {
$return = " = '$s_date' ";
}
break;
case "daysmore":
if ('DT' === $datatype) {
$return = " BETWEEN '$s_date' AND '$e_date' ";
} else {
$return = " = '$s_date' ";
}
break;
// ITS4YOU-END
case "today":
case "yesterday":
case "tomorrow":
if ('DT' === $datatype) {
$return = " BETWEEN '$s_date' AND '$e_date' ";
} else {
$return = " = '$s_date' ";
}
break;
case "thisweek":
case "lastweek":
case "nextweek":
case "thismonth":
case "lastmonth":
case "nextmonth":
case "next7days":
case "next15days":
case "next30days":
case "next60days":
case "next90days":
case "next120days":
case "last7days":
case "last15days":
case "last30days":
case "last60days":
case "last90days":
case "last120days":
case "thisfy":
case "prevfy":
case "nextfy":
case "nextfq":
case "prevfq":
case "thisfq":
$return = " BETWEEN '$s_date' AND '$e_date' ";
break;
case "todaymore":
$return = " > '$s_date' ";
break;
case "todayless":
case "older1days":
case "older7days":
case "older15days":
case "older30days":
case "older60days":
case "older90days":
case "older120days":
case "todayless":
$return = " < '$s_date' ";
break;
// ITS4YOU-CR SlOl 9. 6. 2016 6:27:54
case "af":
if ('DT' === $datatype) {
$return = " BETWEEN '$s_date' AND '$e_date' ";
} else {
$return = " = DATE($value) ";
}
break;
case "nf":
if ('DT' === $datatype) {
$return = " BETWEEN '$s_date' AND '$e_date' ";
} else {
$return = " != DATE($value) ";
}
break;
case "lf":
if ('DT' === $datatype) {
$return = " < DATE($e_date) ";
} else {
$return = " < DATE($value) ";
}
break;
case "gf":
if ('DT' === $datatype) {
$return = " > DATE($s_date) ";
} else {
$return = " > DATE($value) ";
}
break;
case "mf":
if ('DT' === $datatype) {
$return = " <= DATE($e_date) ";
} else {
$return = " <= DATE($value) ";
}
break;
case "hf":
if ('DT' === $datatype) {
$return = " >= DATE($s_date) ";
} else {
$return = " >= DATE($value) ";
}
break;
// ITS4YOU-END
default :
$currentUser = Users_Record_Model::getCurrentUserModel();
$js_cal_dateformat = $currentUser->get('date_format');
$reg_expr_dot = '/\./';
if (preg_match_all($reg_expr_dot, $s_date) != false) {
$sd_arr = explode(".", $s_date);
} else {
$sd_arr = explode("-", $s_date);
}
if(strlen($sd_arr[0])==2){
if ($s_date != "") {
$s_date = DateTimeField::__convertToDBFormat(trim($s_date), $js_cal_dateformat);
}
if ($e_date != "") {
$e_date = DateTimeField::__convertToDBFormat(trim($e_date), $js_cal_dateformat);
}
}
if ($s_date != "" && $e_date != "") {
$return = " BETWEEN '$s_date' AND '$e_date' ";
} elseif ($s_date != "") {
$return = " = '$s_date' ";
} elseif ($e_date != "") {
$return = " = '$e_date' ";
} else {
$return = "";
}
break;
}
return $return;
}
/** Function to get advanced comparator in query form for the given Comparator and value
* @ param $comparator : Type String
* @ param $value : Type String
* returns the check query for the comparator
*/
function getAdvComparator($comparator, $value, $datatype = "") {
$adb = PEARDatabase::getInstance();
global $default_charset;
$value = html_entity_decode(trim($value), ENT_QUOTES, $default_charset);
$value_len = strlen($value);
$is_field = false;
if($this->is_hdn_fval==true){
$is_field = true;
}
if ($datatype == 'C') {
$value = str_replace("yes", "1", str_replace("no", "0", $value));
}
if ($comparator == "e") {
if($this->is_hdn_fval==true){
$rtvalue = " = $value";
}elseif (trim($value) == "NULL") {
$rtvalue = " is NULL";
} elseif (trim($value) != "") {
$rtvalue = " = " . $adb->quote($value);
} elseif (trim($value) == "" && $datatype == "V") {
$rtvalue = " = " . $adb->quote($value);
} else {
$rtvalue = " is NULL";
}
}
if ($comparator == "n") {
if($this->is_hdn_fval==true){
$rtvalue = " != $value";
}elseif (trim($value) == "NULL") {
$rtvalue = " is NOT NULL";
} elseif (trim($value) != "") {
$rtvalue = " <> " . $adb->quote($value);
} elseif (trim($value) == "" && $datatype == "V") {
$rtvalue = " <> " . $adb->quote($value);
} else {
$rtvalue = " is NOT NULL";
}
}
if ($comparator == "s") {
$rtvalue = " like '" . formatForSqlLike($value, 2, $is_field) . "'";
}
if ($comparator == "ew") {
$rtvalue = " like '" . formatForSqlLike($value, 1, $is_field) . "'";
}
if ($comparator == "c") {
$rtvalue = " like '" . formatForSqlLike($value, 0, $is_field) . "'";
}
if ($comparator == "k") {
$rtvalue = " not like '" . formatForSqlLike($value, 0, $is_field) . "'";
}
if ($comparator == "l") {
$rtvalue = " < " . $adb->quote($value);
}
if ($comparator == "g") {
$rtvalue = " > " . $adb->quote($value);
}
if ($comparator == "m") {
$rtvalue = " <= " . $adb->quote($value);
}
if ($comparator == "h") {
$rtvalue = " >= " . $adb->quote($value);
}
if ($comparator == "b") {
$rtvalue = " < " . $adb->quote($value);
}
if ($comparator == "a") {
$rtvalue = " > " . $adb->quote($value);
}
if ($comparator == "custom" && false !== strpos($value, '<;@STDV@;>')) {
$rtvalue = $this->getStdComparator($comparator, $value, $datatype);
}
if ($is_field == true) {
$rtvalue = str_replace("'", "", $rtvalue);
$rtvalue = str_replace("\\", "", $rtvalue);
}
return $rtvalue;
}
/* from reportrun obj start */
/** Function to convert the Report Header Names into i18n
* @param $fldname: Type Varchar
* Returns Language Converted Header Strings
* */
function getLstringforReportHeaders($fldname) {
global $modules, $current_language, $current_user, $app_strings;
$rep_header = ltrim($fldname);
$rep_header = decode_html($rep_header);
$labelInfo = explode('_', $rep_header);
$rep_module = $labelInfo[0];
if (is_array($this->labelMapping) && !empty($this->labelMapping[$rep_header])) {
$rep_header = $this->labelMapping[$rep_header];
} else {
if ($rep_module == 'LBL') {
$rep_module = '';
}
array_shift($labelInfo);
$fieldLabel = decode_html(implode("_", $labelInfo));
$rep_header_temp = preg_replace("/\s+/", "_", $fieldLabel);
$rep_header = "$rep_module $fieldLabel";
}
$curr_symb = "";
$fieldLabel = ltrim(str_replace($rep_module, '', $rep_header), '_');
$fieldInfo = getITSFieldByReportLabel($rep_module, $fieldLabel);
if ($fieldInfo['uitype'] == '71' || $fieldInfo['uitype'] == '712') {
$curr_symb = " (" . $app_strings['LBL_IN'] . " " . $current_user->currency_symbol . ")";
}
$rep_header .=$curr_symb;
return $rep_header;
}
/* from reportrun obj end */
// ITS4YOU-CR SlOl 13. 3. 2014 13:38:39
public static function getHeaderLabel($reportid, $type, $fldname, $column_str)
{
$headerLabel = '';
global $default_charset;
if (!empty($column_str) && !empty($reportid)) {
// ITS4YOU-CR SlOl 29. 7. 2016 6:12:04
if ('crmid_COUNT' === $fldname) {
$explode_col_str_arr = explode(':', $column_str);
$lbl_col_str = explode('_', $explode_col_str_arr[2]);
$explode_col_str_arr[2] = $lbl_col_str[0] . '_LBL_RECORDS';
$column_str = implode(':', $explode_col_str_arr);
}
// ITS4YOU-END
$columnName = html_entity_decode($column_str, ENT_QUOTES, $default_charset);
if (empty($_SESSION['r4u_labels'][$reportid][$type]) || !array_key_exists($columnName, $_SESSION['r4u_labels'][$reportid][$type])) {
$adb = PEARDatabase::getInstance();
$labelsql = 'SELECT columnlabel
FROM its4you_reports4you_labels
WHERE reportid = ?
AND type = ?
AND columnname=?';
$labelres = $adb->pquery($labelsql, [$reportid, $type, $columnName]);
$numlabels = $adb->num_rows($labelres);
if ($numlabels) {
while ($row = $adb->fetchByAssoc($labelres)) {
$headerLabel = $row['columnlabel'];
}
} else {
$headerLabel = ITS4YouReports::getColumnStr_Label($column_str, $type);
}
$_SESSION['r4u_labels'][$reportid][$type][$columnName] = $headerLabel;
} else {
$headerLabel = $_SESSION['r4u_labels'][$reportid][$type][$columnName];
}
}
return $headerLabel;
}
// Performance Optimization: Added parameter directOutput to avoid building big-string!
public function GenerateReport($reportid, $outputformat = 'HTML', $directOutput = false) {
global $current_user, $php_max_execution_time, $currentModule;
global $modules, $app_strings, $default_charset, $is_admin, $profileGlobalPermission;
global $mod_strings, $current_language;
$adb = PEARDatabase::getInstance();
$layout = Vtiger_Viewer::getDefaultLayoutName();
$request = new Vtiger_Request($_REQUEST, $_REQUEST);
$this->setPdfFileName();
$valtemplate = '';
$report_html_chart = '';
$export_pdf_format = '';
$group_totals = [];
$grouping_totals_key = '';
$currency_string = '';
$picklistArray = [];
$group_cols = [];
if($this->r_permitted) {
// CUSTOM REPORT START
if($this->reports4you_type==="custom_report"){
$sSQL = $this->tf_sql;
if (false !== strpos(strtolower($sSQL), 'create temporary')
|| false !== strpos($sSQL, 'SET @')) {
$sSQLArray = explode(';',trim($sSQL, ';'));
foreach ($sSQLArray as $qi => $sQuery) {
if (empty(trim($sQuery))) {
continue;
}
if (false !== strpos(strtolower($sQuery), 'create temporary')
|| false !== strpos($sQuery, 'SET @')) {
$adb->query($sQuery);
} else {
$sSQL = $sQuery;
}
}
}
//$adb->setDebug(true);
$result = $adb->query($sSQL);
//$adb->setDebug(false);
$f_error = "";
/* * * ERROR MESSAGE FOR ITS4YOU START ** */
if (!$result) {
$f_error = $this->getSqlError();
}
if ($f_error != "") {
$this->displaySqlError($adb,$f_error);
}
/* * * ERROR MESSAGE FOR ITS4YOU END ** */
$header_style = " style='" . $this->header_style . "' ";
$set_pdf_portrait = false;
$header_populated = false;
$header_array = array();
$report_html = $valtemplate_tr = "";
if ('HTML' === $outputformat) {
//$report_html .= $this->getReportNameHTML();
if ('v7' === $layout) {
$tableClass = 'table table-bordered';
} else {
$tableClass = 'rpt4youTableContent';
}
$report_html .= '<div id="rpt4youTable" ><table cellpadding="5" cellspacing="0" align="center" class="'.$tableClass.'" border="1" style="width:auto;border-collapse: collapse;" >';
}
$noofrows = $adb->num_rows($result);
if (!empty($this->schedule_skip_empty) && empty($noofrows)) {
$this->schedule_skipped = true;
return [];
}
$xls_i = 0;
while ($report_data_row = $adb->fetchByAssoc($result)) {
if($outputformat=="XLS"){
$row_data = array();
foreach($report_data_row as $columnName => $columnValue){
if (false !== strpos($columnName, self::$customSqlHrefColumn)
|| false !== strpos($columnName, self::$customSqlCurrencyColumn)
) {
continue;
}
if($header_populated!==true){
$header_array[$xls_i] = str_replace('_', ' ', $columnName);
$xls_i++;
}
$row_data[] = $columnValue;
}
$header_populated = true;
$data[] = $row_data;
//ITs4YouReports::sshow($header_array);
//ITs4YouReports::sshow($data);
}else{
$valtemplate_tr = '<tr>';
self::$customSqlColumns = [
'href' => [],
'currency' => [],
];
foreach ($report_data_row as $columnName => $columnValue) {
if (false !== strpos($columnName, self::$customSqlHrefColumn)
|| false !== strpos($columnName, self::$customSqlCurrencyColumn)
) {
$trimColumn = ltrim($columnName, self::$customSqlHrefColumn);
if (!in_array($trimColumn, self::$customSqlColumns['href'])) {
self::$customSqlColumns['href'][$trimColumn] = $columnValue;
}
$trimColumn = ltrim($columnName, self::$customSqlCurrencyColumn);
if (!in_array($trimColumn, self::$customSqlColumns['currency'])) {
self::$customSqlColumns['currency'][$trimColumn] = $columnValue;
}
continue;
}
if (!$header_populated) {
$header_array[$columnName] = str_replace('_', ' ', $columnName);
}
$isNumeric = is_numeric($columnValue);
$valtemplate_tr .= "<td class='rpt4youGrpHead' style='" .
($isNumeric ? 'text-align:right;' : '')
. "' nowrap >";
if (!empty(self::$customSqlColumns['href'][$columnName])) {
$valtemplate_tr .= sprintf(
'<a href="index.php?module=%s&view=Detail&record=%s" target="_blank">',
getSalesEntityType(self::$customSqlColumns['href'][$columnName]),
self::$customSqlColumns['href'][$columnName]
);
}
if ($isNumeric) {
$valtemplate_tr .= $this->formatFldNumberValue($columnValue, self::$customSqlColumns['currency']);
} else {
$valtemplate_tr .= $columnValue;
}
if (!empty(self::$customSqlColumns[$columnName])) {
$valtemplate_tr .= '</a>';
}
$valtemplate_tr .= '</td>';
}
$valtemplate_tr .= '</tr>';
if (!$header_populated) {
$report_html .= '<tr>';
if(ITS4YouReports_Functions_Helper::count($header_array)>self::$custom_report_portrait_from){
$set_pdf_portrait = true;
}
foreach($header_array as $headerLabel){
$report_html .= "<td class='rpt4youCellLabel' $header_style nowrap >" . $headerLabel . "</td>";
}
$report_html .= '</tr>';
$header_populated = true;
}
$report_html .= $valtemplate_tr;
}
}
if($outputformat=="HTML"){
$report_html .= '</table></div>';
}
//exit;
if($outputformat=="HTML"){
$this->setReportFileInfo($set_pdf_portrait);
$request = new Vtiger_Request($_REQUEST, $_REQUEST);
if(self::showScripts($request) && 'tabular' !== $this->reports4you_type){
$this->setNoOfRows($noofrows);
}
}
//echo $report_html;
if($outputformat=="XLS"){
$return_data["headers"] = $header_array;
$return_data["data"] = $data;
return $return_data;
}else{
//$this->create_pdf_schedule = true;
if($this->create_pdf_schedule){
$this->createPDFFileForScheduler($report_html,'',$set_pdf_portrait);
}
if ($directOutput) {
echo $report_html;
} else {
$return_data[] = $report_html;
$return_data[] = $noofrows;
$return_data[] = $sSQL;
return $return_data;
}
}
// CUSTOM REPORT END
} else {
// OTHER REPORTS START
if($this->time_debug===true){
$this->report_obj->define_rt_vars(false,true);
}
$this->outputformat = $outputformat;
$this->to_totals_res = array();
$user_privileges_path = 'user_privileges/user_privileges_' . $current_user->id . '.php';
if (file_exists($user_privileges_path)) {
require($user_privileges_path);
}
$modules_selected = array();
// $ITS4YouReports = new ITS4YouReports($reportid);
$modules_selected[] = $this->report_obj->primarymodule;
if (!empty($this->report_obj->relatedmodulesarray)) {
foreach ($modules_selected as $key => $modulestr) {
$modulearr = explode("x", $modulestr);
$secmodule = vtlib_getModuleNameById($modulearr[0]);
if (vtlib_isModuleActive($secmodule)) {
$modules_selected[] = $secmodule;
}
}
}
// Update Currency Field list
$currencyfieldres = $adb->pquery("SELECT tabid, fieldid, columnname, fieldlabel, uitype from vtiger_field WHERE uitype in (71,72,712,10)", array());
if ($currencyfieldres) {
foreach ($currencyfieldres as $currencyfieldrow) {
$modprefixedlabel = getTabModuleName($currencyfieldrow['tabid']) . ' ' . $currencyfieldrow['fieldlabel'];
$modprefixedlabel = str_replace(' ', '_', $modprefixedlabel);
if ($currencyfieldrow['uitype'] != 10) {
//if (!in_array($modprefixedlabel, $this->convert_currency) && !in_array($modprefixedlabel, $this->append_currency_symbol_to_value)) {
$this->convert_currency[] = $modprefixedlabel;
//}
} else {
if (!in_array($modprefixedlabel, $this->ui10_fields)) {
$mod_key = $currencyfieldrow["columnname"] . "_fid_" . $currencyfieldrow["fieldid"];
$this->ui10_fields[$mod_key] = $modprefixedlabel;
}
}
}
}
// ITS4YOU-CR SlOl 7. 4. 2016 14:19:21 schedule_all_records
if((bool)$this->schedule_all_records){
$schedule_all_sql_array = explode(" LIMIT ", $this->tf_sql);
if(ITS4YouReports_Functions_Helper::count($schedule_all_sql_array)>1){
$this->tf_sql = $schedule_all_sql_array[0];
}
}
if (in_array($outputformat, array("HTML", "XLS"))) {
if ( 'ITS4YouReports' === $request->get('module') ) {
$quickFiltersHtml = $this->getQuickFiltersHtml();
}
if($this->userQuickFilterQuery) {
$sSQL = $this->tf_qf_sql;
} else {
$sSQL = $this->tf_sql;
}
} else {
$sSQL = $this->tf_sql;
}
// ITS4YOU-END
if($outputformat==="KEYMETRICS") {
$return_value = "";
$calculation = $this->key_metrics_calculation_type;
if($this->key_metrics_calculation_type=="COUNT"){
$fld_cond = "vtiger_crmentity.crmid";
$fld_alias = $this->key_metrics_alias;
}else{
if(isset($this->columns_array[$this->key_metrics_columns_str]) && !empty($this->columns_array[$this->key_metrics_columns_str])){
$fld_cond = $this->columns_array[$this->key_metrics_columns_str]["fld_cond"];
$fld_alias = $this->columns_array[$this->key_metrics_columns_str]["fld_alias"];
$fld_ui_type = $this->columns_array["uitype_$fld_alias"];
}
}
// ITS4YOU-CR SlOl 20. 1. 2016 9:03:58
$group_by_currency_sql = "";
if ($calculation!="COUNT" && ITS4YouReports::isInventoryModule($this->report_obj->primarymodule)===true) {
$primary_focus = CRMEntity::getInstance($this->report_obj->primarymodule);
$group_by_currency_sql = $this->getCurrencyFieldSql($primary_focus->table_name);
}
// ITS4YOU-END
$key_metrics_query = " SELECT $calculation($fld_cond) AS $fld_alias $group_by_currency_sql FROM ";
$sSql_Arr = explode("FROM ",$sSQL);
if(isset($sSql_Arr[1]) && $sSql_Arr[1]!=""){
if ($calculation!="COUNT" && ITS4YouReports::isInventoryModule($this->report_obj->primarymodule)===true) {
if(isset($this->report_obj->reportinformations["SortByColumn"]) && $this->report_obj->reportinformations["SortByColumn"]!=""){
$groupbyquery = " GROUP BY ".trim($group_by_currency_sql,",");
$sSql_Arr_1 = explode("ORDER BY ",$sSql_Arr[1]);
$sSql_Arr[1] = $sSql_Arr_1[0]." $groupbyquery ORDER BY ".$sSql_Arr_1[1];
}
}
$sSQL = $key_metrics_query.$sSql_Arr[1];
$result = $adb->query($sSQL);
if ($adb->num_rows($result) > 0) {
$this->key_metrics_rows = ($adb->num_rows($result)+1);
while ($row = $adb->fetch_array($result)) {
$currency_id = "";
if(isset($row["currency_id"]) && $row["currency_id"]!=""){
$currency_id = $row["currency_id"];
}
if($fld_ui_type!=""){
$return_value .= "<div style='width:100%;text-align:right;'>".$this->getFldFormatedValue($fld_ui_type, $row[$fld_alias], $fld_alias, "", $currency_id, false)."</div>";
}else{
$return_value = $this->getFldFormatedValue($fld_ui_type, $row[$fld_alias], $fld_alias, "", $currency_id, false);
}
}
}
}
return $return_value;
}
$this->sum_col_i = 0;
$selectedcolumns_arr = $this->report_obj->getSelectedColumnListArray($this->report_obj->record);
// GROUPING SQL START
//if (!empty($this->groupslist) && !empty($this->report_obj->reportinformations["summaries_columns"])) {
if (!empty($this->groupslist)) {
if (!empty($this->report_obj->reportinformations["summaries_columns"])) {
foreach ($this->report_obj->reportinformations["summaries_columns"] as $key => $summaries_columns_arr) {
$column_arr = explode(":", $summaries_columns_arr["columnname"]);
$imploded = "";
if (is_numeric($column_arr[5]) || in_array($column_arr[5], ITS4YouReports::$customRelationTypes)) {
$ci_n = 6;
} else {
$ci_n = 5;
}
for ($ci = 0; $ci < $ci_n; $ci++) {
if ($ci > 0) {
$imploded .= ":";
}
$imploded .= $column_arr[$ci];
}
$c_calculation_type = $column_arr[$ci_n];
$sum_col_sql_a[$imploded][] = $c_calculation_type;
//if (in_array($c_calculation_type, self::$summaryAmountColumns)) {
$this->sum_col_i++;
//}
}
$this->sum_col_sql_a = $sum_col_sql_a;
}
if ($this->report_obj->reportinformations["Group1"] != "none" && !empty($selectedcolumns_arr) && $this->generate_type != "grouping") {
$this->detail_columns_array = $this->columns_array;
$this->detail_sql = $sSQL;
// $this->setResultArray($sSQL);
}
if (!empty($this->report_obj->reportinformations["summaries_columns"]) || $this->report_obj->reportinformations["Group1"] != "none") {
$group_columns_array = $this->group_column_alias;
$this->generateQuery($this->report_obj, "", "grouping");
$sSQL = $this->tf_sql;
}
}
// GROUPING SQL END
/* ARRAY FOR TOTALS CALCULATION START */
// $to_totals_array = $this->getToTotalsArray();
$this->to_totals_array = $this->getToTotalsArray();
if($this->time_debug===true){
$this->report_obj->getR4UDifTime("After Query Generate",true);
}
/* ARRAY FOR TOTALS CALCULATION END */
// !!! BASE PRIMARY DEBUG !!!
/*
if ('78.99.157.226'===$_SERVER['REMOTE_ADDR']) {
ITS4YouReports::sshow($this->generate_type);
$adb->setDebug(true);
}
*/
// self::displaySqlFormattedQuery($sSQL);
$result = $adb->query($sSQL);
/*
if ('78.99.157.226'===$_SERVER['REMOTE_ADDR']) {
$adb->setDebug(false);
}
*/
if($this->time_debug===true){
$this->report_obj->getR4UDifTime("After Base Result",true);
}
if (!empty($_REQUEST['sq'])) {
self::displaySqlFormattedQuery($sSQL);
}
$f_error = "";
if (!$result) {
$f_error = $this->getSqlError();
}
/* * * ERROR MESSAGE FOR ITS4YOU START ** */
if ($f_error != "") {
$this->displaySqlError($adb,$f_error);
}
// $adb->setDebug(false);
/*$error_msg = $adb->database->ErrorMsg();
if (!$result && $error_msg != '') {
// Performance Optimization: If direct output is requried
if ($directOutput) {
$report_html .= getTranslatedString('LBL_REPORT_GENERATION_FAILED', $this->getCurrentModule4You()) . "<br>" . $error_msg;
$error_msg = false;
echo $report_html;
}
// END
return $error_msg;
}*/
$this->setUpGroupColsArray();
if ($this->generate_type == "grouping") {
for ($mi = 1; $mi < 4; $mi++) {
if ($mi > 1 && isset($this->group_cols_array[$mi]) && $this->group_cols_array[$mi] != "") {
$group_cols[] = $this->group_cols_array[$mi];
}
}
}
$noofrows = $adb->num_rows($result);
if (!empty($this->schedule_skip_empty) && empty($noofrows)) {
$this->schedule_skipped = true;
return [];
}
/** set Total Count for Reports */
if ($this->isSupportedPagination()) {
$this->setTotalCount($sSQL);
$this->calculateRange();
}
if($this->time_debug===true){
$this->report_obj->getR4UDifTime("Going to Generate HTML",true);
}
if ($outputformat == "HTML" || $outputformat == "CHARTS") {
$report_html_pdf = $report_html = '';
if(!empty($this->report_obj->reportinformations['quick_filters'])) {
$report_html .= $quickFiltersHtml;
}
if($layout !== "v7" && 'HTML' === $outputformat && isset($_REQUEST['view']) ) {
$report_html .= '<div class="padding1per textAlignCenter" style="text-align: center;"><button class="btn generateReport" data-mode="generate" value="' . vtranslate("LBL_GENERATE_NOW", $currentModule) . '"/><strong>' . vtranslate("LBL_GENERATE_NOW", $currentModule) . '</strong></button></div>';
}
// if($layout !== "v7") {
// $report_html .= $return_name= $this->getReportNameHTML();
// }
if(isset($this->report_obj->reportinformations["description"]) && $this->report_obj->reportinformations["description"]!=""){
$report_html .= "
<table cellpadding='5' cellspacing='0' id='reportHederInfoDesc' align='left' class='rpt4youTable hide' border='0' style='border:0px;width:100%;' >
<tr>
<td class='rpt4youGrpHeadInfo' style='padding-left:15px;font-size:14px;text-align:center;'>
".nl2br($this->report_obj->reportinformations["description"])."
</td>
</tr>
</table>";
}
if ('HTML' === $outputformat && !self::isGetReportsHtml()) {
if (!empty($this->report_obj->reportinformations['charts']) && 'top' === $this->report_obj->reportinformations['charts'][1]['chart_position']) {
$this->chartPosition = $this->report_obj->reportinformations['charts'][1]['chart_position'] . '_';
$report_html .= $this->addHighChartDiv($this->report_obj->reportinformations['charts'][1]['chart_position']);
}
}
if($layout == "v7" && $outputformat !== "CHARTS" && !$this->create_pdf_schedule && self::showScripts($request)){
$report_html .= '
<div class="no-print">
<button class="btn btn-default no-print" name="header_info_block" id="header_info_block" >
<strong>'.vtranslate('LBL_HEADER_INFO_BLOCK', $currentModule).'</strong>&nbsp;&nbsp;
<i class="fa fa-chevron-right"></i>
</button>
</div>
';
}
$reportHeaderInfoClass = '';
if($layout === "v7") {
$reportHeaderInfoClass = 'hide';
}
if (!$this->create_pdf_schedule && self::showScripts($request)) {
$report_html .= "<div id='reportHederInfo' class='$reportHeaderInfoClass' style='padding-top:1em;padding-bottom:1em;'><@ReportHeaderInfo@></div>";
}
$this->report_html_headerInfo = $this->report_obj->getReportHeaderInfo($noofrows,true);
$dataAreaClass = '';
if ('v7' === $layout && !self::isGetReportsHtml()) {
if (!empty($this->report_obj->reportinformations['charts']) && 1 === (int) $this->report_obj->reportinformations['charts'][1]['collapse_data_block']) {
$dataIconClass = 'fa-chevron-right';
$dataAreaClass = 'hide';
} else {
$dataIconClass = 'fa-chevron-down';
}
if(!$this->create_pdf_schedule && self::showScripts($request)) {
$report_html .= '
<div class="no-print" style="padding-top: 1em;">
<button class="btn btn-default no-print" name="data_info_block" id="data_info_block" >
<strong>'.vtranslate('LBL_DATA_INFO_BLOCK', $currentModule).'</strong>&nbsp;&nbsp;
<i class="fa '.$dataIconClass.'"></i>
</button>
</div>';
}
}
if ('PRINT' !== $outputformat && $this->isSupportedPagination() && self::showScripts($request)) {
$report_html .= $this->getResultPagination();
}
$report_html .= '<div id="rpt4youTable" class="'.$dataAreaClass.'">';
$layout = Vtiger_Viewer::getDefaultLayoutName();
if($layout == "v7"){
$resultTableClass = 'table table-bordered';
} else {
$resultTableClass = 'rpt4youTableContent';
}
$report_html .= '<table cellpadding="5" cellspacing="0" align="center" class="' . $resultTableClass . '" border="1" style="' . (self::isGetReportsHtml()?'width:auto;':'') . 'border-collapse: collapse;" ><tr>';
// END
if ($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1) {
$picklistArray = $this->getAccessPickListValues();
}
if ($result) {
$y = ($adb->num_fields($result) - 1);
$t_y = $y;
$custom_field_values = $adb->fetch_array($result);
$column_definitions = $adb->getFieldsDefinition($result);
// HEADERS
if (($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") || ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols")) {
if ($this->report_obj->reportinformations["Group3"] && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$agi = 2;
foreach ($this->sum_col_sql_a as $column_str => $calculation_arr) {
foreach ($calculation_arr as $calculation_type) {
// $calculation_type = $calculation_arr[0];
$label_db_key = "$column_str:$calculation_type";
if ($this->report_obj->in_multiarray($label_db_key, $this->summaries_columns, "columnname") !== true) {
continue;
}
$fld_sql_str_array = explode(" AS ", $this->columns_array[$column_str]["fld_sql_str"]);
$fld_str = $fld_sql_str_array[0];
$fld_str_as = $fld_sql_str_array[1] . "_$calculation_type";
$g_data_key_lbl = self::getHeaderLabel($this->report_obj->record, "SM", $fld_str_as, $label_db_key);
$sum_columns_bg = $this->g_colors[1];
$sum_columns_labels[] = array("style" => " background-color:$sum_columns_bg;font-weight:bold; ", "label" => $g_data_key_lbl);
}
}
} else {
$agi = 1;
}
for ($x = 0; $x < 1; $x++) {
$fld = $adb->field_name($result, $x);
$is_hid = strpos($fld->name, "_hid");
if ($is_hid === false && !in_array($fld->name, $this->skip_fields)) {
if (!in_array($fld->name, $group_cols)) {
$header_style = "";
$header_style .= " style='" . $this->header_style . "' ";
//$header[] = array("style" => $header_style, "label" => "&nbsp;",);
$GroupsHeaderLabel = $this->getGroupsHeaderLabelStr();
$header[] = array("style" => $header_style, "label" => $GroupsHeaderLabel,);
$headercols = $this->getColsHeaders($header_style, $agi);
foreach ($headercols as $header_arr) {
$header[] = $header_arr;
$group2_headers[] = $sum_columns_labels;
//$group2_headers[$header_arr["label"]] = $sum_columns_labels;
}
}
}
// END
}
} else {
$crm_id_count_done = false;
for ($x = 0; $x <= $y; $x++) {
$fld = $adb->field_name($result, $x);
$is_hid = strpos($fld->name, "_hid");
$clear_fld_name_arr = explode("_", $fld->name);
$clear_fld_calculation_type = strtoupper($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
unset($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
$clear_fld_name = implode("_", $clear_fld_name_arr);
if ($clear_fld_calculation_type!="COUNT" && (in_array($fld->name, $this->skip_fields) || in_array($clear_fld_name, $this->skip_fields))) {
continue;
}
if (!empty($selectedcolumns_arr) && in_array($fld->name, $this->g_flds) && isset($this->columns_array[$fld->name]) && $this->columns_array[$fld->name] != "") {
if ($x == 0 && !$this->report_obj->in_multiarray($this->columns_array[$fld->name], $selectedcolumns_arr, "fieldcolname") && $this->generate_type != "grouping") {
$group_value = $custom_field_values[$fld->name];
continue;
}
}
// ITS4YOU-CR SlOl 4. 7. 2016 13:00:53 - MISSING COUNT COLUMN IN RESULT
if($crm_id_count_done!=true && $clear_fld_name=="crmid" && $x > 0 && $this->generate_type == "grouping" && $this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type"!=""){
$explode_col_str_arr = explode(":", $this->columns_array[$clear_fld_name]);
$lbl_col_str = explode("_",$explode_col_str_arr[2]);
$explode_col_str_arr[2] = $lbl_col_str[0]."_LBL_RECORDS";
$check_col_str = implode(":", $explode_col_str_arr);
if($this->report_obj->in_multiarray($check_col_str . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true){
continue;
}
$crm_id_count_done = true;
}elseif ($x > 0 && $this->generate_type == "grouping" && $this->report_obj->in_multiarray($this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true) {
continue;
}
if ($is_hid === false && !in_array($fld->name, $this->skip_fields) && !in_array($clear_fld_name, $this->skip_fields)) {
if (!in_array($fld->name, $group_cols)) {
// ITS4YOU-CR SlOl 13. 3. 2014 13:37:11
if ($this->generate_type == "grouping") {
$summaries_fld_test = explode("_", $fld->name);
$smft_lk = ITS4YouReports_Functions_Helper::count($summaries_fld_test) - 1;
if (in_array(strtolower($summaries_fld_test[$smft_lk]), $this->calculation_type_array)) {
$calculation_type = $summaries_fld_test[$smft_lk];
$fld_name = "";
for ($index = 0; $index < (ITS4YouReports_Functions_Helper::count($summaries_fld_test)); $index++) {
if ($fld_name != "") {
$fld_name .= "_";
}
$fld_name .= $summaries_fld_test[$index];
}
} else {
$fld_name = $fld->name;
}
} else {
$fld_name = $fld->name;
}
$s_type = "SC";
if ($this->generate_type == "grouping" && isset($this->sm_columns_array) && !empty($this->sm_columns_array) && array_key_exists($fld_name, $this->sm_columns_array)) {
$s_type = "SM";
$columns_array_lbl = $this->sm_columns_array[$fld_name] . ":$calculation_type";
} elseif (array_key_exists($fld->table . '.' . $fld_name, $this->columns_array)) {
$columns_array_lbl = $this->columns_array[$fld->table . '.' . $fld_name];
} elseif (isset($this->columns_array[$fld_name])) {
$columns_array_lbl = $this->columns_array[$fld_name];
} else {
$columns_array_lbl = "";
}
// we will skipp 2,3 group by values to display later correct values !!
if ($this->generate_type == "grouping" && in_array($fld_name, $group_cols)) {
continue;
}
if (isset($this->columns_array[$fld->name]) && $this->columns_array[$fld->name] != "") {
if (!empty($selectedcolumns_arr)) {
if ($this->report_obj->in_multiarray($this->columns_array[$fld->name], $selectedcolumns_arr, "fieldcolname") !== true && !in_array($fld->name, $this->g_flds)) {
continue;
}
}
}
if($this->generate_type != "grouping" && !isset($this->columns_array[$fld->name])){
continue;
}
// $this->getQFArray();
$headerLabel = self::getHeaderLabel($this->report_obj->record, $s_type, $fld_name, $columns_array_lbl);
if (ITS4YouReports_Functions_Helper::count($this->g_colors) > 1 && $x == 0 && $this->generate_type == "grouping") {
// $headerLabel = "&nbsp;";
$headerLabel = $this->getGroupsHeaderLabelStr();
}
$header_style = "";
$header_style .= " style='" . $this->header_style . "' ";
$header[] = array("style" => $header_style, "label" => $headerLabel,);
// ITS4YOU-END 14. 3. 2014 8:33:46
}
}
// END
}
// ITS4YOU-CR SlOl 18. 5. 2016 14:14:49
if(!empty($this->report_obj->reportinformations["cc_array"])){
foreach($this->report_obj->reportinformations["cc_array"] as $cc_row){
$header_style .= " style='" . $this->header_style . "' ";
$header[] = array("style" => $header_style, "label" => $cc_row["cc_name"],);
}
}
// ITS4YOU-END
}
// ITS4YOU-CR SlOl | 12.8.2014 11:40 variable to populate header for record details
$populate_detail_header = true;
// ITS4YOU-CR SlOl | 12.8.2014 11:40 variable to populate header for record details end
$display_groupinfo_row = false;
$this->group_data_array = array();
$grouping_totals = $group2_values = array();
$this->setChartsColumns();
if ($noofrows > 0) {
$f_i = $f_r_i = 0;
$group_info_tr_value = $old_gv = ""; // tr_html of Group Value (Count) Info in case summaries columns empty start
do {
$arraylists = Array();
if (is_array($this->groupslist)) {
if (ITS4YouReports_Functions_Helper::count($this->groupslist) == 1) {
$newvalue = $custom_field_values[0];
} elseif (ITS4YouReports_Functions_Helper::count($this->groupslist) == 2) {
$newvalue = $custom_field_values[0];
$snewvalue = $custom_field_values[1];
} elseif (ITS4YouReports_Functions_Helper::count($this->groupslist) == 3) {
$newvalue = $custom_field_values[0];
$snewvalue = $custom_field_values[1];
$tnewvalue = $custom_field_values[2];
}
}
if ($newvalue == "")
$newvalue = "-";
if ($snewvalue == "")
$snewvalue = "-";
if ($tnewvalue == "")
$tnewvalue = "-";
/* if($this->generate_type == "grouping"){
$group_value = $custom_field_values[$this->g_flds[0]];
} */
$valtemplate_tr = "<tr>";
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && (($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") || ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols"))) {
$y = 1;
}
$currency_id = "";
if (isset($custom_field_values["currency_id"]) && $custom_field_values["currency_id"] != "") {
$currency_id = $custom_field_values["currency_id"];
}
if (isset($custom_field_values["invoicing_currency_id"]) && $custom_field_values["invoicing_currency_id"] != "") {
$currency_id = $custom_field_values["invoicing_currency_id"];
}
$this->data_record_id = "";
if (isset($custom_field_values["record_id"]) && $custom_field_values["record_id"] != "") {
$this->data_record_id = $custom_field_values["record_id"];
}
// ITS4YOU-CR SlOl | 12.8.2014 11:40 variables used for group info rows
$detail_row_info = array();
// ITS4YOU-END 12.8.2014 11:41
// Variables used for Group Value (Count) Info in case summaries columns empty start
$group_info_tr = "";
$group_info_tr_added = false;
$gc_i = 0;
// Set up group_value for Group Value (Count) Info in case group column not in selectedcolumns_arr start
// $this->summaries_columns_count
if (ITS4YouReports_Functions_Helper::count($this->g_flds) == 1 && ITS4YouReports_Functions_Helper::count($this->detail_selectedcolumns_arr) > 0) {
if ($display_groupinfo_row !== true && isset($this->columns_array[$this->g_flds[0]]) && $this->columns_array[$this->g_flds[0]] != "") {
$display_groupinfo_row = true;
}
} elseif ($this->report_obj->reportinformations["Group1"] != "none" && $this->summaries_columns_count == 0 && $display_groupinfo_row !== true) {
$display_groupinfo_row = true;
}
/* if(ITS4YouReports_Functions_Helper::count($this->g_flds)>1 && ITS4YouReports_Functions_Helper::count($this->detail_selectedcolumns_arr)>0 && $this->summaries_columns_count===0){
$display_groupinfo_row = true;
} */
// LIMIT FOR GROUP INFO ROW START
if ($display_groupinfo_row == true && isset($this->report_obj->reportinformations["columns_limit"]) && $this->report_obj->reportinformations["columns_limit"] != "" && isset($this->group_cols_array[1]) && $this->group_cols_array[1] != "") {
$a_gv = $custom_field_values[$this->group_cols_array[1]];
if ($old_gv != $a_gv) {
$old_gv = $custom_field_values[$this->group_cols_array[1]];
$f_r_i = 0;
}
if ($this->report_obj->reportinformations["columns_limit"] > 0) {
if ($a_gv == $old_gv && $f_r_i >= $this->report_obj->reportinformations["columns_limit"]) {
continue;
}
}
}
$this->cc_values_array = array();
// LIMIT FOR GROUP INFO ROW END
// Variables used for Group Value (Count) Info in case summaries columns empty end
$crm_id_count_done = false;
for ($i = 0; $i <= $y; $i++) {
$fld = $adb->field_name($result, $i);
$clear_fld_name_arr = explode("_", $fld->name);
$clear_fld_calculation_type = strtoupper($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
unset($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
$clear_fld_name = implode("_", $clear_fld_name_arr);
if (in_array($fld->name, $this->skip_fields) || in_array($clear_fld_name, $this->skip_fields)) {
continue;
}
if ($i == 0 && !empty($selectedcolumns_arr) && in_array($fld->name, $this->g_flds) && isset($this->columns_array[$fld->name]) && $this->columns_array[$fld->name] != "") {
if (!$this->report_obj->in_multiarray($this->columns_array[$fld->name], $selectedcolumns_arr, "fieldcolname") && $this->generate_type != "grouping") {
$group_value = $custom_field_values[$fld->name];
continue;
}
}
// ITS4YOU-CR SlOl 28. 6. 2016 14:32:21
if(isset($custom_field_values["fieldname"]) && $custom_field_values["fieldname"]!=""){
$this->row_fldname = $custom_field_values["fieldname"];
$this->row_module = $custom_field_values["module"];
$this->row_currency_id = $currency_id;
}else{
$this->row_fldname = "";
$this->row_module = "";
$this->row_currency_id = "";
}
// ITS4YOU-END
// ITS4YOU-CR SlOl 19. 5. 2016 6:47:34 custom calculation values population
if(in_array($this->columns_array[$fld->name],$this->cc_array)){
$cc_fld_name = $fld->name;
$this->cc_values_array[$cc_fld_name] = $custom_field_values[$fld->name];
}
// ITS4YOU-END
$default_charset = vglobal("default_charset");
$fld_name_decode = html_entity_decode($fld->name, ENT_QUOTES, $default_charset);
if (isset($this->columns_array[$fld->name]) && $this->report_obj->in_multiarray($this->columns_array[$fld->name], $this->detail_selectedcolumns_arr, "fieldcolname") !== true && in_array($fld->name, $this->g_flds) !== true) {
continue;
}
// ITS4YOU-CR SlOl 4. 7. 2016 13:00:53 - MISSING COUNT COLUMN IN RESULT
if($crm_id_count_done!=true && $clear_fld_name=="crmid" && $i > 0 && $this->generate_type == "grouping" && $this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type"!=""){
$explode_col_str_arr = explode(":", $this->columns_array[$clear_fld_name]);
$lbl_col_str = explode("_",$explode_col_str_arr[2]);
$explode_col_str_arr[2] = $lbl_col_str[0]."_LBL_RECORDS";
$check_col_str = implode(":", $explode_col_str_arr);
if($this->report_obj->in_multiarray($check_col_str . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true){
continue;
}
$crm_id_count_done = true;
}elseif ($i > 0
&& 'grouping' === $this->generate_type
&& array_key_exists($clear_fld_name, $this->columns_array)
&& true !== $this->report_obj->in_multiarray($this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type", $this->summaries_columns, 'columnname')
) {
// ITS4YOU-END
continue;
}
if($this->generate_type != "grouping" && !isset($this->columns_array[$fld->name])){
continue;
}
// detail_selectedcolumns_arr
$first_td = true;
// skipp group columns in case not in selectedcolumns_arr end
// ITS4YOU-CR SlOl 17. 2. 2014 10:23:31
$is_hid = strpos($fld->name, "_hid");
if ($is_hid === false) {
if ($this->generate_type == "grouping") {
$summaries_fld_test = explode("_", $fld->name);
$smft_lk = ITS4YouReports_Functions_Helper::count($summaries_fld_test) - 1;
if (in_array(strtolower($summaries_fld_test[$smft_lk]), $this->calculation_type_array)) {
$calculation_type = $summaries_fld_test[$smft_lk];
$fld_name = "";
for ($index = 0; $index < (ITS4YouReports_Functions_Helper::count($summaries_fld_test)); $index++) {
if ($fld_name != "") {
$fld_name .= "_";
}
$fld_name .= $summaries_fld_test[$index];
}
} else {
$fld_name = $fld->name;
}
// we will skipp 2,3 group by values to display later correct values !!
if ($this->generate_type == "grouping" && in_array($fld_name, $group_cols)) {
continue;
}
}
$hid_url = $this->getHidUrlFromResult($result, $fld, $f_i, $i);
$fld_type = $column_definitions[$i]->type;
if (array_key_exists($fld->name, $this->ui10_fields) && !empty($custom_field_values[$i])) {
$type = getSalesEntityType($custom_field_values[$i]);
$tmp = getEntityName($type, $custom_field_values[$i]);
if (is_array($tmp)) {
foreach ($tmp as $key => $val) {
$fieldvalue = $val;
break;
}
} else {
$fieldvalue = $custom_field_values[$i];
}
} else {
if (!is_numeric($custom_field_values[$i])) {
$fieldvalue = getTranslatedString($custom_field_values[$i]);
} else {
$fieldvalue = $custom_field_values[$i];
}
}
$fieldvalue = str_replace("<", "&lt;", $fieldvalue);
$fieldvalue = str_replace(">", "&gt;", $fieldvalue);
//check for Roll based pick list
$temp_val = $fld->name;
if (!empty($picklistArray) && array_key_exists($temp_val, $picklistArray)) {
if (!in_array($custom_field_values[$i], $picklistArray[$fld->name]) && $custom_field_values[$i] != '')
$fieldvalue = $app_strings['LBL_NOT_ACCESSIBLE'];
}
if (1 < ITS4YouReports_Functions_Helper::count($picklistArray) && array_key_exists($temp_val, $picklistArray[1])) {
$temp = explode(",", str_ireplace(' |##| ', ',', $fieldvalue));
$temp_val = Array();
foreach ($temp as $key => $val) {
if (!in_array(trim($val), $picklistArray[1][$fld->name]) && trim($val) != '') {
$temp_val[] = $app_strings['LBL_NOT_ACCESSIBLE'];
} else
$temp_val[] = $val;
}
$fieldvalue = (is_array($temp_val)) ? implode(", ", $temp_val) : '';
}
if ($fieldvalue == "") {
$fieldvalue = "-";
} else if ($fld->name == 'LBL_ACTION') {
global $site_URL;
$fieldvalue = "<a href='$site_URL/index.php?module={$this->primarymodule}&view=Detail&record={$fieldvalue}' target='_blank'>" . getTranslatedString('LBL_VIEW_DETAILS') . "</a>";
} else if (stristr($fieldvalue, "|##|")) {
//$fieldvalue = str_ireplace(' |##| ', ', ', $fieldvalue);
} else if ($fld_type == "date" || $fld_type == "datetime") {
$fieldvalue = getValidDisplayDate($fieldvalue);
}
if ($hid_url != "") {
$fieldvalue = "<a href='$hid_url' target='_blank'>$fieldvalue</a> ";
}
$bg_color = "";
if ($this->generate_type == "grouping") {
if ($i == 0 && in_array($fld->name, $this->g_flds)) {
$group_value = $custom_field_values[$i];
}
if (isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] != "cols" && $this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$bg_color_val = $this->g_colors[1];
} elseif (isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
if (array_key_exists(2, $this->g_colors)) {
$bg_color_val = $this->g_colors[2];
} else {
$bg_color_val = $this->g_colors[2];
}
} else {
$bg_color_val = $this->g_colors[0];
}
$bg_color = "background-color:$bg_color_val;";
}
// $txt_align = $this->getFldAlignment($fld->name, $fieldvalue);
$fld_style_arr = $this->getFldStyle($fld->name, $fieldvalue);
if ($this->generate_type == "grouping" && is_numeric(floatval($fieldvalue)) && !in_array($fld->name, $this->group_cols_array)) {
$fld_name_exploded = explode("_", $fld->name);
$calculation_type = $fld_name_exploded[(ITS4YouReports_Functions_Helper::count($fld_name_exploded) - 1)];
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$grouping_totals[$fld->name][$currency_id][] = number_format(floatval($fieldvalue), 3, ".", "");
} else {
$grouping_totals[$fld->name][] = number_format(floatval($fieldvalue), 3, ".", "");
}
}
// // timeline_type2"]=="cols REPORT
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$array_to_totals = array($result, $custom_field_values, $i, $t_y);
$currency_string = $this->get_currency_sumbol_str($currency_id);
$group2_arr = $this->getSubGroupCols($group_value, 1, "", $currency_id, $array_to_totals);
if (!empty($group2_arr["headers"])) {
//$group2_headers = array_merge($group2_headers, $group2_arr["headers"]);
$group2_headers = $group2_arr["headers"];
}
}
// charts array population start
$ch_fldname = strtolower($fld->name);
if (!empty($this->charts) && !empty($this->charts["charttypes"])) {
$this->setChArrayValues("charttitle", '', $this->charts["charttitle"]);
if($this->charts["x_group"]=="group1" && in_array($ch_fldname, $this->charts["charts_ds_columns"])){
$this->setDataseriesArray($group_value, $fieldvalue, $currency_id, $ch_fldname);
}
}
// charts array population end
/** * ** GROUP INFO ROW DISPLAY for GROUPS In case selected columns not empty *** GROUPING REPORT * */
if ($first_td === true && $this->generate_type == "grouping" && ITS4YouReports_Functions_Helper::count($this->g_colors) == 1 && ITS4YouReports_Functions_Helper::count($this->detail_selectedcolumns_arr) > 0) {
if (!isset($this->summaries_header) || empty($this->summaries_header)) {
$this->summaries_header = $header;
}
$header_col_lstr = "";
if (isset($this->summaries_header[$i]["label"]) && trim($this->summaries_header[$i]["label"]) != "") {
$header_col_lbl = $this->summaries_header[$i]["label"];
} else {
$header_col_as = $clear_fld_name;
$header_col_str = $this->columns_array[$header_col_as];
$header_col_lbl = self::getHeaderLabel($this->report_obj->record, "SC", $header_col_as, $header_col_str);
}
// header population for Groups row start
// disabledinv7
//if ($this->selectedcolumns_header_row == "") {
$header = array();
if (!empty($selectedcolumns_arr)) {
foreach ($selectedcolumns_arr as $sc_key => $sc_array) {
$sc_header_style = " style='" . $this->header_style . "' ";
$sc_column_str = $sc_array["fieldcolname"];
$headerLabel = self::getHeaderLabel($this->report_obj->record, "SC", "", $sc_column_str);
$header[] = array("style" => $sc_header_style, "label" => $headerLabel,);
}
$sc_header = $sc_header_sp = "";
/* $sc_header_sp .= "<td class='rpt4youGrpHead0' colspan='".count($header)."'>&nbsp;</td>";
$sc_header_sp .= "</tr>";
$sc_header_sp .= "<tr>"; */
foreach ($header as $header_f_arr) {
$header_style = $header_f_arr["style"];
$headerLabel = $header_f_arr["label"];
$sc_header .= "<td class='rpt4youCellLabel' rowspan='1' colspan='1' $header_style align='center' nowrap >$headerLabel</td>";
}
$sc_header .= "</tr>";
$sc_header .= "<tr>";
$this->selectedcolumns_header_row = $sc_header;
//$this->selectedcolumns_header_row_sp = $sc_header_sp;
}
$this->display_group_totals = false;
//}
// header population for Groups row end
if ($display_groupinfo_row === true && ITS4YouReports_Functions_Helper::count($this->g_flds) == 1) {
$sp_group_value = $custom_field_values[$this->group_cols_array[1]];
if ($group_info_tr_added !== true) {
$sm_calculation_type = "";
/* if($f_i==0){
$group_info_tr .= $this->selectedcolumns_header_row;
} */
if (isset($this->summaries_columns) && !empty($this->summaries_columns)) {
$detail_row_info = array();
foreach ($this->summaries_columns as $sm_key => $sm_col_array) {
$sm_col_str = $sm_col_array['columnname'];
$sm_col_alias = "";
$sm_col_str_exploded = explode(":", $sm_col_str);
$sm_lk = (ITS4YouReports_Functions_Helper::count($sm_col_str_exploded) - 1);
if (in_array(strtolower($sm_col_str_exploded[$sm_lk]), $this->calculation_type_array)) {
$sm_calculation_type = strtolower($sm_col_str_exploded[$sm_lk]);
$sm_col_lbl_str = implode(":", $sm_col_str_exploded);
unset($sm_col_str_exploded[$sm_lk]);
$sm_col_str = implode(":", $sm_col_str_exploded);
if (isset($this->columns_array[$sm_col_str]["fld_alias"]) && $this->columns_array[$sm_col_str]["fld_alias"] != "") {
$sm_col_alias = $this->columns_array[$sm_col_str]["fld_alias"];
}
$sm_col_alias .= "_$sm_calculation_type";
}
$sm_value = $custom_field_values[$sm_col_alias];
$sm_col_Label = self::getHeaderLabel($this->report_obj->record, "SM", $sm_col_alias, $sm_col_lbl_str);
// $header_col_lstr = ";";
// $detail_row_info[] = $sm_col_Label." = ".$this->getFldNumberFormat($sm_col_alias, $sm_value, $currency_id).$header_col_lstr;
$detail_row_info[] = $sm_col_Label . " = " . $this->getFldNumberFormat($sm_col_alias, $sm_value, $currency_id);
}
}
$group_info_tr_value = $this->getFldNumberFormat($this->group_cols_array[1], $sp_group_value, $currency_id, true);
// $group_records_count = count($this->result_array[$sp_group_value]);
$group_records_count = $custom_field_values["crmid_count"];
$group_info_fld_str = $this->columns_array[$this->group_cols_array[1]];
$group_info_headerLabel = self::getHeaderLabel($this->report_obj->record, "SC", $this->group_cols_array[1], $group_info_fld_str);
$group_info_tr .= "<tr><td class='rpt4youGrpHead' colspan='" . ITS4YouReports_Functions_Helper::count($header) . "' style='text-align:left;background-color:#EEEEEE;' nowrap ><b>";
$group_info_tr .= "$group_info_headerLabel = $group_info_tr_value ($group_records_count): ";
$group_info_tr .= implode(";", $detail_row_info) . "</b></td></tr>";
$group_info_tr_added = true;
}
}
/** * ** GROUP INFO ROW DISPLAY for GROUPS In case selected columns not empty END *** STANDARD REPORT * */
} else {
// Group Value (Count) Info in case summaries columns empty start
if ($display_groupinfo_row === true) {
$sp_group_value = $custom_field_values[$this->group_cols_array[1]];
if ($sp_group_value != $direct_group_info_tr_value) {
$direct_group_info_tr_value = $sp_group_value;
$group_info_tr_value = $this->getFldNumberFormat($this->group_cols_array[1], $sp_group_value, $currency_id);
// $group_records_count = count($this->result_array[$sp_group_value]);
$group_records_count = $custom_field_values["crmid_count"];
$group_info_fld_str = $this->columns_array[$this->g_flds[0]];
$group_info_headerLabel = self::getHeaderLabel($this->report_obj->record, "SC", $this->g_flds[0], $group_info_fld_str);
$group_info_tr = "<tr><td class='rpt4youGrpHead' colspan='" . ITS4YouReports_Functions_Helper::count($header) . "' style='text-align:left;background-color:#EEEEEE;' nowrap >";
$group_info_tr .= "<b>$group_info_headerLabel = $group_info_tr_value ($group_records_count)</b>";
$group_info_tr .= "</td></tr>";
$group_info_tr_added = true;
}
}
// Group Value (Count) Info in case summaries columns empty end
/** * ** DEFAULT VALUE DISPLAY *** * */
$fld_style = $this->getFldStyleString($fld_style_arr);
$valtemplate_tr .= "<td class='rpt4youGrpHead' style='$fld_style $bg_color' nowrap >" . $this->getFldNumberFormat($fld->name, $fieldvalue, $currency_id) . "$currency_string</td>";
}
/* * ** DISPLAY timeline_type2 == "cols" *** */
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$g_ri = 1;
foreach ($group2_headers as $group_h_key => $group_h_arr) {
if (isset($group2_arr["values"][$group_h_key]) && !empty($group2_arr["values"][$group_h_key])) {
// foreach ($group2_arr["values"][$group_h_key] as $gv_arr) {
for ($gv_i = 0; $gv_i < ITS4YouReports_Functions_Helper::count($group_h_arr); $gv_i++) {
if (isset($group2_arr["values"][$group_h_key][$gv_i]) && !empty($group2_arr["values"][$group_h_key][$gv_i])) {
$gv_arr = $group2_arr["values"][$group_h_key][$gv_i];
// $txt_align = $gv_arr["text-align"];
$fld_style = $gv_arr["fld_style"];
$gv_value = $gv_arr["value"];
$gv_fld_name = strtolower($gv_arr["fld_name"]);
if ($gv_fld_name != "") {
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$grouping_totals[decode_html($group_h_key)][$gv_fld_name][$currency_id][] = $gv_value;
} else {
$grouping_totals[decode_html($group_h_key)][$gv_fld_name][] = $gv_value;
}
}
$fw_weight = "";
if ($group_h_key == "LBL_GROUPING_TOTALS") {
$fw_weight = "font-weight:bold;";
}
// chart data population start
if(array_key_exists('x_group', $this->charts)
&& 'group2' === $this->charts['x_group']
&& in_array($gv_fld_name, $this->charts['charts_ds_columns'])
&& 'LBL_GROUPING_TOTALS' !== $group_h_key
){
$this->setDataseriesArray($group_h_key, $gv_value, $currency_id, $gv_fld_name, $group_value);
}
if(array_key_exists('x_group', $this->charts)
&& 'group1' === $this->charts['x_group']
&& in_array($gv_fld_name, $this->charts['charts_ds_columns'])
&& 'LBL_GROUPING_TOTALS' === $group_h_key
){
$this->setDataseriesArray($group_value, $gv_value, $currency_id, $gv_fld_name);
}
// chart data population end
$valtemplate_tr .= "<td class='rpt4youGrpHead' style='$fld_style $fw_weight' nowrap >" . $this->getFldNumberFormat($gv_fld_name, $gv_value, $currency_id) . "</td>";
$g_ri++;
}
}
} else {
if ($group_h_key>0 && isset($group2_headers[$group_h_key]) && !empty($group2_headers[$group_h_key]) && $group2_headers[$group_h_key]!="") {
for ($gv_i = 0; $gv_i < ITS4YouReports_Functions_Helper::count($group_h_arr); $gv_i++) {
$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:center;' nowrap > </td>";
$g_ri++;
}
}
}
}
}
/* TOTALS CALCULATION START */
if (isset($this->columns_array[$fld->name])) {
$columns_array_lbl = $this->columns_array[$fld->name];
} elseif ($this->columns_array[$fld->table . "." . $fld->name]) {
$columns_array_lbl = $this->columns_array[$fld->table . "." . $fld->name];
} elseif ($fld->table != "") {
$columns_array_lbl = $fld->table . "." . $fld->name;
} else {
$columns_array_lbl = $fld->name;
}
$TheaderLabel = self::getHeaderLabel($reportid, "CT", $fld->name, $columns_array_lbl);
$fld_totals_key = $fld->name;
// $to_totals_res = $this->setToTotalsArray($to_totals_res,$fld_totals_key,$fieldvalue,$to_totals_array,$currency_id);
$this->to_totals_res = $this->setToTotalsArray($noofrows,$this->to_totals_res, $fld_totals_key, $fieldvalue, $this->to_totals_array, $currency_id);
/* TOTALS CALCULATION END */
}
$first_td = false;
// ITS4YOU-END 17. 2. 2014 10:23:33
$gc_i++;
}
// ITS4YOU-CR SlOl 19. 5. 2016 6:55:12
if(!empty($this->cc_values_array)){
$valtemplate_tr .= $this->displayCustomCalculations($currency_id);
}
// ITS4YouReports::sshow($header);
// ITS4YOU-END
// timeline_type3"]=="cols" REPORT
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] != "cols" && $this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$gcols3_valtemplate = "";
$tl_g3_colspan = 1;
if (empty($this->group_data_array[$group_value])) {
$this->setGroupDataArray($group_value, $currency_id);
}
$group_value = html_entity_decode($group_value, ENT_QUOTES, $default_charset);
if (isset($currency_id) && $currency_id != "") {
$group_data_array = $this->group_data_array[$group_value][$currency_id];
} else {
$group_data_array = $this->group_data_array[$group_value];
}
// foreach($this->result_array[$group_value] as $group_row_key => $group_row_array){
foreach ($group_data_array as $group_row_key => $group_row_array) {
// continue in case summary filter will not contain group values
/* if(!array_key_exists($group_row_key,$this->group_data_array[$group_value])){
continue;
} */
$gcols3_valtemplate .= "</tr><tr>";
$bg_color_val = $this->g_colors[2];
$bg_color = "background-color:$bg_color_val;";
// this is possible only in case group 2 = rows and group 3 = cols, so static rpt4youGrpHead_1 is ok here
$gcols3_valtemplate .= "<td class='rpt4youGrpHead_1' style='text-align:left;' nowrap >" . $group_row_key . "</td>";
$g_ri = 1;
foreach ($header as $header_f_key => $header_f_arr) {
$headerLabel = $header_f_arr["label"];
if (!in_array($headerLabel, array("LBL_GROUPING_TOTALS")) && $header_f_key !== 0) {
if (isset($group_data_array[$group_row_key][$headerLabel])) {
foreach ($group_data_array[$group_row_key][$headerLabel] as $fld_key => $fld_value) {
$clear_fld_name_arr = explode("_", $fld_key);
$clear_fld_calculation_type = strtoupper($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
unset($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
$clear_fld_name = implode("_", $clear_fld_name_arr);
if (in_array($fld_key, $this->skip_fields) || in_array($clear_fld_name, $this->skip_fields)) {
continue;
}
if ($this->report_obj->in_multiarray($this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true) {
continue;
}
//$txt_align = $this->getFldAlignment($fld_key, $fld_value);
$fld_style_arr = $this->getFldStyle($fld_key, $fld_value);
$calculation_arr = explode("_", $fld_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
$ct_fldstr_sum = $ct_fldstr . "_sum";
if ($currency_id != "") {
$group_totals[$group_value][$currency_id][$group_row_key][$fld_key] = $group_totals[$group_value][$currency_id][$group_row_key][$ct_fldstr_sum];
$group_f_totals[$group_value][$currency_id][$headerLabel][$fld_key][] = $fld_value;
$group_f_totals[$group_value][$currency_id]["row_totals"][$fld_key][] = $fld_value;
} else {
$group_totals[$group_value][$group_row_key][$fld_key] = $group_totals[$group_value][$group_row_key][$ct_fldstr_sum];
$group_f_totals[$group_value][$headerLabel][$fld_key][] = $fld_value;
$group_f_totals[$group_value]["row_totals"][$fld_key][] = $fld_value;
}
} else {
if ($currency_id != "") {
$group_totals[$group_value][$currency_id][$group_row_key][$fld_key][] = $fld_value;
$group_f_totals[$group_value][$currency_id][$headerLabel][$fld_key][] = $fld_value;
$group_f_totals[$group_value][$currency_id]["row_totals"][$fld_key][] = $fld_value;
} else {
$group_totals[$group_value][$group_row_key][$fld_key][] = $fld_value;
$group_f_totals[$group_value][$headerLabel][$fld_key][] = $fld_value;
$group_f_totals[$group_value]["row_totals"][$fld_key][] = $fld_value;
}
}
// chart data population start
/*
if($this->charts["x_group"]=="group2" && in_array($fld_key, $this->charts["charts_ds_columns"])){
$this->setDataseriesArray($group_row_key, $fld_value, $currency_id, $fld_key, $group_value);
}
*/
// chart data population end
$fld_style = $this->getFldStyleString($fld_style_arr);
$gcols3_valtemplate .= "<td class='rpt4youGrpHead' style='$fld_style $bg_color' nowrap >" . $this->getFldNumberFormat($fld_key, $fld_value, $currency_id) . "</td>";
$g_ri++;
}
} else {
for ($g3_i = 0; $g3_i < $this->sum_col_i; $g3_i++) {
$gcols3_valtemplate .= "<td class='rpt4youGrpHead' style='text-align:center;font-weight:bold;$bg_color' nowrap > </td>";
$g_ri++;
}
}
} elseif ($headerLabel == "LBL_GROUPING_TOTALS") {
$count_value = 0;
if ($currency_id != "") {
$group_totals_array = $group_totals[$group_value][$currency_id][$group_row_key];
} else {
$group_totals_array = $group_totals[$group_value][$group_row_key];
}
if (!empty($group_totals_array)) {
foreach ($group_totals_array as $g_t_key => $g_t_array) {
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "count") {
foreach ($g_t_array as $count_val) {
$count_value += $count_val;
}
}
if ($calculation_type == "avg") {
$fld_value = (array_sum($g_t_array) / $count_value);
} else {
$fld_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $fld_value);
$fld_style_arr = $this->getFldStyle($g_t_key, $fld_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
$gcols3_valtemplate .= "<td class='rpt4youGrpHead' style='$fld_style font-weight:bold;$bg_color' nowrap >" . $this->getFldNumberFormat($g_t_key, $fld_value, $currency_id) . "</td>";
$g_ri++;
}
} else {
for ($g3_i = 0; $g3_i < $this->sum_col_i; $g3_i++) {
$gcols3_valtemplate .= "<td class='rpt4youGrpHead' style='text-align:center;font-weight:bold;$bg_color' nowrap > </td>";
$g_ri++;
}
}
}
}
}
$bg_color_val1 = $this->g_colors[1];
$bg_color1 = "background-color:$bg_color_val1;";
foreach ($header as $header_f_key => $header_f_arr) {
$headerLabel = $header_f_arr["label"];
if ($currency_id != "") {
$group_totals_f_array = $group_f_totals[$group_value][$currency_id];
} else {
$group_totals_f_array = $group_f_totals[$group_value];
}
if (!in_array($headerLabel, array("LBL_GROUPING_TOTALS")) && $header_f_key !== 0) {
if (isset($group_totals_f_array[$headerLabel]) && !empty($group_totals_f_array[$headerLabel])) {
$count_value = 0;
foreach ($group_totals_f_array[$headerLabel] as $g_t_key => $g_t_array) {
$clear_fld_name_arr = explode("_", $g_t_key);
$clear_fld_calculation_type = strtoupper($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
unset($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
$clear_fld_name = implode("_", $clear_fld_name_arr);
if (in_array($g_t_key, $this->skip_fields) || in_array($clear_fld_name, $this->skip_fields)) {
continue;
}
if ($this->report_obj->in_multiarray($this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true) {
continue;
}
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "count") {
foreach ($g_t_array as $count_val) {
$count_value += $count_val;
}
}
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
$ct_fldstr_sum = $ct_fldstr . "_sum";
$g_t_array = $group_totals_f_array[$headerLabel][$ct_fldstr_sum];
$fld_value = (array_sum($g_t_array) / $count_value);
} else {
$fld_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $fld_value);
$fld_style_arr = $this->getFldStyle($g_t_key, $fld_value);
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$grouping_totals[decode_html($headerLabel)][$g_t_key][$currency_id][] = $fld_value;
} else {
$grouping_totals[decode_html($headerLabel)][$g_t_key][] = $fld_value;
}
// charts array population start
if ($g_t_key == $this->charts["charts_ds_column"]) {
// SPECIAL CHART DATA POPULATION FOR G3 COLS
$cols_alias = "";
if ($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$cols_alias = $this->g_flds[1];
} elseif ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$cols_alias = $this->g_flds[2];
}
if (!isset($this->ch_array["dataseries_label"])) {
$this->setDataseriesLabel($cols_alias);
}
//$dataseries_label_key = self::getHeaderLabel($this->report_obj->record, "SM", $this->g_flds[2], $this->columns_array[$this->g_flds[2]]);
//$this->setChArrayValues("dataseries_label",'key',$dataseries_label_key);
if ($currency_id != "") {
$ch_subkey = $headerLabel . " (" . $this->currency_symbols[$currency_id] . ")";
} else {
$ch_subkey = $headerLabel;
}
// addToSubvalChArrayValues($ch_key,$ch_subkey,$ch_value,$option_key="",$currency_id=""){
$this->addToSubvalChArrayValues("dataseries", $headerLabel, $fld_value, $group_value, $currency_id);
if ($this->ch_array["charttype"] != "horizontal") {
$this->setChArrayValues("dataseries", $ch_subkey, $fld_value);
$this->setHChArrayValues("hch_dataseries", $group_value, $fld_value,$currency_id);
}
}
// charts array population end
if($this->charts["x_group"]=="group1" && in_array($g_t_key, $this->charts["charts_ds_columns"])){
$this->setDataseriesArray($group_value, $fld_value, $currency_id, $g_t_key);
}
if($this->charts["x_group"]=="group2" && in_array($g_t_key, $this->charts["charts_ds_columns"])){
$this->setDataseriesArray($headerLabel, $fld_value, $currency_id, $g_t_key, $group_value);
}
$fld_style = $this->getFldStyleString($fld_style_arr);
$valtemplate_tr .= "<td class='rpt4youGrpHead' style='$fld_style $bg_color1' nowrap >" . $this->getFldNumberFormat($g_t_key, $fld_value, $currency_id) . "</td>";
}
} else {
for ($g3_i = 0; $g3_i < $this->sum_col_i; $g3_i++) {
$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:center;$bg_color1' nowrap > </td>";
}
}
} elseif ($headerLabel == "LBL_GROUPING_TOTALS") {
$count_value = 0;
if (isset($group_totals_f_array["row_totals"]) && !empty($group_totals_f_array["row_totals"])) {
foreach ($group_totals_f_array["row_totals"] as $g_t_key => $g_t_array) {
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
$ct_fldstr_sum = $ct_fldstr . "_sum";
$g_t_array = $group_totals_f_array["row_totals"][$ct_fldstr_sum];
}
if ($calculation_type == "count") {
foreach ($g_t_array as $count_val) {
$count_value += $count_val;
}
}
if ($calculation_type == "avg") {
$fld_value = (array_sum($g_t_array) / $count_value);
} else {
$fld_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $fld_value);
$fld_style_arr = $this->getFldStyle($g_t_key, $fld_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$grouping_totals[decode_html($headerLabel)][$g_t_key][$currency_id][] = $fld_value;
} else {
$grouping_totals[decode_html($headerLabel)][$g_t_key][] = $fld_value;
}
$valtemplate_tr .= "<td class='rpt4youGrpHead' style='$fld_style font-weight:bold;$bg_color1' nowrap >" . $this->getFldNumberFormat($g_t_key, $fld_value, $currency_id) . "</td>";
}
} else {
for ($g3_i = 0; $g3_i < $this->sum_col_i; $g3_i++) {
$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:center;$bg_color1' nowrap > </td>";
}
}
}
}
$valtemplate_tr .= $gcols3_valtemplate;
}
// details for group 1
if ($this->generate_type == "grouping" && ITS4YouReports_Functions_Helper::count($this->g_colors) == 1) {
if (!empty($selectedcolumns_arr)) {
$valtemplate_tr .= $this->returnGroupDetailRecordsNew($group_value, $y, $selectedcolumns_arr, $currency_id);
}
}
$valtemplate_tr .= "</tr>";
// adding tr html of Group Value (Count) Info in case summaries columns empty start
if ($group_info_tr != "") {
$valtemplate .= $group_info_tr;
}
// adding tr html of Group Value (Count) Info in case summaries columns empty end
$valtemplate .= $valtemplate_tr;
// ROWS REPORT
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["timeline_type2"] != "cols" && ($this->report_obj->reportinformations["timeline_type3"] != "cols" || $this->report_obj->reportinformations["timeline_type3"] == "none")) {
$group2_html = $this->getSubGroupRow($group_value, $currency_id);
$valtemplate .= $group2_html;
}
$lastvalue = $newvalue;
$secondvalue = $snewvalue;
$thirdvalue = $tnewvalue;
$arr_val[] = $arraylists;
set_time_limit($php_max_execution_time);
$f_i++;
// GROUPING TOTALS START
if ($this->display_group_totals == true && $this->generate_type == "grouping" && $f_i == $noofrows && $this->report_obj->reportinformations["timeline_type2"] != "cols" && ($this->report_obj->reportinformations["timeline_type3"] != "cols" || $this->report_obj->reportinformations["timeline_type3"] == "none")) {
$bg_color_val = $this->g_colors[0];
$bg_color = "background-color:$bg_color_val;";
$valtemplate .= "<tr>";
$valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' style='text-align:left;" . $this->grouping_totals_bg_color . "' nowrap >" . getTranslatedString("LBL_GROUPING_TOTALS", $this->getCurrentModule4You()) . "</td>";
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$to_display = array();
foreach ($grouping_totals AS $g_t_key => $currency_array) {
foreach ($currency_array AS $currency_key => $g_t_array) {
$g_t_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
//$txt_align = $this->getFldAlignment($g_t_key, $g_t_value);
$fld_style_arr = $this->getFldStyle($g_t_key, $g_t_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
$to_display[$g_t_key]["values"] .= $this->getFldNumberFormat($g_t_key, $g_t_value, $currency_key) . "<br>";
//$to_display[$g_t_key]["textalign"] = $txt_align;
$to_display[$g_t_key]["fld_style"] = $fld_style;
}
}
foreach ($to_display AS $td_key => $td_arr) {
//$txt_align = $td_arr["textalign"];
$fld_style = $td_arr["fld_style"];
$td_value = $td_arr["values"];
$valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' style='$fld_style " . $this->grouping_totals_bg_color . "' nowrap >" . $td_value . "</td>";
}
} else {
foreach ($grouping_totals AS $g_t_key => $g_t_array) {
$g_t_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
//$txt_align = $this->getFldAlignment($g_t_key, $g_t_value);
$fld_style_arr = $this->getFldStyle($g_t_key, $g_t_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
$valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' style='$fld_style " . $this->grouping_totals_bg_color . "' nowrap >" . $this->getFldNumberFormat($g_t_key, $g_t_value) . "</td>";
}
}
$valtemplate .= "</tr>";
}
$f_r_i++;
// GROUPING TOTALS END
} while ($custom_field_values = $adb->fetch_array($result));
// GROUPING TOTALS START
// GROUPING TOTAL FOR COLS START
if ($this->generate_type == "grouping" && (($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") || ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols")) && !empty($grouping_totals)) {
$bg_color = "background-color:$bg_color_val;";
$valtemplate .= "<tr>";
$valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' nowrap style='text-align:left;" . $this->grouping_totals_bg_color . "' nowrap >" . getTranslatedString("LBL_GROUPING_TOTALS", $this->getCurrentModule4You()) . "</td>";
// foreach ($grouping_totals as $grouping_totals_key => $grouping_totals_array) {
foreach ($header as $gh_i => $gh_array) {
if ($gh_i > 0
&& (
isset($grouping_totals[decode_html($gh_array['label'])])
|| isset($grouping_totals[decode_html($gh_array['raw'])])
)
) {
if (array_key_exists(decode_html($gh_array["label"]), $grouping_totals)) {
$grouping_totals_array = $grouping_totals[decode_html($gh_array['label'])];
} else {
$grouping_totals_array = $grouping_totals[$gh_array['raw']];
}
foreach ($grouping_totals_array AS $g_t_key => $g_t_array) {
if (ITS4YouReports::isInventoryModule($this->report_obj->primarymodule)) {
$g_t_value_display_arr = array();
foreach ($g_t_array as $g_ft_currency_id => $g_ft_array) {
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "count") {
$count_value = 0;
foreach ($g_ft_array as $count_val) {
$count_value += $count_val;
}
}
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
if (!empty($grouping_totals_array[$ct_fldstr . "_sum"][$g_ft_currency_id])) {
$ct_fldstr_sum = $ct_fldstr . "_sum";
} else {
$ct_fldstr_sum = $ct_fldstr . "_SUM";
}
$g_ft_array = $grouping_totals_array[$ct_fldstr_sum][$g_ft_currency_id];
$g_t_value = (array_sum($g_ft_array) / $count_value);
} else {
$g_t_value = $this->getGroupTotalsValue($g_t_key, $g_ft_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $g_t_value);
$fld_style_arr = $this->getFldStyle($g_t_key, $g_t_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
$g_t_value_display_arr[] = $this->getFldNumberFormat($g_t_key, $g_t_value, $g_ft_currency_id);
}
$g_t_value_display = implode("<br>", $g_t_value_display_arr);
} else {
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "count") {
$count_value = 0;
if (!empty($g_t_array)) {
foreach ($g_t_array as $count_key => $count_val) {
if (is_array($count_val)) {
$count_value += array_sum($count_val);
} else {
$count_value += $count_val;
}
}
}
}
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
if (!empty($grouping_totals_array[$ct_fldstr . "_sum"])) {
$ct_fldstr_sum = $ct_fldstr . "_sum";
} else {
$ct_fldstr_sum = $ct_fldstr . "_SUM";
}
$g_t_array = $grouping_totals_array[$ct_fldstr_sum];
$g_t_value = (array_sum($g_t_array) / $count_value);
} else {
$g_t_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $g_t_value);
$fld_style_arr = $this->getFldStyle($g_t_key, $g_t_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
$g_t_value_display = $this->getFldNumberFormat($g_t_key, $g_t_value);
}
if ($grouping_totals_key == "LBL_GROUPING_TOTALS") {
$valtemplate_totals .= "<td class='rpt4youGrpHeadGroupTotals' style='$fld_style " . $this->grouping_totals_bg_color . "' nowrap >" . $g_t_value_display . "</td>";
} else {
$valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' style='$fld_style " . $this->grouping_totals_bg_color . "' nowrap >" . $g_t_value_display . "</td>";
}
}
} elseif ($gh_i > 0) {
for ($gti = 0; $gti < ITS4YouReports_Functions_Helper::count($this->sum_col_sql_a); $gti++) {
$valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' style='$fld_style " . $this->grouping_totals_bg_color . "' nowrap >0</td>";
}
}
}
$valtemplate .= $valtemplate_totals;
$valtemplate .= "</tr>";
}
} else {
$headers_count = ITS4YouReports_Functions_Helper::count($header);
$valtemplate .= "<tr>";
$valtemplate .= "<td class='rpt4youGrpHead' colspan='$headers_count' nowrap style='text-align:left;' nowrap ><b>" . getTranslatedString("LBL_NO_DATA_TO_DISPLAY", $this->getCurrentModule4You()) . "</b></td>";
$valtemplate .= "</tr>";
}
// GROUPING TOTAL FOR COLS START
// GROUPING TOTALS END
$header_f = "";
if ($populate_detail_header) {
$header_f = $this->getDetailHeader($header, $group2_headers);
}
$report_html .= $header_f;
$report_html .= '</tr><tr>';
$report_html .= $valtemplate;
$report_html .= '</table></div>';
if (!empty($this->to_totals_res)) {
$report_html .= '<br>';
$report_html .= $this->getTotalsHTML($this->to_totals_res);
}
if($this->time_debug===true){
$this->report_obj->getR4UDifTime("HTML Generated / Before PDF",true);
}
if ('CHARTS' !== $this->outputformat && !$this->create_pdf_schedule && self::showScripts($request)) {
$report_html = str_replace("<@ReportHeaderInfo@>", $this->report_html_headerInfo, $report_html);
}
$this->setReportFileInfo();
//$this->create_pdf_schedule = true;
if($this->create_pdf_schedule){
$this->createPDFFileForScheduler($report_html);
}
if($this->time_debug===true){
$this->report_obj->getR4UDifTime("After PDF",true);
}
if (!self::isGetReportsHtml()) {
if (is_writable(self::$temp_files_path)) {
//*** generate charts to report_html ***//
if (!empty($this->charts["charttypes"]) && !empty($this->ch_array["dataseries"])) {
if (!$request->has('mode') || 'showDetailViewByMode' === $request->get('mode')) {
if (!empty($this->charts) && 'top' !== $this->report_obj->reportinformations['charts'][1]['chart_position']) {
$report_html_chart .= $this->addHighChartDiv();
}
}
$report_html_chart .= $this->getReportHighCharts($export_pdf_format, $currency_id);
if ($this->outputformat === "CHARTS") {
return $report_html_chart;
} else {
$report_html .= $report_html_chart;
}
} elseif ('ShowWidget' === $request->get('view')) {
$tab = ($_REQUEST['tab'] ? round($_REQUEST['tab']) : round($_REQUEST['tabid']));
$tab = (!$tab) ? '' : $tab;
return "<script type='text/javascript'>$(function () {
console.log('1#reports4you_widget_" . $tab . $this->chartPosition . $this->report_obj->record . "');
$('#reports4you_widget_" . $_REQUEST['tab'] . $this->chartPosition . $this->report_obj->record . "').html('" . vtranslate(
"LBL_NO_DATA_TO_DISPLAY",
$this->getCurrentModule4You()
) . "')
})
</script>";
}
} else {
$headers_count = ITS4YouReports_Functions_Helper::count($header);
$report_html .= "<tr>";
$report_html .= "<td class='rpt4youGrpHead' colspan='$headers_count' nowrap style='width:100%;text-align:center;font-size:1.3em;' nowrap ><b>" . getTranslatedString(
"Test_Not_WriteAble",
$this->getCurrentModule4You()
) . "</b></td>";
$report_html .= "</tr>";
}
}
if(self::showScripts($request) && 'tabular' !== $this->reports4you_type){
$this->setNoOfRows($noofrows);
}
if($this->time_debug===true){
$this->report_obj->getR4UDifTime("After CHARTS",true);
}
if ($directOutput) {
echo $report_html;
} else {
$return_data[] = $report_html;
$return_data[] = $noofrows;
$return_data[] = $sSQL;
return $return_data;
}
}
}elseif($outputformat == "XLS") {
// oldoxls
if ($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1) {
$picklistArray = $this->getAccessPickListValues();
}
$data = array();
if ($result) {
$y = ($adb->num_fields($result) - 1);
$t_y = $y;
$custom_field_values = $adb->fetch_array($result);
$column_definitions = $adb->getFieldsDefinition($result);
// HEADERS
if (($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") || ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols")) {
if ($this->report_obj->reportinformations["Group3"] && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$agi = 2;
foreach ($this->sum_col_sql_a as $column_str => $calculation_arr) {
foreach ($calculation_arr as $calculation_type) {
// $calculation_type = $calculation_arr[0];
$label_db_key = "$column_str:$calculation_type";
if ($this->report_obj->in_multiarray($label_db_key, $this->summaries_columns, "columnname") !== true) {
continue;
}
$fld_sql_str_array = explode(" AS ", $this->columns_array[$column_str]["fld_sql_str"]);
$fld_str = $fld_sql_str_array[0];
$fld_str_as = $fld_sql_str_array[1] . "_$calculation_type";
$g_data_key_lbl = self::getHeaderLabel($this->report_obj->record, "SM", $fld_str_as, $label_db_key);
$sum_columns_bg = $this->g_colors[1];
$sum_columns_labels[] = array("style" => " background-color:$sum_columns_bg;font-weight:bold; ", "label" => $g_data_key_lbl);
if (XlsCurrencyColumn::showXlsCurrencyColumn() && in_array($calculation_type, self::$summaryAmountColumns)) {
$sum_columns_labels[] = array('style' => " background-color:$sum_columns_bg;font-weight:bold; ", 'label' => vtranslate('LBL_CURRENCY'),);
}
}
}
} else {
$agi = 1;
}
for ($x = 0; $x < 1; $x++) {
$fld = $adb->field_name($result, $x);
$is_hid = strpos($fld->name, "_hid");
if ($is_hid === false && !in_array($fld->name, $this->skip_fields)) {
if (!in_array($fld->name, $group_cols)) {
$header_style = "";
$header_style .= " style='" . $this->header_style . "' ";
//$header[] = array("style" => $header_style, "label" => "&nbsp;",);
$GroupsHeaderLabel = $this->getGroupsHeaderLabelStr();
$header[] = array('style' => $header_style, 'label' => $GroupsHeaderLabel,);
if (XlsCurrencyColumn::showXlsCurrencyColumn() && in_array($this->columns_array['uitype_' . $fld->name], self::$currencyUiTypes)) {
$header[] = array('style' => $header_style, 'label' => vtranslate('LBL_CURRENCY'),);
}
$headercols = $this->getColsHeaders($header_style, $agi);
foreach ($headercols as $header_arr) {
$header[] = $header_arr;
$group2_headers[] = $sum_columns_labels;
}
}
}
// END
}
} else {
if (ITS4YouReports_Functions_Helper::count($this->g_flds) == 1 && ITS4YouReports_Functions_Helper::count($this->detail_selectedcolumns_arr) > 0) {
$header_style = " style='" . $this->header_style . "' ";
foreach ($this->detail_selectedcolumns_arr as $detailColumnArr) {
$header[] = array("style" => $header_style, "label" => $detailColumnArr['fieldlabel'],);
$fldName = $this->detail_columns_array[$detailColumnArr['fieldcolname']]['fld_alias'];
if (XlsCurrencyColumn::showXlsCurrencyColumn() && self::isAddCurrencyField($this, $fldName, $this->detail_columns_array)) {
$header[] = array('style' => $header_style, 'label' => vtranslate('LBL_CURRENCY'),);
}
}
} else {
$crm_id_count_done = false;
for ($x = 0; $x <= $y; $x++) {
$fld = $adb->field_name($result, $x);
$is_hid = strpos($fld->name, "_hid");
$clear_fld_name_arr = explode("_", $fld->name);
$clear_fld_calculation_type = strtoupper($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
unset($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
$clear_fld_name = implode("_", $clear_fld_name_arr);
if (in_array($fld->name, $this->skip_fields) || in_array($clear_fld_name, $this->skip_fields)) {
continue;
}
if (!empty($selectedcolumns_arr) && in_array($fld->name, $this->g_flds) && isset($this->columns_array[$fld->name]) && $this->columns_array[$fld->name] != "") {
if ($x == 0 && !$this->report_obj->in_multiarray($this->columns_array[$fld->name], $selectedcolumns_arr, "fieldcolname") && $this->generate_type != "grouping") {
$group_value = $custom_field_values[$fld->name];
continue;
}
}
// ITS4YOU-CR SlOl 4. 7. 2016 13:00:53 - MISSING COUNT COLUMN IN RESULT
if($crm_id_count_done!=true && $clear_fld_name=="crmid" && $x > 0 && $this->generate_type == "grouping" && $this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type"!=""){
$explode_col_str_arr = explode(":", $this->columns_array[$clear_fld_name]);
$lbl_col_str = explode("_",$explode_col_str_arr[2]);
$explode_col_str_arr[2] = $lbl_col_str[0]."_LBL_RECORDS";
$check_col_str = implode(":", $explode_col_str_arr);
if($this->report_obj->in_multiarray($check_col_str . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true){
continue;
}
$crm_id_count_done = true;
}elseif ($x > 0 && $this->generate_type == "grouping" && $this->report_obj->in_multiarray($this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true) {
continue;
}
if ($is_hid === false && !in_array($fld->name, $this->skip_fields) && !in_array($clear_fld_name, $this->skip_fields)) {
if (in_array($fld->name, $group_cols) !== true) {
// ITS4YOU-CR SlOl 13. 3. 2014 13:37:11
if ($this->generate_type == "grouping") {
$summaries_fld_test = explode("_", $fld->name);
$smft_lk = ITS4YouReports_Functions_Helper::count($summaries_fld_test) - 1;
if (in_array(strtolower($summaries_fld_test[$smft_lk]), $this->calculation_type_array)) {
$calculation_type = $summaries_fld_test[$smft_lk];
$fld_name = "";
for ($index = 0; $index < (ITS4YouReports_Functions_Helper::count($summaries_fld_test)); $index++) {
if ($fld_name != "") {
$fld_name .= "_";
}
$fld_name .= $summaries_fld_test[$index];
}
} else {
$fld_name = $fld->name;
}
} else {
$fld_name = $fld->name;
}
$s_type = "SC";
if ($this->generate_type == "grouping" && isset($this->sm_columns_array) && !empty($this->sm_columns_array) && array_key_exists($fld_name, $this->sm_columns_array)) {
$s_type = "SM";
$columns_array_lbl = $this->sm_columns_array[$fld_name] . ":$calculation_type";
} elseif ($this->columns_array[$fld->table . "." . $fld_name]) {
$columns_array_lbl = $this->columns_array[$fld->table . "." . $fld_name];
} elseif (isset($this->columns_array[$fld_name])) {
$columns_array_lbl = $this->columns_array[$fld_name];
} else {
$columns_array_lbl = "";
}
// we will skipp 2,3 group by values to display later correct values !!
if ($this->generate_type == "grouping" && in_array($fld_name, $group_cols)) {
continue;
}
if (isset($this->columns_array[$fld->name]) && $this->columns_array[$fld->name] != "") {
if (!empty($selectedcolumns_arr)) {
if ($this->report_obj->in_multiarray($this->columns_array[$fld->name], $selectedcolumns_arr, "fieldcolname") !== true && !in_array($fld->name, $this->g_flds)) {
continue;
}
}
}
if($this->generate_type != "grouping" && !isset($this->columns_array[$fld->name])){
continue;
}
// $this->getQFArray();
$headerLabel = self::getHeaderLabel($this->report_obj->record, $s_type, $fld_name, $columns_array_lbl);
if (ITS4YouReports_Functions_Helper::count($this->g_colors) > 1 && $x == 0 && $this->generate_type == "grouping") {
// $headerLabel = "&nbsp;";
$headerLabel = $this->getGroupsHeaderLabelStr();
}
$header_style = '';
$header_style .= ' style="' . $this->header_style . '" ';
$header[] = array('style' => $header_style, 'label' => $headerLabel,);
if (XlsCurrencyColumn::showXlsCurrencyColumn() && self::isAddCurrencyField($this, $fld->name, $this->columns_array)) {
$header[] = array('style' => $header_style, 'label' => vtranslate('LBL_CURRENCY'),);
} elseif ('tabular' !== $this->reports4you_type) {
$type_col_array = explode('_', $fld->name);
$lk = ITS4YouReports_Functions_Helper::count($type_col_array)-1;
if (XlsCurrencyColumn::showXlsCurrencyColumn() && in_array($type_col_array[$lk], self::$summaryAmountColumns) && !in_array($this->getClearFldName($fld->name), ['quantity'])) {
if (self::isMoreStrictMysql()
&& !in_array($this->getClearFldName($fld->name), $this->skip_currency_fields)
) {
$header[] = array('style' => $header_style, 'label' => vtranslate('LBL_CURRENCY'),);
}
}
}
// ITS4YOU-END 14. 3. 2014 8:33:46
}
}
}
// END
}
}
if(!empty($this->cc_array)){
foreach ($this->report_obj->reportinformations['cc_array'] as $hk => $ccArray) {
$header[] = array('style' => $header_style, 'label' => $ccArray['cc_name'],);
}
}
// ITS4YOU-CR SlOl | 12.8.2014 11:40 variable to populate header for record details
$populate_detail_header = true;
// ITS4YOU-CR SlOl | 12.8.2014 11:40 variable to populate header for record details end
$display_groupinfo_row = false;
$this->group_data_array = array();
$grouping_totals = $group2_values = array();
// $this->setChartsColumns();
if ($noofrows > 0) {
$xls_ri = 0;
$xls_fri = 0;
$f_i = $f_r_i = 0;
$group_info_tr_value = $old_gv = ""; // tr_html of Group Value (Count) Info in case summaries columns empty start
do {
$r_data = array();
$arraylists = Array();
if (ITS4YouReports_Functions_Helper::count($this->groupslist) == 1) {
$newvalue = $custom_field_values[0];
} elseif (ITS4YouReports_Functions_Helper::count($this->groupslist) == 2) {
$newvalue = $custom_field_values[0];
$snewvalue = $custom_field_values[1];
} elseif (ITS4YouReports_Functions_Helper::count($this->groupslist) == 3) {
$newvalue = $custom_field_values[0];
$snewvalue = $custom_field_values[1];
$tnewvalue = $custom_field_values[2];
}
if ($newvalue == "")
$newvalue = "-";
if ($snewvalue == "")
$snewvalue = "-";
if ($tnewvalue == "")
$tnewvalue = "-";
// if($this->generate_type == "grouping"){
// $group_value = $custom_field_values[$this->g_flds[0]];
// }
//$valtemplate_tr = "<tr>";
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && (($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") || ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols"))) {
$y = 1;
}
$currency_id = "";
if (isset($custom_field_values["currency_id"]) && $custom_field_values["currency_id"] != "") {
$currency_id = $custom_field_values["currency_id"];
}
if (isset($custom_field_values["invoicing_currency_id"]) && $custom_field_values["invoicing_currency_id"] != "") {
$currency_id = $custom_field_values["invoicing_currency_id"];
}
$this->data_record_id = "";
if (isset($custom_field_values["record_id"]) && $custom_field_values["record_id"] != "") {
$this->data_record_id = $custom_field_values["record_id"];
}
// ITS4YOU-CR SlOl | 12.8.2014 11:40 variables used for group info rows
$detail_row_info = array();
// ITS4YOU-END 12.8.2014 11:41
// Variables used for Group Value (Count) Info in case summaries columns empty start
$group_info_tr = "";
$group_info_tr_added = false;
$gc_i = 0;
// Set up group_value for Group Value (Count) Info in case group column not in selectedcolumns_arr start
// $this->summaries_columns_count
if (ITS4YouReports_Functions_Helper::count($this->g_flds) == 1 && ITS4YouReports_Functions_Helper::count($this->detail_selectedcolumns_arr) > 0) {
if ($display_groupinfo_row !== true && isset($this->columns_array[$this->g_flds[0]]) && $this->columns_array[$this->g_flds[0]] != "") {
$display_groupinfo_row = true;
}
} elseif ($this->report_obj->reportinformations["Group1"] != "none" && $this->summaries_columns_count == 0 && $display_groupinfo_row !== true) {
$display_groupinfo_row = true;
}
// if(count($this->g_flds)>1 && count($this->detail_selectedcolumns_arr)>0 && $this->summaries_columns_count===0){
// $display_groupinfo_row = true;
// }
// LIMIT FOR GROUP INFO ROW START
if ($display_groupinfo_row == true && isset($this->report_obj->reportinformations["columns_limit"]) && $this->report_obj->reportinformations["columns_limit"] != "" && isset($this->group_cols_array[1]) && $this->group_cols_array[1] != "") {
$a_gv = $custom_field_values[$this->group_cols_array[1]];
if ($old_gv != $a_gv) {
$old_gv = $custom_field_values[$this->group_cols_array[1]];
$f_r_i = 0;
}
if ($this->report_obj->reportinformations["columns_limit"] > 0) {
if ($a_gv == $old_gv && $f_r_i >= $this->report_obj->reportinformations["columns_limit"]) {
continue;
}
}
}
// LIMIT FOR GROUP INFO ROW END
// Variables used for Group Value (Count) Info in case summaries columns empty end
$crm_id_count_done=false;
for ($i = 0; $i <= $y; $i++) {
$fld = $adb->field_name($result, $i);
$clear_fld_name_arr = explode("_", $fld->name);
$clear_fld_calculation_type = strtoupper($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
unset($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
$clear_fld_name = implode("_", $clear_fld_name_arr);
if (in_array($fld->name, $this->skip_fields) || in_array($clear_fld_name, $this->skip_fields) || in_array($this->getClearFldName($fld->name), $this->skip_fields)) {
continue;
}
if ($i == 0 && !empty($selectedcolumns_arr) && in_array($fld->name, $this->g_flds) && isset($this->columns_array[$fld->name]) && $this->columns_array[$fld->name] != "") {
if (!$this->report_obj->in_multiarray($this->columns_array[$fld->name], $selectedcolumns_arr, "fieldcolname") && $this->generate_type != "grouping") {
$group_value = $custom_field_values[$fld->name];
continue;
}
}
// ITS4YOU-CR SlOl 28. 6. 2016 14:32:21
if(isset($custom_field_values["fieldname"]) && $custom_field_values["fieldname"]!=""){
$this->row_fldname = $custom_field_values["fieldname"];
$this->row_module = $custom_field_values["module"];
$this->row_currency_id = $currency_id;
}else{
$this->row_fldname = "";
$this->row_module = "";
$this->row_currency_id = "";
}
// ITS4YOU-END
if (isset($this->columns_array[$fld->name]) && $this->report_obj->in_multiarray($this->columns_array[$fld->name], $this->detail_selectedcolumns_arr, "fieldcolname") !== true && in_array($fld->name, $this->g_flds) !== true) {
continue;
}
// ITS4YOU-CR SlOl 4. 7. 2016 13:00:53 - MISSING COUNT COLUMN IN RESULT
if($crm_id_count_done!=true && $clear_fld_name=="crmid" && $i > 0 && $this->generate_type == "grouping" && $this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type"!=""){
$explode_col_str_arr = explode(":", $this->columns_array[$clear_fld_name]);
$lbl_col_str = explode("_",$explode_col_str_arr[2]);
$explode_col_str_arr[2] = $lbl_col_str[0]."_LBL_RECORDS";
$check_col_str = implode(":", $explode_col_str_arr);
if($this->report_obj->in_multiarray($check_col_str . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true){
continue;
}
$crm_id_count_done = true;
}elseif ($i > 0 && $this->generate_type == "grouping" && $this->report_obj->in_multiarray($this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true) {
continue;
}
// detail_selectedcolumns_arr
$first_td = true;
// skipp group columns in case not in selectedcolumns_arr end
// ITS4YOU-CR SlOl 17. 2. 2014 10:23:31
$is_hid = strpos($fld->name, "_hid");
if ($is_hid === false) {
if ($this->generate_type == "grouping") {
$summaries_fld_test = explode("_", $fld->name);
$smft_lk = ITS4YouReports_Functions_Helper::count($summaries_fld_test) - 1;
if (in_array(strtolower($summaries_fld_test[$smft_lk]), $this->calculation_type_array)) {
$calculation_type = $summaries_fld_test[$smft_lk];
$fld_name = "";
for ($index = 0; $index < (ITS4YouReports_Functions_Helper::count($summaries_fld_test)); $index++) {
if ($fld_name != "") {
$fld_name .= "_";
}
$fld_name .= $summaries_fld_test[$index];
}
} else {
$fld_name = $fld->name;
}
// we will skipp 2,3 group by values to display later correct values !!
if ($this->generate_type == "grouping" && in_array($fld_name, $group_cols)) {
continue;
}
}
$hid_url = "";
$fld_hid = $adb->query_result($result, $f_i, $fld->name . "_hid");
if (array_key_exists($fld->name, $this->ui10_fields) && !empty($custom_field_values[$i])) {
$fld_hid = $custom_field_values[$i];
}
if (isset($fld_hid) && $fld_hid != "") {
$entitytype = getSalesEntityType($fld_hid);
if ($entitytype != "") {
global $site_URL;
switch ($entitytype) {
case "Calendar":
$hid_url = $site_URL.'/index.php?module=Calendar&view=Detail&record=' . $fld_hid . '&return_module=ITS4YouReports&return_action=resultGenerate&return_id=' . vtlib_purify($_REQUEST["record"]) . '&activity_mode=Task';
break;
case "Events":
$hid_url = $site_URL.'/index.php?module=Calendar&view=Detail&record=' . $fld_hid . '&return_module=ITS4YouReports&return_action=resultGenerate&return_id=' . vtlib_purify($_REQUEST["record"]) . '&activity_mode=Events';
break;
default:
$hid_url = $site_URL.'/index.php?module=' . $entitytype . '&view=Detail&record=' . $fld_hid . '&return_module=ITS4YouReports&return_action=resultGenerate&return_id=' . vtlib_purify($_REQUEST["record"]);
break;
}
} else {
$user = 'no';
$u_result = $adb->pquery("SELECT count(*) as count from vtiger_users where id = ?", array($fld_hid));
if ($adb->query_result($u_result, 0, 'count') > 0) {
$user = 'yes';
}
if (is_admin($current_user)) {
global $site_URL;
if ($user == 'no') {
$hid_url = "$site_URL/index.php?module=Settings&action=GroupDetailView&groupId=" . $fld_hid;
} else {
$hid_url = "$site_URL/index.php?module=Users&view=Detail&record=" . $fld_hid;
}
}
}
}
$fld_type = $column_definitions[$i]->type;
if (array_key_exists($fld->name, $this->ui10_fields) && !empty($custom_field_values[$i])) {
$type = getSalesEntityType($custom_field_values[$i]);
$tmp = getEntityName($type, $custom_field_values[$i]);
if (is_array($tmp)) {
foreach ($tmp as $key => $val) {
$fieldvalue = $val;
break;
}
} else {
$fieldvalue = $custom_field_values[$i];
}
} else {
if ($custom_field_values[$i] != '') {
if (is_numeric($custom_field_values[$i])) {
$fieldvalue = $custom_field_values[$i];
} else {
$fieldvalue = getTranslatedString($custom_field_values[$i]);
}
} else {
$fieldvalue = '';
}
}
$fieldvalue = str_replace("<", "&lt;", $fieldvalue);
$fieldvalue = str_replace(">", "&gt;", $fieldvalue);
//check for Roll based pick list
$temp_val = $fld->name;
if (array_key_exists($temp_val, $picklistArray)) {
if (!in_array($custom_field_values[$i], $picklistArray[$fld->name]) && $custom_field_values[$i] != '')
$fieldvalue = $app_strings['LBL_NOT_ACCESSIBLE'];
}
if (!empty($picklistArray) && array_key_exists($temp_val, $picklistArray[1])) {
$temp = explode(",", str_ireplace(' |##| ', ',', $fieldvalue));
$temp_val = Array();
foreach ($temp as $key => $val) {
if (!in_array(trim($val), $picklistArray[1][$fld->name]) && trim($val) != '') {
$temp_val[] = $app_strings['LBL_NOT_ACCESSIBLE'];
} else
$temp_val[] = $val;
}
$fieldvalue = (is_array($temp_val)) ? implode(", ", $temp_val) : '';
}
if ($fieldvalue == "") {
$fieldvalue = "-";
} else if ($fld->name == 'LBL_ACTION') {
global $site_URL;
$fieldvalue = "<a href='$site_URL/index.php?module={$this->primarymodule}&view=Detail&record={$fieldvalue}' target='_blank'>" . getTranslatedString('LBL_VIEW_DETAILS') . "</a>";
} else if (stristr($fieldvalue, "|##|")) {
// $fieldvalue = str_ireplace(' |##| ', ', ', $fieldvalue);
} else if ($fld_type == "date" || $fld_type == "datetime") {
$fieldvalue = getValidDisplayDate($fieldvalue);
}
$bg_color = "";
if ($this->generate_type == "grouping") {
if ($i == 0 && in_array($fld->name, $this->g_flds)) {
$group_value = $custom_field_values[$i];
}
if (isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] != "cols" && $this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$bg_color_val = $this->g_colors[1];
} elseif (isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$bg_color_val = $this->g_colors[2];
} else {
$bg_color_val = $this->g_colors[0];
}
$bg_color = "background-color:$bg_color_val;";
}
//$txt_align = $this->getFldAlignment($fld->name, $fieldvalue);
$fld_style_arr = $this->getFldStyle($fld->name, $fieldvalue);
$fld_style = $this->getFldStyleString($fld_style_arr);
if ($this->generate_type == "grouping" && is_numeric(floatval($fieldvalue)) && !in_array($fld->name, $this->group_cols_array)) {
$fld_name_exploded = explode("_", $fld->name);
$calculation_type = $fld_name_exploded[(ITS4YouReports_Functions_Helper::count($fld_name_exploded) - 1)];
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$grouping_totals[$fld->name][$currency_id][] = number_format(floatval($fieldvalue), 3, ".", "");
} else {
$grouping_totals[$fld->name][] = number_format(floatval($fieldvalue), 3, ".", "");
}
}
// timeline_type2"]=="cols REPORT
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$array_to_totals = array($result, $custom_field_values, $i, $t_y);
$currency_string = $this->get_currency_sumbol_str($currency_id);
$group2_arr = $this->getSubGroupCols($group_value, 1, '', $currency_id, $array_to_totals);
if (!empty($group2_arr["headers"])) {
foreach($group2_arr["headers"] as $g2_header_key => $g2_header_arr){
$group2_headers[$g2_header_key] = $g2_header_arr;
}
}
}
// charts array population start
$ch_fldname = strtolower($fld->name);
if (!empty($this->charts) && !empty($this->charts["charttypes"])) {
$this->setChArrayValues("charttitle", '', $this->charts["charttitle"]);
if($this->charts["x_group"]=="group1" && in_array($ch_fldname, $this->charts["charts_ds_columns"])){
$this->setDataseriesArray($group_value, $fieldvalue, $currency_id, $ch_fldname);
}
}
// charts array population end
// * ** GROUP INFO ROW DISPLAY for GROUPS In case selected columns not empty *** GROUPING REPORT *
if ($first_td === true && $this->generate_type == "grouping" && ITS4YouReports_Functions_Helper::count($this->g_colors) == 1 && ITS4YouReports_Functions_Helper::count($this->detail_selectedcolumns_arr) > 0) {
if (!isset($this->summaries_header) || empty($this->summaries_header)) {
$this->summaries_header = $header;
}
$header_col_lstr = "";
if (isset($this->summaries_header[$i]["label"]) && trim($this->summaries_header[$i]["label"]) != "") {
$header_col_lbl = $this->summaries_header[$i]["label"];
} else {
$header_col_as = $clear_fld_name;
$header_col_str = $this->columns_array[$header_col_as];
$header_col_lbl = self::getHeaderLabel($this->report_obj->record, "SC", $header_col_as, $header_col_str);
}
// header population for Groups row start
if ($this->selectedcolumns_header_row == "") {
$header = array();
if (!empty($selectedcolumns_arr)) {
foreach ($selectedcolumns_arr as $sc_key => $sc_array) {
$sc_header_style = " style='" . $this->header_style . "' ";
$sc_column_str = $sc_array["fieldcolname"];
$headerLabel = self::getHeaderLabel($this->report_obj->record, "SC", "", $sc_column_str);
$header[] = array("style" => $sc_header_style, "label" => $headerLabel,);
if (!empty($this->detail_columns_array)) {
$columnsArray = $this->detail_columns_array;
} else {
$columnsArray = $this->columns_array;
}
$fldName = $columnsArray[$sc_column_str]['fld_alias'];
if (XlsCurrencyColumn::showXlsCurrencyColumn() && self::isAddCurrencyField($this, $fldName, $columnsArray)) {
$header[] = array('style' => $sc_header_style, 'label' => vtranslate('LBL_CURRENCY'),);
}
}
$sc_header = $sc_header_sp = "";
// $sc_header_sp .= "<td class='rpt4youGrpHead0' colspan='".count($header)."'>&nbsp;</td>";
// $sc_header_sp .= "</tr>";
// $sc_header_sp .= "<tr>";
foreach ($header as $header_f_arr) {
$header_style = $header_f_arr["style"];
$headerLabel = $header_f_arr["label"];
$sc_header .= "<td class='rpt4youCellLabel' rowspan='1' colspan='1' $header_style align='center' nowrap >$headerLabel</td>";
}
$sc_header .= "</tr>";
$sc_header .= "<tr>";
$this->selectedcolumns_header_row = $sc_header;
//$this->selectedcolumns_header_row_sp = $sc_header_sp;
}
$this->display_group_totals = false;
}
// header population for Groups row end
if ($display_groupinfo_row === true && ITS4YouReports_Functions_Helper::count($this->g_flds) == 1) {
$sp_group_value = $custom_field_values[$this->group_cols_array[1]];
if ($group_info_tr_added !== true) {
$sm_calculation_type = "";
// if($f_i==0){
// $group_info_tr .= $this->selectedcolumns_header_row;
// }
if (isset($this->summaries_columns) && !empty($this->summaries_columns)) {
$detail_row_info = array();
foreach ($this->summaries_columns as $sm_key => $sm_col_array) {
$sm_col_str = $sm_col_array['columnname'];
$sm_col_alias = "";
$sm_col_str_exploded = explode(":", $sm_col_str);
$sm_lk = (ITS4YouReports_Functions_Helper::count($sm_col_str_exploded) - 1);
if (in_array(strtolower($sm_col_str_exploded[$sm_lk]), $this->calculation_type_array)) {
$sm_calculation_type = strtolower($sm_col_str_exploded[$sm_lk]);
$sm_col_lbl_str = implode(":", $sm_col_str_exploded);
unset($sm_col_str_exploded[$sm_lk]);
$sm_col_str = implode(":", $sm_col_str_exploded);
if (isset($this->columns_array[$sm_col_str]["fld_alias"]) && $this->columns_array[$sm_col_str]["fld_alias"] != "") {
$sm_col_alias = $this->columns_array[$sm_col_str]["fld_alias"];
}
$sm_col_alias .= "_$sm_calculation_type";
}
$sm_value = $custom_field_values[$sm_col_alias];
$sm_col_Label = self::getHeaderLabel($this->report_obj->record, "SM", $sm_col_alias, $sm_col_lbl_str);
// $header_col_lstr = ";";
// $detail_row_info[] = $sm_col_Label." = ".$this->getFldNumberFormat($sm_col_alias, $sm_value, $currency_id).$header_col_lstr;
$sumColsValue = $this->getFldNumberFormat($sm_col_alias, $sm_value, $currency_id);
if (is_array($sumColsValue)) {
$sumColsValue = implode('', $sumColsValue);
}
$detail_row_info[] = $sm_col_Label . " = " . $sumColsValue;
}
}
$group_info_tr_value = $this->getFldNumberFormat($this->group_cols_array[1], $sp_group_value, $currency_id, true);
// $group_records_count = count($this->result_array[$sp_group_value]);
if (array_key_exists('crmid_r_count', $custom_field_values)) {
$group_records_count = $custom_field_values['crmid_r_count'];
} else {
$group_records_count = $custom_field_values['crmid_count'];
}
$group_info_fld_str = $this->columns_array[$this->group_cols_array[1]];
$group_info_headerLabel = self::getHeaderLabel($this->report_obj->record, "SC", $this->group_cols_array[1], $group_info_fld_str);
//$group_info_tr .= "<tr><td class='rpt4youGrpHead' colspan='" . count($header) . "' style='text-align:left;background-color:#EEEEEE;' nowrap ><b>";
$group_info_tr .= "$group_info_headerLabel = $group_info_tr_value ($group_records_count): ";
$group_info_tr .= implode(";", $detail_row_info);
//$group_info_tr .= "</b></td></tr>";
$group_info_tr_added = true;
}
}
// * ** GROUP INFO ROW DISPLAY for GROUPS In case selected columns not empty END *** STANDARD REPORT *
} else {
// Group Value (Count) Info in case summaries columns empty start
if ($display_groupinfo_row === true) {
$sp_group_value = $custom_field_values[$this->group_cols_array[1]];
if ($sp_group_value != $direct_group_info_tr_value) {
$direct_group_info_tr_value = $sp_group_value;
$group_info_tr_value = $this->getFldNumberFormat($this->group_cols_array[1], $sp_group_value, $currency_id);
// $group_records_count = count($this->result_array[$sp_group_value]);
$group_records_count = $custom_field_values["crmid_count"];
$group_info_fld_str = $this->columns_array[$this->g_flds[0]];
$group_info_headerLabel = self::getHeaderLabel($this->report_obj->record, "SC", $this->g_flds[0], $group_info_fld_str);
//$group_info_tr = "<tr><td class='rpt4youGrpHead' colspan='" . count($header) . "' style='text-align:left;background-color:#EEEEEE;' nowrap ><b>";
$group_info_tr .= "$group_info_headerLabel = $group_info_tr_value ($group_records_count)";
//$group_info_tr .= "</b></td></tr>";
$group_info_tr_added = true;
}
}
// Group Value (Count) Info in case summaries columns empty end
// * ** DEFAULT VALUE DISPLAY *** *
//$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:$txt_align;$bg_color' nowrap >" . $this->getFldNumberFormat($fld->name, $fieldvalue, $currency_id) . "$currency_string</td>";
// default amount with symbol
$fieldValues = $this->getFldNumberFormat($fld->name, $fieldvalue, $currency_id);
if (is_array($fieldValues)) {
$r_data[$xls_ri][] = $fieldValues[0];
$r_data[$xls_ri][] = $fieldValues[1];
} else {
$r_data[$xls_ri][] = $fieldValues;
}
}
// * ** DISPLAY timeline_type2 == "cols" ***
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$g_ri = 1;
foreach ($group2_headers as $group_h_key => $group_h_arr) {
if (isset($group2_arr["values"][$group_h_key]) && !empty($group2_arr["values"][$group_h_key])) {
// foreach ($group2_arr["values"][$group_h_key] as $gv_arr) {
for ($gv_i = 0; $gv_i < ITS4YouReports_Functions_Helper::count($group_h_arr); $gv_i++) {
if (isset($group2_arr["values"][$group_h_key][$gv_i]) && !empty($group2_arr["values"][$group_h_key][$gv_i])) {
$gv_arr = $group2_arr["values"][$group_h_key][$gv_i];
//$txt_align = $gv_arr["text-align"];
$gv_value = $gv_arr["value"];
$gv_fld_name = strtolower($gv_arr["fld_name"]);
if ($gv_fld_name != "") {
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$grouping_totals[$group_h_key][$gv_fld_name][$currency_id][] = $gv_value;
} else {
$grouping_totals[$group_h_key][$gv_fld_name][] = $gv_value;
}
}
$fw_weight = "";
if ($group_h_key == "LBL_GROUPING_TOTALS") {
$fw_weight = "font-weight:bold;";
}
//$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:$txt_align;$fw_weight' nowrap >" . $this->getFldNumberFormat($gv_fld_name, $gv_value, $currency_id) . "</td>";
$fieldValues = $this->getFldNumberFormat($gv_fld_name, $gv_value, $currency_id);
if (is_array($fieldValues)) {
$r_data[$xls_ri][] = $fieldValues[0];
$r_data[$xls_ri][] = $fieldValues[1];
} else {
if (empty($fieldValues)) {
if (!self::isSingleCellField($gv_fld_name)) {
if (ITS4YouReports::isInventoryModule($this->report_obj->primarymodule)) {
$r_data[$xls_ri][] = '';
$r_data[$xls_ri][] = '';
} else {
$r_data[$xls_ri][] = '';
}
} else {
$r_data[$xls_ri][] = '';
}
} else {
$r_data[$xls_ri][] = $fieldValues;
}
}
$g_ri++;
}
}
} else {
for ($gv_i = 0; $gv_i < ITS4YouReports_Functions_Helper::count($group_h_arr); $gv_i++) {
//$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:center;' nowrap > </td>";
$r_data[$xls_ri][] = " ";
$g_ri++;
}
}
}
}
// ITS4YOU-CR SlOl 19. 5. 2016 6:47:34 custom calculation values population
if(in_array($this->columns_array[$fld->name],$this->cc_array)){
$cc_fld_name = $fld->name;
$this->cc_values_array[$cc_fld_name] = $custom_field_values[$fld->name];
}
// TOTALS CALCULATION START
if (isset($this->columns_array[$fld->name])) {
$columns_array_lbl = $this->columns_array[$fld->name];
} elseif ($this->columns_array[$fld->table . "." . $fld->name]) {
$columns_array_lbl = $this->columns_array[$fld->table . "." . $fld->name];
} elseif ($fld->table != "") {
$columns_array_lbl = $fld->table . "." . $fld->name;
} else {
$columns_array_lbl = $fld->name;
}
$TheaderLabel = self::getHeaderLabel($reportid, "CT", $fld->name, $columns_array_lbl);
$fld_totals_key = $fld->name;
// $to_totals_res = $this->setToTotalsArray($to_totals_res,$fld_totals_key,$fieldvalue,$to_totals_array,$currency_id);
$this->to_totals_res = $this->setToTotalsArray($noofrows,$this->to_totals_res, $fld_totals_key, $fieldvalue, $this->to_totals_array, $currency_id);
// TOTALS CALCULATION END
}
$first_td = false;
// ITS4YOU-END 17. 2. 2014 10:23:33
$gc_i++;
}
if(!empty($this->cc_array)){
$r_data[$xls_ri] = $this->displayCustomCalculationsXls($r_data[$xls_ri], $currency_id);
}
// timeline_type3"]=="cols" REPORT
$gcols3_r_data = array();
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] != "cols" && $this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
//$gcols3_valtemplate = "";
$tl_g3_colspan = 1;
if (empty($this->group_data_array[$group_value])) {
$this->setGroupDataArray($group_value, $currency_id);
}
$group_value = html_entity_decode($group_value, ENT_QUOTES, $default_charset);
if (isset($currency_id) && $currency_id != "") {
$group_data_array = $this->group_data_array[$group_value][$currency_id];
} else {
$group_data_array = $this->group_data_array[$group_value];
}
// foreach($this->result_array[$group_value] as $group_row_key => $group_row_array){
foreach ($group_data_array as $group_row_key => $group_row_array) {
// continue in case summary filter will not contain group values
// if(!array_key_exists($group_row_key,$this->group_data_array[$group_value])){
// continue;
// }
//$gcols3_valtemplate .= "</tr><tr>";
$bg_color_val = $this->g_colors[2];
$bg_color = "background-color:$bg_color_val;";
// this is possible only in case group 2 = rows and group 3 = cols, so static rpt4youGrpHead_1 is ok here
//$gcols3_valtemplate .= "<td class='rpt4youGrpHead_1' style='text-align:left;' nowrap >" . $group_row_key . "</td>";
$gcols3_r_data[$group_row_key][] = $group_row_key;
foreach ($header as $header_f_key => $header_f_arr) {
$headerLabel = $header_f_arr["label"];
if (!in_array($headerLabel, array("LBL_GROUPING_TOTALS")) && $header_f_key !== 0) {
if (isset($group_data_array[$group_row_key][$headerLabel])) {
foreach ($group_data_array[$group_row_key][$headerLabel] as $fld_key => $fld_value) {
$clear_fld_name_arr = explode("_", $fld_key);
$clear_fld_calculation_type = strtoupper($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
unset($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
$clear_fld_name = implode("_", $clear_fld_name_arr);
if (in_array($fld_key, $this->skip_fields) || in_array($clear_fld_name, $this->skip_fields)) {
continue;
}
if ($this->report_obj->in_multiarray($this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true) {
continue;
}
//$txt_align = $this->getFldAlignment($fld_key, $fld_value);
$calculation_arr = explode("_", $fld_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
$ct_fldstr_sum = $ct_fldstr . "_sum";
if ($currency_id != "") {
$group_totals[$group_value][$currency_id][$group_row_key][$fld_key] = $group_totals[$group_value][$currency_id][$group_row_key][$ct_fldstr_sum];
$group_f_totals[$group_value][$currency_id][$headerLabel][$fld_key][] = $fld_value;
$group_f_totals[$group_value][$currency_id]["row_totals"][$fld_key][] = $fld_value;
} else {
$group_totals[$group_value][$group_row_key][$fld_key] = $group_totals[$group_value][$group_row_key][$ct_fldstr_sum];
$group_f_totals[$group_value][$headerLabel][$fld_key][] = $fld_value;
$group_f_totals[$group_value]["row_totals"][$fld_key][] = $fld_value;
}
} else {
if ($currency_id != "") {
$group_totals[$group_value][$currency_id][$group_row_key][$fld_key][] = $fld_value;
$group_f_totals[$group_value][$currency_id][$headerLabel][$fld_key][] = $fld_value;
$group_f_totals[$group_value][$currency_id]["row_totals"][$fld_key][] = $fld_value;
} else {
$group_totals[$group_value][$group_row_key][$fld_key][] = $fld_value;
$group_f_totals[$group_value][$headerLabel][$fld_key][] = $fld_value;
$group_f_totals[$group_value]["row_totals"][$fld_key][] = $fld_value;
}
}
//$gcols3_valtemplate .= "<td class='rpt4youGrpHead' style='text-align:$txt_align;$bg_color' nowrap >" . $this->getFldNumberFormat($fld_key, $fld_value, $currency_id) . "</td>";
$fieldValues = $this->getFldNumberFormat($fld_key, $fld_value, $currency_id);
if (is_array($fieldValues)) {
$gcols3_r_data[$group_row_key][] = $fieldValues[0];
$gcols3_r_data[$group_row_key][] = $fieldValues[1];
} else {
$gcols3_r_data[$group_row_key][] = $fieldValues;
}
}
} else {
for ($g3_i = 0; $g3_i < $this->sum_col_i; $g3_i++) {
//$gcols3_valtemplate .= "<td class='rpt4youGrpHead' style='text-align:center;font-weight:bold;$bg_color' nowrap > </td>";
$gcols3_r_data[$group_row_key][] = " ";
}
}
} elseif ($headerLabel == "LBL_GROUPING_TOTALS") {
$count_value = 0;
if ($currency_id != "") {
$group_totals_array = $group_totals[$group_value][$currency_id][$group_row_key];
} else {
$group_totals_array = $group_totals[$group_value][$group_row_key];
}
foreach ($group_totals_array as $g_t_key => $g_t_array) {
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "count") {
foreach ($g_t_array as $count_val) {
$count_value += $count_val;
}
}
if ($calculation_type == "avg") {
$fld_value = (array_sum($g_t_array) / $count_value);
} else {
$fld_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $fld_value);
//$gcols3_valtemplate .= "<td class='rpt4youGrpHead' style='text-align:$txt_align;font-weight:bold;$bg_color' nowrap >" . $this->getFldNumberFormat($g_t_key, $fld_value, $currency_id) . "</td>";
$fieldValues = $this->getFldNumberFormat($g_t_key, $fld_value, $currency_id);
if (is_array($fieldValues)) {
$gcols3_r_data[$group_row_key][] = $fieldValues[0];
$gcols3_r_data[$group_row_key][] = $fieldValues[1];
} else {
$gcols3_r_data[$group_row_key][] = $fieldValues;
}
}
}
}
}
$bg_color_val1 = $this->g_colors[1];
$bg_color1 = "background-color:$bg_color_val1;";
foreach ($header as $header_f_key => $header_f_arr) {
$headerLabel = $header_f_arr["label"];
if ($currency_id != "") {
$group_totals_f_array = $group_f_totals[$group_value][$currency_id];
} else {
$group_totals_f_array = $group_f_totals[$group_value];
}
if (!in_array($headerLabel, array("LBL_GROUPING_TOTALS")) && $header_f_key !== 0) {
if (isset($group_totals_f_array[$headerLabel]) && !empty($group_totals_f_array[$headerLabel])) {
$count_value = 0;
foreach ($group_totals_f_array[$headerLabel] as $g_t_key => $g_t_array) {
$clear_fld_name_arr = explode("_", $g_t_key);
$clear_fld_calculation_type = strtoupper($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
unset($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
$clear_fld_name = implode("_", $clear_fld_name_arr);
if (in_array($g_t_key, $this->skip_fields) || in_array($clear_fld_name, $this->skip_fields)) {
continue;
}
if ($this->report_obj->in_multiarray($this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true) {
continue;
}
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "count") {
foreach ($g_t_array as $count_val) {
$count_value += $count_val;
}
}
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
$ct_fldstr_sum = $ct_fldstr . "_sum";
$g_t_array = $group_totals_f_array[$headerLabel][$ct_fldstr_sum];
$fld_value = (array_sum($g_t_array) / $count_value);
} else {
$fld_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $fld_value);
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$grouping_totals[$headerLabel][$g_t_key][$currency_id][] = $fld_value;
} else {
$grouping_totals[$headerLabel][$g_t_key][] = $fld_value;
}
// charts array population start
if ($g_t_key == $this->charts["charts_ds_column"]) {
// SPECIAL CHART DATA POPULATION FOR G3 COLS
$cols_alias = "";
if ($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$cols_alias = $this->g_flds[1];
} elseif ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$cols_alias = $this->g_flds[2];
}
if (!isset($this->ch_array["dataseries_label"])) {
$this->setDataseriesLabel($cols_alias);
}
//$dataseries_label_key = self::getHeaderLabel($this->report_obj->record, "SM", $this->g_flds[2], $this->columns_array[$this->g_flds[2]]);
//$this->setChArrayValues("dataseries_label",'key',$dataseries_label_key);
if ($currency_id != "") {
$ch_subkey = $headerLabel . " (" . $this->currency_symbols[$currency_id] . ")";
} else {
$ch_subkey = $headerLabel;
}
// addToSubvalChArrayValues($ch_key,$ch_subkey,$ch_value,$option_key="",$currency_id=""){
$this->addToSubvalChArrayValues("dataseries", $headerLabel, $fld_value, $group_value, $currency_id);
if ($this->ch_array["charttype"] != "horizontal") {
$this->setChArrayValues("dataseries", $ch_subkey, $fld_value);
}
}
// charts array population end
//$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:$txt_align;$bg_color1' nowrap >" . $this->getFldNumberFormat($g_t_key, $fld_value, $currency_id) . "</td>";
// FIRST GROUP amount with symbol
$fieldValues = $this->getFldNumberFormat($g_t_key, $fld_value, $currency_id);
if (is_array($fieldValues)) {
$r_data[$xls_ri][] = $fieldValues[0];
$r_data[$xls_ri][] = $fieldValues[1];
} else {
$r_data[$xls_ri][] = $fieldValues;
}
}
} else {
for ($g3_i = 0; $g3_i < $this->sum_col_i; $g3_i++) {
//$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:center;$bg_color1' nowrap > </td>";
$r_data[$xls_ri][] = " ";
}
}
} elseif ($headerLabel == "LBL_GROUPING_TOTALS") {
$count_value = 0;
if (isset($group_totals_f_array["row_totals"]) && !empty($group_totals_f_array["row_totals"])) {
foreach ($group_totals_f_array["row_totals"] as $g_t_key => $g_t_array) {
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
$ct_fldstr_sum = $ct_fldstr . "_sum";
$g_t_array = $group_totals_f_array["row_totals"][$ct_fldstr_sum];
}
if ($calculation_type == "count") {
foreach ($g_t_array as $count_val) {
$count_value += $count_val;
}
}
if ($calculation_type == "avg") {
$fld_value = (array_sum($g_t_array) / $count_value);
} else {
$fld_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $fld_value);
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$grouping_totals[$headerLabel][$g_t_key][$currency_id][] = $fld_value;
} else {
$grouping_totals[$headerLabel][$g_t_key][] = $fld_value;
}
//$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:$txt_align;font-weight:bold;$bg_color1' nowrap >" . $this->getFldNumberFormat($g_t_key, $fld_value, $currency_id) . "</td>";
$fieldValues = $this->getFldNumberFormat($g_t_key, $fld_value, $currency_id);
if (is_array($fieldValues)) {
$r_data[$xls_ri][] = $fieldValues[0];
$r_data[$xls_ri][] = $fieldValues[1];
} else {
$r_data[$xls_ri][] = $fieldValues;
}
// FIRST GROUP amount with symbol total
}
} else {
for ($g3_i = 0; $g3_i < $this->sum_col_i; $g3_i++) {
//$valtemplate_tr .= "<td class='rpt4youGrpHead' style='text-align:center;$bg_color1' nowrap > </td>";
$r_data[$xls_ri][] = " ";
}
}
}
}
if(isset($gcols3_r_data) && !empty($gcols3_r_data)){
foreach($gcols3_r_data as $gcols_r_arr){
$xls_ri++;
$r_data[$xls_ri] = $gcols_r_arr;
}
$xls_ri++;
}
//$valtemplate_tr .= $gcols3_valtemplate;
}
// details for group 1
if ($this->generate_type == "grouping" && ITS4YouReports_Functions_Helper::count($this->g_colors) == 1) {
if (!empty($selectedcolumns_arr)) {
$layout = Vtiger_Viewer::getDefaultLayoutName();
$r_data = $this->returnGroupDetailRecordsNew($group_value, $y, $selectedcolumns_arr, $currency_id);
}
}
//$valtemplate_tr .= "</tr>";
// adding tr html of Group Value (Count) Info in case summaries columns empty start
if ($group_info_tr != "") {
$data[$xls_fri][] = $group_info_tr;
$xls_fri++;
//$valtemplate .= $group_info_tr;
}
// adding tr html of Group Value (Count) Info in case summaries columns empty end
//$valtemplate .= $valtemplate_tr;
// ROWS REPORT
if ($this->generate_type == "grouping" && isset($this->g_colors[1]) && $this->g_colors[1] != "" && $this->report_obj->reportinformations["timeline_type2"] != "cols" && ($this->report_obj->reportinformations["timeline_type3"] != "cols" || $this->report_obj->reportinformations["timeline_type3"] == "none")) {
$group2_html = $this->getSubGroupRow($group_value, $currency_id);
foreach($group2_html as $group2_arr){
$xls_fri++;
$r_data[$xls_fri] = $group2_arr;
}
//$valtemplate .= $group2_html;
}
$lastvalue = $newvalue;
$secondvalue = $snewvalue;
$thirdvalue = $tnewvalue;
$arr_val[] = $arraylists;
set_time_limit($php_max_execution_time);
$f_i++;
$xls_ri++;
// GROUPING TOTALS START
$gt_r_data = null;
if ($this->display_group_totals == true && $this->generate_type == "grouping" && $f_i == $noofrows && $this->report_obj->reportinformations["timeline_type2"] != "cols" && ($this->report_obj->reportinformations["timeline_type3"] != "cols" || $this->report_obj->reportinformations["timeline_type3"] == "none")) {
$bg_color_val = $this->g_colors[0];
$bg_color = "background-color:$bg_color_val;";
//$valtemplate .= "<tr>";
//$valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' style='text-align:left;" . $this->grouping_totals_bg_color . "' nowrap >" . getTranslatedString("LBL_GROUPING_TOTALS", $this->getCurrentModule4You()) . "</td>";
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
$to_display = $gt_sr_data = array();
$gt_xls_ri = 0;
$gt_xls_sri = 0;
$prevCurrencyId = null;
$populateKey = false;
foreach ($grouping_totals AS $g_t_key => $currency_array) {
if(!empty($currency_array)){
foreach ($currency_array AS $currency_key => $g_t_array) {
if (empty($prevCurrencyId) && $currency_key !== $prevCurrencyId) {
$prevCurrencyId = $currency_key;
$populateKey = true;
}
if ($populateKey) {
$gt_r_data[$gt_xls_ri][] = getTranslatedString("LBL_GROUPING_TOTALS", $this->getCurrentModule4You());
$gt_xls_ri++;
}
$g_t_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
//$txt_align = $this->getFldAlignment($g_t_key, $g_t_value);
$fld_style_arr = $this->getFldStyle($g_t_key, $g_t_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
$to_display[$g_t_key]["values"] = $this->getFldNumberFormat($g_t_key, $g_t_value, $currency_key);
//$to_display[$g_t_key]["textalign"] = $txt_align;
$to_display[$g_t_key]["fld_style"] = $fld_style;
$fieldValues = $this->getFldNumberFormat($g_t_key, $g_t_value, $currency_key);
if (is_array($fieldValues)) {
$gt_sr_data[$gt_xls_sri][] = $fieldValues[0];
$gt_sr_data[$gt_xls_sri][] = $fieldValues[1];
} else {
$gt_sr_data[$gt_xls_sri][] = $fieldValues;
}
$gt_xls_sri++;
}
$gt_xls_ri++;
}
}
foreach($gt_r_data as $gt_r_key => $gt_r_data_val){
if(!empty($gt_sr_data[$gt_r_key])){
foreach($gt_sr_data[$gt_r_key] as $gt_sr_data_val){
$gt_r_data[$gt_r_key][] = $gt_sr_data_val;
}
}else{
unset($gt_r_data[$gt_r_key]);
}
}
/*foreach ($to_display AS $td_key => $td_arr) {
$txt_align = $td_arr["textalign"];
$td_value = $td_arr["values"];
$r_data[$xls_ri][] = $td_value;
//$valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' style='text-align:$txt_align;" . $this->grouping_totals_bg_color . "' nowrap >" . $td_value . "</td>";
}*/
} else {
$xls_ri++;
$r_data[$xls_ri][] = getTranslatedString("LBL_GROUPING_TOTALS", $this->getCurrentModule4You());
foreach ($grouping_totals AS $g_t_key => $g_t_array) {
$g_t_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
//$txt_align = $this->getFldAlignment($g_t_key, $g_t_value);
$fieldValues = $this->getFldNumberFormat($g_t_key, $g_t_value);
if (is_array($fieldValues)) {
$r_data[$xls_ri][] = $fieldValues[0];
$r_data[$xls_ri][] = $fieldValues[1];
} else {
$r_data[$xls_ri][] = $fieldValues;
}
//$valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' style='text-align:$txt_align;" . $this->grouping_totals_bg_color . "' nowrap >" . $this->getFldNumberFormat($g_t_key, $g_t_value) . "</td>";
}
}
//$valtemplate .= "</tr>";
}
if(!empty($r_data)){
foreach($r_data as $row_data){
$data[$xls_fri] = $row_data;
$xls_fri++;
}
}
if(!empty($gt_r_data)){
foreach($gt_r_data as $gt_r_data_arr){
$xls_fri++;
$data[$xls_fri] = $gt_r_data_arr;
}
}
$f_r_i++;
// GROUPING TOTALS END
} while ($custom_field_values = $adb->fetch_array($result));
// GROUPING TOTALS START
// GROUPING TOTAL FOR COLS START
$to_totals_data_array = $to_totals_subdata_array = array();
if ($this->generate_type == "grouping" && (($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") || ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols")) && !empty($grouping_totals)) {
$xls_t_i = 0;
$bg_color = "background-color:$bg_color_val;";
// $valtemplate .= "<tr>";
// $valtemplate .= "<td class='rpt4youGrpHeadGroupTotals' nowrap style='text-align:left;" . $this->grouping_totals_bg_color . "' nowrap >" . getTranslatedString("LBL_GROUPING_TOTALS", $this->getCurrentModule4You()) . "</td>";
// foreach ($grouping_totals as $grouping_totals_key => $grouping_totals_array) {
$g_t_value_display_arr = array();
foreach ($header as $gh_i => $gh_array) {
if ($gh_i > 0 && isset($grouping_totals[$gh_array["raw"]])) {
$grouping_totals_array = $grouping_totals[$gh_array["raw"]];
foreach ($grouping_totals_array AS $g_t_key => $g_t_array) {
if (ITS4YouReports::isInventoryModule($this->report_obj->primarymodule)) {
foreach ($g_t_array as $g_ft_currency_id => $g_ft_array) {
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "count") {
$count_value = 0;
foreach ($g_ft_array as $count_val) {
$count_value += $count_val;
}
}
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
if (!empty($grouping_totals_array[$ct_fldstr . "_sum"][$g_ft_currency_id])) {
$ct_fldstr_sum = $ct_fldstr . "_sum";
} else {
$ct_fldstr_sum = $ct_fldstr . "_SUM";
}
$g_ft_array = $grouping_totals_array[$ct_fldstr_sum][$g_ft_currency_id];
$g_t_value = (array_sum($g_ft_array) / $count_value);
} else {
$g_t_value = $this->getGroupTotalsValue($g_t_key, $g_ft_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $g_t_value);
$fieldValues = $this->getFldNumberFormat($g_t_key, $g_t_value, $g_ft_currency_id);
if (is_array($fieldValues)) {
$g_t_value_display_arr[$gh_i][$g_ft_currency_id][] = $fieldValues[0];
$g_t_value_display_arr[$gh_i][$g_ft_currency_id][] = $fieldValues[1];
} else {
$g_t_value_display_arr[$gh_i][$g_ft_currency_id][] = $fieldValues;
}
}
//$g_t_value_display = implode("<br>", $g_t_value_display_arr);
} else {
$calculation_arr = explode("_", $g_t_key);
$calculation_type = strtolower($calculation_arr[(ITS4YouReports_Functions_Helper::count($calculation_arr) - 1)]);
if ($calculation_type == "count") {
$count_value = 0;
if (!empty($g_t_array)) {
foreach ($g_t_array as $count_key => $count_val) {
if (is_array($count_val)) {
$count_value += array_sum($count_val);
} else {
$count_value += $count_val;
}
}
}
}
if ($calculation_type == "avg") {
$ct_fldstr = "";
$ct_fi = (ITS4YouReports_Functions_Helper::count($calculation_arr) - 1);
for ($ct_i = 0; $ct_i < $ct_fi; $ct_i++) {
if ($ct_i > 0 && $ct_i != $ct_fi) {
$ct_fldstr .= "_";
}
$ct_fldstr .= $calculation_arr[$ct_i];
}
if (!empty($grouping_totals_array[$ct_fldstr . "_sum"])) {
$ct_fldstr_sum = $ct_fldstr . "_sum";
} else {
$ct_fldstr_sum = $ct_fldstr . "_SUM";
}
$g_t_array = $grouping_totals_array[$ct_fldstr_sum];
$g_t_value = (array_sum($g_t_array) / $count_value);
} else {
$g_t_value = $this->getGroupTotalsValue($g_t_key, $g_t_array);
}
//$txt_align = $this->getFldAlignment($g_t_key, $g_t_value);
// $g_t_value_display = $this->getFldNumberFormat($g_t_key, $g_t_value);
$g_t_value_display_arr[$gh_i][1][] = $this->getFldNumberFormat($g_t_key, $g_t_value);
}
}
}
}
$cd_i = 0;
$c_count_cols = 0;
foreach($g_t_value_display_arr as $h_t_i => $g_t_array){
foreach($g_t_array as $currency_id => $data_array){
if($c_count_cols==0){
$c_count_cols = ITS4YouReports_Functions_Helper::count($data_array);
}
$to_totals_data_array_tmp[$currency_id][0][0] = getTranslatedString("LBL_GROUPING_TOTALS", $this->getCurrentModule4You());
foreach($data_array as $data_val){
$to_totals_data_array_tmp[$currency_id][$cd_i][] = $data_val;
}
}
$cd_i++;
}
$c_data = array();
$n_row_i = 0;
$c_cols_i = ITS4YouReports_Functions_Helper::count($g_t_value_display_arr);
foreach($to_totals_data_array_tmp as $currency_id => $currency_data){
for ($ni=0;$ni<$c_cols_i;$ni++){
if($ni==0){
$nc_count_cols = $c_count_cols+1;
}else{
$nc_count_cols = $c_count_cols;
}
if(isset($currency_data[$ni]) && !empty($currency_data[$ni])){
for ($nci=0;$nci<$nc_count_cols;$nci++){
$c_data[$n_row_i][] = $currency_data[$ni][$nci];
}
}else{
for ($nci=0;$nci<$nc_count_cols;$nci++){
$c_data[$n_row_i][] = " ";
}
}
}
$n_row_i++;
}
//$header_merge[$header_f_key] = $headerLabel;
$header_merge = array();
$go_merge = false;
$c_h_i = 0;
if ($this->generate_type == "grouping" && $this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols" && !empty($grouping_totals)) {
$c_h_i++;
}
foreach($header as $header_key => $header_arr){
if($c_h_i>0){
for ($nci=0;$nci<$nc_count_cols;$nci++){
if(isset($group2_headers) && !empty($group2_headers) && isset($group2_headers[$header_arr["raw"]][$nci]["label"])){
$go_merge = true;
$header_merge[$c_h_i] = $group2_headers[$header_arr["raw"]][$nci]["label"];
}elseif(isset($group2_headers) && !empty($group2_headers) && isset($group2_headers[$header_arr["label"]][$nci]["label"])){
$go_merge = true;
$header_merge[$c_h_i] = $group2_headers[$header_arr["label"]][$nci]["label"];
}elseif(isset($group2_headers) && !empty($group2_headers) && isset($group2_headers[$header_key][$nci]["label"])){
$go_merge = true;
$header_merge[$c_h_i] = $group2_headers[$header_key][$nci]["label"];
} elseif ($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$header_merge[$c_h_i] = vtranslate('LBL_CURRENCY');
}
$c_h_i++;
}
}else{
$c_h_i++;
}
}
if(!empty($c_data)){
foreach($c_data as $row_data){
$data[$xls_fri] = $row_data;
$xls_fri++;
}
}
//$valtemplate .= $valtemplate_totals;
//$valtemplate .= "</tr>";
}
} else {
$data[0][] = vtranslate("LBL_NO_DATA_TO_DISPLAY", $this->getCurrentModule4You());
}
// GROUPING TOTAL FOR COLS END
// GROUPING TOTALS END
if (!empty($this->to_totals_res)) {
//$report_html .= "<br>";
//$report_html .= $this->getTotalsHTML($this->to_totals_res);
$to_totals_data_array = $this->getTotalsHTML($this->to_totals_res);
}
if(is_array($to_totals_data_array) && !empty($to_totals_data_array)){
$data[$xls_fri][] = " ";
$xls_fri++;
foreach($to_totals_data_array as $row_data){
$data[$xls_fri] = $row_data;
$xls_fri++;
}
}
}
// populate array for XLS export
$headers = array();
if(!empty($header)){
foreach($header as $header_arr){
$headers[] = $header_arr["label"];
}
}
$return_data["headers"] = $headers;
$return_data["data"] = $data;
if($go_merge){
$return_data["merge_count"] = $nc_count_cols;
$return_data["header_merge"] = $header_merge;
}
//exit;
return $return_data;
}
}
}
}
private function setPdfFileName() {
$this->filename = self::$R4YouFilename;
global $current_user;
if (isset($current_user) && $current_user->id != "") {
$layout = Vtiger_Viewer::getDefaultLayoutName();
$this->filename .= "_" . $current_user->id;
$this->filename .= "_" . $this->report_obj->record;
if('v7'===$layout){
$this->filename = $this->report_obj->reportname;
}
$this->pdf_filename = $this->filename . ".pdf";
$this->report_filename = self::$temp_files_path . $this->pdf_filename;
}
}
// ITS4YOU-CR SlOl | 20.8.2015 15:35
private function createPDFFileForScheduler($report_html,$report_html_headerInfo="",$set_pdf_portrait=false){
if (vtlib_isModuleActive("PDFMaker") === true && file_exists('modules/PDFMaker/resources/mpdf/mpdf.php')) {
self::checkInstallationMemmoryLimit();
$layout = Vtiger_Viewer::getDefaultLayoutName();
if (file_exists("modules/ITS4YouReports/classes/Reports4YouDefault.css")) {
$report_html_style = file_get_contents("modules/ITS4YouReports/classes/Reports4YouDefault.css");
}
$report_pdf = str_replace("<@ReportHeaderInfo@>","",$report_html);
require_once 'modules/PDFMaker/resources/mpdf/mpdf.php';
// $mpdf = new mPDF('', // mode - default ''
// 2 '', // format - A4, for example, default ''
// 3 0, // font size - default 0
// 4 '', // default font family
// 5 15, // margin_left
// 6 15, // margin right
// 7 16, // margin top
// 8 16, // margin bottom
// 9 9, // margin header
// 10 9, // margin footer
// 11 'L'); // L - landscape, P - portrait
// !!! DOKONCIT L P STRANKOVANIE !!! OLDO podla typu reportu, stlpcov a group !!!
// $mpdf=new mPDF();
$landscape_format = 'A4';
$portrait_format = 'A4-L';
$export_pdf_format = $landscape_format;
if($this->reports4you_type=="custom_report" && $set_pdf_portrait===true){
$export_pdf_format = $portrait_format;
}elseif ($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$export_pdf_format = $portrait_format;
} elseif ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$export_pdf_format = $portrait_format;
} elseif (isset($this->report_obj->reportinformations["summaries_columns"]) && ITS4YouReports_Functions_Helper::count($this->report_obj->reportinformations["summaries_columns"]) > 7) {
$export_pdf_format = $portrait_format;
} elseif (isset($this->selectedcolumns_arr) && ITS4YouReports_Functions_Helper::count($this->selectedcolumns_arr) > 10 && ITS4YouReports_Functions_Helper::count($this->report_obj->reportinformations["summaries_columns"]) < 2) {
$export_pdf_format = $portrait_format;
}
if (is_writable(self::$temp_files_path)) {
// class mPDF ([ string $mode [, mixed $format [, float $default_font_size [, string $default_font [, float $margin_left , float $margin_right , float $margin_top , float $margin_bottom , float $margin_header , float $margin_footer [, string $orientation ]]]]]])
$mpdf = new mPDF('utf-8', "$export_pdf_format", "", "", "5", "5", "0", "5", "5", "5");
// $this->report_obj->reportinformations["timeline_type2"] cols
// $this->report_obj->reportinformations["timeline_type3"] cols
// $this->report_obj->reportinformations["summaries_columns"]
// $this->selectedcolumns_arr
// Portrait = $mpdf=new mPDF('utf-8', 'A4');
// Landscape = $mpdf=new mPDF('utf-8', 'A4-L');
$mpdf->keep_table_proportions = true;
if(number_format(mPDF_VERSION)<6){
$mpdf->SetAutoFont();
}
if ('v7' !== $layout) {
$mpdf->WriteHTML($report_html_style, 1);
}
$mpdf->WriteHTML($report_pdf);
$mpdf->Output($this->report_filename, 'F');
//if ($directOutput) {
//echo "<script type='text/javascript' >jQuery(document).ready(function(){if(document.getElementById('report_filename')){document.getElementById('report_filename').value='" . $this->report_filename . "';}});</script>";
//}
}
}
}
// ITS4YOU-END
function getGroupingList($all = false) {
$adb = PearDatabase::getInstance();
global $default_charset;
if ($this->reports4you_type == "grouping") {
$sreportsortsql = "select its4you_reports4you_sortcol.* from its4you_reports4you";
$sreportsortsql .= " inner join its4you_reports4you_sortcol on its4you_reports4you.reports4youid = its4you_reports4you_sortcol.reportid";
$sreportsortsql1 = " where its4you_reports4you.reports4youid =? AND its4you_reports4you_sortcol.sortcolid > 3 order by its4you_reports4you_sortcol.sortcolid ASC";
$sreportsortsql2 = " where its4you_reports4you.reports4youid =? AND its4you_reports4you_sortcol.sortcolid < 4 order by its4you_reports4you_sortcol.sortcolid ASC";
if ($all) {
$sreportsortsql .= $sreportsortsql1;
} else {
$sreportsortsql .= $sreportsortsql2;
}
$result = $adb->pquery($sreportsortsql, array($this->report_obj->record));
} else {
$sreportsortsql = "select its4you_reports4you_sortcol.* from its4you_reports4you";
$sreportsortsql .= " inner join its4you_reports4you_sortcol on its4you_reports4you.reports4youid = its4you_reports4you_sortcol.reportid";
$sreportsortsql .= " where its4you_reports4you.reports4youid =? AND sortcolid IN (1,2,3) ";
// i have to order by timeline_type desc in case timeline_type Rows Cols Rows selected, to display Rows Rows Cols report
if ($this->report_obj->reportinformations["timeline_type2"] == "rows" && $this->report_obj->reportinformations["timeline_type3"] == "cols" && $this->report_obj->reportinformations["Group2"] != "" && $this->report_obj->reportinformations["Group3"] != "none") {
$sreportsortsql .= " ORDER BY timeline_type DESC ";
} else {
$sreportsortsql .= " ORDER BY its4you_reports4you_sortcol.sortcolid ";
}
//$adb->setDebug(true);
$result = $adb->pquery($sreportsortsql, array($this->report_obj->record));
//$adb->setDebug(false);
}
$columns_array = $this->columns_array;
while ($reportsortrow = $adb->fetch_array($result)) {
$fieldcolname = $reportsortrow['columnname'];
if ('none' !== $fieldcolname) {
$tmpSplit = explode(':', $fieldcolname);
$tablename = $tmpSplit[0];
$colname = $tmpSplit[1];
$module_field = $tmpSplit[2];
$fieldname = $tmpSplit[3];
$single = $tmpSplit[4];
$sortorder = $reportsortrow['sortorder'];
if ($sortorder == 'Ascending') {
$sortorder = 'ASC';
} elseif ($sortorder == 'Descending') {
$sortorder = 'DESC';
}
//if (array_key_exists($fieldcolname, $columns_array)) {
$grouplist[$fieldcolname] = $columns_array[$fieldcolname]['fld_alias'] . ' ' . $sortorder;
}
}
// ITS4YOU-UP SlOl neviem preco je tu toto tak to zatial zakomentujem
return $grouplist;
}
function replaceSpecialChar($selectedfield) {
$selectedfield = decode_html(decode_html($selectedfield));
preg_match('/&/', $selectedfield, $matches);
if (!empty($matches)) {
$selectedfield = str_replace('&', 'and', ($selectedfield));
}
return $selectedfield;
}
// ITS4YOU-CR SlOl 17. 2. 2014 14:57:42
function getColumnsTotal($reportid) {
// Have we initialized it already?
if (isset($this->_columnstotallist) && $this->_columnstotallist !== false) {
return $this->_columnstotallist;
}
$adb = PEARDatabase::getInstance();
global $current_user;
$query = 'SELECT * FROM its4you_reports4you_modules WHERE reportmodulesid =?';
$res = $adb->pquery($query, array($reportid));
$modrow = $adb->fetch_array($res);
$premod = $modrow['primarymodule'];
$premod_name = vtlib_getModuleNameById($premod);
$secmod = $modrow['secondarymodules'];
$coltotalsql = 'SELECT its4you_reports4you_summary.* FROM its4you_reports4you';
$coltotalsql .= ' INNER JOIN its4you_reports4you_summary on its4you_reports4you.reports4youid = its4you_reports4you_summary.reportsummaryid';
$coltotalsql .= ' WHERE its4you_reports4you.reports4youid =?';
$result = $adb->pquery($coltotalsql, array($reportid));
while ($coltotalrow = $adb->fetch_array($result)) {
$fieldcolname = $coltotalrow['columnname'];
if ('none' !== $fieldcolname) {
$fieldlist = explode(':', $fieldcolname);
$field_tablename = $fieldlist[1];
$field_columnname = $fieldlist[2];
$mod_query = $adb->pquery('SELECT distinct(tabid) AS tabid FROM vtiger_field WHERE tablename = ? AND columnname=?', array($fieldlist[1], $fieldlist[2]));
if ($adb->num_rows($mod_query) > 0) {
$module_name = getTabName($adb->query_result($mod_query, 0, 'tabid'));
$fieldlabel = trim($fieldlist[3]);
if ($module_name) {
$field_columnalias = $module_name . '_' . $fieldlist[3];
} else {
$field_columnalias = $module_name . '_' . $fieldlist[3];
}
}
//$field_columnalias = $fieldlist[3];
$field_permitted = false;
if (CheckColumnPermission($field_tablename, $field_columnname, $premod) != "false") {
$field_permitted = true;
} else {
$mod_s = explode(":", $secmod);
// $premod_name = vtlib_getModuleNameById($premod);
foreach ($mod_s as $key) {
$mod_arr = explode("x", $key);
$mod = $mod_arr[0];
$mod_name = vtlib_getModuleNameById($mod);
if (CheckColumnPermission($field_tablename, $field_columnname, $mod_name) != "false") {
$field_permitted = true;
}
}
}
if ($field_permitted == true) {
$field = $field_tablename . "." . $field_columnname;
if ($field_tablename == 'vtiger_products' && $field_columnname == 'unit_price') {
// Query needs to be rebuild to get the value in user preferred currency. [innerProduct and actual_unit_price are table and column alias.]
$field = " innerProduct.actual_unit_price";
}
if ($field_tablename == 'vtiger_service' && $field_columnname == 'unit_price') {
// Query needs to be rebuild to get the value in user preferred currency. [innerProduct and actual_unit_price are table and column alias.]
$field = " innerService.actual_unit_price";
}
if (($field_tablename == 'vtiger_invoice' || $field_tablename == 'vtiger_quotes' || $field_tablename == 'vtiger_purchaseorder' || $field_tablename == 'vtiger_salesorder') && ($field_columnname == 'total' || $field_columnname == 'subtotal' || $field_columnname == 'discount_amount' || $field_columnname == 's_h_amount')) {
$field = " $field_tablename.$field_columnname/$field_tablename.conversion_rate ";
}
//ITS4YouReports::sshow($fieldlist);
if ($fieldlist[4] == 2) {
$stdfilterlist[$fieldcolname] = "sum($field) '" . $field_columnalias . "'";
}
if ($fieldlist[4] == 3) {
//Fixed average calculation issue due to NULL values ie., when we use avg() function, NULL values will be ignored.to avoid this we use (sum/count) to find average.
//$stdfilterlist[$fieldcolname] = "avg(".$fieldlist[1].".".$fieldlist[2].") '".$fieldlist[3]."'";
$stdfilterlist[$fieldcolname] = "(sum($field)/count(*)) '" . $field_columnalias . "'";
}
if ($fieldlist[4] == 4) {
$stdfilterlist[$fieldcolname] = "min($field) '" . $field_columnalias . "'";
}
if ($fieldlist[4] == 5) {
$stdfilterlist[$fieldcolname] = "max($field) '" . $field_columnalias . "'";
}
}
}
}
// Save the information
$this->_columnstotallist = $stdfilterlist;
return $stdfilterlist;
}
// ITS4YOU-END 17. 2. 2014 14:57:44
// ITS4YOU-CR SlOl 27. 2. 2014 13:50:16
function getTotalsHTML($to_totals_res)
{
global $mod_strings, $currentModule, $current_user;
if (!isset($mod_strings) || empty($mod_strings)) {
global $currentModule;
global $current_language;
if (empty($current_language)) {
$current_language = 'en_us';
}
$mod_strings = return_module_language($current_language, $this->getCurrentModule4You());
}
$usedCalculationTypes = $this->report_obj->getUsedCalculationTypes();
$coltotalhtml = '';
if ('XLS' === $this->outputformat) {
$coltotalhtml = [];
$coltotal_ri = 0;
$coltotalhtml[$coltotal_ri][] = $mod_strings['Totals'];
if (in_array('SUM', $usedCalculationTypes)) {
$coltotalhtml[$coltotal_ri][] = $mod_strings['SUM'];
}
if (in_array('AVG', $usedCalculationTypes)) {
$coltotalhtml[$coltotal_ri][] = $mod_strings['AVG'];
}
if (in_array('MIN', $usedCalculationTypes)) {
$coltotalhtml[$coltotal_ri][] = $mod_strings['MIN'];
}
if (in_array('MAX', $usedCalculationTypes)) {
$coltotalhtml[$coltotal_ri][] = $mod_strings['MAX'];
}
$coltotal_ri++;
} else {
$header_style = $this->header_style;
$coltotalhtml .= "<div id='rpt4youTotals'>";
$layout = Vtiger_Viewer::getDefaultLayoutName();
if ('v7' === $layout) {
$totalsTableClass = 'table table-bordered';
} else {
$totalsTableClass = 'rpt4youTotals';
}
$coltotalhtml .= "<table align='center' cellpadding='3' cellspacing='0' border='1' style='" . (self::isGetReportsHtml(
) ? 'width:auto;' : '') . "min-width:30%;border-collapse: collapse' class='$totalsTableClass'>";
$coltotalhtml .= "<tr>";
// ITS4YOU-CR SlOl 20. 5. 2016 13:25:04
$limit_nr = $this->report_obj->reportinformations['columns_limit'];
$limit_info = "";
if ('0' !== $limit_nr && '' !== $limit_nr) {
$limit_info = ' <!--LIMIT_INF-->
<a data-original-title="" href="#" id="cc_tooltip_{$cc_i}" class="no-print editHelpInfo tooltipstered" onmouseover="jQuery(\'#limit_info_r\').show();" onmouseout="jQuery(\'#limit_info_r\').css(\'display\',\'none\');" data-placement="top" data-text="test" data-template="<div class=\'tooltip\' role=\'tooltip\'><div class=\'tooltip-arrow\'></div><div class=\'tooltip-inner\' style=\'text-align: left\'></div></div>">
<i class="icon-info-sign alignMiddle"></i>&nbsp;
</a>
<span id="limit_info_r" class="no-print" style="z-index:999;position:absolute;display:none;" >
<span class=\'tooltip-arrow\'></span><span class=\'tooltip-inner\' style=\'text-align: left\' id="">' . vtranslate(
"LBL_CALCULATION_LIMITED_TO",
$currentModule
) . " $limit_nr " . vtranslate("LBL_RECORDS", $currentModule) . '</span>
</span>
<!--LIMIT_INF-->';
}
// ITS4YOU-END
// ITS4YOU-UP SlOl 20. 5. 2016 13:25:09 - $limit_info
$coltotalhtml .= "<td class='rpt4youCellLabel' style='min-width:28%;$header_style' nowrap >" . $mod_strings["Totals"] . "$limit_info</td>";
if (in_array('SUM', $usedCalculationTypes)) {
$coltotalhtml .= "<td class='rpt4youCellLabel' style='min-width:18%;$header_style' nowrap >" . $mod_strings['SUM'] . "</td>";
}
if (in_array('AVG', $usedCalculationTypes)) {
$coltotalhtml .= "<td class='rpt4youCellLabel' style='min-width:18%;$header_style' nowrap >" . $mod_strings['AVG'] . "</td>";
}
if (in_array('MIN', $usedCalculationTypes)) {
$coltotalhtml .= "<td class='rpt4youCellLabel' style='min-width:18%;$header_style' nowrap >" . $mod_strings['MIN'] . "</td>";
}
if (in_array('MAX', $usedCalculationTypes)) {
$coltotalhtml .= "<td class='rpt4youCellLabel' style='min-width:18%;$header_style' nowrap >" . $mod_strings['MAX'] . "</td>";
}
$coltotalhtml .= "</tr>";
}
if (!empty($to_totals_res)) {
$k_i = 0;
foreach ($to_totals_res as $key => $totals_array) {
if ('XLS' !== $this->outputformat) {
$coltotalhtml .= '<tr valign="middle">';
}
if (isset($totals_array['label'])) {
$col_header = $totals_array['label'];
} else {
$col_header = $key;
}
if ('XLS' === $this->outputformat) {
if (!empty($col_header)) {
$coltotalhtml[$coltotal_ri][] = $col_header;
}
} else {
$coltotalhtml .= '<td class="rpt4youGrpHead" nowrap >' . $col_header . '</td>';
}
$to_display = [];
$calculationType = 'SUM';
if (in_array($calculationType, $usedCalculationTypes)) {
if (ITS4YouReports::isInventoryModule($this->report_obj->primarymodule) && isset($totals_array[$calculationType])) {
ksort($totals_array[$calculationType]);
foreach ($totals_array[$calculationType] as $currency_id => $totals_value) {
$conv_value = $this->getTotalCalculation($key, $calculationType, $currency_id);
$conv_value = number_format($conv_value, getCurrencyDecimalPlaces(), '.', '');
$to_display[] = $this->getFldNumberFormat($key, $conv_value, $currency_id);
}
// dokoncit VIAC currencies !!! v totals
if ('XLS' === $this->outputformat) {
$tdValue = '';
foreach ($to_display as $tdArray) {
if (is_array($tdArray)) {
$tdValue .= implode('', $tdArray) . "\n";
} else {
$tdValue .= $tdArray;
}
}
$coltotalhtml[$coltotal_ri][] = trim($tdValue, "\n");
} else {
$coltotalhtml .= '<td class="rpt4youTotal" nowrap >' . implode("<br>", $to_display) . '</td>';
}
} elseif (isset($totals_array[$calculationType])) {
if ($convert_price) {
$conv_value = CurrencyField::convertFromMasterCurrency($this->getTotalCalculation($key, $calculationType), $current_user->conv_rate);
} else {
$conv_value = $this->getTotalCalculation($key, $calculationType);
}
$conv_value = number_format($conv_value, getCurrencyDecimalPlaces(), ".", "");
if ('XLS' === $this->outputformat) {
$coltotalhtml[$coltotal_ri][] = self::getFirstValue($this->getFldNumberFormat($key, $conv_value));
} else {
$coltotalhtml .= '<td class="rpt4youTotal" nowrap >' . $this->getFldNumberFormat($key, $conv_value) . '</td>';
}
} else {
if ('XLS' === $this->outputformat) {
$coltotalhtml[$coltotal_ri][] = '';
} else {
$coltotalhtml .= '<td class="rpt4youTotal"> </td>';
}
}
}
$to_display = [];
$calculationType = 'AVG';
$count_key = 'COUNT';
if (in_array($calculationType, $usedCalculationTypes)) {
if (ITS4YouReports::isInventoryModule(
$this->report_obj->primarymodule
) && isset($totals_array[$calculationType]) && isset($totals_array[$count_key])) {
ksort($totals_array[$calculationType]);
foreach ($totals_array[$calculationType] as $currency_id => $totals_value) {
$conv_value = $this->getTotalCalculation($key, $calculationType, $currency_id);
if ($convert_price) {
$conv_value = CurrencyField::convertFromMasterCurrency($conv_value, $current_user->conv_rate);
}
$conv_value = number_format($conv_value, getCurrencyDecimalPlaces(), '.', '');
$to_display[] = $this->getFldNumberFormat($key, $conv_value, $currency_id);
}
// dokoncit VIAC currencies !!! v totals
if ('XLS' === $this->outputformat) {
$tdValue = '';
foreach ($to_display as $tdArray) {
if (is_array($tdArray)) {
$tdValue .= implode('', $tdArray) . "\n";
} else {
$tdValue .= $tdArray;
}
}
$coltotalhtml[$coltotal_ri][] = trim($tdValue, "\n");
} else {
$coltotalhtml .= '<td class="rpt4youTotal" nowrap >' . implode("<br>", $to_display) . '</td>';
}
} elseif (isset($totals_array[$calculationType]) && isset($totals_array[$count_key])) {
$conv_value = $this->getTotalCalculation($key, $calculationType);
if ($convert_price) {
$conv_value = CurrencyField::convertFromMasterCurrency($conv_value, $current_user->conv_rate);
}
$conv_value = number_format($conv_value, getCurrencyDecimalPlaces(), '.', '');
if ('XLS' === $this->outputformat) {
$coltotalhtml[$coltotal_ri][] = self::getFirstValue($this->getFldNumberFormat($key, $conv_value));
} else {
$coltotalhtml .= '<td class="rpt4youTotal" nowrap >' . $this->getFldNumberFormat($key, $conv_value) . '</td>';
}
} else {
if ('XLS' === $this->outputformat) {
$coltotalhtml[$coltotal_ri][] = '';
} else {
$coltotalhtml .= '<td class="rpt4youTotal"> </td>';
}
}
}
$to_display = [];
$calculationType = 'MIN';
if (in_array($calculationType, $usedCalculationTypes)) {
if (ITS4YouReports::isInventoryModule(
$this->report_obj->primarymodule
) && isset($totals_array[$calculationType])) {
ksort($totals_array[$calculationType]);
foreach ($totals_array[$calculationType] as $currency_id => $totals_value) {
if ($convert_price) {
$conv_value = CurrencyField::convertFromMasterCurrency($this->getTotalCalculation($key, $calculationType, $currency_id), $current_user->conv_rate);
} else {
$conv_value = $this->getTotalCalculation($key, $calculationType, $currency_id);
}
$conv_value = number_format($conv_value, getCurrencyDecimalPlaces(), '.', '');
$to_display[] = $this->getFldNumberFormat($key, $conv_value, $currency_id);
}
// dokoncit VIAC currencies !!! v totals
if ('XLS' === $this->outputformat) {
$tdValue = '';
foreach ($to_display as $tdArray) {
$tdValue .= implode('', $tdArray) . "\n";
}
$coltotalhtml[$coltotal_ri][] = trim($tdValue, "\n");
} else {
$coltotalhtml .= '<td class="rpt4youTotal" nowrap >' . implode('<br>', $to_display) . '</td>';
}
} elseif (isset($totals_array[$calculationType])) {
if ($convert_price) {
$conv_value = CurrencyField::convertFromMasterCurrency($this->getTotalCalculation($key, $calculationType), $current_user->conv_rate);
} else {
$conv_value = $this->getTotalCalculation($key, $calculationType);
}
$conv_value = number_format($conv_value, getCurrencyDecimalPlaces(), '.', '');
if ('XLS' === $this->outputformat) {
$coltotalhtml[$coltotal_ri][] = self::getFirstValue($this->getFldNumberFormat($key, $conv_value));
} else {
$coltotalhtml .= '<td class="rpt4youTotal" nowrap >' . $this->getFldNumberFormat($key, $conv_value) . '</td>';
}
} else {
if ('XLS' === $this->outputformat) {
$coltotalhtml[$coltotal_ri][] = '';
} else {
$coltotalhtml .= '<td class="rpt4youTotal"> </td>';
}
}
}
$to_display = [];
$calculationType = 'MAX';
if (in_array($calculationType, $usedCalculationTypes)) {
if (ITS4YouReports::isInventoryModule(
$this->report_obj->primarymodule
) && isset($totals_array[$calculationType])) {
ksort($totals_array[$calculationType]);
foreach ($totals_array[$calculationType] as $currency_id => $totals_value) {
if ($convert_price) {
$conv_value = CurrencyField::convertFromMasterCurrency($this->getTotalCalculation($key, $calculationType, $currency_id), $current_user->conv_rate);
} else {
$conv_value = $this->getTotalCalculation($key, $calculationType, $currency_id);
}
$conv_value = number_format($conv_value, getCurrencyDecimalPlaces(), '.', '');
$to_display[] = $this->getFldNumberFormat($key, $conv_value, $currency_id);
}
// dokoncit VIAC currencies !!! v totals
if ('XLS' === $this->outputformat) {
$tdValue = '';
foreach ($to_display as $tdArray) {
if (is_array($tdArray)) {
$tdValue .= implode('', $tdArray) . "\n";
} else {
$tdValue .= $tdArray;
}
}
$coltotalhtml[$coltotal_ri][] = trim($tdValue, "\n");
} else {
$coltotalhtml .= '<td class="rpt4youTotal" nowrap >' . implode("<br>", $to_display) . '</td>';
}
} elseif (isset($totals_array[$calculationType])) {
if ($convert_price) {
$conv_value = CurrencyField::convertFromMasterCurrency($this->getTotalCalculation($key, $calculationType), $current_user->conv_rate);
} else {
$conv_value = $this->getTotalCalculation($key, $calculationType);
}
$conv_value = number_format($conv_value, getCurrencyDecimalPlaces(), ".", "");
if ('XLS' === $this->outputformat) {
$coltotalhtml[$coltotal_ri][] = self::getFirstValue($this->getFldNumberFormat($key, $conv_value));
} else {
$coltotalhtml .= '<td class="rpt4youTotal" nowrap >' . $this->getFldNumberFormat($key, $conv_value) . '</td>';
}
} else {
if ('XLS' === $this->outputformat) {
$coltotalhtml[$coltotal_ri][] = '';
} else {
$coltotalhtml .= '<td class="rpt4youTotal"> </td>';
}
}
if ('XLS' === $this->outputformat) {
$coltotal_ri++;
} else {
$coltotalhtml .= '</tr>';
}
}
// Performation Optimization: If Direct output is desired
if ($directOutput) {
echo $coltotalhtml;
$coltotalhtml = '';
}
// END
$k_i++;
}
}
if ('XLS' === $this->outputformat) {
$sHTML = $coltotalhtml;
} else {
$coltotalhtml .= "</table>";
$coltotalhtml .= "</div>";
$sHTML = $coltotalhtml;
}
return $sHTML;
}
// ITS4YOU-END 27. 2. 2014 13:50:19
// ITS4YOU-CR SlOl 28. 2. 2014 10:19:19
private function getQFConditions(Vtiger_Request $request) {
$conditions = array();
$qfConditionFromRequest = $this->getQuickFiltersFromRequest($request);
if(!empty($qfConditionFromRequest)) {
foreach($qfConditionFromRequest as $columnName => $qfInfo) {
$columnName = decode_html($columnName);
if (isset($this->columns_array[$columnName]) && in_array($this->columns_array[$columnName], $this->report_obj->reportinformations['quick_filters'])) {
$columnStr = $this->columns_array[$columnName];
if($this->columns_array[$columnStr]) {
$fld_cond = $this->columns_array[$columnStr]['fld_cond'];
if(1 === ITS4YouReports_Functions_Helper::count($qfInfo['value']) && 'NULL' === $qfInfo['value'][0]) {
if('is'===$qfInfo['radio']) {
$cond_str = 'IS ';
} else {
$cond_str = 'IS NOT';
}
$inVales = $qfInfo['value'][0];
$inValesCondition = ' ' . $inVales;
} else {
if ('is' === $qfInfo['radio']) {
$cond_str = 'IN';
} else {
$cond_str = 'NOT IN';
}
$inVales = implode('","', $qfInfo['value']);
$inValesCondition = ' ("' . $inVales . '") ';
}
$conditions[] = ' ' . $fld_cond . ' ' . $cond_str . $inValesCondition;
}
}
}
}
return $conditions;
}
// ITS4YOU-CR SlOl | 17.6.2014 16:35
private function getCurrencyFieldSql($primary_focus_table_name,$fieldid_alias="") {
$adb = PearDatabase::getInstance();
if (99 == $this->report_obj->record && self::isMoreStrictMysql()) {
return '';
}
$currency_result = $adb->pquery("SELECT columnname FROM vtiger_field WHERE uitype=? and tablename = ? ", array("117", $primary_focus_table_name));
$currency_num_rows = $adb->num_rows($currency_result);
if ($currency_num_rows > 0) {
$currency_row = $adb->fetchByAssoc($currency_result);
if($fieldid_alias !=""){
$group_by_currency_sql = ", " . $primary_focus_table_name.$fieldid_alias . "." . $currency_row["columnname"]." AS ". $currency_row["columnname"].$fieldid_alias;
}else{
$this->currency_id_sql = $primary_focus_table_name . "." . $currency_row["columnname"];
$group_by_currency_sql = ", " . $this->currency_id_sql;
}
}
return $group_by_currency_sql;
}
// ITS4YOU-END 28. 2. 2014 10:19:21
private function getGOSQL($groupslist, $primary_focus_table_name) {
global $default_charset;
$this->g_flds = $g_o_array = array();
$group_by_currency_sql = $order_by_sql = "";
$adb = PearDatabase::getInstance();
// ITS4YOU-CR SlOl | 7.7.2014 11:00
$sortcolS = $adb->pquery("SELECT * FROM its4you_reports4you_summaries_orderby WHERE reportid = ? AND columnindex = ? ", array($this->report_obj->record, 0));
$sortcolS_nr = $adb->num_rows($sortcolS);
if ($sortcolS_nr > 0) {
while ($row = $adb->fetchByAssoc($sortcolS)) {
if ($row["summaries_orderby_type"] != "") {
$calculation_type = "";
$fld_string = $row["summaries_orderby"];
$fld_string_arr = explode(":", $fld_string);
if (in_array(strtolower($fld_string_arr[(ITS4YouReports_Functions_Helper::count($fld_string_arr) - 1)]), $this->calculation_type_array)) {
$calculation_type = $fld_string_arr[(ITS4YouReports_Functions_Helper::count($fld_string_arr) - 1)];
unset($fld_string_arr[(ITS4YouReports_Functions_Helper::count($fld_string_arr) - 1)]);
$fld_string = implode(":", $fld_string_arr);
}
if ($this->columns_array[$fld_string]["fld_cond"] != "" && $row["summaries_orderby_type"] != "") {
if ($order_by_sql != "") {
$order_by_sql .= ", ";
}
if ($calculation_type != "" && $this->generate_type == "grouping") {
// ITS4YOU-UP SlOl 5. 11. 2015 9:48:15
if(strtolower($calculation_type)=="count"){
$fld_cond_sql = "COUNT(vtiger_crmentity.crmid)";
}else{
$fld_cond_sql = $calculation_type . "(" . $this->columns_array[$fld_string]["fld_cond"] . ")";
}
// ITS4YOU-END
} else {
$fld_cond_sql = $this->columns_array[$fld_string]["fld_cond"];
}
$order_by_sql .= $fld_cond_sql . " " . $row["summaries_orderby_type"];
}
}
}
}
// ITS4YOU-END 7.7.2014 11:00
if (!empty($groupslist)) {
$this->group_column_alias = array();
$group_by_sql = $group_by_col_sql = "";
$sum_col_sql_a = array();
switch (ITS4YouReports_Functions_Helper::count($groupslist)) {
case 3:
$this->g_colors = array("#CCCCCC", "#EEEEEE", "#FFFFFF");
break;
case 2:
$this->g_colors = array("#EEEEEE", "#FFFFFF");
break;
default:
$this->g_colors = array("#FFFFFF");
break;
}
$gi = $tlgi = 0;
foreach ($groupslist AS $ctype => $ccolumn) {
// groupby $this->columns_array[$ctype]["fld_alias"]
if ($group_by_sql != "") {
$group_by_sql .= ", ";
}
$g_fld_alias_arr = explode(" AS ", $this->columns_array[$ctype]["fld_sql_str"]);
$g_fld_alias = trim($g_fld_alias_arr[1]);
$gi_con_value = $this->columns_array[$ctype]["fld_cond"];
if ($this->summaries_columns_count > 0 || $this->report_obj->reportinformations["Group1"] != "none") {
// ITS4YOU-CR SlOl | 15.5.2014 11:46
$tlgi = $gi + 1;
//if (isset($this->report_obj->reportinformations["timeline_columnstr$tlgi"]) && $this->report_obj->reportinformations["timeline_columnstr$tlgi"] == $ctype && $this->report_obj->reportinformations["timeline_columnfreq$tlgi"] != "") {
if (isset($this->report_obj->reportinformations["timeline_columnstr$tlgi"]) && $this->report_obj->reportinformations["timeline_columnstr$tlgi"] != "" && $this->report_obj->reportinformations["timeline_columnstr$tlgi"] != "@vlv@") {
$gi_con_value = $this->getTimeLineColumnSql($gi_con_value, $this->report_obj->reportinformations["timeline_columnstr$tlgi"]);
}
if (false === strpos($gi_con_value, 'WHEN ')) {
$gi_con_value = "
CASE
WHEN $gi_con_value IS NULL OR $gi_con_value = ''
THEN ''
ELSE $gi_con_value
END
";
}
// ITS4YOU-END 15.5.2014 11:46
$group_by_sql .= $gi_con_value;
if ($group_by_sql != "") {
$group_by_sql = " $group_by_sql ";
}
if (ITS4YouReports::isInventoryModule($this->report_obj->primarymodule)===true) {
$group_by_currency_sql = $this->getCurrencyFieldSql($primary_focus_table_name);
}
// ITS4YOU-UP SlOl 14. 9. 2015 15:34:11
$rel_group_by_currency_sql = "";
if(isset($this->rel_group_by_currency_sql) && $this->rel_group_by_currency_sql!=""){
$rel_group_by_currency_sql = $this->rel_group_by_currency_sql;
}
// ITS4YOU-END
$g_o_array["group_by_sql"][] = $group_by_sql . $group_by_currency_sql . $rel_group_by_currency_sql;
$gi_con = "gi_con_$gi";
$this->$gi_con = $this->columns_array[$ctype]["fld_cond"];
$gi_con_alias = "gi_con_alias_$gi";
$this->$gi_con_alias = $this->columns_array[$ctype]["fld_alias"];
}
$this->g_flds[] = $g_fld_alias;
// orderby $ccolumn
if ($order_by_sql != "") {
$order_by_sql .= ", ";
}
if(!isset($this->columns_array[$ctype]["fld_cond"])){
$ctype = html_entity_decode($ctype,ENT_QUOTES,$default_charset);
}
if (isset($this->columns_array[$ctype]["fld_cond"]) && $this->columns_array[$ctype]["fld_cond"] != "") {
$o_by = explode(" ", $ccolumn);
$o_by_v = $o_by[(ITS4YouReports_Functions_Helper::count($o_by) - 1)];
$gi_order_by_sql = $this->columns_array[$ctype]["fld_cond"] . " $o_by_v";
} else {
$gi_order_by_sql = $ccolumn;
}
// ITS4YOU-CR SlOl 15. 8. 2016 7:03:57 - ORDER BY PROBABILITY FIX ?! test in more reports
$order_by_sql .= $gi_order_by_sql;
//$order_by_sql = $gi_order_by_sql;
// ITS4YOU-END 15. 8. 2016 7:04:20
$gi_order_by_name = "gi_order_by$gi";
$this->$gi_order_by_name = $gi_order_by_sql;
$gi++;
}
if ($order_by_sql != "") {
$order_by_sql = " $order_by_sql ";
}
}
// ITS4YOU-CR SlOl | 30.6.2014 10:45
// ITS4YOU-UP SlOl 13. 5. 2016 9:05:21 -> multi Ordering
$sortcol4 = $adb->pquery("SELECT columnname, sortorder FROM its4you_reports4you_sortcol WHERE reportid = ? AND sortcolid = ? ORDER BY sortcolsequence ASC ", array($this->report_obj->record, 4));
$sortcol4_nr = $adb->num_rows($sortcol4);
if ($sortcol4_nr > 0) {
while ($row = $adb->fetchByAssoc($sortcol4)) {
$columnName = html_entity_decode($row["columnname"],ENT_QUOTES,$default_charset);
if ($this->columns_array[$columnName]["fld_cond"] != "" && $row["sortorder"] != "") {
if ($order_by_sql != "") {
$order_by_sql .= ", ";
}
$order_by_sql .= $this->columns_array[$columnName]["fld_cond"] . " " . $row["sortorder"];
}
}
}
// ITS4YOU-END 30.6.2014 10:45
$g_o_array["order_by_sql"] = $order_by_sql;
return $g_o_array;
}
private function setSummariesLBLKeys($summaries_column_arr_columnname) {
$adb = PearDatabase::getInstance();
if ($summaries_column_arr_columnname != "") {
$resultsm = $adb->pquery("SELECT columnname,columnlabel FROM its4you_reports4you_labels WHERE reportid = ? and type = 'SM' AND columnname like '" . $summaries_column_arr_columnname . "%'", array($this->report_obj->record));
$num_rowsqf = $adb->num_rows($resultsm);
$return_arr = array();
if ($num_rowsqf > 0) {
while ($row = $adb->fetchByAssoc($resultsm)) {
$return_arr[$row["columnname"]] = $row["columnlabel"];
}
} else {
$return_arr = array();
}
}
return $return_arr;
}
private function getHeadersArray($type = "SC") {
$selectedcolumns_arr = $this->report_obj->getSelectedColumnListArray($this->report_obj->record);
$header_lbls = array();
if (!empty($selectedcolumns_arr)) {
foreach ($selectedcolumns_arr as $key => $column_array) {
$column_str = $column_array["fieldcolname"];
if (isset($this->columns_array[$column_str]["fld_alias"]) && $this->columns_array[$column_str]["fld_alias"] != "") {
$fld_alias = $this->columns_array[$column_str]["fld_alias"];
$header_lbls[$fld_alias] = self::getHeaderLabel($this->report_obj->record, $type, $fld_alias, $column_str);
}
}
}
return $header_lbls;
}
private function setResultArray($sSQL) {
$adb = PearDatabase::getInstance();
if (isset($this->gb_sql) && $this->gb_sql != "") {
//$adb->setDebug(true);
$result = $adb->pquery($this->gb_sql, array());
//$adb->setDebug(false);
$numres = $adb->num_rows($result);
$this->group_column_alias = array();
$all_g_cols_arr = array();
for ($gi = 1; $gi < 4; $gi++) {
$column_str = $this->report_obj->reportinformations["Group$gi"];
if ($column_str != "none") {
$ex_fld_alias = explode(".", $this->columns_array[$column_str]["fld_alias"]);
$group_cols_array[$gi] = $ex_fld_alias[(ITS4YouReports_Functions_Helper::count($ex_fld_alias) - 1)];
$all_g_cols_arr[] = $ex_fld_alias[(ITS4YouReports_Functions_Helper::count($ex_fld_alias) - 1)];
$this->group_column_alias[$gi] = $all_g_cols_arr;
}
}
$this->group_cols_array = $group_cols_array;
if ($numres > 0) {
if ($result) {
$group_key1 = $group_key2 = $group_key3 = "";
$gi = 0;
$r_i = 0;
while ($row = $adb->fetchByAssoc($result)) {
if ($currency_id != "") {
$result_details_array[$group_key1][$currency_id][$gi] = $row;
} else {
$result_details_array[$group_key1][$gi] = $row;
}
$group_key1 = $row[$group_cols_array[1]];
$group_key2 = $group_key3 = "none";
if ($row[$group_cols_array[2]] != "") {
$group_key2 = $row[$group_cols_array[2]];
}
if ($row[$group_cols_array[3]] != "") {
$group_key3 = $row[$group_cols_array[3]];
}
foreach ($row as $fld_alias => $fld_value) {
$currency_id = "";
if (isset($row["currency_id"]) && $row["currency_id"] != "" && ITS4YouReports::isInventoryModule($this->report_obj->primarymodule)===true) {
$currency_id = $row["currency_id"];
}
if (isset($row["invoicing_currency_id"]) && $row["invoicing_currency_id"] != "" && ITS4YouReports::isInventoryModule($this->report_obj->primarymodule)===true) {
$currency_id = $row["invoicing_currency_id"];
}
if ($currency_id != "") {
$result_details_array[$group_key1][$currency_id][$gi][$fld_alias] = $fld_value;
} else {
$result_details_array[$group_key1][$gi][$fld_alias] = $fld_value;
}
if ($group_key1 != "" && $group_key2 == "none" && $group_key3 == "none") {
$result_array[$group_key1][$gi][$fld_alias] = $fld_value;
} elseif ($group_key1 != "" && $group_key2 != "" && $group_key3 == "none") {
$result_array[$group_key1][$group_key2][$gi][$fld_alias] = $fld_value;
} elseif ($group_key1 != "" && $group_key2 != "" && $group_key3 != "") {
$result_array[$group_key1][$group_key2][$group_key3][$gi][$fld_alias] = $fld_value;
}
}
$gi++;
}
}
}
}
//$this->result_array = $result_array;
$this->result_details_array = $result_details_array;
$this->result_columns_array = $this->columns_array;
}
private function getColsHeaders($header_style, $agi = 1) {
global $currentModule;
$adb = PearDatabase::getInstance();
$headerLabel_arr = array();
$group_sql_name = "group_sql_$agi";
$g_con_name = "gi_con_$agi";
$header_column = $this->$g_con_name;
global $default_charset;
$header_column_base = html_entity_decode($header_column, ENT_QUOTES, $default_charset);
$header_alias = $this->g_flds[$agi];
/*
$hc_arr = explode(".", trim($header_column));
$header_alias = $hc_arr[(count($hc_arr) - 1)];
$header_alias = str_replace('(','',$header_alias);
$header_alias = str_replace(')','',$header_alias);
$header_alias = trim($header_alias);
*/
$exp_gsql1 = explode("DISTINCT", $this->$group_sql_name);
$exp_gsql2 = explode("FROM", $exp_gsql1[1]);
$gi = $agi + 1;
if (isset($this->report_obj->reportinformations["timeline_columnstr$gi"]) && $this->report_obj->reportinformations["timeline_columnstr$gi"] != "" && $this->report_obj->reportinformations["timeline_columnstr$gi"] != "@vlv@") {
$header_column = $this->getTimeLineColumnSql($header_column_base, $this->report_obj->reportinformations["timeline_columnstr$gi"]) . " AS $header_alias";
$gi_order_by_name = "gi_order_by$agi";
$exp_ord2 = explode("ORDER BY", $exp_gsql2[1]);
$exp_ord2[1] = $this->$gi_order_by_name;
$exp_gsql2[1] = implode(" ORDER BY ", $exp_ord2);
} elseif ('cols' === $this->report_obj->reportinformations['timeline_type'.($agi+1)]) {
$header_column = $header_column_base . " AS $header_alias";
$gi_order_by_name = "gi_order_by$agi";
$exp_ord2 = explode("ORDER BY", $exp_gsql2[1]);
$exp_ord2[1] = $this->$gi_order_by_name;
$exp_gsql2[1] = implode(" ORDER BY ", $exp_ord2);
} else {
$header_column = $header_column_base . " AS $header_alias";
}
/*
if(isset($this->report_obj->reportinformations["timeline_columnstr$agi"]) && $this->report_obj->reportinformations["timeline_columnstr$agi"]!="" && $this->report_obj->reportinformations["timeline_columnstr$agi"]!="@vlv@"){
$g_con_col_sql = $this->getTimeLineColumnSql($this->$g_con_name,$this->report_obj->reportinformations["timeline_columnstr$agi"]);
}else{
$g_con_col_sql = $this->$g_con_name;
}
*/
// fix to quit NULL values for a reason of twice display in case e.g. Product Category is null and "", sql will generate two arrays for a matrix report so i will quit null group by which are in a previous array already
$fix_expr = $exp_gsql2[1];
if(stripos($fix_expr,"WHERE ")=== false){
$fix_expr_val = "WHERE ";
}else{
$fix_expr_val = "AND ";
}
$fix_expr = str_replace("GROUP BY ", " $fix_expr_val $header_column_base IS NOT NULL GROUP BY ", $fix_expr);
$n_sql = "SELECT DISTINCT " . $header_column . " FROM " . $fix_expr ;
$groupColStr = $this->columns_array[$header_alias];
$groupCondStr = $this->columns_array[$groupColStr]['fld_cond'];
$groupModule = self::getModuleNameFromColumnStr($groupColStr);
if (!strstr($fix_expr, $groupCondStr)) {
$n_sql = preg_replace('/\sORDER BY\s/',' ,'.$groupCondStr.' ORDER BY ',$n_sql);
}
//$adb->setDebug(true);
$result = $adb->pquery($n_sql, array());
//$adb->setDebug(false);
$num_rows = $adb->num_rows($result);
$group_cols = array();
if ($num_rows > 0) {
$groupModuleName = self::getModuleNameFromColumnStr($this->report_obj->reportinformations['Group'.($agi+1)]);
while ($row = $adb->fetchByAssoc($result)) {
if (isset($row[$header_column])) {
$rawGroupValue = $row[$header_column];
} else {
$rawGroupValue = $row[$header_alias];
}
$group_cols[] = $rawGroupValue;
$headerLabel = vtranslate($rawGroupValue, $groupModuleName);
$headerLabel_arr[] = array("style" => $header_style, "label" => $headerLabel, "raw" => $rawGroupValue,);
}
$headerLabel_arr[] = array("style" => $header_style, "label" => "LBL_GROUPING_TOTALS", "raw" => "LBL_GROUPING_TOTALS",);
}
$group_cols_name = "group_cols_$agi";
$this->$group_cols_name = $group_cols;
return $headerLabel_arr;
}
private function setGroupColsTotals($group_value, $array_to_totals = array()) {
if (!empty($array_to_totals)) {
$adb = PearDatabase::getInstance();
$totals_result = $array_to_totals[0];
$custom_field_values = $array_to_totals[1];
$i = $array_to_totals[2];
$t_y = $array_to_totals[3];
for ($i = 0; $i < $t_y; $i++) {
$fld = $adb->field_name($totals_result, $i);
if (!in_array($fld->name, $this->g_flds)) {
$this->cols_totals[$group_value][$fld->name] = $custom_field_values[$i];
}
}
}
return true;
}
// Rows Rows Cols
private function setGroupDataArray($group_value = '', $currency_id, $agi = 1) {
$return_arr = array();
$g_cols_data_arr = array();
$g2_cols_data_arr = array();
$g_con_sql = '';
//ITS4YouReports::sshow($group_value."-".$g_data_value."-".$currency_id);
//ITS4YouReports::sshow($group_value);
global $default_charset;
$group_value = html_entity_decode($group_value, ENT_QUOTES, $default_charset);
// groups 0 1 2
$bg_color = $this->g_colors[$agi];
// $agi = actual group id, to get previous group i pgi
$pgi = $agi - 1;
$ngi = $agi + 1;
//if ($group_value != "") {
$adb = PearDatabase::getInstance();
$group_sql_name = "group_sql_$ngi";
$g_con_name = "gi_con_$pgi";
$exp_gsql = explode("GROUP BY", $this->$group_sql_name);
$cl_alias[] = $this->g_flds[$pgi];
$cl_alias[] = $this->g_flds[$agi];
$cl_alias[] = $this->g_flds[$ngi];
$group_cols_name = "group_cols_$agi";
$group_cols = $this->$group_cols_name;
if (isset($this->report_obj->reportinformations["timeline_columnstr$agi"]) && $this->report_obj->reportinformations["timeline_columnstr$agi"] != "" && $this->report_obj->reportinformations["timeline_columnstr$agi"] != "@vlv@") {
$g_con_col_sql = $this->getTimeLineColumnSql($this->$g_con_name, $this->report_obj->reportinformations["timeline_columnstr$agi"]);
} else {
$g_con_col_sql = $this->$g_con_name;
}
if (ITS4YouReports_Functions_Helper::count(explode("WHERE", $exp_gsql[0])) > 1) {
$wstr = "AND";
} else {
$wstr = "WHERE";
}
if (empty($group_value)) {
$g_con_sql .= " $wstr " . $g_con_col_sql . ' IS NULL ';
} else {
$g_con_sql .= " $wstr " . $g_con_col_sql . ' = "' . $group_value . '" ';
}
$f_gsql = $exp_gsql[0] . " " . $g_con_sql . " GROUP BY " . $exp_gsql[1];
// BASE DEBUG GROUP SQL
//$adb->setDebug(true);
/*global $current_user;if($current_user->id=="1"){
$adb->setDebug(true);
}*/
$result = $adb->pquery($f_gsql, array());
/*global $current_user;if($current_user->id=="1"){
$adb->setDebug(false);
}*/
//$adb->setDebug(false);
$num_rows = $adb->num_rows($result);
if ($num_rows > 0) {
while ($row = $adb->fetchByAssoc($result)) {
$currency_id = "";
if (isset($row["currency_id"]) && $row["currency_id"] != "") {
$currency_id = $row["currency_id"];
}
if (isset($row["invoicing_currency_id"]) && $row["invoicing_currency_id"] != "") {
$currency_id = $row["invoicing_currency_id"];
}
$r_i = 0;
$g_datas = array();
foreach ($row as $r_key => $r_val) {
if (!in_array($r_key, $cl_alias)) {
$g_datas[$r_key] = $r_val;
}
$r_i++;
if ($r_i == ITS4YouReports_Functions_Helper::count($row)) {
$keyValue = $row[$cl_alias[1]];
$g2Alias = $row[$cl_alias[2]];
$g2ColStr = $this->columns_array[$cl_alias[2]];
$g2UiType = $this->columns_array['uitype_'.$cl_alias[2]];
if (in_array($g2UiType, ITS4YouReports::$s_uitypes)) {
$groupModule = self::getModuleNameFromColumnStr($g2ColStr);
$g2 = vtranslate($g2Alias, $groupModule);
} else {
$g2 = $g2Alias;
}
if (empty($keyValue)) {
$keyValue = '-';
}
if ($currency_id != "") {
$g_cols_data_arr[$currency_id][$keyValue][$g2] = $g_datas;
} else {
$g_cols_data_arr[$keyValue][$g2] = $g_datas;
}
}
}
}
}
//}
if (empty($group_value)) {
$this->group_data_array['-'] = $g_cols_data_arr;
} else {
$this->group_data_array[$group_value] = $g_cols_data_arr;
}
}
private function getSubGroupCols($group_value = "", $agi = 1, $g_con_sql = "", $currency_id = "", $array_to_totals = array()) {
$return_arr = array();
$g_cols_data_arr = array();
$g2_cols_data_arr = array();
$primary_focus = CRMEntity::getInstance($this->report_obj->primarymodule);
// groups 0 1 2
$bg_color = $this->g_colors[$agi];
// $agi = actual group id, to get previous group i pgi
$pgi = $agi - 1;
$ngi = $agi + 1;
$group_value_sql = $group_value;
$group_value .= $this->get_currency_sumbol_str($currency_id);
//if ($group_value != "") {
$adb = PearDatabase::getInstance();
if (!empty($array_to_totals)) {
$this->setGroupColsTotals($group_value, $array_to_totals);
}
$group_sql_name = "group_sql_$agi";
$g_con_name = "gi_con_$pgi";
$exp_gsql = explode("GROUP BY", $this->$group_sql_name);
$cl_alias = $this->g_flds[$agi];
$group_cols_name = "group_cols_$agi";
$group_cols = $this->$group_cols_name;
if (ITS4YouReports_Functions_Helper::count(explode("WHERE", $exp_gsql[0])) > 1) {
$wstr = "AND";
} else {
$wstr = "WHERE";
}
if (isset($this->report_obj->reportinformations["timeline_columnstr$agi"]) && $this->report_obj->reportinformations["timeline_columnstr$agi"] != "" && $this->report_obj->reportinformations["timeline_columnstr$agi"] != "@vlv@") {
$g_con_col_sql = $this->getTimeLineColumnSql($this->$g_con_name, $this->report_obj->reportinformations["timeline_columnstr$agi"]);
} else {
$g_con_col_sql = $this->$g_con_name;
}
$g_con_sql .= " $wstr " . $g_con_col_sql . ' = "' . addslashes(decode_html($group_value_sql)) . '" ';
if ($currency_id != "" && (99 != $this->report_obj->record && !self::isMoreStrictMysql())) {
$g_con_sql .= " AND " . $this->currency_id_sql . " = '$currency_id' ";
}
global $default_charset;
$g_con_sql = html_entity_decode($g_con_sql, ENT_QUOTES, $default_charset);
$gbSql = str_replace(', ' . $primary_focus->table_name . '.currency_id' , '', $exp_gsql[1]);
$f_gsql = $exp_gsql[0] . " " . $g_con_sql . " GROUP BY " . $gbSql;
//$adb->setDebug(true);
$result = $adb->pquery($f_gsql, array());
//$adb->setDebug(false);
$num_rows = $adb->num_rows($result);
if ($num_rows > 0) {
while ($row = $adb->fetchByAssoc($result)) {
$r_i = 0;
foreach ($row as $r_key => $r_val) {
if (!in_array($r_key, $this->g_flds)) {
$g_cols_data_arr[$row[$cl_alias]][$r_key] = $r_val;
}
if ($r_key == $this->g_flds[1]) {
$group2_value = $r_val;
}
}
if ($agi != 2 && isset($this->g_colors[$ngi]) && $this->g_colors[$ngi] != "") {
$g2_cols_data_arr[$group2_value] = $this->getSubGroupCols($group2_value, $ngi, $g_con_sql, $currency_id);
}
}
}
if ($agi > 1) {
return $g_cols_data_arr;
}
foreach ($group_cols as $g_col_value) {
$g_con_table = "";
if (isset($g_cols_data_arr[$g_col_value]["currency_id"]) && isset($this->currency_symbols[$g_cols_data_arr[$g_col_value]["currency_id"]])) {
$currency_id = $g_cols_data_arr[$g_col_value]["currency_id"];
}
if (isset($g_cols_data_arr[$g_col_value]["invoicing_currency_id"]) && isset($this->currency_symbols[$g_cols_data_arr[$g_col_value]["invoicing_currency_id"]])) {
$currency_id = $g_cols_data_arr[$g_col_value]["invoicing_currency_id"];
}
if (isset($g_cols_data_arr[$g_col_value]) && !empty($g_cols_data_arr[$g_col_value])) {
foreach ($g_cols_data_arr[$g_col_value] as $g_data_key => $g_data_value) {
$new_edkey = array();
if (in_array($g_data_key, $this->skip_fields)) {
continue;
}
$exploded_datakey = explode("_", $g_data_key);
for ($g_di = 0; $g_di < (ITS4YouReports_Functions_Helper::count($exploded_datakey) - 1); $g_di++) {
$new_edkey[] = $exploded_datakey[$g_di];
$calculation_type = $exploded_datakey[(ITS4YouReports_Functions_Helper::count($exploded_datakey) - 1)];
}
$clen_key = implode("_", $new_edkey);
$label_db_key = $this->columns_array[$clen_key] . ":" . strtoupper($calculation_type);
if ($r_i > 0 && $this->report_obj->in_multiarray($label_db_key, $this->summaries_columns, "columnname") !== true) {
continue;
}
$g_data_key_lbl = self::getHeaderLabel($this->report_obj->record, "SM", $g_data_key, $label_db_key);
// charts array population start
if (array_key_exists('charts_ds_column', $this->charts) && $g_data_key === $this->charts['charts_ds_column']) {
// SPECIAL CHART DATA POPULATION FOR G2 COLS
$cols_alias = "";
if ($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$cols_alias = $this->g_flds[1];
} elseif ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$cols_alias = $this->g_flds[2];
}
if (!isset($this->ch_array["dataseries_label"])) {
$this->setDataseriesLabel($cols_alias);
}
$this->addToSubvalChArrayValues("dataseries", $g_col_value, $g_data_value, $group_value, $currency_id);
$this->setHChArrayValues("hch_dataseries", $group_value, $g_data_value,$currency_id);
/* OLDO
if ($this->ch_array["charttype"] != "horizontal") {
$this->setDataseriesArray($g_col_value, $g_data_value, $currency_id, $g_data_key);
}
*/
}
// charts array population end
$return_arr["headers"][$g_col_value][] = array("style" => "background-color:$bg_color;text-align:center;", "label" => $g_data_key_lbl,);
//$txt_align = $this->getFldAlignment($g_data_key, $g_data_value);
$fld_style_arr = $this->getFldStyle($g_data_key, $g_data_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
$return_arr["values"][$g_col_value][] = array("fld_style" => $fld_style, "fld_name" => $g_data_key, "value" => $g_data_value,);
$r_i++;
}
} else {
foreach ($this->sum_col_sql_a as $column_str => $calculation_arr) {
foreach ($calculation_arr as $calculation_type) {
// $calculation_type = $calculation_arr[0];
$label_db_key = "$column_str:" . strtoupper($calculation_type);
$fld_sql_str_array = explode(" AS ", $this->columns_array[$column_str]["fld_sql_str"]);
$fld_str = $fld_sql_str_array[0];
$fld_str_as = $fld_sql_str_array[1] . "_$calculation_type";
$g_data_key_lbl = self::getHeaderLabel($this->report_obj->record, "SM", $fld_str_as, $label_db_key);
$return_arr["headers"][$g_col_value][] = array("style" => "background-color:$bg_color;text-align:center;", "label" => $g_data_key_lbl,);
$return_arr["values"][$g_col_value][] = array("fld_style" => "", "fld_name" => $fld_str_as, "value" => " ",);
}
}
}
}
if (!empty($array_to_totals)) {
foreach ($this->sum_col_sql_a as $column_str => $calculation_arr) {
foreach ($calculation_arr as $calculation_type) {
// $calculation_type = $calculation_arr[0];
$label_db_key = "$column_str:" . strtoupper($calculation_type);
$fld_sql_str_array = explode(" AS ", $this->columns_array[$column_str]["fld_sql_str"]);
$fld_str = $fld_sql_str_array[0];
$fld_str_as = $fld_sql_str_array[1] . "_$calculation_type";
$g_data_key_lbl = self::getHeaderLabel($this->report_obj->record, "SM", $fld_str_as, $label_db_key);
$return_arr["headers"]["LBL_GROUPING_TOTALS"][] = array("style" => "background-color:$bg_color;text-align:center;", "label" => $g_data_key_lbl,);
$return_arr["values"]["LBL_GROUPING_TOTALS"][] = array("fld_style" => "text-align:right;", "fld_name" => $fld_str_as, "value" => $this->cols_totals[$group_value][$fld_str_as],);
}
}
}
//}
return $return_arr;
}
private function getSubGroupRow($group_value = "", $currency_id, $agi = 1, $g_con_sql = "") {
if ('XLS' === $this->outputformat) {
$return_html = [];
} else {
$return_html = '';
}
$return_arr = array();
// groups 0 1 2
$bg_color = $this->g_colors[$agi];
// $agi = actual group id, to get previous group i pgi
$pgi = $agi - 1;
$ngi = $agi + 1;
if ($agi > 0) {
$agi_first_td_class = "rpt4youGrpHead_$agi";
$ngi_first_td_class = "rpt4youGrpHead_$ngi";
}
//if ($group_value != "") {
$adb = PearDatabase::getInstance();
$group_sql_name = "group_sql_$agi";
$g_con_name = "gi_con_$pgi";
$exp_gsql = explode("GROUP BY", $this->$group_sql_name);
if (ITS4YouReports_Functions_Helper::count(explode("WHERE", $exp_gsql[0])) > 1 || $g_con_sql != "") {
$wstr = "AND";
} else {
$wstr = "WHERE";
}
if (isset($this->report_obj->reportinformations["timeline_columnstr$agi"]) && $this->report_obj->reportinformations["timeline_columnstr$agi"] != "" && $this->report_obj->reportinformations["timeline_columnstr$agi"] != "@vlv@") {
$g_con_col_sql = $this->getTimeLineColumnSql($this->$g_con_name, $this->report_obj->reportinformations["timeline_columnstr$agi"]);
} else {
$g_con_col_sql = $this->$g_con_name;
}
if($group_value=="" || $group_value=="-"){
$g_con_sql .= " $wstr ( " . $g_con_col_sql . " = '' OR " . $g_con_col_sql . " IS NULL )";
}else{
$g_con_sql .= " $wstr " . $g_con_col_sql . " = '" . addslashes(decode_html($group_value)) . "'";
}
//ITS4YouReports::sshow("Problem2-".$group_value);
if ($currency_id != "" && (99 != $this->report_obj->record && !self::isMoreStrictMysql())) {
$g_con_sql .= " AND " . $this->currency_id_sql . " = '$currency_id' ";
}
global $default_charset;
$g_con_sql = html_entity_decode($g_con_sql, ENT_QUOTES, $default_charset);
$f_gsql = $exp_gsql[0] . " " . $g_con_sql;
if (isset($exp_gsql[1]) && $exp_gsql[1] != "") {
$f_gsql .= " GROUP BY " . $exp_gsql[1];
}
//ITS4YouReports::sshow($this->g_o_array);
//$adb->setDebug(true);
$result = $adb->pquery($f_gsql, array());
//$adb->setDebug(false);
$num_rows = $adb->num_rows($result);
if ($num_rows > 0) {
while ($row = $adb->fetchByAssoc($result)) {
$group2_value = $g2_html = "";
if($this->outputformat!="XLS"){
$return_html .= "<tr>";
}
$r_i = 0;
$record_id = $row['record_id'];
$currency_id = "";
if (isset($row["currency_id"]) && $row["currency_id"] != "") {
$currency_id = $row["currency_id"];
}
if (isset($row["invoicing_currency_id"]) && $row["invoicing_currency_id"] != "") {
$currency_id = $row["invoicing_currency_id"];
}
foreach ($row AS $fld_name => $fld_value) {
$is_hid = strpos($fld_name, "_hid");
$clear_fld_name_arr = explode("_", $fld_name);
$clear_fld_calculation_type = strtoupper($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
unset($clear_fld_name_arr[(ITS4YouReports_Functions_Helper::count($clear_fld_name_arr) - 1)]);
$clear_fld_name = implode("_", $clear_fld_name_arr);
if ($r_i > 0 && $this->report_obj->in_multiarray($this->columns_array[$clear_fld_name] . ":$clear_fld_calculation_type", $this->summaries_columns, "columnname") !== true) {
continue;
}
if ('' === trim($fld_value)) {
//$fld_value = number_format("0", 3);
$fld_value = '-';
}
if ($is_hid === false && !in_array($fld_name, $this->skip_fields) && !in_array($clear_fld_name, $this->skip_fields)) {
if ($fld_name == $this->g_flds[$agi]) {
//$group2_value = $fld_value;
$group2_value = $this->getFldFormatedValue($this->columns_array["uitype_$fld_name"], $fld_value, $fld_name,"",$currency_id);
}
if ($agi==1 && !empty($this->charts) && !empty($this->charts["charttypes"])) {
$ch_fldname = strtolower($fld_name);
$this->setChArrayValues("charttitle", '', $this->charts["charttitle"]);
// chart data population start
if($this->charts["x_group"]=="group2" && in_array($ch_fldname, $this->charts["charts_ds_columns"])){
$this->setDataseriesArray($group2_value, $fld_value, $currency_id, $ch_fldname, $group_value);
}
// chart data population end
}
if ($fld_name != $this->g_flds[$pgi] && $fld_name != $this->g_flds[$ngi] && $fld_name != $this->g_flds[($pgi - 1)]) {
if ($currency_id != "") {
if ($group2_value != "" && $agi != 2) {
$return_arr[$group_value][$group2_value][$fld_name][$currency_id] = $fld_value;
} elseif ($group2_value != "" && $agi == 2) {
$return_arr[$group2_value][$fld_name][$currency_id] = $fld_value;
} else {
$return_arr[$group_value][$fld_name][$currency_id] = $fld_value;
}
} else {
if ($agi == 1 && $group2_value != "") {
$return_arr[$group_value][$group2_value][$fld_name] = $fld_value;
} elseif ($agi == 2 && $group2_value != "") {
$return_arr[$group2_value][$fld_name] = $fld_value;
} elseif ($agi == 1) {
$return_arr[$group_value][$fld_name] = $fld_value;
} elseif ($agi == 2) {
$return_arr[$group_value][$fld_name] = $fld_value;
}
}
$r_i++;
}
}
if(isset($record_id) && $record_id!=""){
if ($agi == 1 && $group2_value != "") {
$return_arr[$group_value][$group2_value]["record_id"] = $record_id;
} elseif ($agi == 2 && $group2_value != "") {
$return_arr[$group2_value]["record_id"] = $record_id;
} elseif ($agi == 1) {
$return_arr[$group_value]["record_id"] = $record_id;
} elseif ($agi == 2) {
$return_arr[$group_value]["record_id"] = $record_id;
}
}
}
if ($agi != 2 && isset($this->g_colors[$ngi]) && $this->g_colors[$ngi] != "") {
//$return_html .= $this->getSubGroupRow($group2_value,$ngi,$g_con_sql);
$return_arr_sub = $this->getSubGroupRow($group2_value, $currency_id, $ngi, $g_con_sql);
$return_arr[$group_value][$group2_value]["sub_row"] = $return_arr_sub;
}
}
}
if (!empty($return_arr[$group_value])) {
$xls_r_i = 0;
foreach ($return_arr[$group_value] as $g1column_alias => $g1column_values) {
$sp_cname_i = 0;
foreach ($g1column_values as $column_alias => $column_values) {
if(isset($g1column_values["record_id"])){
$this->data_record_id = $g1column_values["record_id"];
}
if($column_alias=="record_id"){
continue;
}
if ($sp_cname_i == 0) {
$td_class = $agi_first_td_class;
} else {
$td_class = "rpt4youGrpHead";
}
if ($column_alias != "sub_row") {
$column_arr = explode("_", $column_alias);
$calculation_type = strtolower($column_arr[(ITS4YouReports_Functions_Helper::count($column_arr) - 1)]);
$cl_c_alias_arr = array();
for ($cl_c_i = 0; $cl_c_i < (ITS4YouReports_Functions_Helper::count($column_arr) - 1); $cl_c_i++) {
$cl_c_alias_arr[] = $column_arr[$cl_c_i];
}
$cl_c_alias = implode("_", $cl_c_alias_arr);
if (is_array($column_values)) {
$column_values_f = "";
ksort($column_values);
$column_values_count = ITS4YouReports_Functions_Helper::count($column_values);
$column_values_i = 0;
foreach ($column_values as $currency_id => $column_value) {
if ($column_value != "") {
//$txt_align = $this->getFldAlignment($column_alias, $column_value);
$fld_style_arr = $this->getFldStyle($column_alias, $column_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
$rate_symbol = getCurrencySymbolandCRate($currency_id);
$fld_value = $this->getFldNumberFormat($column_alias, $column_value, $currency_id);
/* if (is_numeric($fld_value) && $calculation_type != "count" && $cl_c_alias != "quantity" && !in_array($column_alias, $this->g_flds)) {
$fld_value = CurrencyField::appendCurrencySymbol($fld_value, $rate_symbol['symbol']);
} */
if (is_array($fld_value)) {
$column_values_f = $fld_value;
} else {
$column_values_f .= $fld_value;
$column_values_i++;
if ($column_values_i < $column_values_count) {
$column_values_f .= "<br>";
}
}
}
}
if($this->outputformat=="XLS"){
if (is_array($column_values_f)) {
$return_html[$xls_r_i][] = $column_values_f[0];
$return_html[$xls_r_i][] = $column_values_f[1];
} else {
$return_html[$xls_r_i][] = $column_values_f;
}
}else{
$return_html .= "<td class='$td_class' style='background-color:$bg_color;$fld_style' nowrap >" . $column_values_f . "</td>";
}
} else {
//$txt_align = $this->getFldAlignment($column_alias, $column_values);
$fld_style_arr = $this->getFldStyle($column_alias, $column_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
if($this->outputformat=="XLS"){
$column_values_f = $this->getFldNumberFormat($column_alias, $column_values, "");
if (is_array($column_values_f)) {
$return_html[$xls_r_i][] = $column_values_f[0];
$return_html[$xls_r_i][] = $column_values_f[1];
} else {
$return_html[$xls_r_i][] = $column_values_f;
}
}else{
$return_html .= "<td class='$td_class' style='background-color:$bg_color;$fld_style' nowrap >" . $this->getFldNumberFormat($column_alias, $column_values, "") . "</td>";
}
}
// charts array population start
if ($column_alias == $this->charts["charts_ds_column"]) {
if (!isset($this->ch_array["dataseries_label"])) {
$this->setDataseriesLabel($column_alias);
}
$this->addToSubvalChArrayValues("dataseries", $group_value, $column_values, $this->getFldNumberFormat($this->group_cols_array[$ngi], $g1column_alias, "", true), $currency_id);
}
// charts array population end
} else {
$xls_r_i++;
$sub_bg_color = $this->g_colors[$ngi];
foreach ($column_values as $sub_column_alias => $sub_column_arr) {
if($this->outputformat!="XLS"){
$return_html .= "</tr><tr>";
}
$n_ri = 0;
foreach ($sub_column_arr as $sub_column_alias => $sub_column_values) {
if(isset($sub_column_arr["record_id"])){
$this->data_record_id = $sub_column_arr["record_id"];
}
if($sub_column_alias=="record_id"){
continue;
}
if ($n_ri == 0) {
$td_class = $ngi_first_td_class;
} else {
$td_class = "rpt4youGrpHead";
}
$column_arr = explode("_", $sub_column_alias);
$calculation_type = strtolower($column_arr[(ITS4YouReports_Functions_Helper::count($column_arr) - 1)]);
$cl_c_alias_arr = array();
for ($cl_c_i = 0; $cl_c_i < (ITS4YouReports_Functions_Helper::count($column_arr) - 1); $cl_c_i++) {
$cl_c_alias_arr[] = $column_arr[$cl_c_i];
}
$cl_c_alias = implode("_", $cl_c_alias_arr);
if (is_array($sub_column_values)) {
$column_values_f = "";
ksort($sub_column_values);
$column_values_count = ITS4YouReports_Functions_Helper::count($sub_column_values);
$column_values_i = 0;
foreach ($sub_column_values as $currency_id => $column_value) {
if (!$n_ri) {
$dataGroup = $column_value;
if ($prevGroup !== $dataGroup) {
$prevGroup = $dataGroup;
$xls_r_i++;
}
}
if ($column_value != "") {
//$txt_align = $this->getFldAlignment($sub_column_alias, $column_value);
$fld_style_arr = $this->getFldStyle($sub_column_alias, $column_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
$fld_value = $this->getFldNumberFormat($sub_column_alias, $column_value, $currency_id);
/* if (is_numeric($fld_value) && $calculation_type != "count" && $cl_c_alias != "quantity" && !in_array($sub_column_alias, $this->g_flds)) {
$fld_value = CurrencyField::appendCurrencySymbol($fld_value, $this->currency_symbols[$currency_id]);
} */
if('XLS' === $this->outputformat && is_array($fld_value)) {
$column_values_f = $fld_value;
} else {
$column_values_f .= $fld_value;
$column_values_i++;
if ($column_values_i < $$column_values_count) {
$column_values_f .= "<br>";
}
}
}
}
if($this->outputformat=="XLS"){
if (is_array($column_values_f)) {
$return_html[$xls_r_i][] = $column_values_f[0];
$return_html[$xls_r_i][] = $column_values_f[1];
} else {
$return_html[$xls_r_i][] = $column_values_f;
}
}else{
$return_html .= "<td class='$td_class' style='background-color:$sub_bg_color;$fld_style' nowrap >" . $column_values_f . "</td>";
}
} else {
//$txt_align = $this->getFldAlignment($sub_column_alias, $sub_column_values);
$fld_style_arr = $this->getFldStyle($sub_column_alias, $sub_column_values);
$fld_style = $this->getFldStyleString($fld_style_arr);
if($this->outputformat=="XLS"){
$fieldValues = $this->getFldNumberFormat($sub_column_alias, $sub_column_values, "");
if (is_array($fieldValues)) {
$r_data[$xls_r_i][] = $fieldValues[0];
$r_data[$xls_r_i][] = $fieldValues[1];
} else {
$r_data[$xls_r_i][] = $fieldValues;
}
}else{
$return_html .= "<td class='$td_class' style='background-color:$sub_bg_color;$fld_style' nowrap >" . $this->getFldNumberFormat($sub_column_alias, $sub_column_values, "") . "</td>";
}
}
$n_ri++;
//$xls_r_i++;
}
}
}
$sp_cname_i++;
}
if($this->outputformat!="XLS"){
$return_html .= "</tr><tr>";
}
$xls_r_i++;
}
}
// DETAIL OF RECORDS START
// details for group 2 rows
/* if ($agi == 1) {
$this->agi1_group_value = $group_value;
}
if ($agi == 1 && isset($this->result_details_array[$this->agi1_group_value]) && !empty($this->result_details_array[$this->agi1_group_value])) {
$selectedcolumns_arr = $this->report_obj->getSelectedColumnListArray($this->report_obj->record);
if (!empty($selectedcolumns_arr)) {
if ($currency_id != "" && isset($this->result_details_array[$this->agi1_group_value][$currency_id])) {
$group_details_array = $this->result_details_array[$this->agi1_group_value][$currency_id];
} else {
$group_details_array = $this->result_details_array[$this->agi1_group_value];
}
$return_html .= $this->returnGroupDetailRecords($group_details_array, $r_i, $selectedcolumns_arr, $currency_id);
}
} */
// DETAIL OF RECORDS END
//}
if ($agi == 2) {
return $return_arr;
} else {
return $return_html;
}
//return $return_arr;
}
private function returnGroupDetailRecordsNew($group_value, $r_i, $selectedcolumns_arr, $currency_id = "") {
$g_con_sql = '';
$this->doFormat = true;
if ('XLS' === $this->outputformat) {
$return_html = [];
} else {
$return_html = '';
}
$agi = 1;
$pgi = 0;
$g_con_name = "gi_con_$pgi";
if ($this->report_obj->reportinformations["Group1"] != "none") {
$detail_sql_arr = explode("GROUP BY", $this->detail_sql);
$exploded_detail_sql_arr = explode("ORDER BY", $detail_sql_arr[1]);
$detail_sql_arr[1] = $exploded_detail_sql_arr[1];
} else {
$detail_sql_arr = explode("ORDER BY", $this->detail_sql);
}
if (!empty($detail_sql_arr)) {
$adb = PEARDatabase::getInstance();
$where_pos = strpos($detail_sql_arr[0], "WHERE ");
if ($where_pos === false) {
$wstr = "WHERE";
} else {
$wstr = "AND";
}
if (isset($this->report_obj->reportinformations["timeline_columnstr$agi"]) && $this->report_obj->reportinformations["timeline_columnstr$agi"] != "" && $this->report_obj->reportinformations["timeline_columnstr$agi"] != "@vlv@") {
$g_con_col_sql = $this->getTimeLineColumnSql($this->$g_con_name, $this->report_obj->reportinformations["timeline_columnstr$agi"]);
} else {
$g_con_col_sql = $this->$g_con_name;
}
// quick fix campaing rel status
if (false !== strpos($detail_sql_arr[0], 'campaignrelstatus') || false !== strpos($detail_sql_arr[0], 'access_count')) {
if (false !== strpos($detail_sql_arr[0], ' WHERE ')
|| (isset($_REQUEST['advft_criteria']) && !empty($_REQUEST['advft_criteria']))
|| !empty($this->advf_col_array)) {
$wstr = 'AND';
} else {
$wstr = 'WHERE';
}
}
if(is_null($group_value)){
$g_con_sql .= " $wstr " . $g_con_col_sql . " IS NULL ";
}else{
$g_con_sql .= " $wstr " . $g_con_col_sql . ' = "'.$group_value.'" ';
}
if ($currency_id != "" && (99 != $this->report_obj->record && !self::isMoreStrictMysql())) {
$g_con_sql .= " AND " . $this->currency_id_sql . " = '$currency_id' ";
}
global $default_charset;
$g_con_sql = html_entity_decode($g_con_sql, ENT_QUOTES, $default_charset);
$df_gsql = $detail_sql_arr[0];
$detail_sql_arr[0] .= $g_con_sql;
/* if($this->report_obj->reportinformations["Group1"] != "none"){
$df_gsql = implode("GROUP BY", $detail_sql_arr);
}else{ */
$df_gsql = implode("ORDER BY", $detail_sql_arr);
//}
$columns_limit = "";
if ($this->report_obj->reportinformations["Group1"] == "none" && isset($this->report_obj->reportinformations["columns_limit"]) && $this->report_obj->reportinformations["columns_limit"] != "" && $this->report_obj->reportinformations["columns_limit"] != "0") {
$columns_limit = " LIMIT " . $this->report_obj->reportinformations["columns_limit"];
}
$df_gsql .= $columns_limit;
// !!! BASE DETAILS DEBUG !!!
/*if ('78.99.157.226'===$_SERVER['REMOTE_ADDR']) {
$adb->setDebug(true);
}*/
if (!empty($_REQUEST['sdq'])) {
self::displaySqlFormattedQuery($df_gsql);
}
$d_result = $adb->pquery($df_gsql, array());
/*if ('78.99.157.226'===$_SERVER['REMOTE_ADDR']) {
$adb->setDebug(false);
}*/
$d_num_rows = $adb->num_rows($d_result);
$this->to_totals_array = $this->getToTotalsArray(true);
if ($d_num_rows > 0) {
$gr_i = 0;
while ($detail_row = $adb->fetchByAssoc($d_result)) {
// ITS4YOU-CR SlOl 28. 6. 2016 14:32:21
if(isset($detail_row["fieldname"]) && $detail_row["fieldname"]!=""){
$this->row_fldname = $detail_row["fieldname"];
$this->row_module = $detail_row["module"];
$this->row_currency_id = $currency_id;
}else{
$this->row_fldname = "";
$this->row_module = "";
$this->row_currency_id = "";
}
// ITS4YOU-END
if(!isset($this->outputformat) || $this->outputformat=="HTML" || $this->outputformat == "CHARTS"){
$return_html .= "</tr>";
$return_html .= "<tr>";
$f_i = 0;
foreach ($detail_row as $d_key => $d_value) {
$hid_url = '';
if (isset($detail_row["record_id"]) && $detail_row["record_id"] != "") {
$this->data_record_id = $detail_row["record_id"];
}
$is_hid = strpos($d_key, "_hid");
if ($is_hid === false && !in_array($d_key, $this->skip_fields) && $this->report_obj->in_multiarray(html_entity_decode($this->detail_columns_array[$d_key], ENT_QUOTES, $default_charset), $this->detail_selectedcolumns_arr, "fieldcolname") === true) {
//$txt_align = $this->getFldAlignment($d_key, $d_value);
$fld_style_arr = $this->getFldStyle($d_key, $d_value);
$fld_style = $this->getFldStyleString($fld_style_arr);
if (array_key_exists($d_key.'_hid', $detail_row)) {
$hid_url = $this->getHidUrlFromId($detail_row[$d_key.'_hid']);
}
$this->to_totals_res = $this->setToTotalsArray($d_num_rows,$this->to_totals_res, $d_key, $d_value, $this->to_totals_array, $currency_id);
$fieldvalue = $this->getFldNumberFormat($d_key, $d_value, $currency_id);
if (!empty($hid_url)) {
$fieldvalue = "<a href='$hid_url' target='_blank'>$fieldvalue</a> ";
}
$return_html .= "<td class='rpt4youGrpHead' style='background-color:#FFFFFF;$fld_style' nowrap >"
. $fieldvalue .
"</td>";
}
$f_i++;
}
}else{
foreach ($detail_row as $d_key => $d_value) {
if (isset($detail_row["record_id"]) && $detail_row["record_id"] != "") {
$this->data_record_id = $detail_row["record_id"];
}
$is_hid = strpos($d_key, "_hid");
if ($is_hid === false && !in_array($d_key, $this->skip_fields) && $this->report_obj->in_multiarray(html_entity_decode($this->detail_columns_array[$d_key], ENT_QUOTES, $default_charset), $this->detail_selectedcolumns_arr, "fieldcolname") === true) {
//$txt_align = $this->getFldAlignment($d_key, $d_value);
$this->to_totals_res = $this->setToTotalsArray($d_num_rows,$this->to_totals_res, $d_key, $d_value, $this->to_totals_array, $currency_id);
$dValue = $this->getFldNumberFormat($d_key, $d_value, $currency_id);
if (is_array($dValue)) {
$return_html[$gr_i][] = $dValue[0];
$return_html[$gr_i][] = $dValue[1];
} else {
$return_html[$gr_i][] = $dValue;
}
}
}
$gr_i++;
}
}
}
}
$this->doFormat = false;
return $return_html;
}
// ITS4YOU-UP SlOl 19. 5. 2016 9:46:58 - $number_style added
private function getFldStyle($fld_name = '', $fld_value = '', $number_style = false)
{
$fld_style_arr = [];
$txt_align = 'left';
if ('' !== $fld_name) {
$fld_name_arr = explode('_', $fld_name);
if (in_array(strtolower($fld_name_arr[(ITS4YouReports_Functions_Helper::count($fld_name_arr) - 1)]), $this->calculation_type_array)) {
$txt_align = 'right';
}
}
if (array_key_exists($fld_name, $this->columns_array) && isset($this->columns_array["uitype_$fld_name"]) && '' !== $this->columns_array["uitype_$fld_name"]) {
$fld_ui_type = $this->columns_array["uitype_$fld_name"];
}
if (in_array($fld_name_arr[0], ITS4YouReports::$intentory_fields) && !in_array($fld_name_arr[0], ITS4YouReports::$intentory_skip_formating)) {
$txt_align = 'right';
}
if (in_array($fld_name, ITS4YouReports::$intentory_fields) && !in_array($fld_name, ITS4YouReports::$intentory_skip_formating)) {
$txt_align = 'right';
}
if (in_array($this->getClearFldName($fld_name), ITS4YouReports::$intentory_fields) && !in_array(
$this->getClearFldName($fld_name),
ITS4YouReports::$intentory_skip_formating
)) {
$txt_align = 'right';
}
// ITS4YOU-CR SlOl 19. 5. 2016 9:46:52
if (true === $number_style) {
$txt_align = 'right';
}
// ITS4YOU-END
if (in_array($fld_name, ['p_paid_amount', 'p_open_amount'])) {
$txt_align = 'right';
}
$fld_style_arr['text-align'] = $txt_align;
$listview_max_textlength = vglobal('listview_max_textlength');
if (strlen($fld_value) > $listview_max_textlength) {
$fld_style_arr['white-space'] = 'normal';
}
return $fld_style_arr;
}
private function getFldStyleString($fld_style_arr=array()){
$fld_style_str = "";
if(!empty($fld_style_arr)){
foreach ($fld_style_arr as $style_key=>$style_value) {
$fld_style_str .= $style_key.":".$style_value.";";
}
//$fld_style_str = implode(";", $fld_style_arr).";";
}
return $fld_style_str;
}
private function getFldAlignment($fld_name = "", $fld_value = "") {
$txt_align = "left";
if ($fld_name != "") {
$fld_name_arr = explode("_", $fld_name);
if (in_array(strtolower($fld_name_arr[(ITS4YouReports_Functions_Helper::count($fld_name_arr) - 1)]), $this->calculation_type_array)) {
$txt_align = "right";
}
}
if (array_key_exists($fld_name, $this->columns_array) && isset($this->columns_array["uitype_$fld_name"]) && $this->columns_array["uitype_$fld_name"] != "") {
$fld_ui_type = $this->columns_array["uitype_$fld_name"];
}
if (in_array($fld_name_arr[0], ITS4YouReports::$intentory_fields) && is_numeric($fld_value)) {
$txt_align = "right";
}
if (in_array($fld_name, ITS4YouReports::$intentory_fields) && is_numeric($fld_value)) {
$txt_align = "right";
}
/* if($fld_ui_type=="" && is_numeric($fld_value)){
$txt_align = "right";
} */
return $txt_align;
}
private function getFldNumberFormat($fld_name = "", $fld_value = "", $currency_id = "", $skip_format = false) {
$fld_calculation_type = '';
$return_value = $fld_value;
if ($fld_name != "") {
$fld_name_arr = explode("_", $fld_name);
// ITS4YOU-CR SlOl | 16.6.2014 12:06 getFLD UI type and format value start
if (in_array(strtolower($fld_name_arr[(ITS4YouReports_Functions_Helper::count($fld_name_arr) - 1)]), $this->calculation_type_array)) {
$fld_calculation_type = $fld_name_arr[(ITS4YouReports_Functions_Helper::count($fld_name_arr) - 1)];
unset($fld_name_arr[(ITS4YouReports_Functions_Helper::count($fld_name_arr) - 1)]);
}
$fld_alias = implode("_", $fld_name_arr);
$fld_ui_type = 1;
if (array_key_exists($fld_alias, $this->columns_array) && isset($this->columns_array["uitype_$fld_alias"]) && $this->columns_array["uitype_$fld_alias"] != "") {
$fld_ui_type = $this->columns_array["uitype_$fld_alias"];
} elseif (is_array($this->detail_columns_array) && array_key_exists($fld_alias, $this->detail_columns_array) && isset($this->detail_columns_array["uitype_$fld_alias"]) && $this->detail_columns_array["uitype_$fld_alias"] != "") {
$fld_ui_type = $this->detail_columns_array["uitype_$fld_alias"];
}
$return_value = $this->getFldFormatedValue($fld_ui_type, $return_value, $fld_alias, $fld_calculation_type, $currency_id, $skip_format);
// ITS4YOU-CR SlOl | 16.6.2014 12:06 getFLD UI type and format value end
} else {
if ('XLS' === $this->outputformat) {
if (empty(trim($return_value))) {
if (self::isSingleCellField($fld_name)
|| 'summaries_w_details' === $this->reports4you_type
) {
$return_value = '';
} else {
if (empty(trim($return_value))) {
$return_value = [
'',
'',
];
}
}
}
}
}
return $return_value;
}
private function getCurrencyInfo($currencyId) {
$currencyInfo = array();
if($currencyId) {
$db = PearDatabase::getInstance();
$result = $db->pquery('SELECT * FROM vtiger_currency_info WHERE id=?', array($currencyId));
if($db->num_rows($result)) return $db->query_result_rowdata($result, 0);
}
return $currencyInfo;
}
// ITS4YOU-CR SlOl | 16.6.2014 11:35
private function getFldFormatedValue($fld_uitype, $fld_value, $fld_alias, $fld_calculation_type = "", $currency_id = "", $skip_format = false) {
global $default_charset;
$currentUser = Users_Record_Model::getCurrentUserModel();
$currentUser->set('date_format', self::getUserDateFormatFromDB($currentUser) );
$trimed_fld_value = trim($fld_value);
if ($fld_calculation_type != "") {
$fld_calculation_type = strtolower($fld_calculation_type);
}
if(!isset($this->outputformat) || $this->outputformat!="HTML"){
$skip_format = true;
}
if('crmid' === $fld_alias){
return $fld_value;
}
$fldValueForXls = array();
$c_typeofdata = "";
if ($trimed_fld_value != "") {
switch ($fld_uitype) {
case "7":
$fld_value = $this->formatFldNumberValue(floatval($trimed_fld_value),$fld_uitype);
break;
case "9":
$fld_value = $this->formatFldNumberValue($trimed_fld_value,$fld_uitype)."%";
break;
case "10":
$fld_value = $trimed_fld_value;
break;
case "15":
$fieldModule = "";
if(isset($this->row_module) && $this->row_module!=""){
$fieldModule = $this->row_module;
}elseif(isset($this->columns_array[$fld_alias]) && $this->columns_array[$fld_alias]!=""){
$tmpSplit = explode(':', $this->columns_array[$fld_alias]);
$tablename = $tmpSplit[0];
$colname = $tmpSplit[1];
$module_field = $tmpSplit[2];
$fieldname = $tmpSplit[3];
$single = $tmpSplit[4];
$module_field_arr = explode("_", $module_field);
$fieldModule = $module_field_arr[0];
}elseif(isset($this->detail_columns_array[$fld_alias]) && $this->detail_columns_array[$fld_alias]!=""){
$tmpSplit = explode(':', $this->detail_columns_array[$fld_alias]);
$tablename = $tmpSplit[0];
$colname = $tmpSplit[1];
$module_field = $tmpSplit[2];
$fieldname = $tmpSplit[3];
$single = $tmpSplit[4];
$module_field_arr = explode("_", $module_field);
$fieldModule = $module_field_arr[0];
}
if($fieldModule!=""){
$fld_value = getTranslatedString($trimed_fld_value,$fieldModule);
}else{
$fld_value = getTranslatedString($trimed_fld_value);
}
break;
case "33":
$fieldModule = "";
if(isset($this->row_module) && $this->row_module!=""){
$fieldModule = $this->row_module;
}elseif(isset($this->columns_array[$fld_alias]) && $this->columns_array[$fld_alias]!=""){
$tmpSplit = explode(':', $this->columns_array[$fld_alias]);
$tablename = $tmpSplit[0];
$colname = $tmpSplit[1];
$module_field = $tmpSplit[2];
$fieldname = $tmpSplit[3];
$single = $tmpSplit[4];
$module_field_arr = explode("_", $module_field);
$fieldModule = $module_field_arr[0];
}elseif(isset($this->detail_columns_array[$fld_alias]) && $this->detail_columns_array[$fld_alias]!=""){
$tmpSplit = explode(':', $this->detail_columns_array[$fld_alias]);
$tablename = $tmpSplit[0];
$colname = $tmpSplit[1];
$module_field = $tmpSplit[2];
$fieldname = $tmpSplit[3];
$single = $tmpSplit[4];
$module_field_arr = explode("_", $module_field);
$fieldModule = $module_field_arr[0];
}
$trimedFldValues = explode(' |##| ', $trimed_fld_value);
$fldValues = [];
foreach ($trimedFldValues as $trimFldValue) {
if(!empty($fieldModule)){
$fldValues[] = getTranslatedString($trimFldValue,$fieldModule);
}else{
$fldValues[] = getTranslatedString($trimFldValue);
}
}
$fld_value = implode(', ', $fldValues);
break;
case "17":
if ($trimed_fld_value != "" && $trimed_fld_value != "-") {
if ($skip_format === true) {
$fld_value = $trimed_fld_value;
} else {
$fld_value = "<a href='http://$trimed_fld_value' target='_blank'>$trimed_fld_value</a>";
}
}
break;
case "19":
if ($fld_alias == "notecontent") {
$fld_value = decode_html($trimed_fld_value);
} else {
$fld_value = nl2br(decode_html($trimed_fld_value));
}
if ('XLS' === $this->outputformat) {
$fld_value = strip_tags($fld_value);
}
break;
case "21":
case "22":
case "24":
$fld_value = nl2br($trimed_fld_value);
if ('XLS' === $this->outputformat) {
$fld_value = strip_tags($fld_value);
}
break;
case "56":
if ($trimed_fld_value == 1) {
//Since "yes" is not been translated it is given as app strings here..
$fld_value = getTranslatedString('yes');
} else {
$fld_value = getTranslatedString('no');
}
break;
case "66":
case "67":
case "68":
if(is_numeric($trimed_fld_value)){
$parent_module = getSalesEntityType($trimed_fld_value);
$displayValueArray = getEntityName($parent_module, $trimed_fld_value);
if (!empty($displayValueArray)) {
foreach ($displayValueArray as $key => $value) {
$displayValue = $value;
}
}
if ($skip_format === true) {
$fld_value = $displayValue;
} else {
global $site_URL;
$fld_value = "<a href='$site_URL/index.php?module=$parent_module&view=Detail&record=$trimed_fld_value' >$displayValue</a>";
//$fld_value = "<a href='index.php?module=$parent_module&action=DetailView&record=$trimed_fld_value' >$displayValue</a>";
}
}
break;
case '5':
case '23':
$c_typeofdata = 'D';
if(isset($this->columns_array[$fld_alias])){
$tmpSplit = explode(':', $this->columns_array[$fld_alias]);
$c_tablename = $tmpSplit[0];
$c_colname = $tmpSplit[1];
$c_module_field = $tmpSplit[2];
$c_fieldname = $tmpSplit[3];
$c_typeofdata = $tmpSplit[4];
}
if ('DT' === $c_typeofdata
|| ('due_date' === $c_colname && 'vtiger_activity' === $c_tablename)
) {
$checkSize = explode(' ', decode_html($trimed_fld_value));
$date = new DateTimeField($trimed_fld_value);
if (!empty($checkSize[1])) {
$fld_value = $date->getDisplayDate($currentUser) . ' ' . $date->getDisplayTime($currentUser);
} else {
$fld_value = $date->getDisplayDate($currentUser);
}
} elseif ('DT' !== $c_typeofdata
|| !in_array($fld_alias, $this->g_flds)
|| $this->doFormat
) {
try {
$date = new DateTimeField($trimed_fld_value);
$fld_value = $date->getDisplayDate($currentUser);
} catch (Exception $e) {
$fld_value = '';
}
}
break;
case '6':
$c_typeofdata = 'D';
if(isset($this->columns_array[$fld_alias])){
$tmpSplit = explode(':', $this->columns_array[$fld_alias]);
$c_tablename = $tmpSplit[0];
$c_colname = $tmpSplit[1];
$c_module_field = $tmpSplit[2];
$c_fieldname = $tmpSplit[3];
$c_typeofdata = $tmpSplit[4];
}
if (('DT' !== $c_typeofdata || false === strpos($fld_value, ':')) && !in_array($fld_alias, $this->g_flds)) {
$date = new DateTimeField($trimed_fld_value);
$fld_value = $date->getDisplayDate($currentUser);
} elseif ('DT' === $c_typeofdata) {
$checkSize = explode(' ', decode_html($trimed_fld_value));
$date = new DateTimeField($trimed_fld_value);
if (!empty($checkSize[1])) {
$fld_value = $date->getDisplayDate($currentUser) . ' ' . $date->getDisplayTime($currentUser);
} else {
$fld_value = $date->getDisplayDate($currentUser);
}
}
break;
case "70":
if (!in_array($fld_alias, $this->g_flds)) {
if ('-' !== $trimed_fld_value) {
$date = new DateTimeField($trimed_fld_value);
$fld_value = $date->getDisplayDateTimeValue($currentUser);
}
}
break;
case '71':
case '72':
if ('-' === $trimed_fld_value) {
$trimed_fld_value = 0;
}
if ('XLS' === $this->outputformat) {
// if ($currency_id !== $currentUser->get('currency_id')) {
// $convertedFldValue = CurrencyField::convertToUserFormat($trimed_fld_value, null, false, true);
// } else {
$convertedFldValue = CurrencyField::convertToUserFormat(floatval($trimed_fld_value), null, true, true);
// }
if (XlsCurrencyColumn::showXlsCurrencyColumn()) {
$fldValueForXls = array(
$convertedFldValue,
$this->currency_symbols[$currency_id]
);
} else {
$fldValueForXls = $convertedFldValue;
}
} else {
// if ($currency_id !== $currentUser->get('currency_id')) {
// $convertedFldValue = CurrencyField::convertToUserFormat($trimed_fld_value);
// } else {
$convertedFldValue = CurrencyField::convertToUserFormat(floatval($trimed_fld_value), $currentUser, true);
// }
if ($skip_format) {
$currencySeparator = html_entity_decode($currentUser->column_fields['currency_grouping_separator'], ENT_QUOTES, $default_charset);
$decimalSeparator = $currentUser->column_fields['currency_decimal_separator'];
$fld_value = str_replace("$currencySeparator", '', $convertedFldValue);
$fld_value = str_replace(' ', '', $fld_value);
$fld_value = str_replace("$decimalSeparator", '.', $fld_value);
} else{
$fld_value = CurrencyField::appendCurrencySymbol($convertedFldValue, $this->currency_symbols[$currency_id]);
}
}
break;
case "712":
if ($trimed_fld_value == "-") {
$trimed_fld_value = 0;
}
$fld_value = number_format($trimed_fld_value, "3", ".", "");
$currencyField = new CurrencyField($fld_value);
if ($currency_id != "" && isset($this->currency_symbols[$currency_id])) {
if ('XLS' !== $this->outputformat) {
$fld_value = $currencyField->getDisplayValue(null, true);
}
if ('XLS' === $this->outputformat) {
if (XlsCurrencyColumn::showXlsCurrencyColumn()) {
$fldValueForXls = array(
$fld_value,
$this->currency_symbols[$currency_id]
);
} else {
$fldValueForXls = $fld_value;
}
} else {
$fld_value = CurrencyField::appendCurrencySymbol($fld_value, $this->currency_symbols[$currency_id]);
}
} else {
if(1<$currentUser->get('currency_id')) {
$baseCurrencyInfo = $this->getCurrencyInfo($currentUser->get('currency_id'));
} else {
$baseCurrencyInfo = Vtiger_Util_Helper::getBaseCurrency();
}
$conversionRate = $baseCurrencyInfo["conversion_rate"];
if( $conversionRate > 1 ) {
$fld_value = ( $fld_value * $conversionRate );
$currencyField = new CurrencyField($fld_value);
}
if ('XLS' !== $this->outputformat) {
$fld_value = $currencyField->getDisplayValue(null, true);
$currencySymbol = $currencyField->getCurrencySymbol();
}
if ('XLS' === $this->outputformat) {
if (XlsCurrencyColumn::showXlsCurrencyColumn()) {
$fldValueForXls = array(
$fld_value,
$currencySymbol
);
} else {
$fldValueForXls = $fld_value;
}
} else {
$fld_value = CurrencyField::appendCurrencySymbol($fld_value, $currencySymbol);
}
}
break;
case "75":
case "76":
case "78":
case "79":
case "80":
case "81":
if(is_numeric($trimed_fld_value)){
$parent_module = getSalesEntityType($trimed_fld_value);
if (vtlib_isModuleActive($parent_module)) {
$displayValueArray = getEntityName($parent_module, $trimed_fld_value);
if (!empty($displayValueArray)) {
foreach ($displayValueArray as $key => $value) {
$displayValue = $value;
}
}
if ($skip_format === true) {
$fld_value = $displayValue;
} else {
global $site_URL;
$fld_value = "<a href='$site_URL/index.php?module=$parent_module&view=Detail&record=$trimed_fld_value' >$displayValue</a>";
//$fld_value = "<a href='index.php?module=$parent_module&action=DetailView&record=$trimed_fld_value' >$displayValue</a>";
}
}
}
break;
case "98":
if(is_numeric($fld_value) && !is_bool($fld_value)){
$fld_value = getRoleName($fld_value);
}
break;
// ITS4YOU-CR SlOl 16. 2. 2016 6:33:53 - IT&M uitype 120 customization s
case "120":
if($fld_value!="" && $fld_value!="-"){
$users_array = explode(",",$fld_value);
$t_fld_arr = array();
foreach($users_array as $fldUId){
$t_fld_arr[] = getUserFullName($fldUId);
}
$fld_value = implode(",",$t_fld_arr);
}
break;
// ITS4YOU-END - IT&M uitype 120 customization e
// ITS4YOU-END - Schlieger uitype 1553 customization s
case '1553':
$fld_value = '';
$currentUser = Users_Record_Model::getCurrentUserModel();
if (empty(self::$userList)) {
$userObjList = Users_Record_Model::getAll(false);
$userList = [];
foreach ($userObjList as $userId => $userObj) {
$userList[$userId] = $userObj->getName();
}
self::$userList = $userList;
} else {
$userList = self::$userList;
}
if (empty(self::$groupList)) {
$groupList = $currentUser->getAccessibleGroups();
self::$groupList = $groupList;
} else {
$groupList = self::$groupList;
}
if (!empty($userList[$fld_value])) {
$fld_value = $userList[$fld_value];
} elseif (!empty($groupList[$fld_value])) {
$fld_value = $groupList[$fld_value];
}
break;
// ITS4YOU-END - Schlieger uitype 1553 customization e
default:
// ITS4YOU-UP SlOl | 26.8.2015 10:43
// assumption: all of fields contains uitype expect of inventory fields ! ...
if($this->columns_array["uitype_$fld_alias"]==""){
$fld_array = $clear_fld_array = explode("_",$fld_alias);
$relfieldid = $fld_array[(ITS4YouReports_Functions_Helper::count($fld_array)-1)];
if(is_numeric($relfieldid)){
unset($clear_fld_array[(ITS4YouReports_Functions_Helper::count($fld_array)-1)]);
$adb = PearDatabase::getInstance();
$relfieldres = $adb->pquery("SELECT uitype FROM vtiger_field WHERE fieldid = ? ", array($relfieldid));
if($adb->num_rows($relfieldres) > 0){
$rel_field_row = $adb->fetchByAssoc($relfieldres, 0);
$rel_field_uitype = $rel_field_row["uitype"];
if ($rel_field_uitype == 10) {
unset($clear_fld_array[(ITS4YouReports_Functions_Helper::count($fld_array)-2)]);
}
}
$fld_alias = implode("_", $clear_fld_array);
}
}
if(($fld_uitype=="4" && $fld_alias==$this->primary_no_column && $this->data_record_id!="")
|| ('pohoda_number' === $fld_alias && $this->data_record_id!="")
){
if ($skip_format !== true){
$link_id = $this->data_record_id;
$link_module = getSalesEntityType($link_id);
global $site_URL;
$fld_value = "<a href='".$site_URL."/index.php?module=$link_module&view=Detail&record=$link_id' >$fld_value</a>";
}
}
// ITS4YOU-END 26.8.2015
// ITS4YOU-UP SlOl 29. 3. 2017 9:59:01
if(isset($this->columns_array[$fld_alias])){
$tmpSplit = explode(':', $this->columns_array[$fld_alias]);
$c_tablename = $tmpSplit[0];
$c_colname = $tmpSplit[1];
$c_module_field = $tmpSplit[2];
$c_fieldname = $tmpSplit[3];
$c_typeofdata = $tmpSplit[4];
}
if ($this->report_obj->in_multiarray(decode_html($fld_alias), $this->report_obj->reportinformations['cc_array'], 'cc_name')) {
$fld_value = $this->formatFldNumberValue($fld_value, '0', getCurrencyDecimalPlaces());
} elseif ('T' === $c_typeofdata) {
/*if ( '-' !== $fld_value ) {
$fld_value = Vtiger_Datetime_UIType::getDateTimeValue($fld_value);
}*/
if ('vtiger_activity' === $c_tablename && in_array($c_fieldname, ['time_start', 'time_end'])) {
if (!empty($fld_value) && '-' !== $fld_value) {
$fldObj = DateTimeField::convertToUserTimeZone(' ' . $fld_value);
$fld_value = $fldObj->format('H:i');
}
}
// ITS4YOU-END 29. 3. 2017 9:59:04
} elseif ($fld_alias=="converted") {
if ($trimed_fld_value == 1) {
//Since "yes" is not been translated it is given as app strings here..
$fld_value = getTranslatedString('Converted');
} else {
$fld_value = getTranslatedString('Not Converted');
}
} elseif (
self::isSingleCellField($fld_alias) && is_numeric($fld_value)
) {
$fld_value = $this->formatFldNumberValue($fld_value, "0", 3);
} elseif ('prodname' !== $fld_alias
&& (
ITS4YouReports::isInventoryModule(self::getModuleNameFromColumnStr($this->columns_array[$fld_alias])) && (
in_array($fld_alias, ITS4YouReports::$intentory_fields) || in_array($this->getClearFldName($fld_alias), ITS4YouReports::$intentory_fields)
)
)
&& is_numeric($fld_value) && 'count' !== $fld_calculation_type) {
if (empty($currency_id)) {
$currencyIdArray = Vtiger_Util_Helper::getBaseCurrency();
$currency_id = $currencyIdArray['id'];
}
if ('XLS' === $this->outputformat) {
if (XlsCurrencyColumn::showXlsCurrencyColumn()) {
$fldValueForXls = array(
$fld_value,
$this->currency_symbols[$currency_id]
);
} else {
$fldValueForXls = $fld_value;
}
} else {
$fld_value = $this->formatFldNumberValue($fld_value, $currency_id);
}
} elseif (isset($fld_calculation_type) && !in_array($fld_calculation_type, array("", "count"))) {
$fld_value = $this->formatFldNumberValue($fld_value);
}elseif(in_array($fld_alias,ITS4YouReports::$modTrackerColumns)){
if($fld_value!=""){
switch ($fld_alias) {
case "module":
$fld_value = vtranslate($trimed_fld_value,$trimed_fld_value);
break;
case "changedon":
$date = new DateTimeField($trimed_fld_value);
$fld_value = $date->getDisplayDate();
break;
case "status":
switch ($trimed_fld_value) {
case "0":
$fld_value = vtranslate('LBL_UPDATED');
break;
case "1":
$fld_value = vtranslate('LBL_DELETED');
break;
case "2":
$fld_value = vtranslate('LBL_CREATED');
break;
case "3":
$fld_value = vtranslate('LBL_RESTORED');
break;
}
break;
case "fieldname":
$adb = PearDatabase::getInstance();
$p_module = $this->report_obj->primarymodule;
$p_module_id = $this->report_obj->primarymoduleid;
switch ($trimed_fld_value) {
case "record_module":
$fld_value = vtranslate("LBL_MODULENAMES",$this->currentModule);
break;
case "record_id":
$fld_value = vtranslate("LBL_RECORD");
break;
default:
$fld_res = $adb->pquery("SELECT fieldlabel FROM vtiger_field WHERE fieldname = ? AND tabid = ? ", array($trimed_fld_value, $p_module_id));
$fld_nr = $adb->num_rows($fld_res);
if ($fld_nr > 0) {
while ($fld_row = $adb->fetchByAssoc($fld_res)) {
$fld_value = vtranslate($fld_row["fieldlabel"],$p_module);
}
}else{
$fld_value = $trimed_fld_value;
}
break;
}
break;
case "prevalue":
case "postvalue":
if($this->row_fldname!=""){
$adb = PearDatabase::getInstance();
$fld_res = $adb->pquery("SELECT uitype FROM vtiger_field WHERE fieldname = ? AND tabid = ? ", array($this->row_fldname, getTabid($this->row_module)));
$fld_nr = $adb->num_rows($fld_res);
if ($fld_nr > 0) {
while ($fld_row = $adb->fetchByAssoc($fld_res)) {
$uitype = $fld_row["uitype"];
}
if(in_array($uitype,ITS4YouReports::$s_users_uitypes)){
$trimed_fld_value = getUserFullName($trimed_fld_value);
}
$fld_value = $this->getFldFormatedValue($uitype, $trimed_fld_value, $this->row_fldname,"",$this->row_currency_id);
}else{
$fld_value = $trimed_fld_value;
}
}
break;
default:
$fld_value = $trimed_fld_value;
break;
}
}
}
break;
}
} else {
$fld_value = "";
}
// ITS4YOU-UP SlOl 7. 4. 2016 13:54:23 hyperlink
if (($skip_format !== true && $this->report_obj->reportinformations["list_link_field"] === $fld_alias)
|| ($skip_format !== true && 'HelpDesk' === $this->report_obj->primarymodule && 'title' === $fld_alias)
|| ($fld_alias=="r4u_hyperlink")
) {
if ($this->data_record_id != "") {
$parenttab = getParentTab();
if($this->report_obj->primarymodule=="Calendar"){
$data_module = getSalesEntityType($this->data_record_id);
}else{
$data_module = $this->report_obj->primarymodule;
}
$recordId = $this->data_record_id;
global $site_URL;
// ITS4YOU-UP SlOl 7. 4. 2016 13:54:23 hyperlink
$r4u_hyperlink = "$site_URL/index.php?module=$data_module&view=Detail&record=$recordId";
if($fld_alias=="r4u_hyperlink"){
$fld_value = $r4u_hyperlink;
}else{
$fld_value = "<a href='$r4u_hyperlink' title='" . getTranslatedString($data_module, $data_module) . "' >$fld_value</a>";
}
// ITS4YOU-END
}
}
if (!empty($fldValueForXls)) {
$returnValue = $fldValueForXls;
} else {
$returnValue = $fld_value;
}
return $returnValue;
}
private function formatFldNumberValue($fld_value, $currency_id = '', $dec_number = '3')
{
if (!empty(floatval($fld_value))) {
$fld_value = number_format(floatval($fld_value), $dec_number, '.', '');
if ('' !== $currency_id) {
if (isset($this->currency_symbols[$currency_id])) {
$currencyField = new CurrencyField($fld_value);
if ('XLS' !== $this->outputformat) {
$fld_value = $currencyField->getDisplayValue(null, true);
}
$fld_value = CurrencyField::appendCurrencySymbol($fld_value, $this->currency_symbols[$currency_id]);
} else {
$currencyField = new CurrencyField($fld_value);
if ('XLS' !== $this->outputformat) {
$fld_value = $currencyField->getDisplayValue(null, true);
}
}
} else {
$currencyField = new CurrencyField($fld_value);
if ('XLS' !== $this->outputformat) {
$fld_value = $currencyField->getDisplayValue(null, true);
}
}
}
return $fld_value;
}
// ITS4YOU-END 16.6.2014 11:35
// ITS4YOU-CR SlOl | 15.5.2014 13:28
private function getDateSQLFormat($date_format) {
$date_format = str_replace("dd", "%d", $date_format);
$date_format = str_replace("mm", "%m", $date_format);
$date_format = str_replace("yyyy", "%Y", $date_format);
return $date_format;
}
private function getTimeLineColumnSql($column_sql, $timeline_col_str = "") {
global $current_user;
$return = $column_sql;
if ($timeline_col_str != "" && $timeline_col_str != "@vlv@") {
$timeline_col_array = explode("@vlv@", $timeline_col_str);
if (isset($timeline_col_array[1]) && $timeline_col_array[1] != "") {
$timeline_freq = $timeline_col_array[1];
// %d Day of the month, numeric (00..31)
// %V Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X
// %v Week (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x
// %m Month, numeric (00..12)
// %M Month name
// %b Abbreviated month name
// %Y Year, numeric, four digits
// DATE_FORMAT($column_sql, '%Y-%M %Y')
// $timeline_freq = "DAYS";
// $timeline_freq = "WEEK";
// $timeline_freq = "MONTH";
// $timeline_freq = "QUARTER";
// $timeline_freq = "HALFYEAR";
// $timeline_freq = "YEAR";
switch ($timeline_freq) {
case "DAYS":
$format = $current_user->date_format;
if (empty($format)) {
$format = 'dd-mm-yyyy';
}
$format = $this->getDateSQLFormat($format);
$return = "DATE_FORMAT($column_sql,'$format')";
break;
case "WEEK":
$format = '%Y-%v';
// $format = '%Y-%V';
$return = "DATE_FORMAT($column_sql,'$format')";
break;
case "MONTH":
$format = '%b %Y';
$return = "DATE_FORMAT($column_sql,'$format')";
break;
case "QUARTER":
$return = "CONCAT(YEAR($column_sql),'-',QUARTER($column_sql),'Q')";
break;
case "HALFYEAR":
$return = "IF(((MONTH($column_sql)-6)/2)<0,DATE_FORMAT($column_sql,'%Y-1H'),DATE_FORMAT($column_sql,'%Y-2H'))";
break;
case "YEAR":
$format = '%Y';
$return = "DATE_FORMAT($column_sql,'$format')";
break;
}
}
}
return $return;
}
// ITS4YOU-END 15.5.2014 13:28
// ITS4YOU-CR SlOl | 29.5.2014 10:27
private function getGroupTotalsValue($g_t_key, $g_t_array) {
$fld_name_exploded = explode("_", $g_t_key);
$calculation_type = strtolower($fld_name_exploded[(ITS4YouReports_Functions_Helper::count($fld_name_exploded) - 1)]);
switch ($calculation_type) {
case "count":
$g_t_value = array_sum($g_t_array);
break;
case "sum":
$g_t_value = array_sum($g_t_array);
break;
case "avg":
$g_t_value = (array_sum($g_t_array) / ITS4YouReports_Functions_Helper::count($g_t_array));
break;
case "min":
$g_t_value = min(array_filter($g_t_array));
break;
case "max":
$g_t_value = max($g_t_array);
break;
}
return $g_t_value;
}
// ITS4YOU-END 29.5.2014 10:27
// ITS4YOU-CR SlOl | 12.6.2014 9:30
private function getSummariesConditions($report) {
// SUMMARIES CRITERIA START
$report->getSummariesFilterList($report->record);
$ngc_column_sql = "";
if (isset($report->summaries_criteria) && !empty($report->summaries_criteria)) {
$sc_count = ITS4YouReports_Functions_Helper::count($report->summaries_criteria);
$sc_i = 1;
foreach ($report->summaries_criteria as $g_i => $gc_column_array) {
$ngc_columnname = "";
$ngc_columnname_array = array();
$gc_columnname = $gc_column_array["columnname"];
$gc_comparator = $gc_column_array["comparator"];
$gc_value = $gc_column_array["value"];
$gc_column_condition = "AND"; // $gc_column_array["column_condition"]
$gc_columnname_array = explode(":", $gc_columnname);
$count_gca = (ITS4YouReports_Functions_Helper::count($gc_columnname_array) - 1);
for ($gc_i = 0; $gc_i < ($count_gca); $gc_i++) {
$ngc_columnname_array[] = $gc_columnname_array[$gc_i];
}
$gc_calculation_type = $gc_columnname_array[$count_gca];
$ngc_columnname = implode(":", $ngc_columnname_array);
$gc_column_sql = $this->columns_array[$ngc_columnname]['fld_cond'];
$gc_comparator_sql = $this->getAdvComparator($gc_comparator, trim($gc_value));
$ngc_column_sql .= " $gc_calculation_type($gc_column_sql) $gc_comparator_sql ";
if ($sc_i < $sc_count) {
$ngc_column_sql .= $gc_column_condition;
}
$sc_i++;
}
}
return $ngc_column_sql;
// SUMMARIES CRITERIA END
}
// ITS4YOU-END 12.6.2014 9:30
// ITS4YOU-CR SlOl | 8.7.2014 8:57
private function setChartsColumns() {
$this->ch_array = array();
if (isset($this->report_obj->reportinformations["charts"]) && !empty($this->report_obj->reportinformations["charts"])) {
$report_charts = $this->report_obj->reportinformations["charts"];
foreach($report_charts as $ch_i => $chart_array){
if($chart_array["charttype"]!="none"){
$dataseries = $chart_array["dataseries"];
$dataseries_col_arr = explode(":", $dataseries);
$ds_lastkey = (ITS4YouReports_Functions_Helper::count($dataseries_col_arr) - 1);
$dataseries_calculationtype = strtolower($dataseries_col_arr[$ds_lastkey]);
unset($dataseries_col_arr[$ds_lastkey]);
$dataseries_column_str = implode(":", $dataseries_col_arr);
if (isset($this->columns_array[$dataseries_column_str]["fld_alias"]) && $this->columns_array[$dataseries_column_str]["fld_alias"] != "") {
$charts_ds_column = $this->columns_array[$dataseries_column_str]["fld_alias"] . "_" . $dataseries_calculationtype;
$this->charts["charts_ds_columns"][] = $charts_ds_column;
}
/*
if (isset($this->columns_array[$chart_array["x_group"]]["fld_alias"]) && $this->columns_array[$chart_array["x_group"]]["fld_alias"] != "") {
$this->charts["x_group_str"] = $chart_array["x_group"];
$x_group = $this->columns_array[$chart_array["x_group"]]["fld_alias"];
$this->charts["x_group"] = $x_group;
}
*/
$this->charts["x_group"] = strtolower($chart_array["x_group"]);
$this->charts["charttitle"] = $chart_array["charttitle"];
$this->charts["charttypes"][$charts_ds_column] = $chart_array["charttype"];
}
}
/*
$report_charts = $this->report_obj->reportinformations["charts"];
$charttype = $report_charts["charttype"];
$this->charts["charttype"] = $charttype;
if ($charttype != "" && $charttype != "none") {
$dataseries = $report_charts["dataseries"];
$charttitle = $report_charts["charttitle"];
$this->charts["charttitle"] = $charttitle;
$dataseries_col_arr = explode(":", $dataseries);
$ds_lastkey = (count($dataseries_col_arr) - 1);
$dataseries_calculationtype = strtolower($dataseries_col_arr[$ds_lastkey]);
unset($dataseries_col_arr[$ds_lastkey]);
$dataseries_column_str = implode(":", $dataseries_col_arr);
if (isset($this->columns_array[$dataseries_column_str]["fld_alias"]) && $this->columns_array[$dataseries_column_str]["fld_alias"] != "") {
$charts_ds_column = $this->columns_array[$dataseries_column_str]["fld_alias"] . "_" . $dataseries_calculationtype;
$this->charts["charts_ds_column"] = $charts_ds_column;
}
}
*/
}
return;
}
private function setChArrayValues($ch_key, $ch_subkey, $ch_value, $g_data_key="", $base_group="") {
if ($ch_subkey == "") {
$ch_subkey = getTranslatedString("LBL_NONE");
}
global $default_charset;
$ch_key = html_entity_decode($ch_key, ENT_QUOTES, $default_charset);
$ch_subkey = html_entity_decode($ch_subkey, ENT_QUOTES, $default_charset);
$ch_value = html_entity_decode($ch_value, ENT_QUOTES, $default_charset);
$ch_key = addslashes($ch_key);
$ch_subkey = addslashes($ch_subkey);
$ch_value = addslashes($ch_value);
if ($ch_key == "dataseries_label"){
if (!is_array($this->ch_array[$ch_key][$ch_subkey])) {
$this->ch_array[$ch_key][$ch_subkey] = [];
}
if (!in_array($ch_value, $this->ch_array[$ch_key][$ch_subkey])) {
if ($ch_subkey == "subval") {
$this->ch_array[$ch_key][$ch_subkey][] = $ch_value;
} else {
if (!empty($this->ch_array[$ch_key][$ch_subkey])) {
$this->ch_array[$ch_key][$ch_subkey] += $ch_value;
} else {
$this->ch_array[$ch_key][$ch_subkey] = $ch_value;
}
}
}
}elseif($ch_key=="dataseries" && $g_data_key!="") {
if(!empty($base_group)){
if (!is_array($this->ch_array[$ch_key][$g_data_key][$base_group][$ch_subkey])) {
$this->ch_array[$ch_key][$g_data_key][$base_group][$ch_subkey] = [];
}
if (!in_array($ch_value, $this->ch_array[$ch_key][$g_data_key][$base_group][$ch_subkey])) {
if ($ch_subkey == "subval") {
$this->ch_array[$ch_key][$g_data_key][$base_group][$ch_subkey][] = $ch_value;
} else {
if (!empty($this->ch_array[$ch_key][$g_data_key][$base_group][$ch_subkey])) {
$this->ch_array[$ch_key][$g_data_key][$base_group][$ch_subkey] += $ch_value;
} else {
$this->ch_array[$ch_key][$g_data_key][$base_group][$ch_subkey] = $ch_value;
}
}
}
}else{
if (!is_array($this->ch_array[$ch_key][$g_data_key][$ch_subkey])) {
$this->ch_array[$ch_key][$g_data_key][$ch_subkey] = [];
}
if (!in_array($ch_value, $this->ch_array[$ch_key][$g_data_key][$ch_subkey])) {
if ($ch_subkey == "subval") {
$this->ch_array[$ch_key][$g_data_key][$ch_subkey][] = $ch_value;
} else {
if (!empty($this->ch_array[$ch_key][$g_data_key][$ch_subkey])) {
$this->ch_array[$ch_key][$g_data_key][$ch_subkey] += $ch_value;
} else {
$this->ch_array[$ch_key][$g_data_key][$ch_subkey] = $ch_value;
}
}
}
}
} else {
if (!is_array($this->ch_array[$ch_key])){
$this->ch_array[$ch_key] = [];
}
if (!in_array($ch_value, $this->ch_array[$ch_key])) {
$this->ch_array[$ch_key] = $ch_value;
}
}
}
private function addToSubvalChArrayValues($ch_key, $ch_subkey, $ch_value, $option_key = "", $currency_id = "") {
global $default_charset;
$ch_key = html_entity_decode($ch_key, ENT_QUOTES, $default_charset);
if ($ch_subkey == "") {
$ch_subkey = getTranslatedString("LBL_NONE");
}
if ($ch_subkey != "") {
$this->setDataseriesLabel($option_key, "subval");
if ($currency_id != "") {
$ch_subkey = $ch_subkey . " (" . $this->currency_symbols[$currency_id] . ")";
}
$ch_subkey = html_entity_decode($ch_subkey, ENT_QUOTES, $default_charset);
if ($option_key != "") {
$this->ch_array[$ch_key]["subval"][$ch_subkey][$option_key][] = $ch_value;
} else {
$this->ch_array[$ch_key]["subval"][$ch_subkey][] = $ch_value;
}
} else {
$this->ch_array[$ch_key]["subval"][] = $ch_value;
}
}
private function getReportCharts($reportObj, $export_pdf_format, $currency_id = "") {
$report_html = "";
$is_stacked = false;
global $current_user;
global $default_charset;
$filename = "R4YouCharts";
if (isset($current_user) && $current_user->id != "") {
$filename .= "_" . $current_user->id;
}
$reportid = $this->report_obj->record;
$filename .= "_" . $reportid;
$ch_data = "";
$dataseries = array();
if (isset($this->ch_array) && $this->ch_array["charttype"] != "none" && !empty($this->ch_array["dataseries"])) {
$charttype = $this->ch_array["charttype"];
$charttitle = html_entity_decode($this->ch_array["charttitle"], ENT_QUOTES, $default_charset);
if ($charttype == "funnel") {
$chart_lbl_key = $this->ch_array["dataseries_label"]["val"];
$chart_lbl_val = $this->ch_array["dataseries_label"]["key"];
} else {
$chart_lbl_key = $this->ch_array["dataseries_label"]["key"];
$chart_lbl_val = $this->ch_array["dataseries_label"]["val"];
}
// Sort Cols Values Array Start
if ($this->report_obj->reportinformations["timeline_type2"] == "cols") {
if ($this->report_obj->reportinformations["Sort2"] == "Descending") {
krsort($this->ch_array["dataseries"]);
krsort($this->ch_array["dataseries"]["subval"]);
} else {
ksort($this->ch_array["dataseries"]);
ksort($this->ch_array["dataseries"]["subval"]);
}
} elseif ($this->report_obj->reportinformations["timeline_type3"] == "cols") {
if ($this->report_obj->reportinformations["Sort3"] == "Descending") {
krsort($this->ch_array["dataseries"]);
krsort($this->ch_array["dataseries"]["subval"]);
} else {
ksort($this->ch_array["dataseries"]);
ksort($this->ch_array["dataseries"]["subval"]);
}
}
// Sort Cols Values Array End
// Stack Horizontal Charts for better Look ;)
if ($this->ch_array["charttype"] == "horizontal" && isset($this->ch_array["dataseries"]["subval"]) && !empty($this->ch_array["dataseries"]["subval"])) {
$is_stacked = true;
$dataseries[] = array($chart_lbl_key);
} else {
$dataseries[] = array($chart_lbl_key, $chart_lbl_val);
}
if (isset($this->ch_array["dataseries"]["subval"]) && !empty($this->ch_array["dataseries"]["subval"])) {
if (isset($this->ch_array["dataseries_label"]["subval"]) && !empty($this->ch_array["dataseries_label"]["subval"])) {
foreach ($this->ch_array["dataseries_label"]["subval"] as $sv_key => $sv_label) {
$dataseries[0][] = $sv_label;
}
}
}
if ($is_stacked) {
$ch_array_dataseries = $this->ch_array["dataseries"]["subval"];
} else {
$ch_array_dataseries = $this->ch_array["dataseries"];
}
foreach ($ch_array_dataseries as $ch_key => $ch_value) {
$dataseries_arr = array();
if ($ch_key != "subval") {
$ch_key_coded = $ch_key;
$ch_key = html_entity_decode($ch_key, ENT_QUOTES, $default_charset);
$ch_value = html_entity_decode($ch_value, ENT_QUOTES, $default_charset);
settype($ch_value, "integer");
settype($ch_key, "string");
$dataseries_arr[] = $ch_key;
if (!$is_stacked) {
$dataseries_arr[] = $ch_value;
}
if (isset($this->ch_array["dataseries"]["subval"]) && !empty($this->ch_array["dataseries"]["subval"])) {
if (isset($this->ch_array["dataseries"]["subval"][$ch_key]) && !empty($this->ch_array["dataseries"]["subval"][$ch_key])) {
foreach ($this->ch_array["dataseries_label"]["subval"] as $sv_key => $sv_label) {
if (isset($this->ch_array["dataseries"]["subval"][$ch_key][$sv_label])) {
if (is_array($this->ch_array["dataseries"]["subval"][$ch_key][$sv_label][0])) {
$ds_val = end($this->ch_array["dataseries"]["subval"][$ch_key][$sv_label][0]);
} elseif (ITS4YouReports_Functions_Helper::count($this->ch_array["dataseries"]["subval"][$ch_key][$sv_label]) > 1) {
$ds_val = array_sum($this->ch_array["dataseries"]["subval"][$ch_key][$sv_label]);
} else {
$ds_val = $this->ch_array["dataseries"]["subval"][$ch_key][$sv_label][0];
}
settype($ds_val, "integer");
$dataseries_arr = array_merge($dataseries_arr, array($ds_val));
} else {
$dataseries_arr = array_merge($dataseries_arr, array(0));
}
}
} else {
foreach ($this->ch_array["dataseries_label"]["subval"] as $sv_label) {
$dataseries_arr = array_merge($dataseries_arr, array(0));
}
}
}
$dataseries[] = $dataseries_arr;
}
}
if ($charttype == "horizontal") {
$yaxis_title = html_entity_decode($chart_lbl_val, ENT_QUOTES, $default_charset);
$xaxis_title = html_entity_decode($chart_lbl_key, ENT_QUOTES, $default_charset);
} else {
$xaxis_title = html_entity_decode($chart_lbl_val, ENT_QUOTES, $default_charset);
$yaxis_title = html_entity_decode($chart_lbl_key, ENT_QUOTES, $default_charset);
}
$ch_fld_ui_type = $chart_column_str = "";
if (isset($this->g_flds[0]) && !empty($this->g_flds[0])) {
$ch_fld_as = $this->g_flds[0];
if (isset($this->columns_array["uitype_$ch_fld_as"]) && !empty($this->columns_array["uitype_$ch_fld_as"])) {
$ch_fld_ui_type = $this->columns_array["uitype_$ch_fld_as"];
if (isset($this->columns_array[$ch_fld_as]) && !empty($this->columns_array[$ch_fld_as])) {
$chart_column_str = $this->columns_array[$ch_fld_as];
}
}
}
require_once('modules/ITS4YouReports/gcharts.php');
$gcharts = new Gcharts();
$gcharts->chart_type = $charttype;
$gcharts->report_filename = $this->report_filename;
$gcharts->export_pdf_format = $export_pdf_format;
$gcharts->chart_column_uitype = $ch_fld_ui_type;
$gcharts->chart_column_str = $chart_column_str;
$gcharts->is_currency = $currency_id;
if (isset($this->g_chart_types[$charttype])) {
$graphic_type = $this->g_chart_types[$charttype];
} else {
$graphic_type = $this->g_chart_types["horizontal"];
}
if ($graphic_type == "PieChart") {
$chart_width = "600";
} else {
$chart_width = "100%";
}
$this->ch_image_name = $filename;
$gcharts->load(array('graphic_type' => $graphic_type, 'ch_image_name' => $filename));
$set_options = array();
$set_options["width"] = $chart_width;
$chart_height = "800";
if ($is_stacked) {
$set_options["isStacked"] = "true";
}
$set_options["title"] = $charttitle;
$set_options["vAxis"] = array('title' => "$xaxis_title",);
$gch_height = "55%";
$gch_width = "60%";
if ($graphic_type == "PieChart") {
$chart_height = "500";
$gch_height = "85%";
$gch_width = "100%";
$set_options["legend"] = array("position" => "right",
"textStyle" => "{fontSize:5}");
if ($charttype == "pie3d") {
$set_options["is3D"] = "true";
}
}
if ($charttype == "funnel") {
$set_options["bar"] = array("groupWidth" => "100%");
} else {
$set_options["bar"] = array("groupWidth" => "90%");
}
$set_options["titleTextStyle"] = array("fontSize" => "25",
"fontWidth" => "bold",
"margin" => "auto");
$set_options["height"] = $chart_height;
$hAxis_arr["textPosition"] = "out";
$hAxis_arr["slantedText"] = "false";
$hAxis_arr["maxAlternation"] = "255";
$hAxis_arr["maxTextLines"] = "255";
if ($charttype == "funnel") {
$hAxis_arr["textPosition"] = "none";
}
$hAxis_arr["title"] = "$yaxis_title";
$set_options["hAxis"] = $hAxis_arr;
$set_options["chartArea"] = array('right' => "20%",
'width' => "$gch_width",
'height' => "$gch_height",
);
$gcharts->set_options($set_options);
$report_html .= "<div id='break_row' class='no-print'></br></div>";
$report_html .= "<div id='chart_div' class='no-print' style='width:100%;text-align:center;'>
<table class='rpt4youTableGraph' style='padding:0px;margin:auto;width:80%;height:auto;text-align:center;' cellpadding='5' cellspacing='0' align='center'>
<tr>
<td class='rpt4youGrpHead' nowrap='' align='center' style='text-align:center;border:0px;verical-align:top;'>";
$report_html .= $gcharts->generate($dataseries);
$report_html .= "</td>
</tr>
</table></div>";
}
//ITS4YouReports::sshow($dataseries);
//return $dataseries;
return $report_html;
}
// ITS4YOU-CR SlOl | 24.2.2015 15:32
private function setHChArrayValues($type="hch_dataseries", $group_value, $fld_value,$currency_id=""){
if($currency_id!=""){
$this->ch_array["hch_dataseries"][$group_value][$currency_id][] = $fld_value;
}else{
$this->ch_array["hch_dataseries"][$group_value][] = $fld_value;
}
return true;
}
private function getReportHighCharts($export_pdf_format, $currency_id){
$default_charset = vglobal('default_charset');
$report_html = "";
$request = new Vtiger_Request($_REQUEST, $_REQUEST);
global $current_user;
//ITS4YouReports::sshow($this->charts);
//ITS4YouReports::sshow($this->ch_array);
$title_color = "#2b2b2b";
$title_size = "25px";
if('ShowWidget' === $_REQUEST['view']) {
$axis_font_size = "8px";
} else {
$axis_font_size = "15px";
}
// ITS4YOU-UP SlOl 2. 3. 2016 7:27:16 - marginRight: 150
$charts_events = " ,
marginBottom: 70";
if($this->charts["charttypes"][$this->charts['charts_ds_columns'][0]]=="bar"){
// reversed: true, // STACKED ONLY
// series: { stacking: 'normal', } // STACKED ONLY
$legend_str = "{
reversed: true
}";
}else{
$legendAlign = 'right';
$legend_str = "{
layout: 'vertical',
align: '$legendAlign',
verticalAlign: 'top',
y: 30,
navigation: {
enabled: false
},
adjustChartSize: true,
}";
}
$filename = "R4YouCharts";
if (isset($current_user) && $current_user->id != "") {
$filename .= "_" . $current_user->id;
}
$reportid = $this->report_obj->record;
$filename .= "_" . $reportid;
if (isset($this->ch_array) && $this->ch_array["charttype"] != "none" && !empty($this->ch_array["dataseries"])) {
// ITS4YOU-UP SlOl 2. 3. 2016 9:13:48
$charttitle = "";
if($this->outputformat!="CHARTS"){
$charttitle = html_entity_decode($this->charts["charttitle"], ENT_QUOTES, $default_charset);
}
// ITS4YOU-END
$charttitle = addslashes($charttitle);
//$charttype_base = $this->g_chart_types[$this->ch_array["charttype"]];
$charttype_base = $this->charts["charttypes"][$this->charts['charts_ds_columns'][0]];
$charttype = ($this->g_chart_types[$charttype_base]!=""?$this->g_chart_types[$charttype_base]:"column");
if ($charttype == "funnel") {
$chart_lbl_key = $this->ch_array["dataseries_label"]["val"];
$chart_lbl_val = $this->ch_array["dataseries_label"]["key"];
} else {
$chart_lbl_key = $this->ch_array["dataseries_label"]["key"];
$chart_lbl_val = $this->ch_array["dataseries_label"]["val"];
}
if ($charttype == "horizontal") {
$yaxis_title = html_entity_decode($chart_lbl_val, ENT_QUOTES, $default_charset);
$xaxis_title = html_entity_decode($chart_lbl_key, ENT_QUOTES, $default_charset);
} else {
$xaxis_title = html_entity_decode($chart_lbl_key, ENT_QUOTES, $default_charset);
$yaxis_title = html_entity_decode($chart_lbl_val, ENT_QUOTES, $default_charset);
}
$categories = $k_dataseries = array();
// NEW S
$ch_data = "";
$chart_labels = array();
if(isset($this->ch_array["dataseries"]) && !empty($this->ch_array["dataseries"])){
$dataseries_arr = array();
$categories = $dataseries = array();
foreach ($this->ch_array["dataseries"] as $ch_key => $ch_array) {
if($ch_key!="subval"){
$cl_fldname_arr = explode("_", $ch_key);
$ch_fldname_lk = (ITS4YouReports_Functions_Helper::count($cl_fldname_arr) - 1);
$ch_calculation_type = "";
if (in_array($cl_fldname_arr[$ch_fldname_lk], $this->calculation_type_array)) {
$ch_calculation_type = strtoupper($cl_fldname_arr[$ch_fldname_lk]);
unset($cl_fldname_arr[$ch_fldname_lk]);
}
$cl_fldname = implode("_", $cl_fldname_arr);
$ch_columns_array_lbl = $this->columns_array[$cl_fldname];
if ($ch_calculation_type != "") {
$ch_columns_array_lbl .= ":$ch_calculation_type";
}
$ch_label = self::getHeaderLabel($this->report_obj->record, "SM", $ch_key, $ch_columns_array_lbl);
$chart_labels[$ch_key] = $ch_label;
// type of chart
$ch_key_type = $this->charts["charttypes"][$ch_key];
$fieldModule = $groupFldAlias = "";
/*
if($this->charts["x_group"]=="group1"){
$groupFldAlias = $this->columns_array[$this->report_obj->reportinformations["Group1"]]["fld_alias"];
}elseif($this->charts["x_group"]=="group2"){
$groupFldAlias = $this->columns_array[$this->report_obj->reportinformations["Group2"]]["fld_alias"];
}
*/
$groupFldAlias = $this->columns_array[$this->report_obj->reportinformations["Group1"]]["fld_alias"];
if($groupFldAlias != "" && $this->columns_array["uitype_$groupFldAlias"]=="15"){
if(isset($this->columns_array[$groupFldAlias]) && $this->columns_array[$groupFldAlias]!=""){
$tmpSplit = explode(':', $this->columns_array[$groupFldAlias]);
$tablename = $tmpSplit[0];
$colname = $tmpSplit[1];
$module_field = $tmpSplit[2];
$fieldname = $tmpSplit[3];
$single = $tmpSplit[4];
$module_field_arr = explode("_", $module_field);
$fieldModule = $module_field_arr[0];
}
}
$currency_str = "";
if($this->charts["x_group"]=="group1"){
foreach($ch_array as $ch_category => $ch_value){
if($fieldModule!=""){
if($currency_id!=""){
$ch_category_arr = explode(" ", $ch_category);
$currency_str = " ".$ch_category_arr[(ITS4YouReports_Functions_Helper::count($ch_category_arr)-1)];
unset($ch_category_arr[(ITS4YouReports_Functions_Helper::count($ch_category_arr)-1)]);
$ch_category = implode(" ", $ch_category_arr);
}
$ch_category = vtranslate($ch_category,$fieldModule).$currency_str;
}
if($ch_value==""){
$ch_value = 0;
}
if(!in_array($ch_category, $categories)){
$categories[] = html_entity_decode($ch_category, ENT_QUOTES, $default_charset);
}
$series_types[$ch_label] = $ch_key_type;
if(in_array($ch_key_type, self::$pieTypes) || 'funnel' === $ch_key_type){
$dataseries[$ch_label][$ch_category] = $ch_value;
}else{
$dataseries[$ch_label][] = $ch_value;
}
}
}elseif($this->charts["x_group"]=="group2"){
$ch_s_name_array = array();
foreach($ch_array as $ch_g1 => $ch_g1_array){
if($fieldModule!=""){
$ch_g1 = getTranslatedString($ch_g1,$fieldModule);
}
if(!in_array($ch_g1, $categories)){
$categories[] = html_entity_decode($ch_g1, ENT_QUOTES, $default_charset);
}
foreach($ch_g1_array as $ch_s_name => $ch_value){
$series_types[$ch_label] = $ch_key_type;
if(!in_array($ch_s_name,$ch_s_name_array)){
$ch_s_name_array[] = $ch_s_name;
}
$dataseries[$ch_label][$ch_g1][$ch_s_name] = $ch_value;
}
}
}
}
}
}
// funnel chart check and ordering start
foreach($this->charts["charttypes"] as $chart_check_column_str => $chart_check_type){
if($chart_check_type == "funnel"){
$s_uitypes = ITS4YouReports::$s_uitypes;
if($this->charts["x_group"]=="group2"){
$group_col_str = $this->report_obj->reportinformations["Group2"];
foreach($dataseries[$chart_labels[$chart_check_column_str]] as $ds_options_array){
foreach($ds_options_array as $ds_option_key => $ds_option_value){
$chart_funnel_series[$ds_option_key] += $ds_option_value;
}
}
}else{
$group_col_str = $this->report_obj->reportinformations["Group1"];
$chart_funnel_series = $dataseries[$chart_labels[$chart_check_column_str]];
}
$group_col_alias = $this->columns_array[$group_col_str]["fld_alias"];
$group_col_uitype = $this->columns_array["uitype_".$group_col_alias];
if($group_col_uitype!="" && in_array($group_col_uitype, $s_uitypes)){
global $current_user;
require_once 'modules/PickList/PickListUtils.php';
$roleid=$current_user->roleid;
$adb = PearDatabase::getInstance();
$column_str_arr = explode(":", $group_col_str);
$column_name = $column_str_arr[1];
// ITS4YOU-UP SlOl |26.8.2015 11:43
$picklist_lang = "";
if(vtlib_isModuleActive($this->report_obj->primarymodule)){
$current_user_language = $current_user->column_fields["language"];
$picklist_lang = return_module_language($current_user_language, $this->report_obj->primarymodule);
}
// ITS4YOU-END
$picklistValues = array();
$labels_picklistValues = getAssignedPicklistValues($column_name, $roleid, $adb,$picklist_lang);
if(!empty($labels_picklistValues)){
$ordered_picklistValues = Vtiger_Util_Helper::getPickListValues($column_name);
foreach($ordered_picklistValues as $valueName){
$picklistValues[$valueName] = $labels_picklistValues[$valueName];
}
}
if(!empty($picklistValues)){
$chart_funnel_series = $this->sortChartPickListData($chart_funnel_series, $picklistValues,$currency_id,$fieldModule);
$dataseries[$chart_labels[$chart_check_column_str]] = $chart_funnel_series;
}
} else {
$dataseries[$chart_labels[$chart_check_column_str]] = $chart_funnel_series;
}
}
}
// funnel chart check and ordering end
// NEW E
}
$series_string_arr = array();
// population hidden input values for export to pdf functions / export_pdf_format pdf_file_name ch_image_name /
if($request->has('module')==true && $request->get('module')=='ITS4YouReports' && ($request->has('mode')!=true || $request->get('mode')!='widget')){
echo "<script type='text/javascript' >jQuery(document).ready(function(){if(document.getElementById('export_pdf_format')){document.getElementById('export_pdf_format').value='" . $export_pdf_format . "';}});</script>";
echo "<script type='text/javascript' >jQuery(document).ready(function(){if(document.getElementById('pdf_file_name')){document.getElementById('pdf_file_name').value='" . $this->pdf_filename . "';}});</script>";
echo "<script type='text/javascript' >jQuery(document).ready(function(){if(document.getElementById('ch_image_name')){document.getElementById('ch_image_name').value='" . $filename . "';}});</script>";
echo '<canvas id="canvas" width="1000px" height="600px" style="display:none;"></canvas>';
}
if(!empty($categories)){
foreach($categories as $ckey => $cval){
$categories[$ckey] = preg_replace('/[\r\n]/', '', $cval);
}
}
$allowDecimals = '';
if(in_array('crmid_count',$this->charts['charts_ds_columns'])){
$allowDecimals = 'allowDecimals: false,';
}
$clearAlias = $this->getClearFldName($this->charts['charts_ds_columns'][0]);
$uitype = (!empty($this->columns_array['uitype_'.$clearAlias])?$this->columns_array['uitype_'.$clearAlias]:1);
if (in_array($uitype, self::$summariesAvailableUiTypes) && !in_array($clearAlias, ['quantity'])) {
$pointDecimals = '2f';
} else {
$pointDecimals = '0f';
}
// CHART STYLE 1
if($this->charts["x_group"]=="group1"){
foreach($dataseries as $ds_name => $ds_data){
// $series_string_arr[$ds_name] = $this->getHighChartDataSeries(array($ds_name=>$ds_data),"");
if(in_array($series_types[$ds_name], self::$pieTypes) || 'funnel' === $series_types[$ds_name]){
foreach($ds_data as $slice_name => $slice_value){
$slices_str .= "['$slice_name',$slice_value],";
}
$series_string_arr[$ds_name] = trim($slices_str,",");
//$series_string_arr[$ds_name] = implode(",", $ds_data);
}else{
$series_string_arr[$ds_name] = implode(",", $ds_data);
}
}
// quick fix of - values !!!
$series_string_arr = str_replace("-", "0", $series_string_arr);
$y_axis_str = $y_series_str= array();
$ch_ni = 0;
// ITS4YOU-CR SlOl 24. 11. 2017 6:29:50
$xAxisFormater = '';
if('ShowWidget' === $_REQUEST['view']) {
$xAxisFormater = " formatter: function () {
var label = this.axis.defaultLabelFormatter.call(this);
if (label.length>4) {
return Highcharts.numberFormat((this.value/1000), 0)+'k';
}
return label;
},
";
}
// ITS4YOU-END 24. 11. 2017 6:30:02
$logarithmic = false;
foreach($series_string_arr as $lbl_str => $data_str){
// format: '{value} $lbl_str', kde lbl_str je text pri zobrazenej hodnote ... napr. Merna Jednotka, Mena, atd.
$hch_type = $this->g_chart_types[$series_types[$lbl_str]];
$lbl_str = html_entity_decode($lbl_str, ENT_QUOTES, $default_charset);
$lbl_str = addslashes($lbl_str);
if($hch_type=="funnel"){
$charts_events = " ,
marginBottom: 50,
marginRight: 150";
}
$range = "yAxis: $ch_ni,";
// if (in_array('linechart_logarithmic', $series_types)) {
// if (max(explode(',', $data_str)) < 100) {
// $y_axis_str[] = "{
// type: 'logarithmic',
// },";
// $logaritmic = true;
// } else {
// if (!$logaritmic) {
// $range = "yAxis: $ch_ni,";
// }
// }
// }
$y_axis_str[] = "{
labels: {
format: '{value}',
autoRotation: [0],
$xAxisFormater
style: {
color: '$title_color'
}
},
$allowDecimals
title: {
style: {
color: '$title_color',
fontSize: '$axis_font_size'
},
text: '".$lbl_str."'
},
opposite: false
},";
$clickEvent = '';
if ('funnel' === $charttype) {
$widgetSearchBy = ITS4YouReports::getWidgetSearchArray($this->report_obj->record);
if (false !== strpos($widgetSearchBy['primary_search'], 'vtiger_crmentity:smownerid:')
&& false !== strpos($this->report_obj->reportinformations['Group1'], ':sales_stage:')
) {
$customView = new CustomView($this->report_obj->primarymodule);
$viewId = $customView->getViewId($this->report_obj->primarymodule);
$listUrl = 'index.php?module=' . $this->report_obj->primarymodule . '&view=List&nolistcache=1&viewname=' . $viewId . '&';
$listUrl .= "search_params=[[[%22sales_stage%22,%22e%22,%22'+event.point.name+'%22]";
$primarySearchBy = '';
if ($request->has('primarySearchBy') && $request->get('primarySearchBy') != "" && $request->get('primarySearchBy') != "all") {
$primarySearchBy = strtr($request->get('primarySearchBy'), ' ', '+');
$listUrl .= ',[%22assigned_user_id%22,%22e%22,%22' . $primarySearchBy . '%22]';
}
$listUrl .= ']]';
$clickEvent = "cursor: 'pointer',
events: {
click: function (event) {
window.open('$listUrl');
}
},";
}
}
// valueSuffix je text pri zobrazenej hodnote ... napr. Merna Jednotka, Mena, atd.
$y_series_str[] = "{
name: '".$lbl_str."',
type: '$hch_type',
$range
data: [$data_str],
tooltip: {
" . self::getHighChartSeriesTooltipByType($series_types[$lbl_str]) . "
}
},
" . ITS4YouReports_ProgressLine_Helper::getProgressLines($data_str, $this->report_obj) . " ";
$ch_ni++;
}
// ITS4YOU-UP SlOl 2. 3. 2016 7:27:16 - plotOptions
// ITS4YOU-UP SlOl 2. 3. 2016 7:27:16 - title position
$tab = ($_REQUEST['tab']?round($_REQUEST['tab']):round($_REQUEST['tabid']));
$tab = (!$tab)?'':$tab;
$highchart_jsdata = "$(function () {
console.log('2#reports4you_widget_".$tab.$this->chartPosition.$this->report_obj->record."');
$('#reports4you_widget_".$tab.$this->chartPosition.$this->report_obj->record."').highcharts({
credits: {
enabled: false
},
chart: {
zoomType: 'xy' $charts_events
},
plotOptions: {
series: {
dataLabels: {
enabled: true,
format: '" . self::getHighChartDataLabelFormatByType($series_types[$lbl_str], $pointDecimals) . "',
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black',
softConnector: true
},
$clickEvent
neckWidth: '30%',
neckHeight: '25%'
}
},
$allowDecimals
title: {
style: {
color: '$title_color',
fontSize: '$title_size',
fontWeight: 'bold'
},
align: 'left',
x: 145,
text: ".$this->getHighChartDataString($charttitle)."
},
subtitle: {
text: ''
},
xAxis: [{
categories: ".$this->getHighChartDataArrayString($categories).",
crosshair: true
}],
yAxis: [".trim(join("", $y_axis_str),",")."],
tooltip: {
shared: true
},
legend: $legend_str,
series: [".trim(join("", $y_series_str),",")."]
});
});";
//echo '<pre>';print_r($highchart_jsdata);echo '</pre>';
//exit;
// CHART STYLE 2
}elseif($this->charts["x_group"]=="group2"){
$slices_str_arr = array();
if($this->charts["charttypes"][$this->charts['charts_ds_columns'][0]] == "funnel"){
$categories = array();
$dataseries_str = "";
foreach($dataseries as $columnNameLbl => $data_base_arr){
foreach($data_base_arr as $category_name=>$dava_value){
$category_name = vtranslate($category_name,$this->report_obj->primarymodule);
$category_name = addslashes($category_name);
$categories[] = $category_name;
$dataseries_str .= "['$category_name',$dava_value],";
}
}
$dataseries_str = trim($dataseries_str, ",");
// quick fix of - values !!!
$dataseries_str = str_replace("-", "0", $dataseries_str);
$charts_events = " ,
marginBottom: 50,
marginRight: 150";
// ITS4YOU-UP SlOl 2. 3. 2016 7:27:16 - plotOptions
// ITS4YOU-UP SlOl 2. 3. 2016 7:27:16 - title position
$tab = ($_REQUEST['tab']?round($_REQUEST['tab']):round($_REQUEST['tabid']));
$tab = (!$tab)?'':$tab;
$highchart_jsdata = "$(function () {
console.log('3#reports4you_widget_".$tab.$this->chartPosition.$this->report_obj->record."');
$('#reports4you_widget_".$tab.$this->chartPosition.$this->report_obj->record."').highcharts({
credits: {
enabled: false
},
chart: {
zoomType: 'xy',
spacingRight: 50 $charts_events
},
legend: $legend_str,
plotOptions: {
series: {
dataLabels: {
enabled: true,
format: '" . self::getHighChartDataLabelFormatByType($series_types[$lbl_str], $pointDecimals) . "',
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black',
softConnector: true
},
neckWidth: '25%',
neckHeight: '25%'
}
},
title: {
style: {
color: '$title_color',
fontSize: '$title_size',
fontWeight: 'bold'
},
align: 'left',
x: 145,
text: ".$this->getHighChartDataString($charttitle)."
},
subtitle: {
text: ''
},
xAxis: [{
categories: ['".implode("','", $categories)."'],
crosshair: true
}],
yAxis: [{
labels: {
format: '{value}',
style: {
color: '$title_color'
}
},
title: {
style: {
color: '$title_color',
fontSize: '$title_size',
fontWeight: 'bold'
},
text: ''
},
opposite: true
}],
tooltip: {
shared: true
},
series: [{
name: '$columnNameLbl',
type: 'funnel',
yAxis: 0,
data: [$dataseries_str],
tooltip: {
" . self::getHighChartSeriesTooltipByType($series_types[$lbl_str]) . "
}
}]
});
});";
} elseif (in_array($this->charts['charttypes'][$this->charts['charts_ds_columns'][0]], self::$pieTypes)) {
foreach($dataseries as $column_alias => $category_data_array){
foreach($category_data_array as $category_name => $category_data){
$data_totals_total[] = array_sum($category_data);
$data_totals[$category_name] = $category_data;
}
}
$c_data_str = "";
$data_totals_total_p = (array_sum($data_totals_total));
$ci = 0;
foreach($data_totals as $cname => $c_data){
$category_total_perc = ((array_sum($c_data)/$data_totals_total_p)*100);
$category_total_perc = number_format($category_total_perc, 2, ".", "");
$c_sub_categories = $c_sub_data_str = array();
foreach($c_data as $c_sub_name => $c_sub_data){
$c_sub_name = vtranslate($c_sub_name,$this->report_obj->primarymodule);
$c_sub_categories[] = $c_sub_name;
$c_sub_data_str[] = number_format((($c_sub_data/$data_totals_total_p)*100), 2, ".", "");
}
$c_data_str .= "{
y: $category_total_perc,
color: colors[$ci],
drilldown: {
name: '$cname',
categories: ['".implode("','", $c_sub_categories)."'],
data: [".implode(",", $c_sub_data_str)."],
color: colors[$ci]
}
},";
$ci++;
}
$c_data_str = trim($c_data_str, ',');
$group_info_fld_str0 = $this->columns_array[$this->g_flds[0]];
$group_info_headerLabel0 = self::getHeaderLabel($this->report_obj->record, "SC", $this->g_flds[0], $group_info_fld_str0);
$group_info_fld_str1 = $this->columns_array[$this->g_flds[1]];
$group_info_headerLabel1 = self::getHeaderLabel($this->report_obj->record, "SC", $this->g_flds[1], $group_info_fld_str1);
$tab = ($_REQUEST['tab']?round($_REQUEST['tab']):round($_REQUEST['tabid']));
$tab = (!$tab)?'':$tab;
$highchart_jsdata = "$(function () {
var colors = Highcharts.getOptions().colors,
categories = ['". implode("','", $categories)."'],
data = [$c_data_str],
browserData = [],
versionsData = [],
i,
j,
dataLen = data.length,
drillDataLen,
brightness;
// Build the data arrays
for (i = 0; i < dataLen; i += 1) {
// add browser data
browserData.push({
name: categories[i],
y: data[i].y,
color: data[i].color
});
// add version data
drillDataLen = data[i].drilldown.data.length;
for (j = 0; j < drillDataLen; j += 1) {
brightness = 0.2 - (j / drillDataLen) / 5;
versionsData.push({
name: data[i].drilldown.categories[j],
y: data[i].drilldown.data[j],
color: Highcharts.Color(data[i].color).brighten(brightness).get()
});
}
}
$('#reports4you_widget_" . $tab . $this->chartPosition . $this->report_obj->record . "').highcharts({
credits: {
enabled: false
},
chart: {
type: 'pie' $charts_events
},
legend: $legend_str,
title: {
style: {
color: '$title_color',
fontSize: '$title_size',
fontWeight: 'bold'
},
text: ".$this->getHighChartDataString($charttitle)."
},
yAxis: {
title: {
text: ''
}
},
plotOptions: {
pie: {
shadow: false,
center: ['50%', '50%']
}
},
tooltip: {
valueSuffix: '%'
},
series: [{
name: '$group_info_headerLabel0',
data: browserData,
size: '60%',
dataLabels: {
formatter: function () {
return this.y > 5 ? this.point.name : null;
},
color: 'white',
distance: -30
}
}, {
name: '$group_info_headerLabel1',
data: versionsData,
size: '80%',
innerSize: '60%',
dataLabels: {
formatter: function () {
// display only if larger than 1
return this.y > 1 ? '<b>' + this.point.name + ':</b> ' + this.y + '%' : null;
}
}
}]
});
});";
}else{
foreach($dataseries as $ch_column => $ds_data){
$hch_type = $this->g_chart_types[$series_types[$ch_column]];
foreach($ds_data as $slice_name => $slice_array){
$slices_str = "";
foreach($ch_s_name_array as $t_slice_name){
if(isset($slice_array[$t_slice_name])){
$slices_str_arr[$t_slice_name] .= $slice_array[$t_slice_name].",";
}else{
$slices_str_arr[$t_slice_name] .= "0,";
}
}
}
}
// ITS4YOU-CR SlOl 22. 8. 2016 13:24:35 -> sort by group 2 ordering
// ordering is reversed in code for a reason of adding values into chart by first in array is last (top) in chart
$percentage_column = false;
$column_uitype = "";
$group_info_fld_str1 = $this->g_flds[1];
if(isset($this->columns_array["uitype_".$group_info_fld_str1])){
$column_uitype = $this->columns_array["uitype_".$group_info_fld_str1];
}
// STREAMVIBE FIX - PERCENTAGE !!! START
if($column_uitype == "9"){
$sv_temp = $sv_temp_final = $sv_temp_keys = array();
foreach($slices_str_arr as $sv_key => $sv_val){
$sv_key_nr = substr($sv_key, 0, -1);
$sv_temp_keys[$sv_key_nr] = $sv_key;
$sv_temp[$sv_key_nr] = $sv_val;
}
if($this->report_obj->reportinformations["Sort2"]=="Ascending"){
krsort($sv_temp);
}else{
ksort($sv_temp);
}
foreach($sv_temp as $k_nr => $k_arr){
$k_f_key = $sv_temp_keys[$k_nr];
$sv_temp_final[$k_f_key] = $k_arr;
}
$slices_str_arr = $sv_temp_final;
// STREAMVIBE FIX - PERCENTAGE !!! END
} elseif (!self::isDate($this->report_obj->reportinformations['Group2'])) {
if('Ascending' === $this->report_obj->reportinformations['Sort2']){
krsort($slices_str_arr);
}else{
ksort($slices_str_arr);
}
}
// ITS4YOU-END 22. 8. 2016 13:30:35
$slices_array = array();
foreach($slices_str_arr as $sl_name => $sl_pieces){
// quick fix of - values !!!
$sl_pieces = str_replace("-", "0", $sl_pieces);
// quick fix of translations !!!
$sl_name = vtranslate($sl_name, $this->report_obj->primarymodule);
$slices_array[] = "{name: '$sl_name', data: [$sl_pieces]},";
}
// format: '{value} $lbl_str', kde lbl_str je text pri zobrazenej hodnote ... napr. Merna Jednotka, Mena, atd.
$y_axis_str[] = "{
min: 0,
$allowDecimals
title: {
style: {
color: '$title_color',
fontSize: '$axis_font_size'
},
text: '" . decode_html($ch_column) . "'
},
stackLabels: {
enabled: true,
style: {
fontWeight: 'bold',
color: 'gray'
}
}
},";
$y_series_str = $slices_array;
// VERTICAL STACKED | HORIZONTAL STACKED CHARTS !|!
$stacking_str = $format_series = "";
if($charttype_base=="verticalstacked" || $charttype_base=="horizontalstacked"){
$stacking_str .= "stacking: 'normal',";
/*
$format_series .= "format: '{series.name}',";
/* */
$format_series .= "formatter: function() {
if (this.y === 0) {
return null;
} else {
return this.series.name;
}
},";
}
if($charttype_base=="horizontalstacked"){
$plotOptions = "series: {
stacking: 'normal'
},
bar: {
dataLabels: {
enabled: true,
$format_series
color: 'white',
style: {
textShadow: '0 0 3px black'
}
}
}";
}else{
$plotOptions = "column: {
$stacking_str
dataLabels: {
enabled: true,
$format_series
color: 'white',
style: {
textShadow: '0 0 3px black'
}
}
}";
}
$tab = ($_REQUEST['tab']?round($_REQUEST['tab']):round($_REQUEST['tabid']));
$tab = (!$tab)?'':$tab;
$highchart_jsdata = "$(function () {
console.log('4#reports4you_widget_".$tab.$this->chartPosition.$this->report_obj->record."');
$('#reports4you_widget_".$tab.$this->chartPosition.$this->report_obj->record."').highcharts({
credits: {
enabled: false
},
chart: {
type: '$hch_type' $charts_events
},
legend: $legend_str,
title: {
style: {
color: '$title_color',
fontSize: '$title_size',
fontWeight: 'bold'
},
text: ".$this->getHighChartDataString($charttitle)."
},
subtitle: {
text: ''
},
xAxis: [{
categories: ".$this->getHighChartDataArrayString($categories).",
crosshair: true
}],
yAxis: [".trim(join("", $y_axis_str),",")."],
tooltip: {
" . self::getHighChartTooltipByType($charttype_base) . "
},
plotOptions: {
$plotOptions
},
series: [".trim(join("", $y_series_str),",")."]
});
});";
}
}
// CHART STYLES END
// CHART DEBUG
if(!$request->has('mode') || 'showDetailViewByMode' === $request->get('mode')) {
$report_html .= '<script type="text/javascript">';
}
if(self::showScriptsDashBoard($request)){
$report_html .= $highchart_jsdata;
}
if(!$request->has('mode') || 'showDetailViewByMode' === $request->get('mode')) {
$report_html .= '</script>';
}
return $report_html;
}
// ITS4YOU-CR SlOl 25.2.2015 14:00
private function getHighChartDataString($data_string=""){
$data_string = "'$data_string'";
return $data_string;
}
private function getHighChartDataArrayString($data_array){
$data_string = "[";
if(!empty($data_array)){
foreach ($data_array as $element){
$element = addslashes($element);
if (is_numeric($element)){
$new_array[] = $element;
}else{
$new_array[] = "'$element'";
}
}
$data_string .= implode(',', $new_array);
}
$data_string .= "]";
//ITS4YouReports::sshow($data_string);
return $data_string;
}
// ITS4YOU-CR SlOl 26.2.2015 11:08
private function getHighChartDataSeries($dataseries=array(),$charttype="column"){
$series_string = "["."\n";
if(!empty($dataseries)){
$count = ITS4YouReports_Functions_Helper::count($dataseries);
$i = 1;
if(in_array($charttype, self::$pieTypes) || 'funnel' === $charttype){
$series_string .= "{";
if(in_array($charttype, self::$pieTypes)){
$series_string .= "type: '$charttype',";
}
$series_string .= "
name: '',
data: [";
foreach($dataseries as $data){
$series_string .= "["."\n";
$d_count = ITS4YouReports_Functions_Helper::count($data);
$d_i = 1;
foreach($data as $d_val){
if(is_numeric($d_val)){
$series_string .= $d_val."\n";
}else{
$series_string .= "'$d_val'"."\n";
}
if($d_i<$d_count){
$series_string .= ",";
}
$d_i++;
}
$series_string .= "]"."\n";
if($i<$count){
$series_string .= ",";
}
$i++;
}
$series_string .= "]}";
}else{
foreach($dataseries as $name => $data){
$series_string .= "{"."\n"."name: '$name',\n";
$data_str = $this->getHighChartDataArrayString($data);
$series_string .= "data: $data_str"."\n"."}"."\n";
if($i<$count){
$series_string .= ",";
}
$i++;
}
}
}
$series_string .= "]"."\n";
return $series_string;
}
// ITS4YOU-END 24.2.2015 15:32
// ITS4YOU-END 8.7.2014 8:57
// ITS4YOU-CR SlOl | 15.7.2014 13:47
private function setDataseriesLabel($fldname, $type = "") {
if ($type == "subval") {
$this->setChArrayValues("dataseries_label", $type, $fldname);
} else {
$cl_fldname_arr = explode("_", $fldname);
$ch_fldname_lk = (ITS4YouReports_Functions_Helper::count($cl_fldname_arr) - 1);
$ch_calculation_type = "";
if (in_array($cl_fldname_arr[$ch_fldname_lk], $this->calculation_type_array)) {
$ch_calculation_type = strtoupper($cl_fldname_arr[$ch_fldname_lk]);
unset($cl_fldname_arr[$ch_fldname_lk]);
}
$cl_fldname = implode("_", $cl_fldname_arr);
$ch_columns_array_lbl = $this->columns_array[$cl_fldname];
if ($ch_calculation_type != "") {
$ch_columns_array_lbl .= ":$ch_calculation_type";
}
if (empty($this->charts["dataseries_label"]) || !isset($this->charts["dataseries_label"]["key"]) || $this->charts["dataseries_label"]["key"] == 0) {
$ch_headerLabel = self::getHeaderLabel($this->report_obj->record, "SM", $cl_fldname, $ch_columns_array_lbl);
if ($type != "") {
$dataseries_label_key = self::getHeaderLabel($this->report_obj->record, "SC", $fldname, $this->columns_array[$type]);
} else {
$dataseries_label_key = self::getHeaderLabel($this->report_obj->record, "SC", $this->g_flds[0], $this->columns_array[$this->g_flds[0]]);
}
if ($this->report_obj->reportinformations["timeline_type2"] == "cols" || $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$this->setChArrayValues("dataseries_label", 'key', $ch_headerLabel);
$clC_fldname_arr = explode("_", $this->charts["charts_ds_column"]);
$chC_fldname_lk = (ITS4YouReports_Functions_Helper::count($clC_fldname_arr) - 1);
unset($clC_fldname_arr[$chC_fldname_lk]);
$clC_fldname = implode("_", $clC_fldname_arr);
$dataseriesC_label_key = self::getHeaderLabel($this->report_obj->record, "SC", $clC_fldname, $this->columns_array[$clC_fldname]);
$this->setChArrayValues("dataseries_label", 'val', $dataseriesC_label_key);
} else {
$this->setChArrayValues("dataseries_label", 'key', $dataseries_label_key);
$this->setChArrayValues("dataseries_label", 'val', $ch_headerLabel);
}
}
}
return true;
}
// ITS4YOU-END 15.7.2014 13:47
// ITS4YOU-CR SlOl | 26.8.2014 11:23
// group value = Direct Group Value to display
// g data value = Direct Value to display
// currency id = if is generated module with more currencies (Inventory module)
// g data key = Axis Label to display only used 2 times, for X and Y axis
private function setDataseriesArray($group_value, $g_data_value, $currency_id = "", $g_data_key = "", $base_group = "") {
if ('' != $currency_id) {
$ch_group_value = vtranslate($group_value, $this->report_obj->primarymodule) . ' (' . $this->currency_symbols[$currency_id] . ')';
} else {
$ch_group_value = $group_value;
}
if ($g_data_key != "" && !isset($this->ch_array["dataseries_label"])) {
$this->setDataseriesLabel($g_data_key);
}
// ITS4YOU-CR SlOl 18. 11. 2015 14:09:00
if($this->charts["x_group"]=="group2" && $base_group==""){
$base_group = "-";
}
// ITS4YOU-END 18. 11. 2015 14:09:02
$fld_alias = "";
if(isset($this->charts["x_group"]) && $this->charts["x_group"]=="group1"){
$fld_alias = $this->columns_array[$this->report_obj->reportinformations["Group1"]]["fld_alias"];
}elseif(isset($this->charts["x_group"]) && $this->charts["x_group"]=="group2"){
$fld_alias = $this->columns_array[$this->report_obj->reportinformations["Group2"]]["fld_alias"];
}
if(isset($fld_alias) && $fld_alias!="" && $fld_alias=="converted"){
$ch_group_value = $this->getFldFormatedValue(1,$ch_group_value,$fld_alias);
}
$clearAlias = $this->getClearFldName($g_data_key);
$uitype = (!empty($this->columns_array['uitype_'.$clearAlias])?$this->columns_array['uitype_'.$clearAlias]:1);
if (in_array($uitype, self::$currencyUiTypes)) {
$g_data_value = $this->getFldFormatedValue($uitype,$g_data_value,$fld_alias, '', '', true);
}
$this->setChArrayValues("dataseries", $ch_group_value, $g_data_value, $g_data_key, $base_group);
}
// ITS4YOU-END 26.8.2014 11:23
function getAccessPickListValues() {
$adb = PearDatabase::getInstance();
global $current_user;
$id = array(getTabid($this->primarymodule));
if ($this->secondarymodule != '')
array_push($id, getTabid($this->secondarymodule));
$query = 'select fieldname,columnname,fieldid,fieldlabel,tabid,uitype from vtiger_field where tabid in(' . generateQuestionMarks($id) . ') and uitype in (15,33,55)'; //and columnname in (?)';
$result = $adb->pquery($query, $id); //,$select_column));
$roleid = $current_user->roleid;
$subrole = getRoleSubordinates($roleid);
if (ITS4YouReports_Functions_Helper::count($subrole) > 0) {
$roleids = $subrole;
array_push($roleids, $roleid);
} else {
$roleids = $roleid;
}
$temp_status = Array();
for ($i = 0; $i < $adb->num_rows($result); $i++) {
$fieldname = $adb->query_result($result, $i, "fieldname");
$fieldlabel = $adb->query_result($result, $i, "fieldlabel");
$tabid = $adb->query_result($result, $i, "tabid");
$uitype = $adb->query_result($result, $i, "uitype");
$fieldlabel1 = str_replace(" ", "_", $fieldlabel);
$keyvalue = getTabModuleName($tabid) . "_" . $fieldlabel1;
$fieldvalues = Array();
if (ITS4YouReports_Functions_Helper::count($roleids) > 1) {
$mulsel = "select distinct $fieldname from vtiger_$fieldname inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_$fieldname.picklist_valueid where roleid in (\"" . implode($roleids, "\",\"") . "\") and picklistid in (select picklistid from vtiger_$fieldname) order by sortid asc";
} else {
$mulsel = "select distinct $fieldname from vtiger_$fieldname inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_$fieldname.picklist_valueid where roleid ='" . $roleid . "' and picklistid in (select picklistid from vtiger_$fieldname) order by sortid asc";
}
if ($fieldname != 'firstname')
$mulselresult = $adb->query($mulsel);
for ($j = 0; $j < $adb->num_rows($mulselresult); $j++) {
$fldvalue = $adb->query_result($mulselresult, $j, $fieldname);
if (in_array($fldvalue, $fieldvalues))
continue;
$fieldvalues[] = $fldvalue;
}
$field_count = ITS4YouReports_Functions_Helper::count($fieldvalues);
if ($uitype == 15 && $field_count > 0 && ($fieldname == 'taskstatus' || $fieldname == 'eventstatus')) {
$temp_count = ITS4YouReports_Functions_Helper::count($temp_status[$keyvalue]);
if ($temp_count > 0) {
for ($t = 0; $t < $field_count; $t++) {
$temp_status[$keyvalue][($temp_count + $t)] = $fieldvalues[$t];
}
$fieldvalues = $temp_status[$keyvalue];
} else
$temp_status[$keyvalue] = $fieldvalues;
}
if ($uitype == 33)
$fieldlists[1][$keyvalue] = $fieldvalues;
else if ($uitype == 55 && $fieldname == 'salutationtype')
$fieldlists[$keyvalue] = $fieldvalues;
else if ($uitype == 15)
$fieldlists[$keyvalue] = $fieldvalues;
}
return $fieldlists;
}
private function getUserValuesConditions($conditions, $columns_arr) {
global $current_user, $is_admin, $profileGlobalPermission;
// kontrola picklist values permissions start
$user_privileges_path = 'user_privileges/user_privileges_' . $current_user->id . '.php';
if (file_exists($user_privileges_path)) {
require($user_privileges_path);
}
if (file_exists($user_privileges_path) && ($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] == 0)) {
return $conditions;
} else {
if (!empty($columns_arr)) {
foreach ($columns_arr as $key_fld => $sc_fld_array) {
$sc_fieldcolname = $sc_fld_array["fieldcolname"];
$sc_fld_as = $this->columns_array[$sc_fieldcolname]["fld_alias"];
$sc_fld_arr = explode("_", $sc_fld_as);
$sc_lk = (ITS4YouReports_Functions_Helper::count($sc_fld_arr) - 1);
$sc_lk_lc = strtolower($sc_fld_arr[$sc_lk]);
if (in_array($sc_lk_lc, array("mif", "inv"))) {
unset($sc_fld_arr[$sc_lk]);
$sc_fld_name = implode("_", $sc_fld_arr);
} else {
$sc_fld_name = $sc_fld_as;
}
$sc_fld_cond = $this->columns_array[$sc_fieldcolname]["fld_cond"];
$sc_fld_ui_type = "";
if (array_key_exists($sc_fld_as, $this->columns_array) && isset($this->columns_array["uitype_$sc_fld_as"]) && $this->columns_array["uitype_$sc_fld_as"] != "") {
$sc_fld_ui_type = $this->columns_array["uitype_$sc_fld_as"];
}/* elseif (array_key_exists($sc_fld_as, $this->result_columns_array) && isset($this->result_columns_array["uitype_$sc_fld_as"]) && $this->result_columns_array["uitype_$sc_fld_as"] != "") {
$sc_fld_ui_type = $this->result_columns_array["uitype_$sc_fld_as"];
} */
if (in_array($sc_fld_ui_type, ITS4YouReports::$s_uitypes)) {
require_once 'modules/PickList/PickListUtils.php';
$roleid = $current_user->roleid;
$adb = PearDatabase::getInstance();
$picklistValues = getAssignedPicklistValues($sc_fld_name, $roleid, $adb);
// ITS4YOU-UP SlOl 5. 12. 2014 8:38:10 long generation selectbox values fix
// admin picklist values
$resRow = $adb->pquery('SELECT roleid FROM `vtiger_user2role` WHERE userid=1');
$admin_role_row = $adb->fetchByAssoc($resRow, 0);
$admin_roleid = '';
if (!empty($admin_role_row)) {
$admin_roleid = $admin_role_row['roleid'];
}
if (empty($admin_roleid)) {
$admin_roleid = 'H1';
}
$picklistValuesHA = getAssignedPicklistValues($sc_fld_name, $admin_roleid, $adb);
if (!empty($picklistValues) && ($picklistValues != $picklistValuesHA)) {
// ITS4YOU-END
$w_picklistValues = implode("','", $picklistValues);
$conditions[] = " $sc_fld_cond IN ('$w_picklistValues') ";
}
}
}
}
}
// kontrola picklist values permissions end
return $conditions;
}
private function getGroupsHeaderLabelStr() {
$headerLabel_arr = array();
foreach ($this->group_cols_array as $group_alias) {
$headerLabel_arr[] = self::getHeaderLabel($this->report_obj->record, "SC", $group_alias, $this->columns_array[$group_alias]);
}
$headerLabel = implode(", ", $headerLabel_arr);
return $headerLabel;
}
// ITS4YOU-CR SlOl 4. 9. 2014 15:11:10
private function setUpGroupColsArray() {
$this->group_column_alias = array();
$all_g_cols_arr = array();
for ($gi = 1; $gi < 4; $gi++) {
$column_str = $this->report_obj->reportinformations["Group$gi"];
if ($column_str != "none") {
$ex_fld_alias = explode(".", $this->columns_array[$column_str]["fld_alias"]);
$group_cols_array[$gi] = $ex_fld_alias[(ITS4YouReports_Functions_Helper::count($ex_fld_alias) - 1)];
$all_g_cols_arr[] = $ex_fld_alias[(ITS4YouReports_Functions_Helper::count($ex_fld_alias) - 1)];
$this->group_column_alias[$gi] = $all_g_cols_arr;
}
}
$this->group_cols_array = $group_cols_array;
}
// ITS4YOU-END 4. 9. 2014 15:11:12
// ITS4YOU-CR SlOl 9/24/2014 9:13:43 PM
private function getToTotalsArray($use_detail_columns = false) {
if($this->reports4you_type!="tabular"){
return array();
}
$default_charset = vglobal("default_charset");
$to_totals_array = array();
$to_totals_array_temp = $this->report_obj->getSelectedColumnsToTotal($this->report_obj->record);
foreach ($to_totals_array_temp as $key => $to_total_col) {
$to_total_col_tp_arr = explode(":", $to_total_col);
$type_col_array = explode("_", $to_total_col_tp_arr[5]);
$typeofdata = $type_col_array[0];
$calculation_type = $type_col_array[1];
$calculation_no = "";
switch ($calculation_type) {
case "SUM":
$calculation_no = 2;
break;
case "AVG":
$calculation_no = 3;
break;
case "MIN":
$calculation_no = 4;
break;
case "MAX":
$calculation_no = 5;
break;
case "COUNT":
$calculation_no = 6;
break;
}
$last_key = ITS4YouReports_Functions_Helper::count($to_total_col_tp_arr) - 1;
$fieldid = "";
if (in_array($to_total_col_tp_arr[$last_key], array("MIF", "INV")) || (is_array($to_total_col_tp_arr[$last_key]) && is_numeric(in_array($to_total_col_tp_arr[$last_key])))) {
$fieldid = ":" . $to_total_col_tp_arr[$last_key];
}
$lbl_arr = explode("_", $to_total_col_tp_arr[3], 2);
$lbl_value = getTranslatedString($lbl_arr[1], $lbl_arr[0]);
if ($lbl_value == $lbl_arr[1]) {
$lbl_value = str_replace("_", " ", $lbl_value);
}
$col_arr_key = $to_total_col_tp_arr[1] . ":" . $to_total_col_tp_arr[2] . ":" . $to_total_col_tp_arr[3] . ":" . $to_total_col_tp_arr[4] . ":" . $typeofdata . $fieldid;
$col_arr_key = html_entity_decode($col_arr_key, ENT_QUOTES, $default_charset);
$t_sum_lbl = self::getHeaderLabel($this->report_obj->record, "SC", $this->columns_array[$col_arr_key]["fld_alias"], $col_arr_key);
if ($use_detail_columns) {
if (isset($this->detail_columns_array[$col_arr_key]["fld_alias"]) && $this->detail_columns_array[$col_arr_key]["fld_alias"] != "") {
$to_totals_array[$this->detail_columns_array[$col_arr_key]["fld_alias"]][] = $calculation_type;
$to_totals_array[$this->detail_columns_array[$col_arr_key]["fld_alias"]]["label"] = $t_sum_lbl;
}
} else {
if (isset($this->columns_array[$col_arr_key]["fld_alias"]) && $this->columns_array[$col_arr_key]["fld_alias"] != "") {
$to_totals_array[$this->columns_array[$col_arr_key]["fld_alias"]][] = $calculation_type;
$to_totals_array[$this->columns_array[$col_arr_key]["fld_alias"]]["label"] = $t_sum_lbl;
}
}
}
return $to_totals_array;
}
private function setToTotalsArray($noofrows,$to_totals_res, $fld_totals_key, $fieldvalue, $to_totals_array, $currency_id = "") {
if (array_key_exists($fld_totals_key, $to_totals_array)) {
$to_totals_res[$fld_totals_key]["label"] = $to_totals_array[$fld_totals_key]["label"];
if(in_array($this->columns_array[$fld_totals_key], $this->cc_array)) {
$fieldvalue = Vtiger_Currency_UIType::convertToDBFormat($fieldvalue);
}
if (isset($currency_id) && $currency_id != "") {
$to_totals_res[$fld_totals_key]["COUNT"][$currency_id][] = 1;
} else {
$to_totals_res[$fld_totals_key]["COUNT"] = $noofrows;
}
foreach ($to_totals_array[$fld_totals_key] as $key => $method) {
$method = strtoupper($method);
if ('duration_sum_time' === $fld_totals_key) {
if ($fieldvalue) {
$currentValue = strtotime($to_totals_res[$fld_totals_key][$method].':00');
$newValue = strtotime($fieldvalue.':00');
switch ($method) {
case "SUM":
$to_totals_res[$fld_totals_key][$method] = date('H:i', $currentValue+$newValue);
break;
case "AVG":
$to_totals_res[$fld_totals_key][$method] = date('H:i', $currentValue+$newValue);
if (!empty(floatval($fieldvalue))) {
$to_totals_res[$fld_totals_key]['AVG_NOT_EMPTY_COUNT'][$currency_id] += 1;
}
break;
case "MAX":
$to_totals_res[$fld_totals_key][$method] = date('H:i', $currentValue+strtotime($fieldvalue.':00'));
if ($newValue > $currentValue) {
$to_totals_res[$fld_totals_key][$method] = $newValue;
}
break;
case "MIN":
$to_totals_res[$fld_totals_key][$method] = date('H:i', $currentValue+strtotime($fieldvalue.':00'));
if ($newValue < $currentValue) {
$to_totals_res[$fld_totals_key][$method] = $newValue;
}
break;
}
}
} elseif (isset($currency_id) && $currency_id != "") {
switch ($method) {
case "SUM":
$to_totals_res[$fld_totals_key][$method][$currency_id] += floatval($fieldvalue);
break;
case "AVG":
$to_totals_res[$fld_totals_key][$method][$currency_id] += floatval($fieldvalue);
if (!empty(floatval($fieldvalue))) {
$to_totals_res[$fld_totals_key]['AVG_NOT_EMPTY_COUNT'][$currency_id] += 1;
}
break;
case "MAX":
if (!isset($to_totals_res[$fld_totals_key][$method][$currency_id]) || ($fieldvalue != "" && $fieldvalue != 0 && $fieldvalue > $to_totals_res[$fld_totals_key][$method][$currency_id])) {
$to_totals_res[$fld_totals_key][$method][$currency_id] = $fieldvalue;
}
break;
case "MIN":
if (!isset($to_totals_res[$fld_totals_key][$method][$currency_id]) || ($fieldvalue != "" && $fieldvalue != 0 && $fieldvalue < $to_totals_res[$fld_totals_key][$method][$currency_id])) {
$to_totals_res[$fld_totals_key][$method][$currency_id] = $fieldvalue;
}
break;
}
} else {
switch ($method) {
case "SUM":
$to_totals_res[$fld_totals_key][$method] += $fieldvalue;
break;
case "AVG":
$to_totals_res[$fld_totals_key][$method] += $fieldvalue;
if (!empty(floatval($fieldvalue))) {
$to_totals_res[$fld_totals_key]['AVG_NOT_EMPTY_COUNT'] += 1;
}
break;
case "MAX":
if (!isset($to_totals_res[$fld_totals_key][$method]) || ($fieldvalue != "" && $fieldvalue != 0 && $fieldvalue > $to_totals_res[$fld_totals_key][$method])) {
$to_totals_res[$fld_totals_key][$method] = $fieldvalue;
}
break;
case "MIN":
if (!isset($to_totals_res[$fld_totals_key][$method]) || ($fieldvalue != "" && $fieldvalue != 0 && $fieldvalue < $to_totals_res[$fld_totals_key][$method])) {
$to_totals_res[$fld_totals_key][$method] = $fieldvalue;
}
break;
}
}
}
}
return $to_totals_res;
}
// ITS4YOU-END 25. 9. 2014 12:13:07
// ITS4YOU-CR SlOl 7. 10. 2014 15:35:42
private function get_currency_sumbol_str($currency_id = "") {
if ($currency_id != "") {
$return = " (" . $this->currency_symbols[$currency_id] . ")";
}
return $return;
}
// ITS4YOU-END 7. 10. 2014 15:35:44
private function isEntityType($tabid = "") {
$isentitytype = 0;
if ($tabid != "") {
$adb = PearDatabase::getInstance();
$isentitytype_sql = "SELECT isentitytype FROM vtiger_tab WHERE tabid = ?";
$isentitytype_result = $adb->pquery($isentitytype_sql, array($this->report_obj->primarymoduleid));
$isentitytype_row = $adb->fetchByAssoc($isentitytype_result);
$isentitytype = $isentitytype_row["isentitytype"];
}
return $isentitytype;
}
private function getSelFieldsWhereSQL($fieldcolname,$comparator,$value,$selectedfields=array(),$add_tags=false){
$default_charset = vglobal('default_charset');
$advfiltergroupsql = '';
if (isset($this->columns_array[html_entity_decode($fieldcolname, ENT_QUOTES, $default_charset)]["fld_cond"]) && $this->columns_array[html_entity_decode($fieldcolname,
ENT_QUOTES, $default_charset)]["fld_cond"] != "") {
$selected_field_col = $this->columns_array[html_entity_decode($fieldcolname, ENT_QUOTES, $default_charset)]["fld_cond"];
} elseif (isset($this->columns_array[$fieldcolname]["fld_cond"]) && $this->columns_array[$fieldcolname]["fld_cond"] != "") {
$selected_field_col = $this->columns_array[$fieldcolname]["fld_cond"];
} else {
$selected_field_col = $selectedfields[0] . "." . $selectedfields[1];
}
// ITS4YOU-CR SlOl 16. 2. 2016 6:43:30 - IT&M uitype 120 customization s
if ('120' === $this->columns_array['uitype_' . $this->columns_array[$fieldcolname]['fld_alias']]) {
if ('' !== $value) {
$advfiltergroupsql .= $this->get120UserIdSQL($value);
}
// ITS4YOU-END - IT&M uitype 120 customization e
} else {
switch ($comparator) {
case "s":
case "ew":
case "c":
case "k":
$nl_text = "";
if ($add_tags) {
switch ($comparator) {
case "ew";
$value = "'%$value'";
break;
case "s";
$value = "'$value%'";
break;
case "k";
$nl_text = " NOT ";
$value = "'%$value%'";
break;
default :
$value = "'%$value%'";
break;
}
}
$advfiltergroupsql = $selected_field_col . " $nl_text LIKE " . $value;
break;
case 'n':
if (33 === intval($this->columns_array[sprintf('uitype_%s', $this->columns_array[$fieldcolname]['fld_alias'])])) {
$values = explode("','", trim(trim(trim($value, '('), ')'), "'"));
$parts = [];
foreach ($values as $v) {
$parts[] = $selected_field_col . ' NOT LIKE "%' . stripslashes($v) . '%" ';
}
$advfiltergroupsql = ' (' . implode(' AND ', $parts) . ')';
} else {
$advfiltergroupsql = $selected_field_col . ' NOT IN ' . $value;
}
break;
case 'isn':
if (self::isMoreStrictMysql()) {
$advfiltergroupsql = ' (' . $selected_field_col . ' IS NULL OR ' . $selected_field_col . ' = 0) ';
} else {
$advfiltergroupsql = ' (' . $selected_field_col . ' IS NULL OR ' . $selected_field_col . ' = "") ';
}
break;
case 'isnn':
if (self::isMoreStrictMysql()) {
$advfiltergroupsql = ' (' . $selected_field_col . ' IS NOT NULL AND ' . $selected_field_col . ' != 0) ';
} else {
$advfiltergroupsql = ' (' . $selected_field_col . ' IS NOT NULL AND ' . $selected_field_col . ' != "") ';
}
break;
default:
if (33 === intval($this->columns_array[sprintf('uitype_%s', $this->columns_array[$fieldcolname]['fld_alias'])])) {
$values = explode("','", trim(trim(trim($value, '('), ')'), "'"));
$parts = [];
foreach ($values as $v) {
$parts[] = $selected_field_col . ' LIKE "%' . stripslashes($v) . '%" ';
}
$advfiltergroupsql = ' (' . implode(' OR ', $parts) . ')';
} else {
$advfiltergroupsql = $selected_field_col . ' IN ' . $value;
}
break;
}
}
return $advfiltergroupsql;
}
// ITS4YOU-CR SlOl 7.4.2015 15:45
// sprting data Array Based on Picklist Options Array
private function sortChartPickListData($dataArray, $picklistArray,$currency_id="",$fieldModule=""){
$NewDataArray = array();
if($currency_id!=""){
//*** DOKONC KONTROLU AK JE CURRENCY !!! ***/
global $default_charset;
foreach($picklistArray as $picklistKey => $picklistValue){
if($fieldModule!=""){
$ch_s_name = getTranslatedString($picklistValue,$fieldModule);
}
foreach($this->currency_symbols as $currency_symbol){
$c_picklistValue = $picklistValue." ($currency_symbol)";
$decodedPicklistValue = html_entity_decode($c_picklistValue, ENT_QUOTES, $default_charset);
if(isset($dataArray[$decodedPicklistValue])){
//ITS4YouReports::sshow($decodedPicklistValue);
$NewDataArray[$decodedPicklistValue] = $dataArray[$decodedPicklistValue];
}
}
/*
*/
}
}else{
foreach($picklistArray as $picklistKey => $picklistValue){
if(isset($dataArray[$picklistValue])){
$t_picklistValue = $picklistValue;
if($fieldModule!=""){
$t_picklistValue = getTranslatedString($picklistValue,$fieldModule);
}
$NewDataArray[$t_picklistValue] = $dataArray[$picklistValue];
}
}
}
return $NewDataArray;
}
// ITS4YOU-END
function getNonAdminAccessControlQuery($module, $user, $scope = '') {
$current_user_groups = '';
$current_user_parent_role_seq = '';
$defaultOrgSharingPermission = '';
$profileGlobalPermission = '';
$is_admin = '';
require('user_privileges/user_privileges_' . $user->id . '.php');
require('user_privileges/sharing_privileges_' . $user->id . '.php');
$query = ' ';
$tabId = getTabid($module);
if ($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2]== 1 && $defaultOrgSharingPermission[$tabId] == 3) {
$tableName = 'vt_tmp_u' . $user->id;
$sharingRuleInfoVariable = $module . '_share_read_permission';
$sharingRuleInfo = $$sharingRuleInfoVariable;
$sharedTabId = null;
if (!empty($sharingRuleInfo) && (ITS4YouReports_Functions_Helper::count($sharingRuleInfo['ROLE']) > 0 ||
ITS4YouReports_Functions_Helper::count($sharingRuleInfo['GROUP']) > 0)) {
$tableName = $tableName . '_t' . $tabId;
$sharedTabId = $tabId;
} elseif ($module == 'Calendar' || !empty($scope)) {
$tableName .= '_t' . $tabId;
}
$this->setupTemporaryTable($tableName, $sharedTabId, $user, $current_user_parent_role_seq, $current_user_groups);
// for secondary module we should join the records even if record is not there(primary module without related record)
if($scope == ''){
$query = " INNER JOIN $tableName $tableName$scope ON $tableName$scope.id = " .
"vtiger_crmentity$scope.smownerid ";
}else{
$query = " INNER JOIN $tableName $tableName$scope ON $tableName$scope.id = " .
"vtiger_crmentity$scope.smownerid OR vtiger_crmentity$scope.smownerid IS NULL";
}
}
return $query;
}
private function setupTemporaryTable($tableName, $tabId, $user, $parentRole, $userGroups) {
$module = null;
if (!empty($tabId)) {
$module = getTabModuleName($tabId);
}
$query = $this->getRepNonAdminAccessQuery($module, $user, $parentRole, $userGroups);
$query = "create temporary table IF NOT EXISTS $tableName(id int(11) primary key) ignore " .
$query;
$db = PearDatabase::getInstance();
$result = $db->pquery($query, array());
if (is_object($result)) {
return true;
}
return false;
}
private function getRepNonAdminAccessQuery($module, $user, $parentRole, $userGroups) {
$query = CRMEntity::getNonAdminUserAccessQuery($user, $parentRole, $userGroups);
if (!empty($module)) {
$moduleAccessQuery = CRMEntity::getNonAdminModuleAccessQuery($module, $user);
if (!empty($moduleAccessQuery)) {
$query .= " UNION $moduleAccessQuery";
}
}
return $query;
}
private function getConditionCurrentUserName($valuearray){
$usersArray = get_user_array(false);
global $current_user;
if(isset($usersArray[$current_user->id])){
$valuearray[array_search("Current User",$valuearray)] = trim($usersArray[$current_user->id]);
}
return $valuearray;
}
// ITS4YOU-CR SlOl | 20.8.2015 15:49
private function getSqlError(){
if(isset($_REQUEST["module"])){
$f_error = "<font color='red'>MySQL Query FAILED: Please contact vendor of Reports4You. Coppy querie from textarea and send it to Reports4You vendor, thank you for your understanding.</font>";
return $f_error;
}
}
private function displaySqlError($adb,$f_error){
global $default_charset;
$error_message = "Error message:
" . $adb->database->ErrorMsg() . "
";
$sql_string = "Querie:
" . html_entity_decode($this->tf_sql, ENT_QUOTES, $default_charset) . "
";
$contents = " <div style='width:100%;text-align:center;'>
<table align='center' style='border:1px solid red;'>
<tr><td>$f_error</td></tr>
<tr><td><textarea rows='20'>$sql_string
$error_message
</textarea></td></tr>
</table>
</div>";
/** EMAIL FAILED QUERY TO DEV Oldo s */
$email_body_content = "
Report:
index.php?".$_SERVER["QUERY_STRING"]."
$error_message
$sql_string
";
ITS4YouReports_ITS4YouError_Log::createLog($email_body_content);
/** EMAIL FAILED QUERY TO DEV Oldo e */
/** DISPLAY FAILED QUERY INFO TO User s */
if(isset($_REQUEST["module"])){
echo $contents;
exit;
}
/** DISPLAY FAILED QUERY INFO TO User e */
}
// ITS4YOU-END
// ITS4YOU-CR SlOl | 21.8.2015 12:18
private function setReportFileInfo($set_pdf_portrait=false){
global $current_user;
$filename = self::$R4YouFilename;
if (isset($current_user) && $current_user->id != "") {
$filename .= "_" . $current_user->id;
}
$filename .= "_" . $this->report_obj->record;
$this->filename = $filename;
$request = new Vtiger_Request($_REQUEST, $_REQUEST);
if(self::showScripts($request)){
echo "<script type='text/javascript' >jQuery(document).ready(function(){if(document.getElementById('report_filename')){document.getElementById('report_filename').value='" . $this->report_filename . "';}});</script>";
}
$landscape_format = 'A4';
$portrait_format = 'A4-L';
$export_pdf_format = $landscape_format;
if($this->reports4you_type=="custom_report" && $set_pdf_portrait===true){
$export_pdf_format = $portrait_format;
}elseif ($this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") {
$export_pdf_format = $portrait_format;
} elseif ($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols") {
$export_pdf_format = $portrait_format;
} elseif (isset($this->report_obj->reportinformations["summaries_columns"]) && ITS4YouReports_Functions_Helper::count($this->report_obj->reportinformations["summaries_columns"]) > 7) {
$export_pdf_format = $portrait_format;
} elseif (isset($this->selectedcolumns_arr) && ITS4YouReports_Functions_Helper::count($this->selectedcolumns_arr) > 10 && ITS4YouReports_Functions_Helper::count($this->report_obj->reportinformations["summaries_columns"]) < 2) {
$export_pdf_format = $portrait_format;
}elseif(ITS4YouReports_Functions_Helper::count($this->detail_selectedcolumns_arr)>$this->summaries_w_detail_portrait_from){
$export_pdf_format = $portrait_format;
}
if(self::showScripts($request)){
echo "<script type='text/javascript' >jQuery(document).ready(function(){if(document.getElementById('export_pdf_format')){document.getElementById('export_pdf_format').value='" . $export_pdf_format . "';}});</script>";
}
}
// ITS4YOU-END
// ITS4YOU-CR SlOl | 21.8.2015 12:35
private function getReportNameHTML(){
if (isset($this->report_obj->reportinformations["reports4youid"]) && $this->report_obj->reportinformations["reports4youid"] != "") {
$return_val = $this->report_obj->reportinformations["reports4youname"];
} else {
$return_val = vtranslate("LBL_REPORT_NAME", $this->getCurrentModule4You());
}
$return_name = "<table class='rpt4youTableText' width='100%'>";
$return_name .= "<tr>";
$return_name .= "<td colspan='1' class='rpt4youGrpHeadInfoText' width='100%' style='border:0px;'>";
$return_name .= $return_val;
$return_name .= "</td>";
$return_name .= "</tr>";
$return_name .= "</table>";
return $return_name;
}
// ITS4YOU-END
// ITS4YOU-CR SlOl 3. 2. 2016 14:08:57
private function getUI120UserID($username){
global $adb;
$user_id = 0;
if('Current User' === $username){
global $current_user;
$user_id = $current_user->id;
}else{
$sql = 'SELECT id
FROM vtiger_users
WHERE CASE WHEN vtiger_users.id IS NOT NULL
THEN CONCAT(vtiger_users.first_name,IF(vtiger_users.first_name != ""
AND vtiger_users.first_name IS NOT NULL," ",""),vtiger_users.last_name)
END = ?';
$result = $adb->pquery($sql, array($username));
$num_rows = $adb->num_rows($result);
if($num_rows > 0) {
$user_id = $adb->query_result($result,0,"id");
}
}
return $user_id;
}
// ITS4YOU-CR SlOl 15. 3. 2016 14:31:29
private function get120UserIdSQL($value){
$adb = PearDatabase::getInstance();
if($value!=""){
$vtmp = trim($value, "('");
$vtmp = trim($vtmp, "')");
$value_arr = explode("','", $vtmp);
if(!empty($value_arr)){
foreach($value_arr as $username){
$nv_arr[] = $this->getUI120UserID($username);
}
}
$value_arr = $nv_arr;
$value = " (";
foreach($value_arr as $abc){
$abc_arr[] = " FIND_IN_SET( $abc, vtiger_crmentity.shownerid ) ";
}
$value .= implode(" OR ", $abc_arr);
$value .= " )";
}
return $value;
}
// ITS4YOU-END
public function getGenerateForUsers($generateFor=array()){
$generateForUsers = array();
if(!empty($generateFor)){
if($this->gj_sql!=""){
$adb = PearDatabase::getInstance();
$gj_sql = $this->gj_sql;
foreach($generateFor as $userColumnStr){
if(isset($this->columns_array[$userColumnStr]) && isset($this->columns_array[$userColumnStr]["userid_fld"]) && $this->columns_array[$userColumnStr]["userid_fld"]!=""){
$userid_fld = $this->columns_array[$userColumnStr]["userid_fld"];
$userid_Query = "SELECT $userid_fld $gj_sql GROUP BY $userid_fld ORDER BY $userid_fld ";
$f_result = $adb->pquery($userid_Query, array());
if ($f_result) {
while ($reportrow = $adb->fetch_array($f_result)) {
if(!in_array($reportrow[0],$generateForUsers) && $reportrow[0]!=""){
$generateForUsers[] = $reportrow[0];
}
}
}
}
}
}
}
sort($generateForUsers);
return $generateForUsers;
}
// ITS4YOU-CR SlOl 19. 5. 2016 9:12:36
private function displayCustomCalculations($currency_id){
$db = PearDatabase::getInstance();
$layout = Vtiger_Viewer::getDefaultLayoutName();
$default_charset = vglobal("defrpt4youTableault_charset");
global $currentModule;
require_once 'modules/com_vtiger_workflow/expression_engine/include.inc';
$return_tr = $bg_color = "";
$cc_array = $this->report_obj->reportinformations["cc_array"];
if (!empty($cc_array) && !empty($this->cc_values_array)) {
foreach ($cc_array as $cc_nr => $cc_row) {
$cc_label = $cc_row["cc_name"];
$cc_expr = html_entity_decode($cc_row["cc_calculation"], ENT_QUOTES, $default_charset);
/** CUSTOM CALCULATION START **/
try {
$parser = new VTExpressionParser(new VTExpressionSpaceFilter(new VTExpressionTokenizer($cc_expr)));
$expression = $parser->expression();
$exprEvaluater = new VTFieldExpressionEvaluater($expression);
if ($layout == "v7") {
if (method_exists($expression, 'name') && 'if' !== $expression->getName()->value) {
$entityData = VTEntityData::fromEntityId($db, $this->data_record_id);
} else {
$newEntity = CRMEntity::getInstance($this->report_obj->primarymodule);
$newEntity->mode = '';
$entityData = VTEntityData::fromCRMEntity($newEntity);
} } else {
$entityData = new VTEntityData();
}
foreach ($this->cc_values_array as $cc_fld_alias => $cc_fld_value) {
$entityData->set($cc_fld_alias, $cc_fld_value);
}
$fieldvalue = $exprEvaluater->evaluate($entityData);
} catch (Exception $e) {
$fieldvalue = vtranslate('LBL_EXPRESSION_ERROR', $currentModule);
}
if (is_numeric($fieldvalue)) {
$fieldvalue = $this->formatFldNumberValue($fieldvalue);
$fld_style_arr = $this->getFldStyle($cc_label, $fieldvalue, true);
} else {
$fld_style_arr = $this->getFldStyle($cc_label, $fieldvalue);
}
$fld_style = $this->getFldStyleString($fld_style_arr);
// SET totals OF custom calculations ! s
if (!empty($cc_row['cc_totals']) && !empty($cc_row['cc_totals'][0])) {
$to_totals_array[$cc_label] = $cc_row['cc_totals'];
$to_totals_array[$cc_label]['label'] = $cc_label;
$this->to_totals_res = $this->setToTotalsArray('-', $this->to_totals_res, $cc_label, Vtiger_Currency_UIType::convertToDBFormat($fieldvalue), $to_totals_array, $currency_id);
}
// SET totals OF custom calculations ! e
$return_tr .= "<td class='rpt4youGrpHead' style='$fld_style $bg_color' nowrap >" . $fieldvalue . "</td>";
}
}
return $return_tr;
}
private function displayCustomCalculationsXls($r_data_ri, $currency_id){
$layout = Vtiger_Viewer::getDefaultLayoutName();
$default_charset = vglobal("defrpt4youTableault_charset");
global $currentModule;
require_once 'modules/com_vtiger_workflow/expression_engine/include.inc';
$bg_color = "";
$cc_array = $this->report_obj->reportinformations["cc_array"];
if (!empty($cc_array) && !empty($this->cc_values_array)) {
foreach ($cc_array as $cc_nr => $cc_row) {
$cc_label = $cc_row["cc_name"];
$cc_expr = html_entity_decode($cc_row["cc_calculation"], ENT_QUOTES, $default_charset);
/** CUSTOM CALCULATION START **/
try {
$parser = new VTExpressionParser(new VTExpressionSpaceFilter(new VTExpressionTokenizer($cc_expr)));
$expression = $parser->expression();
$exprEvaluater = new VTFieldExpressionEvaluater($expression);
if ($layout == "v7") {
$newEntity = CRMEntity::getInstance($this->report_obj->primarymodule);
$newEntity->mode = '';
$entityData = VTEntityData::fromCRMEntity($newEntity);
} else {
$entityData = new VTEntityData();
}
foreach ($this->cc_values_array as $cc_fld_alias => $cc_fld_value) {
$entityData->set($cc_fld_alias, $cc_fld_value);
}
$fieldvalue = $exprEvaluater->evaluate($entityData);
} catch (Exception $e) {
$fieldvalue = vtranslate('LBL_EXPRESSION_ERROR', $currentModule);
}
if (is_numeric($fieldvalue)) {
$fieldvalue = $this->formatFldNumberValue($fieldvalue);
$fld_style_arr = $this->getFldStyle($cc_label, $fieldvalue, true);
} else {
$fld_style_arr = $this->getFldStyle($cc_label, $fieldvalue);
}
$fld_style = $this->getFldStyleString($fld_style_arr);
// SET totals OF custom calculations ! s
if (!empty($cc_row['cc_totals']) && !empty($cc_row['cc_totals'][0])) {
$to_totals_array[$cc_label] = $cc_row['cc_totals'];
$to_totals_array[$cc_label]['label'] = $cc_label;
$this->to_totals_res = $this->setToTotalsArray('-', $this->to_totals_res, $cc_label, $fieldvalue, $to_totals_array, $currency_id);
}
// SET totals OF custom calculations ! e
$r_data_ri[] = $fieldvalue;
}
}
return $r_data_ri;
}
protected function getQuickFiltersHtml() {
$adb = PearDatabase::getInstance();
global $currentModule, $default_charset;
$layout = Vtiger_Viewer::getDefaultLayoutName();
$request = new Vtiger_Request($_REQUEST, $_REQUEST);
$requestAll = $request->getAll();
$divCustomStyle = 'float:left;display: inline;';
$qfRequest = $this->getQuickFiltersFromRequest($request);
$quickFiltersHtml = '<div class="padding1per no-print">';
if($layout == "v7"){
$dataAreaClass = '';
if (!empty($this->report_obj->reportinformations['charts']) && 1 === (int) $this->report_obj->reportinformations['charts'][1]['collapse_data_block']) {
$dataAreaClass = 'hide';
}
$quickFiltersHtml .= '<div id="quickFilterArea" class="well ' . $dataAreaClass . '" style="float:left;width:100%;background: #FFFFFF;">';
} else {
$quickFiltersHtml .= '<div id="quickFilterArea" class="summaryWidgetContainer" style="width:98%;'.$divCustomStyle.'">';
}
if (!empty($this->report_obj->reportinformations['quick_filters'])) {
$quickFiltersHtmlRows = [];
$quickFiltersHtmlRowHtml = '';
$rowsI = 1;
$colsI = 1;
foreach ($this->report_obj->reportinformations['quick_filters'] as $qfColumn) {
$qfColumn = decode_html($qfColumn);
if(isset($this->columns_array[$qfColumn]['fld_sql_str'])) {
$fldSqlStr = $this->columns_array[$qfColumn]['fld_sql_str'];
$fld_cond = $this->columns_array[$qfColumn]['fld_cond'];
$fldname = $this->columns_array[$qfColumn]['fld_alias'];
$columns_array_lbl = $this->columns_array[$fldname];
$quickFiltersHtmlRowHtml = '<div class="padding10" style="float: left;width:30%;">';
if ($this->select_body) {
$getQuickFilterSql = 'SELECT DISTINCT ' . $fldSqlStr . ' ' . $this->select_body . ' ORDER BY ' . $fld_cond;
//$adb->setDebug(true);
$getQuickFilterResult = $adb->query($getQuickFilterSql);
//$adb->setDebug(false);
if (isset($qfRequest[$fldname]['radio']) && 'isnot' === $qfRequest[$fldname]['radio']) {
$Radio = array("","checked");
$sqlradio = "NOT IN";
} else {
$Radio = array("checked","");
$sqlradio = "IN";
}
$headerLabel = self::getHeaderLabel($this->report_obj->record, 'SC', $fldname, $columns_array_lbl);
if ($layout == "v7") {
$quickFiltersHtmlRowHtml .= '<table class="table table-borderless">';
$quickFiltersHtmlRowHtml .= '<tr><td colspan="5"><b>'.$headerLabel.'</b></td></tr>';
$quickFiltersHtmlRowHtml .= '<tr>';
$quickFiltersHtmlRowHtml .= '<td style="width:5%;">
<input type="radio" name="radio_'.$fldname.'" value="is" '.$Radio[0].' />
</td>';
$quickFiltersHtmlRowHtml .= '<td style="width:11%;">
'.vtranslate('LBL_IS', $currentModule).'
</td>';
$quickFiltersHtmlRowHtml .= '<td style="width:5%;">
<input type="radio" name="radio_'.$fldname.'" value="isnot" '.$Radio[1].' />
</td>';
$quickFiltersHtmlRowHtml .= '<td style="width:11%;">
'.vtranslate('LBL_IS_NOT', $currentModule).'
</td>';
$quickFiltersHtmlRowHtml .= '<td >
<a href="javascript:uncheckAll(' . "'" . $fldname . "'" . ');">' . vtranslate('LBL_UNCHECK_ALL', $currentModule) . '</a>
</td>';
$quickFiltersHtmlRowHtml .= '</tr>';
$quickFiltersHtmlRowHtml .= '<tr><td colspan="5">';
} else {
$quickFiltersHtmlRowHtml .= "<b>".$headerLabel."</b><br>";
$quickFiltersHtmlRowHtml .= "<input type='radio' name='radio_".$fldname."' value='is' ".$Radio[0]."/>".vtranslate("LBL_IS", $currentModule)."&nbsp;&nbsp;";
$quickFiltersHtmlRowHtml .= "<input type='radio' name='radio_".$fldname."' value='isnot' ".$Radio[1]."/>".vtranslate("LBL_IS_NOT", $currentModule);
$quickFiltersHtmlRowHtml .= "<br />";
}
$noOfColumnsData = $adb->num_rows($getQuickFilterResult);
if (!$noOfColumnsData) {
$quickFiltersHtmlRowHtml .= vtranslate('LBL_NO_DATA_FOR_COLUMN', $currentModule);
} else {
if($layout == "v7"){
$qfSelectClass = 'select2 col-lg-6';
} else {
$qfSelectClass = 'chzn-select span6';
}
$quickFiltersHtmlRowHtml .= "<select name='".$fldname."[]' id='".$fldname."' multiple class='$qfSelectClass quickFilter4You' >";
$SelectValues = array();
while ($qfRow = $adb->fetchByAssoc($getQuickFilterResult)) {
$fldvalue = $qfRow[$fldname];
$fldvalue = html_entity_decode($fldvalue, ENT_QUOTES, $default_charset);
$tmpSplit = explode(':', $columns_array_lbl);
$tablename = $tmpSplit[0];
$columnname = $tmpSplit[1];
$moduleStr = $tmpSplit[2];
$moduleStrArray = explode('_', $moduleStr);
$translateFrom = $moduleStrArray[0];
if(''===$fldvalue){
$fldvalue = 'NULL';
$translateFrom = $currentModule;
}
if (isset($requestAll[$fldname]) ) {
if (ITS4YouReports_Functions_Helper::count($requestAll[$fldname]) > 0) {
foreach ($requestAll[$fldname] as $value) {
$SelectValues[$fldname][] = $value;
}
}
$filterlist[$fldname] = $fld_cond." ".$sqlradio." ('".implode("','", $requestAll[$fldname])."') ";
}
if (isset($qfRequest[$fldname]) && ITS4YouReports_Functions_Helper::count($qfRequest[$fldname]['value']) > 0 && in_array($fldvalue,$qfRequest[$fldname]['value'])){
$fldselected = "selected";
} else {
$fldselected = "";
}
$fieldvalue = vtranslate($fldvalue, $translateFrom);
$quickFiltersHtmlRowHtml .= "<option value='".$fldvalue."' ".$fldselected.">".$fieldvalue."</option>";
}
$quickFiltersHtmlRowHtml .= '</select>';
if ($layout == "v7") {
$quickFiltersHtmlRowHtml .= '</td></tr>';
$quickFiltersHtmlRowHtml .= '</table>';
} else {
$quickFiltersHtmlRowHtml .= '<br /><a href="javascript:uncheckAll(' . "'" . $fldname . "'" . ');">' . vtranslate('LBL_UNCHECK_ALL', $currentModule) . '</a>';
}
}
} else {
$quickFiltersHtmlRowHtml .= vtranslate('SQL_BODY_MISSING');
}
$quickFiltersHtmlRowHtml .= '</div>';
} else {
if (isset($this->columns_array[$qfColumn]['fld_alias'])) {
$fldAlias = $this->columns_array[$qfColumn]['fld_alias'];
} else {
$fldAlias = $qfColumn;
}
$quickFiltersHtmlRowHtml .= vtranslate('SQL_COLUMN_NOT_PREPARED', $currentModule) . ": $fldAlias";
}
$colsI++;
$quickFiltersHtmlRows[$rowsI][$colsI] = $quickFiltersHtmlRowHtml;
if (3 < $colsI) {
$colsI = 1;
$rowsI++;
}
}
if (!empty($quickFiltersHtmlRows)) {
foreach ($quickFiltersHtmlRows as $qfRow) {
$quickFiltersHtml .= '<div class="row-fluid">';
$quickFiltersHtml .= (is_array($qfRow) ? implode('', $qfRow) : $qfRow);
$quickFiltersHtml .= '</div>';
}
}
} else {
$quickFiltersHtml .= '<div class="row-fluid">'.vtranslate('LBL_NO_DATA_TO_DISPLAY').'</div>';
}
$quickFiltersHtml .= '</div>';
$quickFiltersHtml .= '</div>';
return $quickFiltersHtml;
}
/**
* function to return html of hidden areas for Report charts
* @param null $postFix
*
* @return string
*/
private function addHighChartDiv($postFix = null) {
$layout = Vtiger_Viewer::getDefaultLayoutName();
$return = '';
if ('funnel' === $this->charts['charttypes'][$this->charts['charts_ds_columns'][0]]) {
$rw_width = '63%';
$rw_custom_style = 'margin-left:18%;';
} else {
$rw_width = '95%';
$rw_custom_style = '';
}
$noPrintClass = 'no-print';
if($layout == "v7"){
$noPrintClass = '';
}
$return .= "<div class='$noPrintClass' style='text-align:center;width:$rw_width;margin:30px;$rw_custom_style border:0px solid red;'>";
if (!$postFix) {
$return .= '<br/>';
} else {
$postFix .= '_';
}
$return .= "<div id='reports4you_widget_" . $postFix . $this->report_obj->record . "' style='border:0px solid green;width:$rw_width;margin:auto;'></div>";
if ($postFix) {
$return .= '<br/>';
}
$return .= '</div>';
return $return;
}
private function getDetailHeader($header, $group2_headers) {
$default_charset = vglobal('default_charset');
$h_i = 0;
$header_f = '';
foreach ($header as $header_f_arr) {
$header_style = $header_f_arr['style'];
if (array_key_exists('module', $header_f_arr)) {
$headerLabel = vtranslate($header_f_arr['label'], $header_f_arr['module']);
} else {
$headerLabel = $header_f_arr['label'];
}
$header_rowspan = 1;
$header_colspan = 1;
if (!empty($group2_headers)) {
if ($h_i == 0) {
$header_rowspan++;
} else {
if (array_key_exists($headerLabel, $group2_headers)) {
$header_colspan = ITS4YouReports_Functions_Helper::count($group2_headers[$headerLabel]);
} else {
$header_colspan = ITS4YouReports_Functions_Helper::count($this->summaries_labels);
}
}
}
if ($headerLabel == "LBL_GROUPING_TOTALS") {
$headerLabel = getTranslatedString("LBL_GROUPING_TOTALS", $this->getCurrentModule4You());
}
if (($this->report_obj->reportinformations["Group3"] != "none" && $this->report_obj->reportinformations["timeline_type3"] == "cols" || $this->report_obj->reportinformations["Group2"] != "none" && $this->report_obj->reportinformations["timeline_type2"] == "cols") && $h_i != 0 && isset($this->sum_col_i) && $this->sum_col_i != 1) {
$header_colspan = $this->sum_col_i;
}
$header_f .= "<td class='rpt4youCellLabel' rowspan='$header_rowspan' colspan='$header_colspan' $header_style align='center' nowrap >$headerLabel</td>";
$h_i++;
}
if (!empty($group2_headers)) {
$header_f .= '</tr><tr>';
foreach ($group2_headers as $g2_h_key => $g2_h_arr) {
foreach ($g2_h_arr as $g2_h_labels) {
$headerLabel = $g2_h_labels["label"];
$header_f .= "<td class='rpt4youCellLabel' style='" . $this->header_style . "' align='center' nowrap >$headerLabel</td>";
}
}
}
return $header_f;
}
/**
* @return array
*/
private function getMapsAliases() {
$mapsAliases = [];
if (!empty($this->report_obj->reportinformations['maps'])) {
foreach ($this->report_obj->reportinformations['maps'] as $mi => $mapColumn) {
if (!in_array($mi, ITS4YouReports_BingMaps_View::$mapParameterColumns) && array_key_exists($mapColumn, $this->columns_array)) {
$mapsAliases[] = $this->columns_array[$mapColumn]['fld_alias'];
}
}
}
return $mapsAliases;
}
/**
* @param $reportId
*
* @return array
* @throws Exception
*/
public function generateBingMapsData($reportId) {
$db = PearDatabase::getInstance();
$mapsData = [];
$locationsData = [];
$mapsColumns = $this->report_obj->reportinformations['maps'];
$maxQueryLimit = 200000;
if (!empty($mapsColumns)) {
$this->generateQuery($reportId, '', 'ApiMaps');
$sSQL = $this->tf_sql;
$mapsAliases = $this->getMapsAliases();
if (!empty($sSQL) && !empty($mapsAliases)) {
$locationsResult = $db->query($sSQL);
if ($db->num_rows($locationsResult)) {
if ($maxQueryLimit > (int) $db->num_rows($locationsResult)) {
$streetAliases = [];
foreach (ITS4YouReports_BingMaps_View::$addressColumns as $bingColumnName) {
if (array_key_exists($bingColumnName, $mapsColumns)) {
$bingColumnString = $mapsColumns[$bingColumnName];
if (array_key_exists($bingColumnString, $this->columns_array)) {
$streetAliases[] = $this->columns_array[$bingColumnString]['fld_alias'];
}
}
}
while ($row = $db->fetchByAssoc($locationsResult)) {
$locationTexts = [];
$pinTitle = '';
$pinDescription = '';
$this->data_record_id = $row['record_id'];
foreach ($streetAliases as $asName) {
if (!empty($row[$asName])) {
$locationTexts[] = $row[$asName];
}
}
if (!empty($mapsColumns['pin_title'])) {
if (array_key_exists($mapsColumns['pin_title'], $this->columns_array)) {
$fldAlias = $this->columns_array[$mapsColumns['pin_title']]['fld_alias'];
$uitype = $this->columns_array[$fldAlias];
$rawValue = $row[$fldAlias];
$this->outputformat = 'HTML';
$pinTitle = $this->getFldFormatedValue($uitype, $rawValue, $fldAlias);
}
}
if (!empty($mapsColumns['pin_description'])) {
if (array_key_exists($mapsColumns['pin_description'], $this->columns_array)) {
$fldAlias = $this->columns_array[$mapsColumns['pin_description']]['fld_alias'];
$uitype = $this->columns_array[$fldAlias];
$rawValue = $row[$fldAlias];
$this->outputformat = 'HTML';
$pinDescription = $this->getFldFormatedValue($uitype, $rawValue, $fldAlias);
}
}
$locationsData[] = [$locationTexts, $pinTitle, $pinDescription];
}
$mapsData = ITS4YouReports_Bing_Map::handleGeoLocationsByAddress($locationsData);
} else {
throw new Exception(sprintf('Maximum of %s record should be displayed!', $maxQueryLimit));
}
} else {
throw new Exception('Result can not be empty: ' . self::displaySqlFormattedQuery($sSQL));
}
}
}
return $mapsData;
}
/**
* @param string $totalCountSql
*/
public function setTotalCount($totalCountSql) {
$entries = 0;
$db = PearDatabase::getInstance();
$request = new Vtiger_Request($_REQUEST, $_REQUEST);
if (!empty($totalCountSql)) {
$parts = explode(' LIMIT ', $totalCountSql);
$exploder = 'FROM ' . $this->parimary_table_name;
$partsQuery = explode($exploder, $parts[0]);
$clearQuery = explode(' ORDER BY ', $partsQuery[1]);
switch ($this->report_obj->primarymodule) {
case 'Users':
$entriesForQuery = [$this->parimary_table_name . '.' . $this->parimary_table_index . ' entries'];
break;
default:
$entriesForQuery = ['vtiger_crmentity.crmid entries'];
break;
}
foreach ($this->selectedcolumns_arr as $i => $columnArray) {
$fldSqlStr = $this->columns_array[$columnArray['fieldcolname']]['fld_sql_str'];
if (!empty($fldSqlStr)) {
$entriesForQuery[] = $fldSqlStr;
}
}
$entriesQuery = implode(', ', $entriesForQuery);
$countQuery = 'SELECT DISTINCT ' . $entriesQuery . ' ' . $exploder . $clearQuery[0];
if (!empty($this->limitValue)) {
$countQuery .= ' LIMIT '.$this->limitValue;
}
if (!empty($_REQUEST['scq'])) {
self::displaySqlFormattedQuery($countQuery);
}
//$db->setDebug(1);
$result = $db->query($countQuery);
//$db->setDebug(0);
if ($result) {
$entries = $db->num_rows($result);
if ($request->has('module')
&& !in_array($request->has('mode'), [
'GetXLS',
'GetPrintReport',
'ajax',
])
) {
$this->setNoOfTotalRows($entries);
}
}
}
$this->totalCountQualification = $entries;
}
}
?>