PageRenderTime 67ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/modules/Reports/ReportRun.php

https://bitbucket.org/thomashii/vtigercrm-5.4-for-postgresql
PHP | 3344 lines | 2805 code | 320 blank | 219 comment | 991 complexity | a01cbae349da2aec8510fc908a835a58 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0
  1. <?php
  2. /*+********************************************************************************
  3. * The contents of this file are subject to the vtiger CRM Public License Version 1.0
  4. * ("License"); You may not use this file except in compliance with the License
  5. * The Original Code is: vtiger CRM Open Source
  6. * The Initial Developer of the Original Code is vtiger.
  7. * Portions created by vtiger are Copyright (C) vtiger.
  8. * All Rights Reserved.
  9. ********************************************************************************/
  10. global $calpath;
  11. global $app_strings,$mod_strings;
  12. global $theme;
  13. global $log;
  14. $theme_path="themes/".$theme."/";
  15. $image_path=$theme_path."images/";
  16. require_once('include/database/PearDatabase.php');
  17. require_once('include/database/SqlQueryFix.php');
  18. require_once('data/CRMEntity.php');
  19. require_once("modules/Reports/Reports.php");
  20. require_once 'modules/Reports/ReportUtils.php';
  21. require_once("vtlib/Vtiger/Module.php");
  22. class ReportRun extends CRMEntity
  23. {
  24. var $primarymodule;
  25. var $secondarymodule;
  26. var $orderbylistsql;
  27. var $orderbylistcolumns;
  28. var $selectcolumns;
  29. var $groupbylist;
  30. var $reporttype;
  31. var $reportname;
  32. var $totallist;
  33. var $_groupinglist = false;
  34. var $_columnslist = false;
  35. var $_stdfilterlist = false;
  36. var $_columnstotallist = false;
  37. var $_advfiltersql = false;
  38. var $append_currency_symbol_to_value = array('Products_Unit_Price','Services_Price',
  39. 'Invoice_Total', 'Invoice_Sub_Total', 'Invoice_S&H_Amount', 'Invoice_Discount_Amount', 'Invoice_Adjustment',
  40. 'Quotes_Total', 'Quotes_Sub_Total', 'Quotes_S&H_Amount', 'Quotes_Discount_Amount', 'Quotes_Adjustment',
  41. 'SalesOrder_Total', 'SalesOrder_Sub_Total', 'SalesOrder_S&H_Amount', 'SalesOrder_Discount_Amount', 'SalesOrder_Adjustment',
  42. 'PurchaseOrder_Total', 'PurchaseOrder_Sub_Total', 'PurchaseOrder_S&H_Amount', 'PurchaseOrder_Discount_Amount', 'PurchaseOrder_Adjustment'
  43. );
  44. var $ui10_fields = array();
  45. var $ui101_fields = array();
  46. var $groupByTimeParent = array( 'Quarter'=>array('Year'),
  47. 'Month'=>array('Year')
  48. );
  49. /** Function to set reportid,primarymodule,secondarymodule,reporttype,reportname, for given reportid
  50. * This function accepts the $reportid as argument
  51. * It sets reportid,primarymodule,secondarymodule,reporttype,reportname for the given reportid
  52. */
  53. function ReportRun($reportid)
  54. {
  55. $oReport = new Reports($reportid);
  56. $this->reportid = $reportid;
  57. $this->primarymodule = $oReport->primodule;
  58. $this->secondarymodule = $oReport->secmodule;
  59. $this->reporttype = $oReport->reporttype;
  60. $this->reportname = $oReport->reportname;
  61. }
  62. /** Function to get the columns for the reportid
  63. * This function accepts the $reportid and $outputformat (optional)
  64. * This function returns $columnslist Array($tablename:$columnname:$fieldlabel:$fieldname:$typeofdata=>$tablename.$columnname As Header value,
  65. * $tablename1:$columnname1:$fieldlabel1:$fieldname1:$typeofdata1=>$tablename1.$columnname1 As Header value,
  66. * |
  67. * $tablenamen:$columnnamen:$fieldlabeln:$fieldnamen:$typeofdatan=>$tablenamen.$columnnamen As Header value
  68. * )
  69. *
  70. */
  71. function getQueryColumnsList($reportid,$outputformat='')
  72. {
  73. // Have we initialized information already?
  74. if($this->_columnslist !== false) {
  75. return $this->_columnslist;
  76. }
  77. global $adb;
  78. global $modules;
  79. global $log,$current_user,$current_language;
  80. $ssql = "select vtiger_selectcolumn.* from vtiger_report inner join vtiger_selectquery on vtiger_selectquery.queryid = vtiger_report.queryid";
  81. $ssql .= " left join vtiger_selectcolumn on vtiger_selectcolumn.queryid = vtiger_selectquery.queryid";
  82. $ssql .= " where vtiger_report.reportid = ?";
  83. $ssql .= " order by vtiger_selectcolumn.columnindex";
  84. $result = $adb->pquery($ssql, array($reportid));
  85. $permitted_fields = Array();
  86. while($columnslistrow = $adb->fetch_array($result))
  87. {
  88. $fieldname ="";
  89. $fieldcolname = $columnslistrow["columnname"];
  90. list($tablename,$colname,$module_field,$fieldname,$single) = split(":",$fieldcolname);
  91. list($module,$field) = split("_",$module_field,2);
  92. $inventory_fields = array('quantity','listprice','serviceid','productid','discount','comment');
  93. $inventory_modules = array('SalesOrder','Quotes','PurchaseOrder','Invoice');
  94. require('user_privileges/user_privileges_'.$current_user->id.'.php');
  95. if(sizeof($permitted_fields[$module]) == 0 && $is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1)
  96. {
  97. $permitted_fields[$module] = $this->getaccesfield($module);
  98. }
  99. if(in_array($module,$inventory_modules)){
  100. $permitted_fields = array_merge($permitted_fields,$inventory_fields);
  101. }
  102. $selectedfields = explode(":",$fieldcolname);
  103. if($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1
  104. && !in_array($selectedfields[3], $permitted_fields[$module])) {
  105. //user has no access to this field, skip it.
  106. continue;
  107. }
  108. $concatSql = getSqlForNameInDisplayFormat(array('first_name'=>$selectedfields[0].".first_name",'last_name'=>$selectedfields[0].".last_name"), 'Users');
  109. $querycolumns = $this->getEscapedColumns($selectedfields);
  110. if(isset($module) && $module!="") {
  111. $mod_strings = return_module_language($current_language,$module);
  112. }
  113. $fieldlabel = trim(preg_replace("/$module/"," ",$selectedfields[2],1));
  114. $mod_arr=explode('_',$fieldlabel);
  115. $fieldlabel = trim(str_replace("_"," ",$fieldlabel));
  116. //modified code to support i18n issue
  117. $fld_arr = explode(" ",$fieldlabel);
  118. if(($mod_arr[0] == '')) {
  119. $mod = $module;
  120. $mod_lbl = getTranslatedString($module,$module); //module
  121. } else {
  122. $mod = $mod_arr[0];
  123. array_shift($fld_arr);
  124. $mod_lbl = getTranslatedString($fld_arr[0],$mod); //module
  125. }
  126. $fld_lbl_str = implode(" ",$fld_arr);
  127. $fld_lbl = getTranslatedString($fld_lbl_str,$module); //fieldlabel
  128. $fieldlabel = $mod_lbl." ".$fld_lbl;
  129. if(($selectedfields[0] == "vtiger_usersRel1") && ($selectedfields[1] == 'user_name') && ($selectedfields[2] == 'Quotes_Inventory_Manager')){
  130. $columnslist[$fieldcolname] = "trim( $concatSql ) as ".$module."_Inventory_Manager";
  131. continue;
  132. }
  133. if((CheckFieldPermission($fieldname,$mod) != 'true' && $colname!="crmid" && (!in_array($fieldname,$inventory_fields) && in_array($module,$inventory_modules))) || empty($fieldname))
  134. {
  135. continue;
  136. }
  137. else
  138. {
  139. $this->labelMapping[$selectedfields[2]] = str_replace(" ","_",$fieldlabel);
  140. $header_label = $selectedfields[2]; // Header label to be displayed in the reports table
  141. // To check if the field in the report is a custom field
  142. // and if yes, get the label of this custom field freshly from the vtiger_field as it would have been changed.
  143. // Asha - Reference ticket : #4906
  144. if($querycolumns == "")
  145. {
  146. if($selectedfields[4] == 'C')
  147. {
  148. $field_label_data = split("_",$selectedfields[2]);
  149. $module= $field_label_data[0];
  150. if($module!=$this->primarymodule)
  151. $columnslist[$fieldcolname] = "case when (".$selectedfields[0].".".$selectedfields[1]."='1')then 'yes' else case when (vtiger_crmentity$module.crmid is not null) then 'no' else '-' end end as '$selectedfields[2]'";
  152. else
  153. $columnslist[$fieldcolname] = "case when (".$selectedfields[0].".".$selectedfields[1]."='1')then 'yes' else case when (vtiger_crmentity.crmid is not null) then 'no' else '-' end end as '$selectedfields[2]'";
  154. }
  155. elseif($selectedfields[0] == 'vtiger_activity' && $selectedfields[1] == 'status')
  156. {
  157. $columnslist[$fieldcolname] = " case when (vtiger_activity.status not like '') then vtiger_activity.status else vtiger_activity.eventstatus end as Calendar_Status";
  158. }
  159. elseif($selectedfields[0] == 'vtiger_activity' && $selectedfields[1] == 'date_start')
  160. {
  161. $columnslist[$fieldcolname] = "to_timestamp(vtiger_activity.date_start ||' ' || vtiger_activity.time_start,'YYYY-MM-DD HH24:MI:SS') as Calendar_Start_Date_and_Time";
  162. }
  163. elseif(stristr($selectedfields[0],"vtiger_users") && ($selectedfields[1] == 'user_name'))
  164. {
  165. $temp_module_from_tablename = str_replace("vtiger_users","",$selectedfields[0]);
  166. if($module!=$this->primarymodule){
  167. $condition = "and vtiger_crmentity".$module.".crmid is not null ";
  168. } else {
  169. $condition = "and vtiger_crmentity.crmid is not null ";
  170. }
  171. if($temp_module_from_tablename == $module)
  172. $columnslist[$fieldcolname] = " case when(".$selectedfields[0].".last_name NOT LIKE '' $condition ) THEN ".$concatSql." else vtiger_groups".$module.".groupname end as '".$module."_$field'";
  173. else//Some Fields can't assigned to groups so case avoided (fields like inventory manager)
  174. $columnslist[$fieldcolname] = $selectedfields[0].".user_name as ".$header_label." ";
  175. }
  176. elseif(stristr($selectedfields[0],"vtiger_crmentity") && ($selectedfields[1] == 'modifiedby')) {
  177. $concatSql = getSqlForNameInDisplayFormat(array('last_name'=>'vtiger_lastModifiedBy'.$module.'.last_name', 'first_name'=>'vtiger_lastModifiedBy'.$module.'.first_name'), 'Users');
  178. $columnslist[$fieldcolname] = "trim($concatSql) as $header_label";
  179. }
  180. elseif($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  181. {
  182. $columnslist[$fieldcolname] = "vtiger_crmentity.".$selectedfields[1]." AS ".$header_label." ";
  183. }
  184. elseif($selectedfields[0] == 'vtiger_products' && $selectedfields[1] == 'unit_price')//handled for product fields in Campaigns Module Reports
  185. {
  186. $columnslist[$fieldcolname] = $selectedfields[0].".currency_id || '::' || innerProduct.actual_unit_price as ". $header_label ." ";
  187. }
  188. elseif(in_array($selectedfields[2], $this->append_currency_symbol_to_value)) {
  189. $columnslist[$fieldcolname] = $selectedfields[0].".currency_id || '::' || ".$selectedfields[0].".".$selectedfields[1]." as " . $header_label ." ";
  190. }
  191. elseif($selectedfields[0] == 'vtiger_notes' && ($selectedfields[1] == 'filelocationtype' || $selectedfields[1] == 'filesize' || $selectedfields[1] == 'folderid' || $selectedfields[1]=='filestatus'))//handled for product fields in Campaigns Module Reports
  192. {
  193. if($selectedfields[1] == 'filelocationtype'){
  194. $columnslist[$fieldcolname] = "case ".$selectedfields[0].".".$selectedfields[1]." when 'I' then 'Internal' when 'E' then 'External' else '-' end as $selectedfields[2] ";
  195. } else if($selectedfields[1] == 'folderid'){
  196. $columnslist[$fieldcolname] = "vtiger_attachmentsfolder.foldername as $selectedfields[2] ";
  197. } elseif($selectedfields[1] == 'filestatus'){
  198. $columnslist[$fieldcolname] = "case ".$selectedfields[0].".".$selectedfields[1]." when '1' then 'yes' when '0' then 'no' else '-' end as $selectedfields[2] ";
  199. } elseif($selectedfields[1] == 'filesize'){
  200. $columnslist[$fieldcolname] = "case ".$selectedfields[0].".".$selectedfields[1]." when '' then '-' else ".$selectedfields[0].".".$selectedfields[1]."/1024 || ' ' || 'KB' end as $selectedfields[2] ";
  201. }
  202. }
  203. elseif($selectedfields[0] == 'vtiger_inventoryproductrel')//handled for product fields in Campaigns Module Reports
  204. {
  205. if($selectedfields[1] == 'discount'){
  206. $columnslist[$fieldcolname] = " case when (vtiger_inventoryproductrel{$module}.discount_amount is not null) then vtiger_inventoryproductrel{$module}.discount_amount else ROUND((vtiger_inventoryproductrel{$module}.listprice * vtiger_inventoryproductrel{$module}.quantity * (vtiger_inventoryproductrel{$module}.discount_percent/100)),3) end as " . $header_label ." ";
  207. } else if($selectedfields[1] == 'productid'){
  208. $columnslist[$fieldcolname] = "vtiger_products{$module}.productname as " . $header_label ." ";
  209. } else if($selectedfields[1] == 'serviceid'){
  210. $columnslist[$fieldcolname] = "vtiger_service{$module}.servicename as " . $header_label ." ";
  211. } else {
  212. $columnslist[$fieldcolname] = $selectedfields[0].$module.".".$selectedfields[1]." as ".$header_label." ";
  213. }
  214. }
  215. elseif(stristr($selectedfields[1],'cf_')==true && stripos($selectedfields[1],'cf_')==0)
  216. {
  217. $columnslist[$fieldcolname] = $selectedfields[0].".".$selectedfields[1]." AS ".$adb->sql_escape_string(decode_html($header_label))." ";
  218. }
  219. else
  220. {
  221. $columnslist[$fieldcolname] = $selectedfields[0].".".$selectedfields[1]." AS ".$header_label." ";
  222. }
  223. }
  224. else
  225. {
  226. $columnslist[$fieldcolname] = $querycolumns;
  227. }
  228. }
  229. }
  230. if ($outputformat == "HTML") $columnslist['vtiger_crmentity:crmid:LBL_ACTION:crmid:I'] = "vtiger_crmentity.crmid AS LBL_ACTION" ;
  231. // Save the information
  232. $this->_columnslist = $columnslist;
  233. $log->info("ReportRun :: Successfully returned getQueryColumnsList".$reportid);
  234. return $columnslist;
  235. }
  236. /** Function to get field columns based on profile
  237. * @ param $module : Type string
  238. * returns permitted fields in array format
  239. */
  240. function getaccesfield($module) {
  241. global $current_user;
  242. global $adb;
  243. $access_fields = Array();
  244. $profileList = getCurrentUserProfileList();
  245. $query = "select vtiger_field.fieldname from vtiger_field inner join vtiger_profile2field on vtiger_profile2field.fieldid=vtiger_field.fieldid inner join vtiger_def_org_field on vtiger_def_org_field.fieldid=vtiger_field.fieldid where";
  246. $params = array();
  247. if($module == "Calendar")
  248. {
  249. if (count($profileList) > 0) {
  250. $query .= " vtiger_field.tabid in (9,16) and vtiger_field.displaytype in (1,2,3) and vtiger_profile2field.visible=0 and vtiger_def_org_field.visible=0
  251. and vtiger_field.presence IN (0,2) and vtiger_profile2field.profileid in (". generateQuestionMarks($profileList) .") group by vtiger_field.fieldid order by block,sequence";
  252. array_push($params, $profileList);
  253. } else {
  254. $query .= " vtiger_field.tabid in (9,16) and vtiger_field.displaytype in (1,2,3) and vtiger_profile2field.visible=0 and vtiger_def_org_field.visible=0
  255. and vtiger_field.presence IN (0,2) group by vtiger_field.fieldid order by block,sequence";
  256. }
  257. }
  258. else
  259. {
  260. array_push($params, $module);
  261. if (count($profileList) > 0) {
  262. $query .= " vtiger_field.tabid in (select tabid from vtiger_tab where vtiger_tab.name in (?)) and vtiger_field.displaytype in (1,2,3,5) and vtiger_profile2field.visible=0
  263. and vtiger_field.presence IN (0,2) and vtiger_def_org_field.visible=0 and vtiger_profile2field.profileid in (". generateQuestionMarks($profileList) .") group by vtiger_field.fieldid order by block,sequence";
  264. array_push($params, $profileList);
  265. } else {
  266. $query .= " vtiger_field.tabid in (select tabid from vtiger_tab where vtiger_tab.name in (?)) and vtiger_field.displaytype in (1,2,3,5) and vtiger_profile2field.visible=0
  267. and vtiger_field.presence IN (0,2) and vtiger_def_org_field.visible=0 group by vtiger_field.fieldid order by block,sequence";
  268. }
  269. }
  270. $result = $adb->pquery($query, $params);
  271. while($collistrow = $adb->fetch_array($result))
  272. {
  273. $access_fields[] = $collistrow["fieldname"];
  274. }
  275. //added to include ticketid for Reports module in select columnlist for all users
  276. if($module == "HelpDesk")
  277. $access_fields[] = "ticketid";
  278. return $access_fields;
  279. }
  280. /** Function to get Escapedcolumns for the field in case of multiple parents
  281. * @ param $selectedfields : Type Array
  282. * returns the case query for the escaped columns
  283. */
  284. function getEscapedColumns($selectedfields) {
  285. $tableName = $selectedfields[0];
  286. $columnName = $selectedfields[1];
  287. $moduleFieldLabel = $selectedfields[2];
  288. $fieldName = $selectedfields[3];
  289. list($moduleName, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  290. $fieldInfo = getFieldByReportLabel($moduleName, $fieldLabel);
  291. if($moduleName == 'ModComments' && $fieldName == 'creator') {
  292. $concatSql = getSqlForNameInDisplayFormat(array('first_name' => 'vtiger_usersModComments.first_name',
  293. 'last_name' => 'vtiger_usersModComments.last_name'), 'Users');
  294. $queryColumn = "trim(case when (vtiger_usersModComments.user_name not like '' and vtiger_crmentity.crmid!=0) then $concatSql end) as ModComments_Creator ";
  295. } elseif(($fieldInfo['uitype'] == '10' || isReferenceUIType($fieldInfo['uitype']))
  296. && $fieldInfo['uitype'] != '52' && $fieldInfo['uitype'] != '53') {
  297. $fieldSqlColumns = $this->getReferenceFieldColumnList($moduleName, $fieldInfo);
  298. if(count($fieldSqlColumns) > 0) {
  299. if(containsIdField($columnName)) {
  300. $log->debug("Has id field : ".$columnName );
  301. $queryColumn = "(CASE WHEN $tableName.$columnName IS NOT NULL THEN (CASE";
  302. } else {
  303. $log->debug("No id field : ".$columnName );
  304. $queryColumn = "(CASE WHEN $tableName.$columnName NOT LIKE '' THEN (CASE";
  305. }
  306. foreach($fieldSqlColumns as $columnSql) {
  307. if(containsIdField($columnSql)) {
  308. $log->debug("Has id field : ".$columnSql );
  309. $queryColumn .= " WHEN $columnSql IS NOT NULL THEN $columnSql";
  310. } else {
  311. $log->debug("No id field : ".$columnSql );
  312. $queryColumn .= " WHEN $columnSql NOT LIKE '' THEN $columnSql";
  313. }
  314. }
  315. $queryColumn .= " ELSE '' END) ELSE '' END) AS $moduleFieldLabel";
  316. }
  317. }
  318. return $queryColumn;
  319. }
  320. /** Function to get selectedcolumns for the given reportid
  321. * @ param $reportid : Type Integer
  322. * returns the query of columnlist for the selected columns
  323. */
  324. function getSelectedColumnsList($reportid)
  325. {
  326. global $adb;
  327. global $modules;
  328. global $log;
  329. $ssql = "select vtiger_selectcolumn.* from vtiger_report inner join vtiger_selectquery on vtiger_selectquery.queryid = vtiger_report.queryid";
  330. $ssql .= " left join vtiger_selectcolumn on vtiger_selectcolumn.queryid = vtiger_selectquery.queryid where vtiger_report.reportid = ? ";
  331. $ssql .= " order by vtiger_selectcolumn.columnindex";
  332. $result = $adb->pquery($ssql, array($reportid));
  333. $noofrows = $adb->num_rows($result);
  334. if ($this->orderbylistsql != "")
  335. {
  336. $sSQL .= $this->orderbylistsql.", ";
  337. }
  338. for($i=0; $i<$noofrows; $i++)
  339. {
  340. $fieldcolname = $adb->query_result($result,$i,"columnname");
  341. $ordercolumnsequal = true;
  342. if($fieldcolname != "")
  343. {
  344. for($j=0;$j<count($this->orderbylistcolumns);$j++)
  345. {
  346. if($this->orderbylistcolumns[$j] == $fieldcolname)
  347. {
  348. $ordercolumnsequal = false;
  349. break;
  350. }else
  351. {
  352. $ordercolumnsequal = true;
  353. }
  354. }
  355. if($ordercolumnsequal)
  356. {
  357. $selectedfields = explode(":",$fieldcolname);
  358. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  359. $selectedfields[0] = "vtiger_crmentity";
  360. $sSQLList[] = $selectedfields[0].".".$selectedfields[1]." '".$selectedfields[2]."'";
  361. }
  362. }
  363. }
  364. $sSQL .= implode(",",$sSQLList);
  365. $log->info("ReportRun :: Successfully returned getSelectedColumnsList".$reportid);
  366. return $sSQL;
  367. }
  368. /** Function to get advanced comparator in query form for the given Comparator and value
  369. * @ param $comparator : Type String
  370. * @ param $value : Type String
  371. * returns the check query for the comparator
  372. */
  373. function getAdvComparator($comparator,$value,$datatype="")
  374. {
  375. global $log,$adb,$default_charset,$ogReport;
  376. $value=html_entity_decode(trim($value),ENT_QUOTES,$default_charset);
  377. $value_len = strlen($value);
  378. $is_field = false;
  379. if($value_len > 1 && $value[0]=='$' && $value[$value_len-1]=='$'){
  380. $temp = str_replace('$','',$value);
  381. $is_field = true;
  382. }
  383. if($datatype=='C'){
  384. $value = str_replace("yes","1",str_replace("no","0",$value));
  385. }
  386. if($is_field==true){
  387. $value = $this->getFilterComparedField($temp);
  388. }
  389. if($comparator == "e")
  390. {
  391. if(trim($value) == "NULL")
  392. {
  393. $rtvalue = " is NULL";
  394. }elseif(trim($value) != "")
  395. {
  396. $rtvalue = " = ".$adb->quote($value);
  397. }elseif(trim($value) == "" && $datatype == "V")
  398. {
  399. $rtvalue = " = ".$adb->quote($value);
  400. }else
  401. {
  402. $rtvalue = " is NULL";
  403. }
  404. }
  405. if($comparator == "n")
  406. {
  407. if(trim($value) == "NULL")
  408. {
  409. $rtvalue = " is NOT NULL";
  410. }elseif(trim($value) != "")
  411. {
  412. $rtvalue = " <> ".$adb->quote($value);
  413. }elseif(trim($value) == "" && $datatype == "V")
  414. {
  415. $rtvalue = " <> ".$adb->quote($value);
  416. }else
  417. {
  418. $rtvalue = " is NOT NULL";
  419. }
  420. }
  421. if($comparator == "s")
  422. {
  423. $rtvalue = " like '". formatForSqlLike($value, 2,$is_field) ."'";
  424. }
  425. if($comparator == "ew")
  426. {
  427. $rtvalue = " like '". formatForSqlLike($value, 1,$is_field) ."'";
  428. }
  429. if($comparator == "c")
  430. {
  431. $rtvalue = " like '". formatForSqlLike($value,0,$is_field) ."'";
  432. }
  433. if($comparator == "k")
  434. {
  435. $rtvalue = " not like '". formatForSqlLike($value,0,$is_field) ."'";
  436. }
  437. if($comparator == "l")
  438. {
  439. $rtvalue = " < ".$adb->quote($value);
  440. }
  441. if($comparator == "g")
  442. {
  443. $rtvalue = " > ".$adb->quote($value);
  444. }
  445. if($comparator == "m")
  446. {
  447. $rtvalue = " <= ".$adb->quote($value);
  448. }
  449. if($comparator == "h")
  450. {
  451. $rtvalue = " >= ".$adb->quote($value);
  452. }
  453. if($comparator == "b") {
  454. $rtvalue = " < ".$adb->quote($value);
  455. }
  456. if($comparator == "a") {
  457. $rtvalue = " > ".$adb->quote($value);
  458. }
  459. if($is_field==true){
  460. $rtvalue = str_replace("'","",$rtvalue);
  461. $rtvalue = str_replace("\\","",$rtvalue);
  462. }
  463. $log->info("ReportRun :: Successfully returned getAdvComparator");
  464. return $rtvalue;
  465. }
  466. /** Function to get field that is to be compared in query form for the given Comparator and field
  467. * @ param $field : field
  468. * returns the value for the comparator
  469. */
  470. function getFilterComparedField($field){
  471. global $adb,$ogReport;
  472. $field = split('#',$field);
  473. $module = $field[0];
  474. $fieldname = trim($field[1]);
  475. $tabid = getTabId($module);
  476. $field_query = $adb->pquery("SELECT tablename,columnname,typeofdata,fieldname,uitype FROM vtiger_field WHERE tabid = ? AND fieldname= ?",array($tabid,$fieldname));
  477. $fieldtablename = $adb->query_result($field_query,0,'tablename');
  478. $fieldcolname = $adb->query_result($field_query,0,'columnname');
  479. $typeofdata = $adb->query_result($field_query,0,'typeofdata');
  480. $fieldtypeofdata=ChangeTypeOfData_Filter($fieldtablename,$fieldcolname,$typeofdata[0]);
  481. $uitype = $adb->query_result($field_query,0,'uitype');
  482. /*if($tr[0]==$ogReport->primodule)
  483. $value = $adb->query_result($field_query,0,'tablename').".".$adb->query_result($field_query,0,'columnname');
  484. else
  485. $value = $adb->query_result($field_query,0,'tablename').$tr[0].".".$adb->query_result($field_query,0,'columnname');
  486. */
  487. if($uitype == 68 || $uitype == 59)
  488. {
  489. $fieldtypeofdata = 'V';
  490. }
  491. if($fieldtablename == "vtiger_crmentity")
  492. {
  493. $fieldtablename = $fieldtablename.$module;
  494. }
  495. if($fieldname == "assigned_user_id")
  496. {
  497. $fieldtablename = "vtiger_users".$module;
  498. $fieldcolname = "user_name";
  499. }
  500. if($fieldtablename == "vtiger_crmentity" && $fieldname == "modifiedby")
  501. {
  502. $fieldtablename = "vtiger_lastModifiedBy".$module;
  503. $fieldcolname = "user_name";
  504. }
  505. if($fieldname == "assigned_user_id1")
  506. {
  507. $fieldtablename = "vtiger_usersRel1";
  508. $fieldcolname = "user_name";
  509. }
  510. $value = $fieldtablename.".".$fieldcolname;
  511. return $value;
  512. }
  513. /** Function to get the advanced filter columns for the reportid
  514. * This function accepts the $reportid
  515. * This function returns $columnslist Array($columnname => $tablename:$columnname:$fieldlabel:$fieldname:$typeofdata=>$tablename.$columnname filtercriteria,
  516. * $tablename1:$columnname1:$fieldlabel1:$fieldname1:$typeofdata1=>$tablename1.$columnname1 filtercriteria,
  517. * |
  518. * $tablenamen:$columnnamen:$fieldlabeln:$fieldnamen:$typeofdatan=>$tablenamen.$columnnamen filtercriteria
  519. * )
  520. *
  521. */
  522. function getAdvFilterList($reportid) {
  523. global $adb, $log;
  524. $advft_criteria = array();
  525. $sql = 'SELECT * FROM vtiger_relcriteria_grouping WHERE queryid = ? ORDER BY groupid';
  526. $groupsresult = $adb->pquery($sql, array($reportid));
  527. $i = 1;
  528. $j = 0;
  529. while($relcriteriagroup = $adb->fetch_array($groupsresult)) {
  530. $groupId = $relcriteriagroup["groupid"];
  531. $groupCondition = $relcriteriagroup["group_condition"];
  532. $ssql = 'select vtiger_relcriteria.* from vtiger_report
  533. inner join vtiger_relcriteria on vtiger_relcriteria.queryid = vtiger_report.queryid
  534. left join vtiger_relcriteria_grouping on vtiger_relcriteria.queryid = vtiger_relcriteria_grouping.queryid
  535. and vtiger_relcriteria.groupid = vtiger_relcriteria_grouping.groupid';
  536. $ssql.= " where vtiger_report.reportid = ? AND vtiger_relcriteria.groupid = ? order by vtiger_relcriteria.columnindex";
  537. $result = $adb->pquery($ssql, array($reportid, $groupId));
  538. $noOfColumns = $adb->num_rows($result);
  539. if($noOfColumns <= 0) continue;
  540. while($relcriteriarow = $adb->fetch_array($result)) {
  541. $columnIndex = $relcriteriarow["columnindex"];
  542. $criteria = array();
  543. $criteria['columnname'] = html_entity_decode($relcriteriarow["columnname"]);
  544. $criteria['comparator'] = $relcriteriarow["comparator"];
  545. $advfilterval = $relcriteriarow["value"];
  546. $col = explode(":",$relcriteriarow["columnname"]);
  547. $criteria['value'] = $advfilterval;
  548. $criteria['column_condition'] = $relcriteriarow["column_condition"];
  549. $advft_criteria[$i]['columns'][$j] = $criteria;
  550. $advft_criteria[$i]['condition'] = $groupCondition;
  551. $j++;
  552. }
  553. if(!empty($advft_criteria[$i]['columns'][$j-1]['column_condition'])) {
  554. $advft_criteria[$i]['columns'][$j-1]['column_condition'] = '';
  555. }
  556. $i++;
  557. }
  558. // Clear the condition (and/or) for last group, if any.
  559. if(!empty($advft_criteria[$i-1]['condition'])) $advft_criteria[$i-1]['condition'] = '';
  560. return $advft_criteria;
  561. }
  562. function generateAdvFilterSql($advfilterlist) {
  563. global $adb;
  564. $advfiltersql = "";
  565. foreach($advfilterlist as $groupindex => $groupinfo) {
  566. $groupcondition = $groupinfo['condition'];
  567. $groupcolumns = $groupinfo['columns'];
  568. if(count($groupcolumns) > 0) {
  569. $advfiltergroupsql = "";
  570. foreach($groupcolumns as $columnindex => $columninfo) {
  571. $fieldcolname = $columninfo["columnname"];
  572. $comparator = $columninfo["comparator"];
  573. $value = $columninfo["value"];
  574. $columncondition = $columninfo["column_condition"];
  575. if($fieldcolname != "" && $comparator != "") {
  576. $selectedfields = explode(":",$fieldcolname);
  577. $moduleFieldLabel = $selectedfields[2];
  578. list($moduleName, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  579. $fieldInfo = getFieldByReportLabel($moduleName, $fieldLabel);
  580. $concatSql = getSqlForNameInDisplayFormat(array('first_name'=>$selectedfields[0].".first_name",'last_name'=>$selectedfields[0].".last_name"), 'Users');
  581. // Added to handle the crmentity table name for Primary module
  582. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule) {
  583. $selectedfields[0] = "vtiger_crmentity";
  584. }
  585. //Added to handle yes or no for checkbox field in reports advance filters. -shahul
  586. if($selectedfields[4] == 'C') {
  587. if(strcasecmp(trim($value),"yes")==0)
  588. $value="1";
  589. if(strcasecmp(trim($value),"no")==0)
  590. $value="0";
  591. }
  592. $valuearray = explode(",",trim($value));
  593. $datatype = (isset($selectedfields[4])) ? $selectedfields[4] : "";
  594. if(isset($valuearray) && count($valuearray) > 1 && $comparator != 'bw') {
  595. $advcolumnsql = "";
  596. for($n=0;$n<count($valuearray);$n++) {
  597. if(($selectedfields[0] == "vtiger_users".$this->primarymodule || $selectedfields[0] == "vtiger_users".$this->secondarymodule) && $selectedfields[1] == 'user_name') {
  598. $module_from_tablename = str_replace("vtiger_users","",$selectedfields[0]);
  599. $advcolsql[] = " trim($concatSql)".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype)." or vtiger_groups".$module_from_tablename.".groupname ".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  600. } elseif($selectedfields[1] == 'status') {//when you use comma seperated values.
  601. if($selectedfields[2] == 'Calendar_Status')
  602. $advcolsql[] = "(case when (vtiger_activity.status not like '') then vtiger_activity.status else vtiger_activity.eventstatus end)".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  603. elseif($selectedfields[2] == 'HelpDesk_Status')
  604. $advcolsql[] = "vtiger_troubletickets.status".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  605. } elseif($selectedfields[1] == 'description') {//when you use comma seperated values.
  606. if($selectedfields[0]=='vtiger_crmentity'.$this->primarymodule)
  607. $advcolsql[] = "vtiger_crmentity.description".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  608. else
  609. $advcolsql[] = $selectedfields[0].".".$selectedfields[1].$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  610. } elseif($selectedfields[2] == 'Quotes_Inventory_Manager'){
  611. $advcolsql[] = ("trim($concatSql)".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype));
  612. } else {
  613. $advcolsql[] = $selectedfields[0].".".$selectedfields[1].$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  614. }
  615. }
  616. //If negative logic filter ('not equal to', 'does not contain') is used, 'and' condition should be applied instead of 'or'
  617. if($comparator == 'n' || $comparator == 'k')
  618. $advcolumnsql = implode(" and ",$advcolsql);
  619. else
  620. $advcolumnsql = implode(" or ",$advcolsql);
  621. $fieldvalue = " (".$advcolumnsql.") ";
  622. } elseif(($selectedfields[0] == "vtiger_users".$this->primarymodule || $selectedfields[0] == "vtiger_users".$this->secondarymodule) && $selectedfields[1] == 'user_name') {
  623. $module_from_tablename = str_replace("vtiger_users","",$selectedfields[0]);
  624. $fieldvalue = " trim(case when (".$selectedfields[0].".last_name NOT LIKE '') then ".$concatSql." else vtiger_groups".$module_from_tablename.".groupname end) ".$this->getAdvComparator($comparator,trim($value),$datatype);
  625. } elseif($comparator == 'bw' && count($valuearray) == 2) {
  626. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule) {
  627. $fieldvalue = "("."vtiger_crmentity.".$selectedfields[1]." between '".trim($valuearray[0])."' and '".trim($valuearray[1])."')";
  628. } else {
  629. $fieldvalue = "(".$selectedfields[0].".".$selectedfields[1]." between '".trim($valuearray[0])."' and '".trim($valuearray[1])."')";
  630. }
  631. } elseif($selectedfields[0] == "vtiger_crmentity".$this->primarymodule) {
  632. $fieldvalue = "vtiger_crmentity.".$selectedfields[1]." ".$this->getAdvComparator($comparator,trim($value),$datatype);
  633. } elseif($selectedfields[2] == 'Quotes_Inventory_Manager'){
  634. $fieldvalue = ("trim($concatSql)" . $this->getAdvComparator($comparator,trim($value),$datatype));
  635. } elseif($selectedfields[1]=='modifiedby') {
  636. $module_from_tablename = str_replace("vtiger_crmentity","",$selectedfields[0]);
  637. if($module_from_tablename != '') {
  638. $tableName = 'vtiger_lastModifiedBy'.$module_from_tablename;
  639. } else {
  640. $tableName = 'vtiger_lastModifiedBy'.$this->primarymodule;
  641. }
  642. $fieldvalue = getSqlForNameInDisplayFormat(array('last_name'=>"$tableName.last_name",'first_name'=>"$tableName.first_name"), 'Users').
  643. $this->getAdvComparator($comparator,trim($value),$datatype);
  644. } elseif($selectedfields[0] == "vtiger_activity" && $selectedfields[1] == 'status') {
  645. $fieldvalue = "(case when (vtiger_activity.status not like '') then vtiger_activity.status else vtiger_activity.eventstatus end)".$this->getAdvComparator($comparator,trim($value),$datatype);
  646. } elseif($comparator == 'e' && (trim($value) == "NULL" || trim($value) == '')) {
  647. $fieldvalue = "(".$selectedfields[0].".".$selectedfields[1]." IS NULL OR ".$selectedfields[0].".".$selectedfields[1]." = '')";
  648. } elseif($selectedfields[0] == 'vtiger_inventoryproductrel' && ($selectedfields[1] == 'productid' || $selectedfields[1] == 'serviceid')) {
  649. if($selectedfields[1] == 'productid'){
  650. $fieldvalue = "vtiger_products{$this->primarymodule}.productname ".$this->getAdvComparator($comparator,trim($value),$datatype);
  651. } else if($selectedfields[1] == 'serviceid'){
  652. $fieldvalue = "vtiger_service{$this->primarymodule}.servicename ".$this->getAdvComparator($comparator,trim($value),$datatype);
  653. }
  654. } elseif($fieldInfo['uitype'] == '10' || isReferenceUIType($fieldInfo['uitype'])) {
  655. $comparatorValue = $this->getAdvComparator($comparator,trim($value),$datatype);
  656. $fieldSqls = array();
  657. $fieldSqlColumns = $this->getReferenceFieldColumnList($moduleName, $fieldInfo);
  658. foreach($fieldSqlColumns as $columnSql) {
  659. $fieldSqls[] = $columnSql.$comparatorValue;
  660. }
  661. $fieldvalue = ' ('. implode(' OR ', $fieldSqls).') ';
  662. } else {
  663. $fieldvalue = $selectedfields[0].".".$selectedfields[1].$this->getAdvComparator($comparator,trim($value),$datatype);
  664. }
  665. $advfiltergroupsql .= $fieldvalue;
  666. if(!empty($columncondition)) {
  667. $advfiltergroupsql .= ' '.$columncondition.' ';
  668. }
  669. }
  670. }
  671. if (trim($advfiltergroupsql) != "") {
  672. $advfiltergroupsql = "( $advfiltergroupsql ) ";
  673. if(!empty($groupcondition)) {
  674. $advfiltergroupsql .= ' '. $groupcondition . ' ';
  675. }
  676. $advfiltersql .= $advfiltergroupsql;
  677. }
  678. }
  679. }
  680. if (trim($advfiltersql) != "") $advfiltersql = '('.$advfiltersql.')';
  681. return $advfiltersql;
  682. }
  683. function getAdvFilterSql($reportid) {
  684. // Have we initialized information already?
  685. if($this->_advfiltersql !== false) {
  686. return $this->_advfiltersql;
  687. }
  688. global $log;
  689. $advfilterlist = $this->getAdvFilterList($reportid);
  690. $advfiltersql = $this->generateAdvFilterSql($advfilterlist);
  691. // Save the information
  692. $this->_advfiltersql = $advfiltersql;
  693. $log->info("ReportRun :: Successfully returned getAdvFilterSql".$reportid);
  694. return $advfiltersql;
  695. }
  696. /** Function to get the Standard filter columns for the reportid
  697. * This function accepts the $reportid datatype Integer
  698. * This function returns $stdfilterlist Array($columnname => $tablename:$columnname:$fieldlabel:$fieldname:$typeofdata=>$tablename.$columnname filtercriteria,
  699. * $tablename1:$columnname1:$fieldlabel1:$fieldname1:$typeofdata1=>$tablename1.$columnname1 filtercriteria,
  700. * )
  701. *
  702. */
  703. function getStdFilterList($reportid)
  704. {
  705. // Have we initialized information already?
  706. if($this->_stdfilterlist !== false) {
  707. return $this->_stdfilterlist;
  708. }
  709. global $adb, $log;
  710. $stdfilterlist = array();
  711. $stdfiltersql = "select vtiger_reportdatefilter.* from vtiger_report";
  712. $stdfiltersql .= " inner join vtiger_reportdatefilter on vtiger_report.reportid = vtiger_reportdatefilter.datefilterid";
  713. $stdfiltersql .= " where vtiger_report.reportid = ?";
  714. $result = $adb->pquery($stdfiltersql, array($reportid));
  715. $stdfilterrow = $adb->fetch_array($result);
  716. if(isset($stdfilterrow)) {
  717. $fieldcolname = $stdfilterrow["datecolumnname"];
  718. $datefilter = $stdfilterrow["datefilter"];
  719. $startdate = $stdfilterrow["startdate"];
  720. $enddate = $stdfilterrow["enddate"];
  721. if($fieldcolname != "none") {
  722. $selectedfields = explode(":",$fieldcolname);
  723. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  724. $selectedfields[0] = "vtiger_crmentity";
  725. $moduleFieldLabel = $selectedfields[3];
  726. list($moduleName, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  727. $fieldInfo = getFieldByReportLabel($moduleName, $fieldLabel);
  728. $typeOfData = $fieldInfo['typeofdata'];
  729. list($type, $typeOtherInfo) = explode('~', $typeOfData, 2);
  730. if($datefilter != "custom") {
  731. $startenddate = $this->getStandarFiltersStartAndEndDate($datefilter);
  732. $startdate = $startenddate[0];
  733. $enddate = $startenddate[1];
  734. }
  735. if($startdate != "0000-00-00" && $enddate != "0000-00-00" && $startdate != "" && $enddate != ""
  736. && $selectedfields[0] != "" && $selectedfields[1] != "") {
  737. $startDateTime = new DateTimeField($startdate.' '. date('H:i:s'));
  738. $userStartDate = $startDateTime->getDisplayDate();
  739. if($type == 'DT') {
  740. $userStartDate = $userStartDate.' 00:00:00';
  741. }
  742. $startDateTime = getValidDBInsertDateTimeValue($userStartDate);
  743. $endDateTime = new DateTimeField($enddate.' '. date('H:i:s'));
  744. $userEndDate = $endDateTime->getDisplayDate();
  745. if($type == 'DT') {
  746. $userEndDate = $userEndDate.' 23:59:00';
  747. }
  748. $endDateTime = getValidDBInsertDateTimeValue($userEndDate);
  749. if ($selectedfields[1] == 'birthday') {
  750. $tableColumnSql = "to_char(".$selectedfields[0].".".$selectedfields[1].", '%m%d')";
  751. $startDateTime = "to_char('$startDateTime', '%m%d')";
  752. $endDateTime = "to_char('$endDateTime', '%m%d')";
  753. } else {
  754. if($selectedfields[0] == 'vtiger_activity' && ($selectedfields[1] == 'date_start' || $selectedfields[1] == 'due_date')) {
  755. $tableColumnSql = '';
  756. if($selectedfields[1] == 'date_start') {
  757. $tableColumnSql = "to_timestamp(date_start || ' ' || time_start, 'YYYY-MM-DD HH24:MI:SS')";
  758. } else {
  759. $tableColumnSql = "to_timestamp(due_date || ' ' || time_end, 'YYYY-MM-DD HH24:MI:SS')";
  760. }
  761. } else {
  762. $tableColumnSql = $selectedfields[0].".".$selectedfields[1];
  763. }
  764. $startDateTime = "'$startDateTime'";
  765. $endDateTime = "'$endDateTime'";
  766. }
  767. $stdfilterlist[$fieldcolname] = $tableColumnSql." between ".$startDateTime." and ".$endDateTime;
  768. }
  769. }
  770. }
  771. // Save the information
  772. $this->_stdfilterlist = $stdfilterlist;
  773. $log->info("ReportRun :: Successfully returned getStdFilterList".$reportid);
  774. return $stdfilterlist;
  775. }
  776. /** Function to get the RunTime filter columns for the given $filtercolumn,$filter,$startdate,$enddate
  777. * @ param $filtercolumn : Type String
  778. * @ param $filter : Type String
  779. * @ param $startdate: Type String
  780. * @ param $enddate : Type String
  781. * This function returns $stdfilterlist Array($columnname => $tablename:$columnname:$fieldlabel=>$tablename.$columnname 'between' $startdate 'and' $enddate)
  782. *
  783. */
  784. function RunTimeFilter($filtercolumn,$filter,$startdate,$enddate)
  785. {
  786. if($filtercolumn != "none")
  787. {
  788. $selectedfields = explode(":",$filtercolumn);
  789. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  790. $selectedfields[0] = "vtiger_crmentity";
  791. if($filter == "custom")
  792. {
  793. if($startdate != "0000-00-00" && $enddate != "0000-00-00" && $startdate != "" &&
  794. $enddate != "" && $selectedfields[0] != "" && $selectedfields[1] != "") {
  795. $stdfilterlist[$filtercolumn] = $selectedfields[0].".".$selectedfields[1]." between '".$startdate." 00:00:00' and '".$enddate." 23:59:00'";
  796. }
  797. }else
  798. {
  799. if($startdate != "" && $enddate != "")
  800. {
  801. $startenddate = $this->getStandarFiltersStartAndEndDate($filter);
  802. if($startenddate[0] != "" && $startenddate[1] != "" && $selectedfields[0] != "" && $selectedfields[1] != "")
  803. {
  804. $stdfilterlist[$filtercolumn] = $selectedfields[0].".".$selectedfields[1]." between '".$startenddate[0]." 00:00:00' and '".$startenddate[1]." 23:59:00'";
  805. }
  806. }
  807. }
  808. }
  809. return $stdfilterlist;
  810. }
  811. /** Function to get the RunTime Advanced filter conditions
  812. * @ param $advft_criteria : Type Array
  813. * @ param $advft_criteria_groups : Type Array
  814. * This function returns $advfiltersql
  815. *
  816. */
  817. function RunTimeAdvFilter($advft_criteria,$advft_criteria_groups) {
  818. $adb = PearDatabase::getInstance();
  819. $advfilterlist = array();
  820. if(!empty($advft_criteria)) {
  821. foreach($advft_criteria as $column_index => $column_condition) {
  822. if(empty($column_condition)) continue;
  823. $adv_filter_column = $column_condition["columnname"];
  824. $adv_filter_comparator = $column_condition["comparator"];
  825. $adv_filter_value = $column_condition["value"];
  826. $adv_filter_column_condition = $column_condition["columncondition"];
  827. $adv_filter_groupid = $column_condition["groupid"];
  828. $column_info = explode(":",$adv_filter_column);
  829. $moduleFieldLabel = $column_info[2];
  830. $fieldName = $column_info[3];
  831. list($module, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  832. $fieldInfo = getFieldByReportLabel($module, $fieldLabel);
  833. $fieldType = null;
  834. if(!empty($fieldInfo)) {
  835. $field = WebserviceField::fromArray($adb, $fieldInfo);
  836. $fieldType = $field->getFieldDataType();
  837. }
  838. if($fieldType == 'currency') {
  839. // Some of the currency fields like Unit Price, Total, Sub-total etc of Inventory modules, do not need currency conversion
  840. if($field->getUIType() == '72') {
  841. $adv_filter_value = CurrencyField::convertToDBFormat($adv_filter_value, null, true);
  842. } else {
  843. $adv_filter_value = CurrencyField::convertToDBFormat($adv_filter_value);
  844. }
  845. }
  846. $temp_val = explode(",",$adv_filter_value);
  847. if(($column_info[4] == 'D' || ($column_info[4] == 'T' && $column_info[1] != 'time_start' && $column_info[1] != 'time_end')
  848. || ($column_info[4] == 'DT'))
  849. && ($column_info[4] != '' && $adv_filter_value != '' )) {
  850. $val = Array();
  851. for($x=0;$x<count($temp_val);$x++) {
  852. if($column_info[4] == 'D') {
  853. $date = new DateTimeField(trim($temp_val[$x]));
  854. $val[$x] = $date->getDBInsertDateValue();
  855. } elseif($column_info[4] == 'DT') {
  856. $date = new DateTimeField(trim($temp_val[$x]));
  857. $val[$x] = $date->getDBInsertDateTimeValue();
  858. } else {
  859. $date = new DateTimeField(trim($temp_val[$x]));
  860. $val[$x] = $date->getDBInsertTimeValue();
  861. }
  862. }
  863. $adv_filter_value = implode(",",$val);
  864. }
  865. $criteria = array();
  866. $criteria['columnname'] = $adv_filter_column;
  867. $criteria['comparator'] = $adv_filter_comparator;
  868. $criteria['value'] = $adv_filter_value;
  869. $criteria['column_condition'] = $adv_filter_column_condition;
  870. $advfilterlist[$adv_filter_groupid]['columns'][] = $criteria;
  871. }
  872. foreach($advft_criteria_groups as $group_index => $group_condition_info) {
  873. if(empty($group_condition_info)) continue;
  874. if(empty($advfilterlist[$group_index])) continue;
  875. $advfilterlist[$group_index]['condition'] = $group_condition_info["groupcondition"];
  876. $noOfGroupColumns = count($advfilterlist[$group_index]['columns']);
  877. if(!empty($advfilterlist[$group_index]['columns'][$noOfGroupColumns-1]['column_condition'])) {
  878. $advfilterlist[$group_index]['columns'][$noOfGroupColumns-1]['column_condition'] = '';
  879. }
  880. }
  881. $noOfGroups = count($advfilterlist);
  882. if(!empty($advfilterlist[$noOfGroups]['condition'])) {
  883. $advfilterlist[$noOfGroups]['condition'] = '';
  884. }
  885. $advfiltersql = $this->generateAdvFilterSql($advfilterlist);
  886. }
  887. return $advfiltersql;
  888. }
  889. /** Function to get standardfilter for the given reportid
  890. * @ param $reportid : Type Integer
  891. * returns the query of columnlist for the selected columns
  892. */
  893. function getStandardCriterialSql($reportid)
  894. {
  895. global $adb;
  896. global $modules;
  897. global $log;
  898. $sreportstdfiltersql = "select vtiger_reportdatefilter.* from vtiger_report";
  899. $sreportstdfiltersql .= " inner join vtiger_reportdatefilter on vtiger_report.reportid = vtiger_reportdatefilter.datefilterid";
  900. $sreportstdfiltersql .= " where vtiger_report.reportid = ?";
  901. $result = $adb->pquery($sreportstdfiltersql, array($reportid));
  902. $noofrows = $adb->num_rows($result);
  903. for($i=0; $i<$noofrows; $i++) {
  904. $fieldcolname = $adb->query_result($result,$i,"datecolumnname");
  905. $datefilter = $adb->query_result($result,$i,"datefilter");
  906. $startdate = $adb->query_result($result,$i,"startdate");
  907. $enddate = $adb->query_result($result,$i,"enddate");
  908. if($fieldcolname != "none") {
  909. $selectedfields = explode(":",$fieldcolname);
  910. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  911. $selectedfields[0] = "vtiger_crmentity";
  912. if($datefilter == "custom") {
  913. if($startdate != "0000-00-00" && $enddate != "0000-00-00" && $selectedfields[0] != "" && $selectedfields[1] != ""
  914. && $startdate != '' && $enddate != '') {
  915. $startDateTime = new DateTimeField($startdate.' '. date('H:i:s'));
  916. $startdate = $startDateTime->getDisplayDate();
  917. $endDateTime = new DateTimeField($enddate.' '. date('H:i:s'));
  918. $enddate = $endDateTime->getDisplayDate();
  919. $sSQL .= $selectedfields[0].".".$selectedfields[1]." between '".$startdate."' and '".$enddate."'";
  920. }
  921. } else {
  922. $startenddate = $this->getStandarFiltersStartAndEndDate($datefilter);
  923. $startDateTime = new DateTimeField($startenddate[0].' '. date('H:i:s'));
  924. $startdate = $startDateTime->getDisplayDate();
  925. $endDateTime = new DateTimeField($startenddate[1].' '. date('H:i:s'));
  926. $enddate = $endDateTime->getDisplayDate();
  927. if($startenddate[0] != "" && $startenddate[1] != "" && $selectedfields[0] != "" && $selectedfields[1] != "") {
  928. $sSQL .= $selectedfields[0].".".$selectedfields[1]." between '".$startdate."' and '".$enddate."'";
  929. }
  930. }
  931. }
  932. }
  933. $log->info("ReportRun :: Successfully returned getStandardCriterialSql".$reportid);
  934. return $sSQL;
  935. }
  936. /** Function to get standardfilter startdate and enddate for the given type
  937. * @ param $type : Type String
  938. * returns the $datevalue Array in the given format
  939. * $datevalue = Array(0=>$startdate,1=>$enddate)
  940. */
  941. function getStandarFiltersStartAndEndDate($type)
  942. {
  943. $today = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d"), date("Y")));
  944. $tomorrow = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+1, date("Y")));
  945. $yesterday = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-1, date("Y")));
  946. $currentmonth0 = date("Y-m-d",mktime(0, 0, 0, date("m"), "01", date("Y")));
  947. $currentmonth1 = date("Y-m-t");
  948. $lastmonth0 = date("Y-m-d",mktime(0, 0, 0, date("m")-1, "01", date("Y")));
  949. $lastmonth1 = date("Y-m-t", strtotime("-1 Month"));
  950. $nextmonth0 = date("Y-m-d",mktime(0, 0, 0, date("m")+1, "01", date("Y")));
  951. $nextmonth1 = date("Y-m-t", strtotime("+1 Month"));
  952. $lastweek0 = date("Y-m-d",strtotime("-2 week Sunday"));
  953. $lastweek1 = date("Y-m-d",strtotime("-1 week Saturday"));
  954. $thisweek0 = date("Y-m-d",strtotime("-1 week Sunday"));
  955. $thisweek1 = date("Y-m-d",strtotime("this Saturday"));
  956. $nextweek0 = date("Y-m-d",strtotime("this Sunday"));
  957. $nextweek1 = date("Y-m-d",strtotime("+1 week Saturday"));
  958. $next7days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+6, date("Y")));
  959. $next30days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+29, date("Y")));
  960. $next60days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+59, date("Y")));
  961. $next90days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+89, date("Y")));
  962. $next120days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+119, date("Y")));
  963. $last7days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-6, date("Y")));
  964. $last30days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-29, date("Y")));
  965. $last60days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-59, date("Y")));
  966. $last90days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-89, date("Y")));
  967. $last120days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-119, date("Y")));
  968. $currentFY0 = date("Y-m-d",mktime(0, 0, 0, "01", "01", date("Y")));
  969. $currentFY1 = date("Y-m-t",mktime(0, 0, 0, "12", date("d"), date("Y")));
  970. $lastFY0 = date("Y-m-d",mktime(0, 0, 0, "01", "01", date("Y")-1));
  971. $lastFY1 = date("Y-m-t", mktime(0, 0, 0, "12", date("d"), date("Y")-1));
  972. $nextFY0 = date("Y-m-d",mktime(0, 0, 0, "01", "01", date("Y")+1));
  973. $nextFY1 = date("Y-m-t", mktime(0, 0, 0, "12", date("d"), date("Y")+1));
  974. if(date("m") <= 3)
  975. {
  976. $cFq = date("Y-m-d",mktime(0, 0, 0, "01","01",date("Y")));
  977. $cFq1 = date("Y-m-d",mktime(0, 0, 0, "03","31",date("Y")));
  978. $nFq = date("Y-m-d",mktime(0, 0, 0, "04","01",date("Y")));
  979. $nFq1 = date("Y-m-d",mktime(0, 0, 0, "06","30",date("Y")));
  980. $pFq = date("Y-m-d",mktime(0, 0, 0, "10","01",date("Y")-1));
  981. $pFq1 = date("Y-m-d",mktime(0, 0, 0, "12","31",date("Y")-1));
  982. }else if(date("m") > 3 and date("m") <= 6)
  983. {
  984. $pFq = date("Y-m-d",mktime(0, 0, 0, "01","01",date("Y")));
  985. $pFq1 = date("Y-m-d",mktime(0, 0, 0, "03","31",date("Y")));
  986. $cFq = date("Y-m-d",mktime(0, 0, 0, "04","01",date("Y")));
  987. $cFq1 = date("Y-m-d",mktime(0, 0, 0, "06","30",date("Y")));
  988. $nFq = date("Y-m-d",mktime(0, 0, 0, "07","01",date("Y")));
  989. $nFq1 = date("Y-m-d",mktime(0, 0, 0, "09","30",date("Y")));
  990. }else if(date("m") > 6 and date("m") <= 9)
  991. {
  992. $nFq = date("Y-m-d",mktime(0, 0, 0, "10","01",date("Y")));
  993. $nFq1 = date("Y-m-d",mktime(0, 0, 0, "12","31",date("Y")));
  994. $pFq = date("Y-m-d",mktime(0, 0, 0, "04","01",date("Y")));
  995. $pFq1 = date("Y-m-d",mktime(0, 0, 0, "06","30",date("Y")));
  996. $cFq = date("Y-m-d",mktime(0, 0, 0, "07","01",date("Y")));
  997. $cFq1 = date("Y-m-d",mktime(0, 0, 0, "09","30",date("Y")));
  998. }
  999. else if(date("m") > 9 and date("m") <= 12)
  1000. {
  1001. $nFq = date("Y-m-d",mktime(0, 0, 0, "01","01",date("Y")+1));
  1002. $nFq1 = date("Y-m-d",mktime(0, 0, 0, "03","31",date("Y")+1));
  1003. $pFq = date("Y-m-d",mktime(0, 0, 0, "07","01",date("Y")));
  1004. $pFq1 = date("Y-m-d",mktime(0, 0, 0, "09","30",date("Y")));
  1005. $cFq = date("Y-m-d",mktime(0, 0, 0, "10","01",date("Y")));
  1006. $cFq1 = date("Y-m-d",mktime(0, 0, 0, "12","31",date("Y")));
  1007. }
  1008. if($type == "today" )
  1009. {
  1010. $datevalue[0] = $today;
  1011. $datevalue[1] = $today;
  1012. }
  1013. elseif($type == "yesterday" )
  1014. {
  1015. $datevalue[0] = $yesterday;
  1016. $datevalue[1] = $yesterday;
  1017. }
  1018. elseif($type == "tomorrow" )
  1019. {
  1020. $datevalue[0] = $tomorrow;
  1021. $datevalue[1] = $tomorrow;
  1022. }
  1023. elseif($type == "thisweek" )
  1024. {
  1025. $datevalue[0] = $thisweek0;
  1026. $datevalue[1] = $thisweek1;
  1027. }
  1028. elseif($type == "lastweek" )
  1029. {
  1030. $datevalue[0] = $lastweek0;
  1031. $datevalue[1] = $lastweek1;
  1032. }
  1033. elseif($type == "nextweek" )
  1034. {
  1035. $datevalue[0] = $nextweek0;
  1036. $datevalue[1] = $nextweek1;
  1037. }
  1038. elseif($type == "thismonth" )
  1039. {
  1040. $datevalue[0] =$currentmonth0;
  1041. $datevalue[1] = $currentmonth1;
  1042. }
  1043. elseif($type == "lastmonth" )
  1044. {
  1045. $datevalue[0] = $lastmonth0;
  1046. $datevalue[1] = $lastmonth1;
  1047. }
  1048. elseif($type == "nextmonth" )
  1049. {
  1050. $datevalue[0] = $nextmonth0;
  1051. $datevalue[1] = $nextmonth1;
  1052. }
  1053. elseif($type == "next7days" )
  1054. {
  1055. $datevalue[0] = $today;
  1056. $datevalue[1] = $next7days;
  1057. }
  1058. elseif($type == "next30days" )
  1059. {
  1060. $datevalue[0] =$today;
  1061. $datevalue[1] =$next30days;
  1062. }
  1063. elseif($type == "next60days" )
  1064. {
  1065. $datevalue[0] = $today;
  1066. $datevalue[1] = $next60days;
  1067. }
  1068. elseif($type == "next90days" )
  1069. {
  1070. $datevalue[0] = $today;
  1071. $datevalue[1] = $next90days;
  1072. }
  1073. elseif($type == "next120days" )
  1074. {
  1075. $datevalue[0] = $today;
  1076. $datevalue[1] = $next120days;
  1077. }
  1078. elseif($type == "last7days" )
  1079. {
  1080. $datevalue[0] = $last7days;
  1081. $datevalue[1] = $today;
  1082. }
  1083. elseif($type == "last30days" )
  1084. {
  1085. $datevalue[0] = $last30days;
  1086. $datevalue[1] = $today;
  1087. }
  1088. elseif($type == "last60days" )
  1089. {
  1090. $datevalue[0] = $last60days;
  1091. $datevalue[1] = $today;
  1092. }
  1093. else if($type == "last90days" )
  1094. {
  1095. $datevalue[0] = $last90days;
  1096. $datevalue[1] = $today;
  1097. }
  1098. elseif($type == "last120days" )
  1099. {
  1100. $datevalue[0] = $last120days;
  1101. $datevalue[1] = $today;
  1102. }
  1103. elseif($type == "thisfy" )
  1104. {
  1105. $datevalue[0] = $currentFY0;
  1106. $datevalue[1] = $currentFY1;
  1107. }
  1108. elseif($type == "prevfy" )
  1109. {
  1110. $datevalue[0] = $lastFY0;
  1111. $datevalue[1] = $lastFY1;
  1112. }
  1113. elseif($type == "nextfy" )
  1114. {
  1115. $datevalue[0] = $nextFY0;
  1116. $datevalue[1] = $nextFY1;
  1117. }
  1118. elseif($type == "nextfq" )
  1119. {
  1120. $datevalue[0] = $nFq;
  1121. $datevalue[1] = $nFq1;
  1122. }
  1123. elseif($type == "prevfq" )
  1124. {
  1125. $datevalue[0] = $pFq;
  1126. $datevalue[1] = $pFq1;
  1127. }
  1128. elseif($type == "thisfq" )
  1129. {
  1130. $datevalue[0] = $cFq;
  1131. $datevalue[1] = $cFq1;
  1132. }
  1133. else
  1134. {
  1135. $datevalue[0] = "";
  1136. $datevalue[1] = "";
  1137. }
  1138. return $datevalue;
  1139. }
  1140. /** Function to get getGroupingList for the given reportid
  1141. * @ param $reportid : Type Integer
  1142. * returns the $grouplist Array in the following format
  1143. * $grouplist = Array($tablename:$columnname:$fieldlabel:fieldname:typeofdata=>$tablename:$columnname $sorder,
  1144. * $tablename1:$columnname1:$fieldlabel1:fieldname1:typeofdata1=>$tablename1:$columnname1 $sorder,
  1145. * $tablename2:$columnname2:$fieldlabel2:fieldname2:typeofdata2=>$tablename2:$columnname2 $sorder)
  1146. * This function also sets the return value in the class variable $this->groupbylist
  1147. */
  1148. function getGroupingList($reportid)
  1149. {
  1150. global $adb;
  1151. global $modules;
  1152. global $log;
  1153. // Have we initialized information already?
  1154. if($this->_groupinglist !== false) {
  1155. return $this->_groupinglist;
  1156. }
  1157. $sreportsortsql = " SELECT vtiger_reportsortcol.*, vtiger_reportgroupbycolumn.* FROM vtiger_report";
  1158. $sreportsortsql .= " inner join vtiger_reportsortcol on vtiger_report.reportid = vtiger_reportsortcol.reportid";
  1159. $sreportsortsql .= " LEFT JOIN vtiger_reportgroupbycolumn ON (vtiger_report.reportid = vtiger_reportgroupbycolumn.reportid AND vtiger_reportsortcol.sortcolid = vtiger_reportgroupbycolumn.sortid)";
  1160. $sreportsortsql .= " where vtiger_report.reportid =? AND vtiger_reportsortcol.columnname IN (SELECT columnname from vtiger_selectcolumn WHERE queryid=?) order by vtiger_reportsortcol.sortcolid";
  1161. $result = $adb->pquery($sreportsortsql, array($reportid,$reportid));
  1162. $grouplist = array();
  1163. while($reportsortrow = $adb->fetch_array($result))
  1164. {
  1165. $fieldcolname = $reportsortrow["columnname"];
  1166. list($tablename,$colname,$module_field,$fieldname,$single) = split(":",$fieldcolname);
  1167. $sortorder = $reportsortrow["sortorder"];
  1168. if($sortorder == "Ascending")
  1169. {
  1170. $sortorder = "ASC";
  1171. }elseif($sortorder == "Descending")
  1172. {
  1173. $sortorder = "DESC";
  1174. }
  1175. if($fieldcolname != "none")
  1176. {
  1177. $selectedfields = explode(":",$fieldcolname);
  1178. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  1179. $selectedfields[0] = "vtiger_crmentity";
  1180. if(stripos($selectedfields[1],'cf_')==0 && stristr($selectedfields[1],'cf_')==true){
  1181. $sqlvalue = "".$adb->sql_escape_string(decode_html($selectedfields[2]))." ".$sortorder;
  1182. } else {
  1183. $sqlvalue = "".self::replaceSpecialChar($selectedfields[2])." ".$sortorder;
  1184. }
  1185. /************** MONOLITHIC phase 6 customization********************************/
  1186. if($selectedfields[4]=="D" && strtolower($reportsortrow["dategroupbycriteria"])!="none"){
  1187. $groupField = $module_field;
  1188. $groupCriteria = $reportsortrow["dategroupbycriteria"];
  1189. if(in_array($groupCriteria,array_keys($this->groupByTimeParent))){
  1190. $parentCriteria = $this->groupByTimeParent[$groupCriteria];
  1191. foreach($parentCriteria as $criteria){
  1192. $groupByCondition[]=$this->GetTimeCriteriaCondition($criteria, $groupField)." ".$sortorder;
  1193. }
  1194. }
  1195. $groupByCondition[] =$this->GetTimeCriteriaCondition($groupCriteria, $groupField)." ".$sortorder;
  1196. $sqlvalue = implode(", ",$groupByCondition);
  1197. }
  1198. $grouplist[$fieldcolname] = $sqlvalue;
  1199. $temp = split("_",$selectedfields[2],2);
  1200. $module = $temp[0];
  1201. if(CheckFieldPermission($fieldname,$module) == 'true')
  1202. {
  1203. $grouplist[$fieldcolname] = $sqlvalue;
  1204. } else {
  1205. $grouplist[$fieldcolname] = $selectedfields[0].".".$selectedfields[1];
  1206. }
  1207. }
  1208. }
  1209. // Save the information
  1210. $this->_groupinglist = $grouplist;
  1211. $log->info("ReportRun :: Successfully returned getGroupingList".$reportid);
  1212. return $grouplist;
  1213. }
  1214. /** function to replace special characters
  1215. * @ param $selectedfield : type string
  1216. * this returns the string for grouplist
  1217. */
  1218. function replaceSpecialChar($selectedfield){
  1219. $selectedfield = decode_html(decode_html($selectedfield));
  1220. preg_match('/&/', $selectedfield, $matches);
  1221. if(!empty($matches)){
  1222. $selectedfield = str_replace('&', 'and',($selectedfield));
  1223. }
  1224. return $selectedfield;
  1225. }
  1226. /** function to get the selectedorderbylist for the given reportid
  1227. * @ param $reportid : type integer
  1228. * this returns the columns query for the sortorder columns
  1229. * this function also sets the return value in the class variable $this->orderbylistsql
  1230. */
  1231. function getSelectedOrderbyList($reportid)
  1232. {
  1233. global $adb;
  1234. global $modules;
  1235. global $log;
  1236. $sreportsortsql = "select vtiger_reportsortcol.* from vtiger_report";
  1237. $sreportsortsql .= " inner join vtiger_reportsortcol on vtiger_report.reportid = vtiger_reportsortcol.reportid";
  1238. $sreportsortsql .= " where vtiger_report.reportid =? order by vtiger_reportsortcol.sortcolid";
  1239. $result = $adb->pquery($sreportsortsql, array($reportid));
  1240. $noofrows = $adb->num_rows($result);
  1241. for($i=0; $i<$noofrows; $i++)
  1242. {
  1243. $fieldcolname = $adb->query_result($result,$i,"columnname");
  1244. $sortorder = $adb->query_result($result,$i,"sortorder");
  1245. if($sortorder == "Ascending")
  1246. {
  1247. $sortorder = "ASC";
  1248. }
  1249. elseif($sortorder == "Descending")
  1250. {
  1251. $sortorder = "DESC";
  1252. }
  1253. if($fieldcolname != "none")
  1254. {
  1255. $this->orderbylistcolumns[] = $fieldcolname;
  1256. $n = $n + 1;
  1257. $selectedfields = explode(":",$fieldcolname);
  1258. if($n > 1)
  1259. {
  1260. $sSQL .= ", ";
  1261. $this->orderbylistsql .= ", ";
  1262. }
  1263. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  1264. $selectedfields[0] = "vtiger_crmentity";
  1265. $sSQL .= $selectedfields[0].".".$selectedfields[1]." ".$sortorder;
  1266. $this->orderbylistsql .= $selectedfields[0].".".$selectedfields[1]." ".$selectedfields[2];
  1267. }
  1268. }
  1269. $log->info("ReportRun :: Successfully returned getSelectedOrderbyList".$reportid);
  1270. return $sSQL;
  1271. }
  1272. /** function to get secondary Module for the given Primary module and secondary module
  1273. * @ param $module : type String
  1274. * @ param $secmodule : type String
  1275. * this returns join query for the given secondary module
  1276. */
  1277. function getRelatedModulesQuery($module,$secmodule)
  1278. {
  1279. global $log,$current_user;
  1280. $query = '';
  1281. if($secmodule!=''){
  1282. $secondarymodule = explode(":",$secmodule);
  1283. foreach($secondarymodule as $key=>$value) {
  1284. $foc = CRMEntity::getInstance($value);
  1285. $query .= $foc->generateReportsSecQuery($module,$value);
  1286. $query .= getNonAdminAccessControlQuery($value,$current_user,$value);
  1287. }
  1288. }
  1289. $log->info("ReportRun :: Successfully returned getRelatedModulesQuery".$secmodule);
  1290. return $query;
  1291. }
  1292. /** function to get report query for the given module
  1293. * @ param $module : type String
  1294. * this returns join query for the given module
  1295. */
  1296. function getReportsQuery($module, $type='')
  1297. {
  1298. global $log, $current_user;
  1299. $secondary_module ="'";
  1300. $secondary_module .= str_replace(":","','",$this->secondarymodule);
  1301. $secondary_module .="'";
  1302. if($module == "Leads")
  1303. {
  1304. $query = "from vtiger_leaddetails
  1305. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_leaddetails.leadid
  1306. inner join vtiger_leadsubdetails on vtiger_leadsubdetails.leadsubscriptionid=vtiger_leaddetails.leadid
  1307. inner join vtiger_leadaddress on vtiger_leadaddress.leadaddressid=vtiger_leadsubdetails.leadsubscriptionid
  1308. inner join vtiger_leadscf on vtiger_leaddetails.leadid = vtiger_leadscf.leadid
  1309. left join vtiger_groups as vtiger_groupsLeads on vtiger_groupsLeads.groupid = vtiger_crmentity.smownerid
  1310. left join vtiger_users as vtiger_usersLeads on vtiger_usersLeads.id = vtiger_crmentity.smownerid
  1311. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1312. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1313. left join vtiger_users as vtiger_lastModifiedByLeads on vtiger_lastModifiedByLeads.id = vtiger_crmentity.modifiedby
  1314. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1315. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1316. where vtiger_crmentity.deleted=0 and vtiger_leaddetails.converted=0";
  1317. }
  1318. else if($module == "Accounts")
  1319. {
  1320. $query = "from vtiger_account
  1321. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_account.accountid
  1322. inner join vtiger_accountbillads on vtiger_account.accountid=vtiger_accountbillads.accountaddressid
  1323. inner join vtiger_accountshipads on vtiger_account.accountid=vtiger_accountshipads.accountaddressid
  1324. inner join vtiger_accountscf on vtiger_account.accountid = vtiger_accountscf.accountid
  1325. left join vtiger_groups as vtiger_groupsAccounts on vtiger_groupsAccounts.groupid = vtiger_crmentity.smownerid
  1326. left join vtiger_account as vtiger_accountAccounts on vtiger_accountAccounts.accountid = vtiger_account.parentid
  1327. left join vtiger_users as vtiger_usersAccounts on vtiger_usersAccounts.id = vtiger_crmentity.smownerid
  1328. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1329. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1330. left join vtiger_users as vtiger_lastModifiedByAccounts on vtiger_lastModifiedByAccounts.id = vtiger_crmentity.modifiedby
  1331. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1332. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1333. where vtiger_crmentity.deleted=0 ";
  1334. }
  1335. else if($module == "Contacts")
  1336. {
  1337. $query = "from vtiger_contactdetails
  1338. inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_contactdetails.contactid
  1339. inner join vtiger_contactaddress on vtiger_contactdetails.contactid = vtiger_contactaddress.contactaddressid
  1340. inner join vtiger_customerdetails on vtiger_customerdetails.customerid = vtiger_contactdetails.contactid
  1341. inner join vtiger_contactsubdetails on vtiger_contactdetails.contactid = vtiger_contactsubdetails.contactsubscriptionid
  1342. inner join vtiger_contactscf on vtiger_contactdetails.contactid = vtiger_contactscf.contactid
  1343. left join vtiger_groups vtiger_groupsContacts on vtiger_groupsContacts.groupid = vtiger_crmentity.smownerid
  1344. left join vtiger_contactdetails as vtiger_contactdetailsContacts on vtiger_contactdetailsContacts.contactid = vtiger_contactdetails.reportsto
  1345. left join vtiger_account as vtiger_accountContacts on vtiger_accountContacts.accountid = vtiger_contactdetails.accountid
  1346. left join vtiger_users as vtiger_usersContacts on vtiger_usersContacts.id = vtiger_crmentity.smownerid
  1347. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1348. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1349. left join vtiger_users as vtiger_lastModifiedByContacts on vtiger_lastModifiedByContacts.id = vtiger_crmentity.modifiedby
  1350. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1351. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1352. where vtiger_crmentity.deleted=0";
  1353. }
  1354. else if($module == "Potentials")
  1355. {
  1356. $query = "from vtiger_potential
  1357. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_potential.potentialid
  1358. inner join vtiger_potentialscf on vtiger_potentialscf.potentialid = vtiger_potential.potentialid
  1359. left join vtiger_account as vtiger_accountPotentials on vtiger_potential.related_to = vtiger_accountPotentials.accountid
  1360. left join vtiger_contactdetails as vtiger_contactdetailsPotentials on vtiger_potential.related_to = vtiger_contactdetailsPotentials.contactid
  1361. left join vtiger_campaign as vtiger_campaignPotentials on vtiger_potential.campaignid = vtiger_campaignPotentials.campaignid
  1362. left join vtiger_groups vtiger_groupsPotentials on vtiger_groupsPotentials.groupid = vtiger_crmentity.smownerid
  1363. left join vtiger_users as vtiger_usersPotentials on vtiger_usersPotentials.id = vtiger_crmentity.smownerid
  1364. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1365. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1366. left join vtiger_users as vtiger_lastModifiedByPotentials on vtiger_lastModifiedByPotentials.id = vtiger_crmentity.modifiedby
  1367. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1368. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1369. where vtiger_crmentity.deleted=0 ";
  1370. }
  1371. //For this Product - we can related Accounts, Contacts (Also Leads, Potentials)
  1372. else if($module == "Products")
  1373. {
  1374. $query = "from vtiger_products
  1375. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_products.productid
  1376. left join vtiger_productcf on vtiger_products.productid = vtiger_productcf.productid
  1377. left join vtiger_users as vtiger_lastModifiedByProducts on vtiger_lastModifiedByProducts.id = vtiger_crmentity.modifiedby
  1378. left join vtiger_users as vtiger_usersProducts on vtiger_usersProducts.id = vtiger_crmentity.smownerid
  1379. left join vtiger_groups as vtiger_groupsProducts on vtiger_groupsProducts.groupid = vtiger_crmentity.smownerid
  1380. left join vtiger_vendor as vtiger_vendorRelProducts on vtiger_vendorRelProducts.vendorid = vtiger_products.vendor_id
  1381. LEFT JOIN (
  1382. SELECT vtiger_products.productid,
  1383. (CASE WHEN (vtiger_products.currency_id = 1 ) THEN vtiger_products.unit_price
  1384. ELSE (vtiger_products.unit_price / vtiger_currency_info.conversion_rate) END
  1385. ) AS actual_unit_price
  1386. FROM vtiger_products
  1387. LEFT JOIN vtiger_currency_info ON vtiger_products.currency_id = vtiger_currency_info.id
  1388. LEFT JOIN vtiger_productcurrencyrel ON vtiger_products.productid = vtiger_productcurrencyrel.productid
  1389. AND vtiger_productcurrencyrel.currencyid = ". $current_user->currency_id . "
  1390. ) AS innerProduct ON innerProduct.productid = vtiger_products.productid
  1391. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1392. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1393. where vtiger_crmentity.deleted=0";
  1394. }
  1395. else if($module == "HelpDesk")
  1396. {
  1397. $query = "from vtiger_troubletickets
  1398. inner join vtiger_crmentity
  1399. on vtiger_crmentity.crmid=vtiger_troubletickets.ticketid
  1400. inner join vtiger_ticketcf on vtiger_ticketcf.ticketid = vtiger_troubletickets.ticketid
  1401. left join vtiger_crmentity as vtiger_crmentityRelHelpDesk on vtiger_crmentityRelHelpDesk.crmid = vtiger_troubletickets.parent_id
  1402. left join vtiger_account as vtiger_accountRelHelpDesk on vtiger_accountRelHelpDesk.accountid=vtiger_crmentityRelHelpDesk.crmid
  1403. left join vtiger_contactdetails as vtiger_contactdetailsRelHelpDesk on vtiger_contactdetailsRelHelpDesk.contactid= vtiger_crmentityRelHelpDesk.crmid
  1404. left join vtiger_products as vtiger_productsRel on vtiger_productsRel.productid = vtiger_troubletickets.product_id
  1405. left join vtiger_groups as vtiger_groupsHelpDesk on vtiger_groupsHelpDesk.groupid = vtiger_crmentity.smownerid
  1406. left join vtiger_users as vtiger_usersHelpDesk on vtiger_crmentity.smownerid=vtiger_usersHelpDesk.id
  1407. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1408. left join vtiger_users on vtiger_crmentity.smownerid=vtiger_users.id
  1409. left join vtiger_users as vtiger_lastModifiedByHelpDesk on vtiger_lastModifiedByHelpDesk.id = vtiger_crmentity.modifiedby
  1410. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1411. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1412. where vtiger_crmentity.deleted=0 ";
  1413. }
  1414. else if($module == "Calendar")
  1415. {
  1416. $query = "from vtiger_activity
  1417. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_activity.activityid
  1418. left join vtiger_activitycf on vtiger_activitycf.activityid = vtiger_crmentity.crmid
  1419. left join vtiger_cntactivityrel on vtiger_cntactivityrel.activityid= vtiger_activity.activityid
  1420. left join vtiger_contactdetails as vtiger_contactdetailsCalendar on vtiger_contactdetailsCalendar.contactid= vtiger_cntactivityrel.contactid
  1421. left join vtiger_groups as vtiger_groupsCalendar on vtiger_groupsCalendar.groupid = vtiger_crmentity.smownerid
  1422. left join vtiger_users as vtiger_usersCalendar on vtiger_usersCalendar.id = vtiger_crmentity.smownerid
  1423. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1424. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1425. left join vtiger_seactivityrel on vtiger_seactivityrel.activityid = vtiger_activity.activityid
  1426. left join vtiger_activity_reminder on vtiger_activity_reminder.activity_id = vtiger_activity.activityid
  1427. left join vtiger_recurringevents on vtiger_recurringevents.activityid = vtiger_activity.activityid
  1428. left join vtiger_crmentity as vtiger_crmentityRelCalendar on vtiger_crmentityRelCalendar.crmid = vtiger_seactivityrel.crmid
  1429. left join vtiger_account as vtiger_accountRelCalendar on vtiger_accountRelCalendar.accountid=vtiger_crmentityRelCalendar.crmid
  1430. left join vtiger_leaddetails as vtiger_leaddetailsRelCalendar on vtiger_leaddetailsRelCalendar.leadid = vtiger_crmentityRelCalendar.crmid
  1431. left join vtiger_potential as vtiger_potentialRelCalendar on vtiger_potentialRelCalendar.potentialid = vtiger_crmentityRelCalendar.crmid
  1432. left join vtiger_quotes as vtiger_quotesRelCalendar on vtiger_quotesRelCalendar.quoteid = vtiger_crmentityRelCalendar.crmid
  1433. left join vtiger_purchaseorder as vtiger_purchaseorderRelCalendar on vtiger_purchaseorderRelCalendar.purchaseorderid = vtiger_crmentityRelCalendar.crmid
  1434. left join vtiger_invoice as vtiger_invoiceRelCalendar on vtiger_invoiceRelCalendar.invoiceid = vtiger_crmentityRelCalendar.crmid
  1435. left join vtiger_salesorder as vtiger_salesorderRelCalendar on vtiger_salesorderRelCalendar.salesorderid = vtiger_crmentityRelCalendar.crmid
  1436. left join vtiger_troubletickets as vtiger_troubleticketsRelCalendar on vtiger_troubleticketsRelCalendar.ticketid = vtiger_crmentityRelCalendar.crmid
  1437. left join vtiger_campaign as vtiger_campaignRelCalendar on vtiger_campaignRelCalendar.campaignid = vtiger_crmentityRelCalendar.crmid
  1438. left join vtiger_users as vtiger_lastModifiedByCalendar on vtiger_lastModifiedByCalendar.id = vtiger_crmentity.modifiedby
  1439. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1440. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1441. WHERE vtiger_crmentity.deleted=0 and (vtiger_activity.activitytype != 'Emails')";
  1442. }
  1443. else if($module == "Quotes")
  1444. {
  1445. $query = "from vtiger_quotes
  1446. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_quotes.quoteid
  1447. inner join vtiger_quotesbillads on vtiger_quotes.quoteid=vtiger_quotesbillads.quotebilladdressid
  1448. inner join vtiger_quotesshipads on vtiger_quotes.quoteid=vtiger_quotesshipads.quoteshipaddressid
  1449. left join vtiger_currency_info as vtiger_currency_info$module on vtiger_currency_info$module.id = vtiger_quotes.currency_id";
  1450. if($type !== 'COLUMNSTOTOTAL') {
  1451. $query .= " left join vtiger_inventoryproductrel as vtiger_inventoryproductrelQuotes on vtiger_quotes.quoteid = vtiger_inventoryproductrelQuotes.id
  1452. left join vtiger_products as vtiger_productsQuotes on vtiger_productsQuotes.productid = vtiger_inventoryproductrelQuotes.productid
  1453. left join vtiger_service as vtiger_serviceQuotes on vtiger_serviceQuotes.serviceid = vtiger_inventoryproductrelQuotes.productid";
  1454. }
  1455. $query .= " left join vtiger_quotescf on vtiger_quotes.quoteid = vtiger_quotescf.quoteid
  1456. left join vtiger_groups as vtiger_groupsQuotes on vtiger_groupsQuotes.groupid = vtiger_crmentity.smownerid
  1457. left join vtiger_users as vtiger_usersQuotes on vtiger_usersQuotes.id = vtiger_crmentity.smownerid
  1458. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1459. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1460. left join vtiger_users as vtiger_lastModifiedByQuotes on vtiger_lastModifiedByQuotes.id = vtiger_crmentity.modifiedby
  1461. left join vtiger_users as vtiger_usersRel1 on vtiger_usersRel1.id = vtiger_quotes.inventorymanager
  1462. left join vtiger_potential as vtiger_potentialRelQuotes on vtiger_potentialRelQuotes.potentialid = vtiger_quotes.potentialid
  1463. left join vtiger_contactdetails as vtiger_contactdetailsQuotes on vtiger_contactdetailsQuotes.contactid = vtiger_quotes.contactid
  1464. left join vtiger_account as vtiger_accountQuotes on vtiger_accountQuotes.accountid = vtiger_quotes.accountid
  1465. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1466. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1467. where vtiger_crmentity.deleted=0";
  1468. }
  1469. else if($module == "PurchaseOrder")
  1470. {
  1471. $query = "from vtiger_purchaseorder
  1472. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_purchaseorder.purchaseorderid
  1473. inner join vtiger_pobillads on vtiger_purchaseorder.purchaseorderid=vtiger_pobillads.pobilladdressid
  1474. inner join vtiger_poshipads on vtiger_purchaseorder.purchaseorderid=vtiger_poshipads.poshipaddressid
  1475. left join vtiger_currency_info as vtiger_currency_info$module on vtiger_currency_info$module.id = vtiger_purchaseorder.currency_id";
  1476. if($type !== 'COLUMNSTOTOTAL') {
  1477. $query .= " left join vtiger_inventoryproductrel as vtiger_inventoryproductrelPurchaseOrder on vtiger_purchaseorder.purchaseorderid = vtiger_inventoryproductrelPurchaseOrder.id
  1478. left join vtiger_products as vtiger_productsPurchaseOrder on vtiger_productsPurchaseOrder.productid = vtiger_inventoryproductrelPurchaseOrder.productid
  1479. left join vtiger_service as vtiger_servicePurchaseOrder on vtiger_servicePurchaseOrder.serviceid = vtiger_inventoryproductrelPurchaseOrder.productid";
  1480. }
  1481. $query .= " left join vtiger_purchaseordercf on vtiger_purchaseorder.purchaseorderid = vtiger_purchaseordercf.purchaseorderid
  1482. left join vtiger_groups as vtiger_groupsPurchaseOrder on vtiger_groupsPurchaseOrder.groupid = vtiger_crmentity.smownerid
  1483. left join vtiger_users as vtiger_usersPurchaseOrder on vtiger_usersPurchaseOrder.id = vtiger_crmentity.smownerid
  1484. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1485. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1486. left join vtiger_users as vtiger_lastModifiedByPurchaseOrder on vtiger_lastModifiedByPurchaseOrder.id = vtiger_crmentity.modifiedby
  1487. left join vtiger_vendor as vtiger_vendorRelPurchaseOrder on vtiger_vendorRelPurchaseOrder.vendorid = vtiger_purchaseorder.vendorid
  1488. left join vtiger_contactdetails as vtiger_contactdetailsPurchaseOrder on vtiger_contactdetailsPurchaseOrder.contactid = vtiger_purchaseorder.contactid
  1489. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1490. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1491. where vtiger_crmentity.deleted=0";
  1492. }
  1493. else if($module == "Invoice")
  1494. {
  1495. $query = "from vtiger_invoice
  1496. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_invoice.invoiceid
  1497. inner join vtiger_invoicebillads on vtiger_invoice.invoiceid=vtiger_invoicebillads.invoicebilladdressid
  1498. inner join vtiger_invoiceshipads on vtiger_invoice.invoiceid=vtiger_invoiceshipads.invoiceshipaddressid
  1499. left join vtiger_currency_info as vtiger_currency_info$module on vtiger_currency_info$module.id = vtiger_invoice.currency_id";
  1500. if($type !== 'COLUMNSTOTOTAL') {
  1501. $query .=" left join vtiger_inventoryproductrel as vtiger_inventoryproductrelInvoice on vtiger_invoice.invoiceid = vtiger_inventoryproductrelInvoice.id
  1502. left join vtiger_products as vtiger_productsInvoice on vtiger_productsInvoice.productid = vtiger_inventoryproductrelInvoice.productid
  1503. left join vtiger_service as vtiger_serviceInvoice on vtiger_serviceInvoice.serviceid = vtiger_inventoryproductrelInvoice.productid";
  1504. }
  1505. $query .= " left join vtiger_salesorder as vtiger_salesorderInvoice on vtiger_salesorderInvoice.salesorderid=vtiger_invoice.salesorderid
  1506. left join vtiger_invoicecf on vtiger_invoice.invoiceid = vtiger_invoicecf.invoiceid
  1507. left join vtiger_groups as vtiger_groupsInvoice on vtiger_groupsInvoice.groupid = vtiger_crmentity.smownerid
  1508. left join vtiger_users as vtiger_usersInvoice on vtiger_usersInvoice.id = vtiger_crmentity.smownerid
  1509. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1510. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1511. left join vtiger_users as vtiger_lastModifiedByInvoice on vtiger_lastModifiedByInvoice.id = vtiger_crmentity.modifiedby
  1512. left join vtiger_account as vtiger_accountInvoice on vtiger_accountInvoice.accountid = vtiger_invoice.accountid
  1513. left join vtiger_contactdetails as vtiger_contactdetailsInvoice on vtiger_contactdetailsInvoice.contactid = vtiger_invoice.contactid
  1514. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1515. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1516. where vtiger_crmentity.deleted=0";
  1517. }
  1518. else if($module == "SalesOrder")
  1519. {
  1520. $query = "from vtiger_salesorder
  1521. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_salesorder.salesorderid
  1522. inner join vtiger_sobillads on vtiger_salesorder.salesorderid=vtiger_sobillads.sobilladdressid
  1523. inner join vtiger_soshipads on vtiger_salesorder.salesorderid=vtiger_soshipads.soshipaddressid
  1524. left join vtiger_currency_info as vtiger_currency_info$module on vtiger_currency_info$module.id = vtiger_salesorder.currency_id";
  1525. if($type !== 'COLUMNSTOTOTAL') {
  1526. $query .= " left join vtiger_inventoryproductrel as vtiger_inventoryproductrelSalesOrder on vtiger_salesorder.salesorderid = vtiger_inventoryproductrelSalesOrder.id
  1527. left join vtiger_products as vtiger_productsSalesOrder on vtiger_productsSalesOrder.productid = vtiger_inventoryproductrelSalesOrder.productid
  1528. left join vtiger_service as vtiger_serviceSalesOrder on vtiger_serviceSalesOrder.serviceid = vtiger_inventoryproductrelSalesOrder.productid";
  1529. }
  1530. $query .=" left join vtiger_salesordercf on vtiger_salesorder.salesorderid = vtiger_salesordercf.salesorderid
  1531. left join vtiger_contactdetails as vtiger_contactdetailsSalesOrder on vtiger_contactdetailsSalesOrder.contactid = vtiger_salesorder.contactid
  1532. left join vtiger_quotes as vtiger_quotesSalesOrder on vtiger_quotesSalesOrder.quoteid = vtiger_salesorder.quoteid
  1533. left join vtiger_account as vtiger_accountSalesOrder on vtiger_accountSalesOrder.accountid = vtiger_salesorder.accountid
  1534. left join vtiger_potential as vtiger_potentialRelSalesOrder on vtiger_potentialRelSalesOrder.potentialid = vtiger_salesorder.potentialid
  1535. left join vtiger_invoice_recurring_info on vtiger_invoice_recurring_info.salesorderid = vtiger_salesorder.salesorderid
  1536. left join vtiger_groups as vtiger_groupsSalesOrder on vtiger_groupsSalesOrder.groupid = vtiger_crmentity.smownerid
  1537. left join vtiger_users as vtiger_usersSalesOrder on vtiger_usersSalesOrder.id = vtiger_crmentity.smownerid
  1538. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1539. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1540. left join vtiger_users as vtiger_lastModifiedBySalesOrder on vtiger_lastModifiedBySalesOrder.id = vtiger_crmentity.modifiedby
  1541. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1542. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1543. where vtiger_crmentity.deleted=0";
  1544. }
  1545. else if($module == "Campaigns")
  1546. {
  1547. $query = "from vtiger_campaign
  1548. inner join vtiger_campaignscf as vtiger_campaignscf on vtiger_campaignscf.campaignid=vtiger_campaign.campaignid
  1549. inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_campaign.campaignid
  1550. left join vtiger_products as vtiger_productsCampaigns on vtiger_productsCampaigns.productid = vtiger_campaign.product_id
  1551. left join vtiger_groups as vtiger_groupsCampaigns on vtiger_groupsCampaigns.groupid = vtiger_crmentity.smownerid
  1552. left join vtiger_users as vtiger_usersCampaigns on vtiger_usersCampaigns.id = vtiger_crmentity.smownerid
  1553. left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid
  1554. left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid
  1555. left join vtiger_users as vtiger_lastModifiedBy".$module." on vtiger_lastModifiedBy".$module.".id = vtiger_crmentity.modifiedby
  1556. ".$this->getRelatedModulesQuery($module,$this->secondarymodule).
  1557. getNonAdminAccessControlQuery($this->primarymodule,$current_user)."
  1558. where vtiger_crmentity.deleted=0";
  1559. }
  1560. else {
  1561. if($module!=''){
  1562. $focus = CRMEntity::getInstance($module);
  1563. $query = $focus->generateReportsQuery($module)
  1564. .$this->getRelatedModulesQuery($module,$this->secondarymodule)
  1565. .getNonAdminAccessControlQuery($this->primarymodule,$current_user).
  1566. " WHERE vtiger_crmentity.deleted=0";
  1567. }
  1568. }
  1569. $log->info("ReportRun :: Successfully returned getReportsQuery".$module);
  1570. return $query;
  1571. }
  1572. /** function to get query for the given reportid,filterlist,type
  1573. * @ param $reportid : Type integer
  1574. * @ param $filtersql : Type Array
  1575. * @ param $module : Type String
  1576. * this returns join query for the report
  1577. */
  1578. function sGetSQLforReport($reportid,$filtersql,$type='',$chartReport=false)
  1579. {
  1580. global $log;
  1581. $columnlist = $this->getQueryColumnsList($reportid,$type);
  1582. $groupslist = $this->getGroupingList($reportid);
  1583. $groupTimeList = $this->getGroupByTimeList($reportid);
  1584. $stdfilterlist = $this->getStdFilterList($reportid);
  1585. $columnstotallist = $this->getColumnsTotal($reportid);
  1586. $advfiltersql = $this->getAdvFilterSql($reportid);
  1587. $this->totallist = $columnstotallist;
  1588. global $current_user;
  1589. $tab_id = getTabid($this->primarymodule);
  1590. //Fix for ticket #4915.
  1591. $selectlist = $columnlist;
  1592. //columns list
  1593. if(isset($selectlist))
  1594. {
  1595. $selectedcolumns = implode(", ",$selectlist);
  1596. if($chartReport == true){
  1597. $selectedcolumns .= ", count(*) AS 'groupby_count'";
  1598. }
  1599. }
  1600. //groups list
  1601. if(isset($groupslist))
  1602. {
  1603. $groupsquery = implode(", ",$groupslist);
  1604. }
  1605. if(isset($groupTimeList)){
  1606. $groupTimeQuery = implode(", ",$groupTimeList);
  1607. }
  1608. //standard list
  1609. if(isset($stdfilterlist))
  1610. {
  1611. $stdfiltersql = implode(", ",$stdfilterlist);
  1612. }
  1613. //columns to total list
  1614. if(isset($columnstotallist))
  1615. {
  1616. $columnstotalsql = implode(", ",$columnstotallist);
  1617. }
  1618. if($stdfiltersql != "")
  1619. {
  1620. $wheresql = " and ".$stdfiltersql;
  1621. }
  1622. if(isset($filtersql) && $filtersql !== false) {
  1623. $advfiltersql = $filtersql;
  1624. }
  1625. if($advfiltersql != "") {
  1626. $wheresql .= " and ".$advfiltersql;
  1627. }
  1628. $reportquery = $this->getReportsQuery($this->primarymodule, $type);
  1629. // If we don't have access to any columns, let us select one column and limit result to shown we have not results
  1630. // Fix for: http://trac.vtiger.com/cgi-bin/trac.cgi/ticket/4758 - Prasad
  1631. $allColumnsRestricted = false;
  1632. if($type == 'COLUMNSTOTOTAL')
  1633. {
  1634. if($columnstotalsql != '')
  1635. {
  1636. $reportquery = "select ".$columnstotalsql." ".$reportquery." ".$wheresql;
  1637. }
  1638. }else
  1639. {
  1640. if($selectedcolumns == '') {
  1641. // Fix for: http://trac.vtiger.com/cgi-bin/trac.cgi/ticket/4758 - Prasad
  1642. $selectedcolumns = "''"; // "''" to get blank column name
  1643. $allColumnsRestricted = true;
  1644. }
  1645. if(in_array($this->primarymodule, array('Invoice', 'Quotes',
  1646. 'SalesOrder', 'PurchaseOrder'))) {
  1647. $selectedcolumns = ' distinct '. $selectedcolumns;
  1648. }
  1649. $reportquery = "select DISTINCT ".$selectedcolumns." ".$reportquery." ".$wheresql;
  1650. }
  1651. $reportquery = listQueryNonAdminChange($reportquery, $this->primarymodule);
  1652. if(trim($groupsquery) != "" && $type !== 'COLUMNSTOTOTAL')
  1653. {
  1654. if($chartReport == true){
  1655. $reportquery .= "group by ".$this->GetFirstSortByField($reportid);
  1656. }else{
  1657. $reportquery .= " order by ".$groupsquery;
  1658. }
  1659. }
  1660. // Prasad: No columns selected so limit the number of rows directly.
  1661. if($allColumnsRestricted) {
  1662. $reportquery .= " limit 0";
  1663. }
  1664. preg_match('/&amp;/', $reportquery, $matches);
  1665. if(!empty($matches)){
  1666. $report=str_replace('&amp;', '&', $reportquery);
  1667. $reportquery = $this->replaceSpecialChar($report);
  1668. }
  1669. $log->info("ReportRun :: Successfully returned sGetSQLforReport".$reportid);
  1670. return $reportquery;
  1671. }
  1672. /** function to get the report output in HTML,PDF,TOTAL,PRINT,PRINTTOTAL formats depends on the argument $outputformat
  1673. * @ param $outputformat : Type String (valid parameters HTML,PDF,TOTAL,PRINT,PRINT_TOTAL)
  1674. * @ param $filtersql : Type String
  1675. * This returns HTML Report if $outputformat is HTML
  1676. * Array for PDF if $outputformat is PDF
  1677. * HTML strings for TOTAL if $outputformat is TOTAL
  1678. * Array for PRINT if $outputformat is PRINT
  1679. * HTML strings for TOTAL fields if $outputformat is PRINTTOTAL
  1680. * HTML strings for
  1681. */
  1682. // Performance Optimization: Added parameter directOutput to avoid building big-string!
  1683. function GenerateReport($outputformat,$filtersql, $directOutput=false)
  1684. {
  1685. global $adb,$current_user,$php_max_execution_time;
  1686. global $modules,$app_strings;
  1687. global $mod_strings,$current_language;
  1688. require('user_privileges/user_privileges_'.$current_user->id.'.php');
  1689. $modules_selected = array();
  1690. $modules_selected[] = $this->primarymodule;
  1691. if(!empty($this->secondarymodule)){
  1692. $sec_modules = split(":",$this->secondarymodule);
  1693. for($i=0;$i<count($sec_modules);$i++){
  1694. $modules_selected[] = $sec_modules[$i];
  1695. }
  1696. }
  1697. // Update Reference fields list list
  1698. $referencefieldres = $adb->pquery("SELECT tabid, fieldlabel, uitype from vtiger_field WHERE uitype in ('10','101')", array());
  1699. if($referencefieldres) {
  1700. foreach($referencefieldres as $referencefieldrow) {
  1701. $uiType = $referencefieldrow['uitype'];
  1702. $modprefixedlabel = getTabModuleName($referencefieldrow['tabid']).' '.$referencefieldrow['fieldlabel'];
  1703. $modprefixedlabel = str_replace(' ','_',$modprefixedlabel);
  1704. if($uiType == 10 && !in_array($modprefixedlabel, $this->ui10_fields)) {
  1705. $this->ui10_fields[] = $modprefixedlabel;
  1706. } elseif($uiType == 101 && !in_array($modprefixedlabel, $this->ui101_fields)) {
  1707. $this->ui101_fields[] = $modprefixedlabel;
  1708. }
  1709. }
  1710. }
  1711. if($outputformat == "HTML")
  1712. {
  1713. $sSQL = $this->sGetSQLforReport($this->reportid,$filtersql,$outputformat);
  1714. $result = $adb->query($sSQL);
  1715. $error_msg = $adb->database->ErrorMsg();
  1716. if(!$result && $error_msg!=''){
  1717. // Performance Optimization: If direct output is requried
  1718. if($directOutput) {
  1719. echo getTranslatedString('LBL_REPORT_GENERATION_FAILED', $currentModule) . "<br>" . $error_msg;
  1720. $error_msg = false;
  1721. }
  1722. // END
  1723. return $error_msg;
  1724. }
  1725. // Performance Optimization: If direct output is required
  1726. if($directOutput) {
  1727. echo '<table cellpadding="5" cellspacing="0" align="center" class="rptTable"><tr>';
  1728. }
  1729. // END
  1730. if($is_admin==false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1)
  1731. $picklistarray = $this->getAccessPickListValues();
  1732. if($result)
  1733. {
  1734. $y=$adb->num_fields($result);
  1735. $arrayHeaders = Array();
  1736. for ($x=0; $x<$y; $x++)
  1737. {
  1738. $fld = $adb->field_name($result, $x);
  1739. if(in_array($this->getLstringforReportHeaders($fld->name), $arrayHeaders))
  1740. {
  1741. $headerLabel = str_replace("_"," ",$fld->name);
  1742. $arrayHeaders[] = $headerLabel;
  1743. }
  1744. else
  1745. {
  1746. $headerLabel = str_replace($modules," ",$this->getLstringforReportHeaders($fld->name));
  1747. $headerLabel = str_replace("_"," ",$this->getLstringforReportHeaders($fld->name));
  1748. $arrayHeaders[] = $headerLabel;
  1749. }
  1750. /*STRING TRANSLATION starts */
  1751. $mod_name = split(' ',$headerLabel,2);
  1752. $moduleLabel ='';
  1753. if(in_array($mod_name[0],$modules_selected)){
  1754. $moduleLabel = getTranslatedString($mod_name[0],$mod_name[0]);
  1755. }
  1756. if(!empty($this->secondarymodule)){
  1757. if($moduleLabel!=''){
  1758. $headerLabel_tmp = $moduleLabel." ".getTranslatedString($mod_name[1],$mod_name[0]);
  1759. } else {
  1760. $headerLabel_tmp = getTranslatedString($mod_name[0]." ".$mod_name[1]);
  1761. }
  1762. } else {
  1763. if($moduleLabel!=''){
  1764. $headerLabel_tmp = getTranslatedString($mod_name[1],$mod_name[0]);
  1765. } else {
  1766. $headerLabel_tmp = getTranslatedString($mod_name[0]." ".$mod_name[1]);
  1767. }
  1768. }
  1769. if($headerLabel == $headerLabel_tmp) $headerLabel = getTranslatedString($headerLabel_tmp);
  1770. else $headerLabel = $headerLabel_tmp;
  1771. /*STRING TRANSLATION ends */
  1772. $header .= "<td class='rptCellLabel'>".$headerLabel."</td>";
  1773. // Performance Optimization: If direct output is required
  1774. if($directOutput) {
  1775. echo $header;
  1776. $header = '';
  1777. }
  1778. // END
  1779. }
  1780. // Performance Optimization: If direct output is required
  1781. if($directOutput) {
  1782. echo '</tr><tr>';
  1783. }
  1784. // END
  1785. $noofrows = $adb->num_rows($result);
  1786. $custom_field_values = $adb->fetch_array($result);
  1787. $groupslist = $this->getGroupingList($this->reportid);
  1788. $column_definitions = $adb->getFieldsDefinition($result);
  1789. do
  1790. {
  1791. $arraylists = Array();
  1792. if(count($groupslist) == 1)
  1793. {
  1794. $newvalue = $custom_field_values[0];
  1795. }elseif(count($groupslist) == 2)
  1796. {
  1797. $newvalue = $custom_field_values[0];
  1798. $snewvalue = $custom_field_values[1];
  1799. }elseif(count($groupslist) == 3)
  1800. {
  1801. $newvalue = $custom_field_values[0];
  1802. $snewvalue = $custom_field_values[1];
  1803. $tnewvalue = $custom_field_values[2];
  1804. }
  1805. if($newvalue == "") $newvalue = "-";
  1806. if($snewvalue == "") $snewvalue = "-";
  1807. if($tnewvalue == "") $tnewvalue = "-";
  1808. $valtemplate .= "<tr>";
  1809. // Performance Optimization
  1810. if($directOutput) {
  1811. echo $valtemplate;
  1812. $valtemplate = '';
  1813. }
  1814. // END
  1815. for ($i=0; $i<$y; $i++)
  1816. {
  1817. $fld = $adb->field_name($result, $i);
  1818. $fld_type = $column_definitions[$i]->type;
  1819. $fieldvalue = getReportFieldValue($this, $picklistarray, $fld,
  1820. $custom_field_values, $i);
  1821. //check for Roll based pick list
  1822. $temp_val= $fld->name;
  1823. if($fieldvalue == "" )
  1824. {
  1825. $fieldvalue = "-";
  1826. }
  1827. else if($fld->name == 'LBL_ACTION' && $fieldvalue != '-')
  1828. {
  1829. $fieldvalue = "<a href='index.php?module={$this->primarymodule}&action=DetailView&record={$fieldvalue}' target='_blank'>".getTranslatedString('LBL_VIEW_DETAILS')."</a>";
  1830. }
  1831. if(($lastvalue == $fieldvalue) && $this->reporttype == "summary")
  1832. {
  1833. if($this->reporttype == "summary")
  1834. {
  1835. $valtemplate .= "<td class='rptEmptyGrp'>&nbsp;</td>";
  1836. }else
  1837. {
  1838. $valtemplate .= "<td class='rptData'>".$fieldvalue."</td>";
  1839. }
  1840. }else if(($secondvalue === $fieldvalue) && $this->reporttype == "summary")
  1841. {
  1842. if($lastvalue === $newvalue)
  1843. {
  1844. $valtemplate .= "<td class='rptEmptyGrp'>&nbsp;</td>";
  1845. }else
  1846. {
  1847. $valtemplate .= "<td class='rptGrpHead'>".$fieldvalue."</td>";
  1848. }
  1849. }
  1850. else if(($thirdvalue === $fieldvalue) && $this->reporttype == "summary")
  1851. {
  1852. if($secondvalue === $snewvalue)
  1853. {
  1854. $valtemplate .= "<td class='rptEmptyGrp'>&nbsp;</td>";
  1855. }else
  1856. {
  1857. $valtemplate .= "<td class='rptGrpHead'>".$fieldvalue."</td>";
  1858. }
  1859. }
  1860. else
  1861. {
  1862. if($this->reporttype == "tabular")
  1863. {
  1864. $valtemplate .= "<td class='rptData'>".$fieldvalue."</td>";
  1865. }else
  1866. {
  1867. $valtemplate .= "<td class='rptGrpHead'>".$fieldvalue."</td>";
  1868. }
  1869. }
  1870. // Performance Optimization: If direct output is required
  1871. if($directOutput) {
  1872. echo $valtemplate;
  1873. $valtemplate = '';
  1874. }
  1875. // END
  1876. }
  1877. $valtemplate .= "</tr>";
  1878. // Performance Optimization: If direct output is required
  1879. if($directOutput) {
  1880. echo $valtemplate;
  1881. $valtemplate = '';
  1882. }
  1883. // END
  1884. $lastvalue = $newvalue;
  1885. $secondvalue = $snewvalue;
  1886. $thirdvalue = $tnewvalue;
  1887. $arr_val[] = $arraylists;
  1888. set_time_limit($php_max_execution_time);
  1889. }while($custom_field_values = $adb->fetch_array($result));
  1890. // Performance Optimization
  1891. if($directOutput) {
  1892. echo "</tr></table>";
  1893. echo "<script type='text/javascript' id='__reportrun_directoutput_recordcount_script'>
  1894. if($('_reportrun_total')) $('_reportrun_total').innerHTML=$noofrows;</script>";
  1895. } else {
  1896. $sHTML ='<table cellpadding="5" cellspacing="0" align="center" class="rptTable">
  1897. <tr>'.
  1898. $header
  1899. .'<!-- BEGIN values -->
  1900. <tr>'.
  1901. $valtemplate
  1902. .'</tr>
  1903. </table>';
  1904. }
  1905. //<<<<<<<<construct HTML>>>>>>>>>>>>
  1906. $return_data[] = $sHTML;
  1907. $return_data[] = $noofrows;
  1908. $return_data[] = $sSQL;
  1909. return $return_data;
  1910. }
  1911. }elseif($outputformat == "PDF")
  1912. {
  1913. $sSQL = $this->sGetSQLforReport($this->reportid,$filtersql);
  1914. $result = $adb->query($sSQL);
  1915. if($is_admin==false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1)
  1916. $picklistarray = $this->getAccessPickListValues();
  1917. if($result)
  1918. {
  1919. $y=$adb->num_fields($result);
  1920. $noofrows = $adb->num_rows($result);
  1921. $custom_field_values = $adb->fetch_array($result);
  1922. $column_definitions = $adb->getFieldsDefinition($result);
  1923. do
  1924. {
  1925. $arraylists = Array();
  1926. for ($i=0; $i<$y; $i++)
  1927. {
  1928. $fld = $adb->field_name($result, $i);
  1929. $fld_type = $column_definitions[$i]->type;
  1930. list($module, $fieldLabel) = explode('_', $fld->name, 2);
  1931. $fieldInfo = getFieldByReportLabel($module, $fieldLabel);
  1932. $fieldType = null;
  1933. if(!empty($fieldInfo)) {
  1934. $field = WebserviceField::fromArray($adb, $fieldInfo);
  1935. $fieldType = $field->getFieldDataType();
  1936. }
  1937. if(!empty($fieldInfo)) {
  1938. $translatedLabel = getTranslatedString($field->getFieldLabelKey(),
  1939. $module);
  1940. } else {
  1941. $translatedLabel = getTranslatedString(str_replace('_', " ",
  1942. $fieldLabel), $module);
  1943. }
  1944. /*STRING TRANSLATION starts */
  1945. $moduleLabel ='';
  1946. if(in_array($module,$modules_selected))
  1947. $moduleLabel = getTranslatedString($module,$module);
  1948. if(empty($translatedLabel)) {
  1949. $translatedLabel = getTranslatedString(str_replace('_', " ",
  1950. $fld->name));
  1951. }
  1952. $headerLabel = $translatedLabel;
  1953. if(!empty($this->secondarymodule)) {
  1954. if($moduleLabel != '') {
  1955. $headerLabel = $moduleLabel." ". $translatedLabel;
  1956. }
  1957. }
  1958. // Check for role based pick list
  1959. $temp_val= $fld->name;
  1960. $fieldvalue = getReportFieldValue($this, $picklistarray, $fld,
  1961. $custom_field_values, $i);
  1962. $arraylists[$headerLabel] = $fieldvalue;
  1963. }
  1964. $arr_val[] = $arraylists;
  1965. set_time_limit($php_max_execution_time);
  1966. }while($custom_field_values = $adb->fetch_array($result));
  1967. return $arr_val;
  1968. }
  1969. }elseif($outputformat == "TOTALXLS")
  1970. {
  1971. $escapedchars = Array('_SUM','_AVG','_MIN','_MAX');
  1972. $totalpdf=array();
  1973. $sSQL = $this->sGetSQLforReport($this->reportid,$filtersql,"COLUMNSTOTOTAL");
  1974. if(isset($this->totallist))
  1975. {
  1976. if($sSQL != "")
  1977. {
  1978. $result = $adb->query($sSQL);
  1979. $y=$adb->num_fields($result);
  1980. $custom_field_values = $adb->fetch_array($result);
  1981. foreach($this->totallist as $key=>$value)
  1982. {
  1983. $fieldlist = explode(":",$key);
  1984. $mod_query = $adb->pquery("SELECT distinct(tabid) as tabid, uitype as uitype from vtiger_field where tablename = ? and columnname=?",array($fieldlist[1],$fieldlist[2]));
  1985. if($adb->num_rows($mod_query)>0){
  1986. $module_name = getTabModuleName($adb->query_result($mod_query,0,'tabid'));
  1987. $fieldlabel = trim(str_replace($escapedchars," ",$fieldlist[3]));
  1988. $fieldlabel = str_replace("_", " ", $fieldlabel);
  1989. if($module_name){
  1990. $field = getTranslatedString($module_name,$module_name)." ".getTranslatedString($fieldlabel,$module_name);
  1991. } else {
  1992. $field = getTranslatedString($fieldlabel);
  1993. }
  1994. }
  1995. $uitype_arr[str_replace($escapedchars," ",$module_name."_".$fieldlist[3])] = $adb->query_result($mod_query,0,"uitype");
  1996. $totclmnflds[str_replace($escapedchars," ",$module_name."_".$fieldlist[3])] = $field;
  1997. }
  1998. for($i =0;$i<$y;$i++)
  1999. {
  2000. $fld = $adb->field_name($result, $i);
  2001. $keyhdr[$fld->name] = $custom_field_values[$i];
  2002. }
  2003. $rowcount=0;
  2004. foreach($totclmnflds as $key=>$value)
  2005. {
  2006. $col_header = trim(str_replace($modules," ",$value));
  2007. $fld_name_1 = $this->primarymodule . "_" . trim($value);
  2008. $fld_name_2 = $this->secondarymodule . "_" . trim($value);
  2009. if($uitype_arr[$key] == 71 || $uitype_arr[$key] == 72 ||
  2010. in_array($fld_name_1,$this->append_currency_symbol_to_value) || in_array($fld_name_2,$this->append_currency_symbol_to_value)) {
  2011. $col_header .= " (".$app_strings['LBL_IN']." ".$current_user->currency_symbol.")";
  2012. $convert_price = true;
  2013. } else{
  2014. $convert_price = false;
  2015. }
  2016. $value = trim($key);
  2017. $arraykey = $value.'_SUM';
  2018. if(isset($keyhdr[$arraykey]))
  2019. {
  2020. if($convert_price)
  2021. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2022. else
  2023. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2024. $totalpdf[$rowcount][$arraykey] = $conv_value;
  2025. }else
  2026. {
  2027. $totalpdf[$rowcount][$arraykey] = '';
  2028. }
  2029. $arraykey = $value.'_AVG';
  2030. if(isset($keyhdr[$arraykey]))
  2031. {
  2032. if($convert_price)
  2033. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2034. else
  2035. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2036. $totalpdf[$rowcount][$arraykey] = $conv_value;
  2037. }else
  2038. {
  2039. $totalpdf[$rowcount][$arraykey] = '';
  2040. }
  2041. $arraykey = $value.'_MIN';
  2042. if(isset($keyhdr[$arraykey]))
  2043. {
  2044. if($convert_price)
  2045. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2046. else
  2047. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2048. $totalpdf[$rowcount][$arraykey] = $conv_value;
  2049. }else
  2050. {
  2051. $totalpdf[$rowcount][$arraykey] = '';
  2052. }
  2053. $arraykey = $value.'_MAX';
  2054. if(isset($keyhdr[$arraykey]))
  2055. {
  2056. if($convert_price)
  2057. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2058. else
  2059. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2060. $totalpdf[$rowcount][$arraykey] = $conv_value;
  2061. }else
  2062. {
  2063. $totalpdf[$rowcount][$arraykey] = '';
  2064. }
  2065. $rowcount++;
  2066. }
  2067. }
  2068. }
  2069. return $totalpdf;
  2070. }elseif($outputformat == "TOTALHTML")
  2071. {
  2072. $escapedchars = Array('_SUM','_AVG','_MIN','_MAX');
  2073. $sSQL = $this->sGetSQLforReport($this->reportid,$filtersql,"COLUMNSTOTOTAL");
  2074. if(isset($this->totallist))
  2075. {
  2076. if($sSQL != "")
  2077. {
  2078. $result = $adb->query($sSQL);
  2079. $y=$adb->num_fields($result);
  2080. $custom_field_values = $adb->fetch_array($result);
  2081. $coltotalhtml .= "<table align='center' width='60%' cellpadding='3' cellspacing='0' border='0' class='rptTable'><tr><td class='rptCellLabel'>".$mod_strings[Totals]."</td><td class='rptCellLabel'>".$mod_strings[SUM]."</td><td class='rptCellLabel'>".$mod_strings[AVG]."</td><td class='rptCellLabel'>".$mod_strings[MIN]."</td><td class='rptCellLabel'>".$mod_strings[MAX]."</td></tr>";
  2082. // Performation Optimization: If Direct output is desired
  2083. if($directOutput) {
  2084. echo $coltotalhtml;
  2085. $coltotalhtml = '';
  2086. }
  2087. // END
  2088. foreach($this->totallist as $key=>$value)
  2089. {
  2090. $fieldlist = explode(":",$key);
  2091. $mod_query = $adb->pquery("SELECT distinct(tabid) as tabid, uitype as uitype from vtiger_field where tablename = ? and columnname=?",array($fieldlist[1],$fieldlist[2]));
  2092. if($adb->num_rows($mod_query)>0){
  2093. $module_name = getTabModuleName($adb->query_result($mod_query,0,'tabid'));
  2094. $fieldlabel = trim(str_replace($escapedchars," ",$fieldlist[3]));
  2095. $fieldlabel = str_replace("_", " ", $fieldlabel);
  2096. if($module_name){
  2097. $field = getTranslatedString($module_name, $module_name)." ".getTranslatedString($fieldlabel,$module_name);
  2098. } else {
  2099. $field = getTranslatedString($fieldlabel);
  2100. }
  2101. }
  2102. $uitype_arr[str_replace($escapedchars," ",$module_name."_".$fieldlist[3])] = $adb->query_result($mod_query,0,"uitype");
  2103. $totclmnflds[str_replace($escapedchars," ",$module_name."_".$fieldlist[3])] = $field;
  2104. }
  2105. for($i =0;$i<$y;$i++)
  2106. {
  2107. $fld = $adb->field_name($result, $i);
  2108. $keyhdr[$fld->name] = $custom_field_values[$i];
  2109. }
  2110. foreach($totclmnflds as $key=>$value)
  2111. {
  2112. $coltotalhtml .= '<tr class="rptGrpHead" valign=top>';
  2113. $col_header = trim(str_replace($modules," ",$value));
  2114. $fld_name_1 = $this->primarymodule . "_" . trim($value);
  2115. $fld_name_2 = $this->secondarymodule . "_" . trim($value);
  2116. if($uitype_arr[$key]==71 || $uitype_arr[$key] == 72 ||
  2117. in_array($fld_name_1,$this->append_currency_symbol_to_value) || in_array($fld_name_2,$this->append_currency_symbol_to_value)) {
  2118. $col_header .= " (".$app_strings['LBL_IN']." ".$current_user->currency_symbol.")";
  2119. $convert_price = true;
  2120. } else{
  2121. $convert_price = false;
  2122. }
  2123. $coltotalhtml .= '<td class="rptData">'. $col_header .'</td>';
  2124. $value = trim($key);
  2125. $arraykey = $value.'_SUM';
  2126. if(isset($keyhdr[$arraykey]))
  2127. {
  2128. if($convert_price)
  2129. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2130. else
  2131. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2132. $coltotalhtml .= '<td class="rptTotal">'.$conv_value.'</td>';
  2133. }else
  2134. {
  2135. $coltotalhtml .= '<td class="rptTotal">&nbsp;</td>';
  2136. }
  2137. $arraykey = $value.'_AVG';
  2138. if(isset($keyhdr[$arraykey]))
  2139. {
  2140. if($convert_price)
  2141. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2142. else
  2143. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2144. $coltotalhtml .= '<td class="rptTotal">'.$conv_value.'</td>';
  2145. }else
  2146. {
  2147. $coltotalhtml .= '<td class="rptTotal">&nbsp;</td>';
  2148. }
  2149. $arraykey = $value.'_MIN';
  2150. if(isset($keyhdr[$arraykey]))
  2151. {
  2152. if($convert_price)
  2153. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2154. else
  2155. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2156. $coltotalhtml .= '<td class="rptTotal">'.$conv_value.'</td>';
  2157. }else
  2158. {
  2159. $coltotalhtml .= '<td class="rptTotal">&nbsp;</td>';
  2160. }
  2161. $arraykey = $value.'_MAX';
  2162. if(isset($keyhdr[$arraykey]))
  2163. {
  2164. if($convert_price)
  2165. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2166. else
  2167. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2168. $coltotalhtml .= '<td class="rptTotal">'.$conv_value.'</td>';
  2169. }else
  2170. {
  2171. $coltotalhtml .= '<td class="rptTotal">&nbsp;</td>';
  2172. }
  2173. $coltotalhtml .= '<tr>';
  2174. // Performation Optimization: If Direct output is desired
  2175. if($directOutput) {
  2176. echo $coltotalhtml;
  2177. $coltotalhtml = '';
  2178. }
  2179. // END
  2180. }
  2181. $coltotalhtml .= "</table>";
  2182. // Performation Optimization: If Direct output is desired
  2183. if($directOutput) {
  2184. echo $coltotalhtml;
  2185. $coltotalhtml = '';
  2186. }
  2187. // END
  2188. }
  2189. }
  2190. return $coltotalhtml;
  2191. }elseif($outputformat == "PRINT")
  2192. {
  2193. $sSQL = $this->sGetSQLforReport($this->reportid,$filtersql);
  2194. $result = $adb->query($sSQL);
  2195. if($is_admin==false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1)
  2196. $picklistarray = $this->getAccessPickListValues();
  2197. if($result)
  2198. {
  2199. $y=$adb->num_fields($result);
  2200. $arrayHeaders = Array();
  2201. for ($x=0; $x<$y; $x++)
  2202. {
  2203. $fld = $adb->field_name($result, $x);
  2204. if(in_array($this->getLstringforReportHeaders($fld->name), $arrayHeaders))
  2205. {
  2206. $headerLabel = str_replace("_"," ",$fld->name);
  2207. $arrayHeaders[] = $headerLabel;
  2208. }
  2209. else
  2210. {
  2211. $headerLabel = str_replace($modules," ",$this->getLstringforReportHeaders($fld->name));
  2212. $arrayHeaders[] = $headerLabel;
  2213. }
  2214. /*STRING TRANSLATION starts */
  2215. $mod_name = split(' ',$headerLabel,2);
  2216. $moduleLabel ='';
  2217. if(in_array($mod_name[0],$modules_selected)){
  2218. $moduleLabel = getTranslatedString($mod_name[0],$mod_name[0]);
  2219. }
  2220. if(!empty($this->secondarymodule)){
  2221. if($moduleLabel!=''){
  2222. $headerLabel_tmp = $moduleLabel." ".getTranslatedString($mod_name[1],$mod_name[0]);
  2223. } else {
  2224. $headerLabel_tmp = getTranslatedString($mod_name[0]." ".$mod_name[1]);
  2225. }
  2226. } else {
  2227. if($moduleLabel!=''){
  2228. $headerLabel_tmp = getTranslatedString($mod_name[1],$mod_name[0]);
  2229. } else {
  2230. $headerLabel_tmp = getTranslatedString($mod_name[0]." ".$mod_name[1]);
  2231. }
  2232. }
  2233. if($headerLabel == $headerLabel_tmp) $headerLabel = getTranslatedString($headerLabel_tmp);
  2234. else $headerLabel = $headerLabel_tmp;
  2235. /*STRING TRANSLATION ends */
  2236. $header .= "<th>".$headerLabel."</th>";
  2237. }
  2238. $noofrows = $adb->num_rows($result);
  2239. $custom_field_values = $adb->fetch_array($result);
  2240. $groupslist = $this->getGroupingList($this->reportid);
  2241. $column_definitions = $adb->getFieldsDefinition($result);
  2242. do
  2243. {
  2244. $arraylists = Array();
  2245. if(count($groupslist) == 1)
  2246. {
  2247. $newvalue = $custom_field_values[0];
  2248. }elseif(count($groupslist) == 2)
  2249. {
  2250. $newvalue = $custom_field_values[0];
  2251. $snewvalue = $custom_field_values[1];
  2252. }elseif(count($groupslist) == 3)
  2253. {
  2254. $newvalue = $custom_field_values[0];
  2255. $snewvalue = $custom_field_values[1];
  2256. $tnewvalue = $custom_field_values[2];
  2257. }
  2258. if($newvalue == "") $newvalue = "-";
  2259. if($snewvalue == "") $snewvalue = "-";
  2260. if($tnewvalue == "") $tnewvalue = "-";
  2261. $valtemplate .= "<tr>";
  2262. for ($i=0; $i<$y; $i++)
  2263. {
  2264. $fld = $adb->field_name($result, $i);
  2265. $fld_type = $column_definitions[$i]->type;
  2266. $fieldvalue = getReportFieldValue($this, $picklistarray, $fld,
  2267. $custom_field_values, $i);
  2268. if(($lastvalue == $fieldvalue) && $this->reporttype == "summary")
  2269. {
  2270. if($this->reporttype == "summary")
  2271. {
  2272. $valtemplate .= "<td style='border-top:1px dotted #FFFFFF;'>&nbsp;</td>";
  2273. }else
  2274. {
  2275. $valtemplate .= "<td>".$fieldvalue."</td>";
  2276. }
  2277. }else if(($secondvalue == $fieldvalue) && $this->reporttype == "summary")
  2278. {
  2279. if($lastvalue == $newvalue)
  2280. {
  2281. $valtemplate .= "<td style='border-top:1px dotted #FFFFFF;'>&nbsp;</td>";
  2282. }else
  2283. {
  2284. $valtemplate .= "<td>".$fieldvalue."</td>";
  2285. }
  2286. }
  2287. else if(($thirdvalue == $fieldvalue) && $this->reporttype == "summary")
  2288. {
  2289. if($secondvalue == $snewvalue)
  2290. {
  2291. $valtemplate .= "<td style='border-top:1px dotted #FFFFFF;'>&nbsp;</td>";
  2292. }else
  2293. {
  2294. $valtemplate .= "<td>".$fieldvalue."</td>";
  2295. }
  2296. }
  2297. else
  2298. {
  2299. if($this->reporttype == "tabular")
  2300. {
  2301. $valtemplate .= "<td>".$fieldvalue."</td>";
  2302. }else
  2303. {
  2304. $valtemplate .= "<td>".$fieldvalue."</td>";
  2305. }
  2306. }
  2307. }
  2308. $valtemplate .= "</tr>";
  2309. $lastvalue = $newvalue;
  2310. $secondvalue = $snewvalue;
  2311. $thirdvalue = $tnewvalue;
  2312. $arr_val[] = $arraylists;
  2313. set_time_limit($php_max_execution_time);
  2314. }while($custom_field_values = $adb->fetch_array($result));
  2315. $sHTML = '<tr>'.$header.'</tr>'.$valtemplate;
  2316. $return_data[] = $sHTML;
  2317. $return_data[] = $noofrows;
  2318. return $return_data;
  2319. }
  2320. }elseif($outputformat == "PRINT_TOTAL")
  2321. {
  2322. $escapedchars = Array('_SUM','_AVG','_MIN','_MAX');
  2323. $sSQL = $this->sGetSQLforReport($this->reportid,$filtersql,"COLUMNSTOTOTAL");
  2324. if(isset($this->totallist))
  2325. {
  2326. if($sSQL != "")
  2327. {
  2328. $result = $adb->query($sSQL);
  2329. $y=$adb->num_fields($result);
  2330. $custom_field_values = $adb->fetch_array($result);
  2331. $coltotalhtml .= "<br /><table align='center' width='60%' cellpadding='3' cellspacing='0' border='1' class='printReport'><tr><td class='rptCellLabel'>".$mod_strings['Totals']."</td><td><b>".$mod_strings['SUM']."</b></td><td><b>".$mod_strings['AVG']."</b></td><td><b>".$mod_strings['MIN']."</b></td><td><b>".$mod_strings['MAX']."</b></td></tr>";
  2332. // Performation Optimization: If Direct output is desired
  2333. if($directOutput) {
  2334. echo $coltotalhtml;
  2335. $coltotalhtml = '';
  2336. }
  2337. // END
  2338. foreach($this->totallist as $key=>$value)
  2339. {
  2340. $fieldlist = explode(":",$key);
  2341. $mod_query = $adb->pquery("SELECT distinct(tabid) as tabid, uitype as uitype from vtiger_field where tablename = ? and columnname=?",array($fieldlist[1],$fieldlist[2]));
  2342. if($adb->num_rows($mod_query)>0){
  2343. $module_name = getTabModuleName($adb->query_result($mod_query,0,'tabid'));
  2344. $fieldlabel = trim(str_replace($escapedchars," ",$fieldlist[3]));
  2345. $fieldlabel = str_replace("_", " ", $fieldlabel);
  2346. if($module_name){
  2347. $field = getTranslatedString($module_name, $module_name)." ".getTranslatedString($fieldlabel,$module_name);
  2348. } else {
  2349. $field = getTranslatedString($fieldlabel);
  2350. }
  2351. }
  2352. $uitype_arr[str_replace($escapedchars," ",$module_name."_".$fieldlist[3])] = $adb->query_result($mod_query,0,"uitype");
  2353. $totclmnflds[str_replace($escapedchars," ",$module_name."_".$fieldlist[3])] = $field;
  2354. }
  2355. for($i =0;$i<$y;$i++)
  2356. {
  2357. $fld = $adb->field_name($result, $i);
  2358. $keyhdr[$fld->name] = $custom_field_values[$i];
  2359. }
  2360. foreach($totclmnflds as $key=>$value)
  2361. {
  2362. $coltotalhtml .= '<tr class="rptGrpHead">';
  2363. $col_header = getTranslatedString(trim(str_replace($modules," ",$value)));
  2364. $fld_name_1 = $this->primarymodule . "_" . trim($value);
  2365. $fld_name_2 = $this->secondarymodule . "_" . trim($value);
  2366. if($uitype_arr[$key]==71 || $uitype_arr[$key] == 72 ||
  2367. in_array($fld_name_1,$this->append_currency_symbol_to_value) || in_array($fld_name_2,$this->append_currency_symbol_to_value)) {
  2368. $col_header .= " (".$app_strings['LBL_IN']." ".$current_user->currency_symbol.")";
  2369. $convert_price = true;
  2370. } else{
  2371. $convert_price = false;
  2372. }
  2373. $coltotalhtml .= '<td class="rptData">'. $col_header .'</td>';
  2374. $value = trim($key);
  2375. $arraykey = $value.'_SUM';
  2376. if(isset($keyhdr[$arraykey]))
  2377. {
  2378. if($convert_price)
  2379. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2380. else
  2381. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2382. $coltotalhtml .= "<td class='rptTotal'>".$conv_value.'</td>';
  2383. }else
  2384. {
  2385. $coltotalhtml .= "<td class='rptTotal'>&nbsp;</td>";
  2386. }
  2387. $arraykey = $value.'_AVG';
  2388. if(isset($keyhdr[$arraykey]))
  2389. {
  2390. if($convert_price)
  2391. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2392. else
  2393. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2394. $coltotalhtml .= "<td class='rptTotal'>".$conv_value.'</td>';
  2395. }else
  2396. {
  2397. $coltotalhtml .= "<td class='rptTotal'>&nbsp;</td>";
  2398. }
  2399. $arraykey = $value.'_MIN';
  2400. if(isset($keyhdr[$arraykey]))
  2401. {
  2402. if($convert_price)
  2403. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2404. else
  2405. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2406. $coltotalhtml .= "<td class='rptTotal'>".$conv_value.'</td>';
  2407. }else
  2408. {
  2409. $coltotalhtml .= "<td class='rptTotal'>&nbsp;</td>";
  2410. }
  2411. $arraykey = $value.'_MAX';
  2412. if(isset($keyhdr[$arraykey]))
  2413. {
  2414. if($convert_price)
  2415. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey]);
  2416. else
  2417. $conv_value = CurrencyField::convertToUserFormat ($keyhdr[$arraykey], null, true);
  2418. $coltotalhtml .= "<td class='rptTotal'>".$conv_value.'</td>';
  2419. }else
  2420. {
  2421. $coltotalhtml .= "<td class='rptTotal'>&nbsp;</td>";
  2422. }
  2423. $coltotalhtml .= '</tr>';
  2424. // Performation Optimization: If Direct output is desired
  2425. if($directOutput) {
  2426. echo $coltotalhtml;
  2427. $coltotalhtml = '';
  2428. }
  2429. // END
  2430. }
  2431. $coltotalhtml .= "</table>";
  2432. // Performation Optimization: If Direct output is desired
  2433. if($directOutput) {
  2434. echo $coltotalhtml;
  2435. $coltotalhtml = '';
  2436. }
  2437. // END
  2438. }
  2439. }
  2440. return $coltotalhtml;
  2441. }
  2442. }
  2443. //<<<<<<<new>>>>>>>>>>
  2444. function getColumnsTotal($reportid)
  2445. {
  2446. // Have we initialized it already?
  2447. if($this->_columnstotallist !== false) {
  2448. return $this->_columnstotallist;
  2449. }
  2450. global $adb;
  2451. global $modules;
  2452. global $log, $current_user;
  2453. $query = "select * from vtiger_reportmodules where reportmodulesid =?";
  2454. $res = $adb->pquery($query , array($reportid));
  2455. $modrow = $adb->fetch_array($res);
  2456. $premod = $modrow["primarymodule"];
  2457. $secmod = $modrow["secondarymodules"];
  2458. $coltotalsql = "select vtiger_reportsummary.* from vtiger_report";
  2459. $coltotalsql .= " inner join vtiger_reportsummary on vtiger_report.reportid = vtiger_reportsummary.reportsummaryid";
  2460. $coltotalsql .= " where vtiger_report.reportid =?";
  2461. $result = $adb->pquery($coltotalsql, array($reportid));
  2462. while($coltotalrow = $adb->fetch_array($result))
  2463. {
  2464. $fieldcolname = $coltotalrow["columnname"];
  2465. if($fieldcolname != "none")
  2466. {
  2467. $fieldlist = explode(":",$fieldcolname);
  2468. $field_tablename = $fieldlist[1];
  2469. $field_columnname = $fieldlist[2];
  2470. $mod_query = $adb->pquery("SELECT distinct(tabid) as tabid from vtiger_field where tablename = ? and columnname=?",array($fieldlist[1],$fieldlist[2]));
  2471. if($adb->num_rows($mod_query)>0){
  2472. $module_name = getTabName($adb->query_result($mod_query,0,'tabid'));
  2473. $fieldlabel = trim($fieldlist[3]);
  2474. if($module_name){
  2475. $field_columnalias = $module_name."_".$fieldlist[3];
  2476. } else {
  2477. $field_columnalias = $module_name."_".$fieldlist[3];
  2478. }
  2479. }
  2480. //$field_columnalias = $fieldlist[3];
  2481. $field_permitted = false;
  2482. if(CheckColumnPermission($field_tablename,$field_columnname,$premod) != "false"){
  2483. $field_permitted = true;
  2484. } else {
  2485. $mod = split(":",$secmod);
  2486. foreach($mod as $key){
  2487. if(CheckColumnPermission($field_tablename,$field_columnname,$key) != "false"){
  2488. $field_permitted=true;
  2489. }
  2490. }
  2491. }
  2492. if($field_permitted == true)
  2493. {
  2494. $field = $field_tablename.".".$field_columnname;
  2495. if($field_tablename == 'vtiger_products' && $field_columnname == 'unit_price') {
  2496. // Query needs to be rebuild to get the value in user preferred currency. [innerProduct and actual_unit_price are table and column alias.]
  2497. $field = " innerProduct.actual_unit_price";
  2498. }
  2499. if($field_tablename == 'vtiger_service' && $field_columnname == 'unit_price') {
  2500. // Query needs to be rebuild to get the value in user preferred currency. [innerProduct and actual_unit_price are table and column alias.]
  2501. $field = " innerService.actual_unit_price";
  2502. }
  2503. if(($field_tablename == 'vtiger_invoice' || $field_tablename == 'vtiger_quotes' || $field_tablename == 'vtiger_purchaseorder' || $field_tablename == 'vtiger_salesorder')
  2504. && ($field_columnname == 'total' || $field_columnname == 'subtotal' || $field_columnname == 'discount_amount' || $field_columnname == 's_h_amount')) {
  2505. $field = " $field_tablename.$field_columnname/$field_tablename.conversion_rate ";
  2506. }
  2507. if($fieldlist[4] == 2)
  2508. {
  2509. $stdfilterlist[$fieldcolname] = "sum($field) '".$field_columnalias."'";
  2510. }
  2511. if($fieldlist[4] == 3)
  2512. {
  2513. //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.
  2514. //$stdfilterlist[$fieldcolname] = "avg(".$fieldlist[1].".".$fieldlist[2].") '".$fieldlist[3]."'";
  2515. $stdfilterlist[$fieldcolname] = "(sum($field)/count(*)) '".$field_columnalias."'";
  2516. }
  2517. if($fieldlist[4] == 4)
  2518. {
  2519. $stdfilterlist[$fieldcolname] = "min($field) '".$field_columnalias."'";
  2520. }
  2521. if($fieldlist[4] == 5)
  2522. {
  2523. $stdfilterlist[$fieldcolname] = "max($field) '".$field_columnalias."'";
  2524. }
  2525. }
  2526. }
  2527. }
  2528. // Save the information
  2529. $this->_columnstotallist = $stdfilterlist;
  2530. $log->info("ReportRun :: Successfully returned getColumnsTotal".$reportid);
  2531. return $stdfilterlist;
  2532. }
  2533. //<<<<<<new>>>>>>>>>
  2534. /** function to get query for the columns to total for the given reportid
  2535. * @ param $reportid : Type integer
  2536. * This returns columnstoTotal query for the reportid
  2537. */
  2538. function getColumnsToTotalColumns($reportid)
  2539. {
  2540. global $adb;
  2541. global $modules;
  2542. global $log;
  2543. $sreportstdfiltersql = "select vtiger_reportsummary.* from vtiger_report";
  2544. $sreportstdfiltersql .= " inner join vtiger_reportsummary on vtiger_report.reportid = vtiger_reportsummary.reportsummaryid";
  2545. $sreportstdfiltersql .= " where vtiger_report.reportid =?";
  2546. $result = $adb->pquery($sreportstdfiltersql, array($reportid));
  2547. $noofrows = $adb->num_rows($result);
  2548. for($i=0; $i<$noofrows; $i++)
  2549. {
  2550. $fieldcolname = $adb->query_result($result,$i,"columnname");
  2551. if($fieldcolname != "none")
  2552. {
  2553. $fieldlist = explode(":",$fieldcolname);
  2554. if($fieldlist[4] == 2)
  2555. {
  2556. $sSQLList[] = "sum(".$fieldlist[1].".".$fieldlist[2].") ".$fieldlist[3];
  2557. }
  2558. if($fieldlist[4] == 3)
  2559. {
  2560. $sSQLList[] = "avg(".$fieldlist[1].".".$fieldlist[2].") ".$fieldlist[3];
  2561. }
  2562. if($fieldlist[4] == 4)
  2563. {
  2564. $sSQLList[] = "min(".$fieldlist[1].".".$fieldlist[2].") ".$fieldlist[3];
  2565. }
  2566. if($fieldlist[4] == 5)
  2567. {
  2568. $sSQLList[] = "max(".$fieldlist[1].".".$fieldlist[2].") ".$fieldlist[3];
  2569. }
  2570. }
  2571. }
  2572. if(isset($sSQLList))
  2573. {
  2574. $sSQL = implode(",",$sSQLList);
  2575. }
  2576. $log->info("ReportRun :: Successfully returned getColumnsToTotalColumns".$reportid);
  2577. return $sSQL;
  2578. }
  2579. /** Function to convert the Report Header Names into i18n
  2580. * @param $fldname: Type Varchar
  2581. * Returns Language Converted Header Strings
  2582. **/
  2583. function getLstringforReportHeaders($fldname)
  2584. {
  2585. global $modules,$current_language,$current_user,$app_strings;
  2586. $rep_header = ltrim($fldname);
  2587. $rep_header = decode_html($rep_header);
  2588. $labelInfo = explode('_', $rep_header);
  2589. $rep_module = $labelInfo[0];
  2590. if(is_array($this->labelMapping) && !empty($this->labelMapping[$rep_header])) {
  2591. $rep_header = $this->labelMapping[$rep_header];
  2592. } else {
  2593. if($rep_module == 'LBL') {
  2594. $rep_module = '';
  2595. }
  2596. array_shift($labelInfo);
  2597. $fieldLabel = decode_html(implode("_",$labelInfo));
  2598. $rep_header_temp = preg_replace("/\s+/","_",$fieldLabel);
  2599. $rep_header = "$rep_module $fieldLabel";
  2600. }
  2601. $curr_symb = "";
  2602. $fieldLabel = ltrim(str_replace($rep_module, '', $rep_header), '_');
  2603. $fieldInfo = getFieldByReportLabel($rep_module, $fieldLabel);
  2604. if($fieldInfo['uitype'] == '71') {
  2605. $curr_symb = " (".$app_strings['LBL_IN']." ".$current_user->currency_symbol.")";
  2606. }
  2607. $rep_header .=$curr_symb;
  2608. return $rep_header;
  2609. }
  2610. /** Function to get picklist value array based on profile
  2611. * * returns permitted fields in array format
  2612. **/
  2613. function getAccessPickListValues()
  2614. {
  2615. global $adb;
  2616. global $current_user;
  2617. $id = array(getTabid($this->primarymodule));
  2618. if($this->secondarymodule != '')
  2619. array_push($id, getTabid($this->secondarymodule));
  2620. $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 (?)';
  2621. $result = $adb->pquery($query, $id);//,$select_column));
  2622. $roleid=$current_user->roleid;
  2623. $subrole = getRoleSubordinates($roleid);
  2624. if(count($subrole)> 0)
  2625. {
  2626. $roleids = $subrole;
  2627. array_push($roleids, $roleid);
  2628. }
  2629. else
  2630. {
  2631. $roleids = $roleid;
  2632. }
  2633. $temp_status = Array();
  2634. for($i=0;$i < $adb->num_rows($result);$i++)
  2635. {
  2636. $fieldname = $adb->query_result($result,$i,"fieldname");
  2637. $fieldlabel = $adb->query_result($result,$i,"fieldlabel");
  2638. $tabid = $adb->query_result($result,$i,"tabid");
  2639. $uitype = $adb->query_result($result,$i,"uitype");
  2640. $fieldlabel1 = str_replace(" ","_",$fieldlabel);
  2641. $keyvalue = getTabModuleName($tabid)."_".$fieldlabel1;
  2642. $fieldvalues = Array();
  2643. if (count($roleids) > 1) {
  2644. $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";
  2645. } else {
  2646. $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";
  2647. }
  2648. if($fieldname != 'firstname')
  2649. $mulselresult = $adb->query($mulsel);
  2650. for($j=0;$j < $adb->num_rows($mulselresult);$j++)
  2651. {
  2652. $fldvalue = $adb->query_result($mulselresult,$j,$fieldname);
  2653. if(in_array($fldvalue,$fieldvalues)) continue;
  2654. $fieldvalues[] = $fldvalue;
  2655. }
  2656. $field_count = count($fieldvalues);
  2657. if( $uitype == 15 && $field_count > 0 && ($fieldname == 'taskstatus' || $fieldname == 'eventstatus'))
  2658. {
  2659. $temp_count =count($temp_status[$keyvalue]);
  2660. if($temp_count > 0)
  2661. {
  2662. for($t=0;$t < $field_count;$t++)
  2663. {
  2664. $temp_status[$keyvalue][($temp_count+$t)] = $fieldvalues[$t];
  2665. }
  2666. $fieldvalues = $temp_status[$keyvalue];
  2667. }
  2668. else
  2669. $temp_status[$keyvalue] = $fieldvalues;
  2670. }
  2671. if($uitype == 33)
  2672. $fieldlists[1][$keyvalue] = $fieldvalues;
  2673. else if($uitype == 55 && $fieldname == 'salutationtype')
  2674. $fieldlists[$keyvalue] = $fieldvalues;
  2675. else if($uitype == 15)
  2676. $fieldlists[$keyvalue] = $fieldvalues;
  2677. }
  2678. return $fieldlists;
  2679. }
  2680. function getReportPDF($filterlist=false) {
  2681. require_once 'include/tcpdf/tcpdf.php';
  2682. $arr_val = $this->GenerateReport("PDF",$filterlist);
  2683. if(isset($arr_val)) {
  2684. foreach($arr_val as $wkey=>$warray_value) {
  2685. foreach($warray_value as $whd=>$wvalue) {
  2686. if(strlen($wvalue) < strlen($whd)) {
  2687. $w_inner_array[] = strlen($whd);
  2688. } else {
  2689. $w_inner_array[] = strlen($wvalue);
  2690. }
  2691. }
  2692. $warr_val[] = $w_inner_array;
  2693. unset($w_inner_array);
  2694. }
  2695. foreach($warr_val[0] as $fkey=>$fvalue) {
  2696. foreach($warr_val as $wkey=>$wvalue) {
  2697. $f_inner_array[] = $warr_val[$wkey][$fkey];
  2698. }
  2699. sort($f_inner_array,1);
  2700. $farr_val[] = $f_inner_array;
  2701. unset($f_inner_array);
  2702. }
  2703. foreach($farr_val as $skkey=>$skvalue) {
  2704. if($skvalue[count($arr_val)-1] == 1) {
  2705. $col_width[] = ($skvalue[count($arr_val)-1] * 50);
  2706. } else {
  2707. $col_width[] = ($skvalue[count($arr_val)-1] * 10) + 10 ;
  2708. }
  2709. }
  2710. $count = 0;
  2711. foreach($arr_val[0] as $key=>$value) {
  2712. $headerHTML .= '<td width="'.$col_width[$count].'" bgcolor="#DDDDDD"><b>'.$this->getLstringforReportHeaders($key).'</b></td>';
  2713. $count = $count + 1;
  2714. }
  2715. foreach($arr_val as $key=>$array_value) {
  2716. $valueHTML = "";
  2717. $count = 0;
  2718. foreach($array_value as $hd=>$value) {
  2719. $valueHTML .= '<td width="'.$col_width[$count].'">'.$value.'</td>';
  2720. $count = $count + 1;
  2721. }
  2722. $dataHTML .= '<tr>'.$valueHTML.'</tr>';
  2723. }
  2724. }
  2725. $totalpdf = $this->GenerateReport("PRINT_TOTAL",$filterlist);
  2726. $html = '<table border="1"><tr>'.$headerHTML.'</tr>'.$dataHTML.'<tr><td>'.$totalpdf.'</td></tr>'.'</table>';
  2727. $columnlength = array_sum($col_width);
  2728. if($columnlength > 14400) {
  2729. die("<br><br><center>".$app_strings['LBL_PDF']." <a href='javascript:window.history.back()'>".$app_strings['LBL_GO_BACK'].".</a></center>");
  2730. }
  2731. if($columnlength <= 420 ) {
  2732. $pdf = new TCPDF('P','mm','A5',true);
  2733. } elseif($columnlength >= 421 && $columnlength <= 1120) {
  2734. $pdf = new TCPDF('L','mm','A3',true);
  2735. }elseif($columnlength >=1121 && $columnlength <= 1600) {
  2736. $pdf = new TCPDF('L','mm','A2',true);
  2737. }elseif($columnlength >=1601 && $columnlength <= 2200) {
  2738. $pdf = new TCPDF('L','mm','A1',true);
  2739. }
  2740. elseif($columnlength >=2201 && $columnlength <= 3370) {
  2741. $pdf = new TCPDF('L','mm','A0',true);
  2742. }
  2743. elseif($columnlength >=3371 && $columnlength <= 4690) {
  2744. $pdf = new TCPDF('L','mm','2A0',true);
  2745. }
  2746. elseif($columnlength >=4691 && $columnlength <= 6490) {
  2747. $pdf = new TCPDF('L','mm','4A0',true);
  2748. }
  2749. else {
  2750. $columnhight = count($arr_val)*15;
  2751. $format = array($columnhight,$columnlength);
  2752. $pdf = new TCPDF('L','mm',$format,true);
  2753. }
  2754. $pdf->SetMargins(10, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
  2755. $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
  2756. $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
  2757. $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
  2758. $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
  2759. $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
  2760. $pdf->setLanguageArray($l);
  2761. //echo '<pre>';print_r($columnlength);echo '</pre>';
  2762. $pdf->AddPage();
  2763. $pdf->SetFillColor(224,235,255);
  2764. $pdf->SetTextColor(0);
  2765. $pdf->SetFont('FreeSerif','B',14);
  2766. $pdf->Cell(($pdf->columnlength*50),10,getTranslatedString($oReport->reportname),0,0,'C',0);
  2767. //$pdf->writeHTML($oReport->reportname);
  2768. $pdf->Ln();
  2769. $pdf->SetFont('FreeSerif','',10);
  2770. $pdf->writeHTML($html);
  2771. return $pdf;
  2772. }
  2773. function writeReportToExcelFile($fileName, $filterlist='') {
  2774. global $currentModule, $current_language;
  2775. $mod_strings = return_module_language($current_language, $currentModule);
  2776. require_once("include/php_writeexcel/class.writeexcel_workbook.inc.php");
  2777. require_once("include/php_writeexcel/class.writeexcel_worksheet.inc.php");
  2778. $workbook = &new writeexcel_workbook($fileName);
  2779. $worksheet =& $workbook->addworksheet();
  2780. # Set the column width for columns 1, 2, 3 and 4
  2781. $worksheet->set_column(0, 3, 25);
  2782. # Create a format for the column headings
  2783. $header =& $workbook->addformat();
  2784. $header->set_bold();
  2785. $header->set_size(12);
  2786. $header->set_color('blue');
  2787. $arr_val = $this->GenerateReport("PDF",$filterlist);
  2788. $totalxls = $this->GenerateReport("TOTALXLS",$filterlist);
  2789. if(isset($arr_val)) {
  2790. foreach($arr_val[0] as $key=>$value) {
  2791. $worksheet->write(0, $count, $key , $header);
  2792. $count = $count + 1;
  2793. }
  2794. $rowcount=1;
  2795. foreach($arr_val as $key=>$array_value) {
  2796. $dcount = 0;
  2797. foreach($array_value as $hdr=>$value) {
  2798. //$worksheet->write($key+1, $dcount, iconv("UTF-8", "ISO-8859-1", $value));
  2799. $value = decode_html($value);
  2800. $worksheet->write($key+1, $dcount, utf8_decode($value));
  2801. $dcount = $dcount + 1;
  2802. }
  2803. $rowcount++;
  2804. }
  2805. $rowcount++;
  2806. $count=0;
  2807. if(is_array($totalxls[0])) {
  2808. foreach($totalxls[0] as $key=>$value) {
  2809. $chdr=substr($key,-3,3);
  2810. $translated_str = in_array($chdr ,array_keys($mod_strings))?$mod_strings[$chdr]:$key;
  2811. $worksheet->write($rowcount, $count, $translated_str);
  2812. $count = $count + 1;
  2813. }
  2814. }
  2815. $rowcount++;
  2816. foreach($totalxls as $key=>$array_value) {
  2817. $dcount = 0;
  2818. foreach($array_value as $hdr=>$value) {
  2819. //$worksheet->write($key+1, $dcount, iconv("UTF-8", "ISO-8859-1", $value));
  2820. //if ($dcount==1)
  2821. // $worksheet->write($key+$rowcount, 0, utf8_decode(substr($hdr,0,strlen($hdr)-4)));
  2822. $value = decode_html($value);
  2823. $worksheet->write($key+$rowcount, $dcount, utf8_decode($value));
  2824. $dcount = $dcount + 1;
  2825. }
  2826. }
  2827. }
  2828. $workbook->close();
  2829. }
  2830. function getGroupByTimeList($reportId){
  2831. global $adb;
  2832. $groupByTimeQuery = "SELECT * FROM vtiger_reportgroupbycolumn WHERE reportid=?";
  2833. $groupByTimeRes = $adb->pquery($groupByTimeQuery,array($reportId));
  2834. $num_rows = $adb->num_rows($groupByTimeRes);
  2835. for($i=0;$i<$num_rows;$i++){
  2836. $sortColName = $adb->query_result($groupByTimeRes, $i,'sortcolname');
  2837. list($tablename,$colname,$module_field,$fieldname,$single) = split(':',$sortColName);
  2838. $groupField = $module_field;
  2839. $groupCriteria = $adb->query_result($groupByTimeRes, $i,'dategroupbycriteria');
  2840. if(in_array($groupCriteria,array_keys($this->groupByTimeParent))){
  2841. $parentCriteria = $this->groupByTimeParent[$groupCriteria];
  2842. foreach($parentCriteria as $criteria){
  2843. $groupByCondition[]=$this->GetTimeCriteriaCondition($criteria, $groupField);
  2844. }
  2845. }
  2846. $groupByCondition[] = $this->GetTimeCriteriaCondition($groupCriteria, $groupField);
  2847. }
  2848. return $groupByCondition;
  2849. }
  2850. function GetTimeCriteriaCondition($criteria,$dateField){
  2851. $condition = "";
  2852. if(strtolower($criteria)=='year'){
  2853. $condition = "DATE_FORMAT($dateField, '%Y' )";
  2854. }
  2855. else if (strtolower($criteria)=='month'){
  2856. $condition = "CEIL(DATE_FORMAT($dateField,'%m')%13)";
  2857. }
  2858. else if(strtolower($criteria)=='quarter'){
  2859. $condition = "CEIL(DATE_FORMAT($dateField,'%m')/3)";
  2860. }
  2861. return $condition;
  2862. }
  2863. function GetFirstSortByField($reportid)
  2864. {
  2865. global $adb;
  2866. $groupByField ="";
  2867. $sortFieldQuery = "SELECT * FROM vtiger_reportsortcol
  2868. LEFT JOIN vtiger_reportgroupbycolumn ON (vtiger_reportsortcol.sortcolid = vtiger_reportgroupbycolumn.sortid and vtiger_reportsortcol.reportid = vtiger_reportgroupbycolumn.reportid)
  2869. WHERE columnname!='none' and vtiger_reportsortcol.reportid=? ORDER By sortcolid";
  2870. $sortFieldResult= $adb->pquery($sortFieldQuery,array($reportid));
  2871. if($adb->num_rows($sortFieldResult)>0){
  2872. $fieldcolname = $adb->query_result($sortFieldResult,0,'columnname');
  2873. list($tablename,$colname,$module_field,$fieldname,$typeOfData) = explode(":",$fieldcolname);
  2874. list($modulename,$fieldlabel) = explode('_', $module_field, 2);
  2875. $groupByField = $module_field;
  2876. if($typeOfData == "D"){
  2877. $groupCriteria = $adb->query_result($sortFieldResult,0,'dategroupbycriteria');
  2878. if(strtolower($groupCriteria)!='none'){
  2879. if(in_array($groupCriteria,array_keys($this->groupByTimeParent))){
  2880. $parentCriteria = $this->groupByTimeParent[$groupCriteria];
  2881. foreach($parentCriteria as $criteria){
  2882. $groupByCondition[]=$this->GetTimeCriteriaCondition($criteria, $groupByField);
  2883. }
  2884. }
  2885. $groupByCondition[] = $this->GetTimeCriteriaCondition($groupCriteria, $groupByField);
  2886. $groupByField = implode(", ",$groupByCondition);
  2887. }
  2888. } elseif(CheckFieldPermission($fieldname,$modulename) != 'true') {
  2889. $groupByField = $tablename.".".$colname;
  2890. }
  2891. }
  2892. return $groupByField;
  2893. }
  2894. function getReferenceFieldColumnList($moduleName, $fieldInfo) {
  2895. $adb = PearDatabase::getInstance();
  2896. $columnsSqlList = array();
  2897. $fieldInstance = WebserviceField::fromArray($adb, $fieldInfo);
  2898. $referenceModuleList = $fieldInstance->getReferenceList();
  2899. $reportSecondaryModules = explode(':', $this->secondarymodule);
  2900. if($moduleName != $this->primarymodule && in_array($this->primarymodule, $referenceModuleList)) {
  2901. $entityTableFieldNames = getEntityFieldNames($this->primarymodule);
  2902. $entityTableName = $entityTableFieldNames['tablename'];
  2903. $entityFieldNames = $entityTableFieldNames['fieldname'];
  2904. $columnList = array();
  2905. if(is_array($entityFieldNames)) {
  2906. foreach ($entityFieldNames as $entityColumnName) {
  2907. $columnList["$entityColumnName"] = "$entityTableName.$entityColumnName";
  2908. }
  2909. } else {
  2910. $columnList[] = "$entityTableName.$entityFieldNames";
  2911. }
  2912. if(count($columnList) > 1) {
  2913. $columnSql = getSqlForNameInDisplayFormat($columnList, $this->primarymodule);
  2914. } else {
  2915. $columnSql = implode('', $columnList);
  2916. }
  2917. $columnsSqlList[] = $columnSql;
  2918. } else {
  2919. foreach($referenceModuleList as $referenceModule) {
  2920. $entityTableFieldNames = getEntityFieldNames($referenceModule);
  2921. $entityTableName = $entityTableFieldNames['tablename'];
  2922. $entityFieldNames = $entityTableFieldNames['fieldname'];
  2923. if($moduleName == 'HelpDesk' && $referenceModule == 'Accounts') {
  2924. $referenceTableName = 'vtiger_accountRelHelpDesk';
  2925. } elseif ($moduleName == 'HelpDesk' && $referenceModule == 'Contacts') {
  2926. $referenceTableName = 'vtiger_contactdetailsRelHelpDesk';
  2927. } elseif ($moduleName == 'HelpDesk' && $referenceModule == 'Products') {
  2928. $referenceTableName = 'vtiger_productsRel';
  2929. } elseif ($moduleName == 'Calendar' && $referenceModule == 'Accounts') {
  2930. $referenceTableName = 'vtiger_accountRelCalendar';
  2931. } elseif ($moduleName == 'Calendar' && $referenceModule == 'Contacts') {
  2932. $referenceTableName = 'vtiger_contactdetailsCalendar';
  2933. } elseif ($moduleName == 'Calendar' && $referenceModule == 'Leads') {
  2934. $referenceTableName = 'vtiger_leaddetailsRelCalendar';
  2935. } elseif ($moduleName == 'Calendar' && $referenceModule == 'Potentials') {
  2936. $referenceTableName = 'vtiger_potentialRelCalendar';
  2937. } elseif ($moduleName == 'Calendar' && $referenceModule == 'Invoice') {
  2938. $referenceTableName = 'vtiger_invoiceRelCalendar';
  2939. } elseif ($moduleName == 'Calendar' && $referenceModule == 'Quotes') {
  2940. $referenceTableName = 'vtiger_quotesRelCalendar';
  2941. } elseif ($moduleName == 'Calendar' && $referenceModule == 'PurchaseOrder') {
  2942. $referenceTableName = 'vtiger_purchaseorderRelCalendar';
  2943. } elseif ($moduleName == 'Calendar' && $referenceModule == 'SalesOrder') {
  2944. $referenceTableName = 'vtiger_salesorderRelCalendar';
  2945. } elseif ($moduleName == 'Calendar' && $referenceModule == 'HelpDesk') {
  2946. $referenceTableName = 'vtiger_troubleticketsRelCalendar';
  2947. } elseif ($moduleName == 'Calendar' && $referenceModule == 'Campaigns') {
  2948. $referenceTableName = 'vtiger_campaignRelCalendar';
  2949. } elseif ($moduleName == 'Contacts' && $referenceModule == 'Accounts') {
  2950. $referenceTableName = 'vtiger_accountContacts';
  2951. } elseif ($moduleName == 'Contacts' && $referenceModule == 'Contacts') {
  2952. $referenceTableName = 'vtiger_contactdetailsContacts';
  2953. } elseif ($moduleName == 'Accounts' && $referenceModule == 'Accounts') {
  2954. $referenceTableName = 'vtiger_accountAccounts';
  2955. } elseif ($moduleName == 'Campaigns' && $referenceModule == 'Products') {
  2956. $referenceTableName = 'vtiger_productsCampaigns';
  2957. } elseif ($moduleName == 'Faq' && $referenceModule == 'Products') {
  2958. $referenceTableName = 'vtiger_productsFaq';
  2959. } elseif ($moduleName == 'Invoice' && $referenceModule == 'SalesOrder') {
  2960. $referenceTableName = 'vtiger_salesorderInvoice';
  2961. } elseif ($moduleName == 'Invoice' && $referenceModule == 'Contacts') {
  2962. $referenceTableName = 'vtiger_contactdetailsInvoice';
  2963. } elseif ($moduleName == 'Invoice' && $referenceModule == 'Accounts') {
  2964. $referenceTableName = 'vtiger_accountInvoice';
  2965. } elseif ($moduleName == 'Potentials' && $referenceModule == 'Campaigns') {
  2966. $referenceTableName = 'vtiger_campaignPotentials';
  2967. } elseif ($moduleName == 'Products' && $referenceModule == 'Vendors') {
  2968. $referenceTableName = 'vtiger_vendorRelProducts';
  2969. } elseif ($moduleName == 'PurchaseOrder' && $referenceModule == 'Contacts') {
  2970. $referenceTableName = 'vtiger_contactdetailsPurchaseOrder';
  2971. } elseif ($moduleName == 'PurchaseOrder' && $referenceModule == 'Vendors') {
  2972. $referenceTableName = 'vtiger_vendorRelPurchaseOrder';
  2973. } elseif ($moduleName == 'Quotes' && $referenceModule == 'Potentials') {
  2974. $referenceTableName = 'vtiger_potentialRelQuotes';
  2975. } elseif ($moduleName == 'Quotes' && $referenceModule == 'Accounts') {
  2976. $referenceTableName = 'vtiger_accountQuotes';
  2977. } elseif ($moduleName == 'Quotes' && $referenceModule == 'Contacts') {
  2978. $referenceTableName = 'vtiger_contactdetailsQuotes';
  2979. } elseif ($moduleName == 'SalesOrder' && $referenceModule == 'Potentials') {
  2980. $referenceTableName = 'vtiger_potentialRelSalesOrder';
  2981. } elseif ($moduleName == 'SalesOrder' && $referenceModule == 'Accounts') {
  2982. $referenceTableName = 'vtiger_accountSalesOrder';
  2983. } elseif ($moduleName == 'SalesOrder' && $referenceModule == 'Contacts') {
  2984. $referenceTableName = 'vtiger_contactdetailsSalesOrder';
  2985. } elseif ($moduleName == 'SalesOrder' && $referenceModule == 'Quotes') {
  2986. $referenceTableName = 'vtiger_quotesSalesOrder';
  2987. } elseif ($moduleName == 'Potentials' && $referenceModule == 'Contacts') {
  2988. $referenceTableName = 'vtiger_contactdetailsPotentials';
  2989. } elseif ($moduleName == 'Potentials' && $referenceModule == 'Accounts') {
  2990. $referenceTableName = 'vtiger_accountPotentials';
  2991. } elseif (in_array($referenceModule, $reportSecondaryModules)) {
  2992. $referenceTableName = "{$entityTableName}Rel$referenceModule";
  2993. } elseif (in_array($moduleName, $reportSecondaryModules)) {
  2994. $referenceTableName = "{$entityTableName}Rel$moduleName";
  2995. } else {
  2996. $referenceTableName = "{$entityTableName}Rel{$moduleName}{$fieldInstance->getFieldId()}";
  2997. }
  2998. $columnList = array();
  2999. if(is_array($entityFieldNames)) {
  3000. foreach ($entityFieldNames as $entityColumnName) {
  3001. $columnList["$entityColumnName"] = "$referenceTableName.$entityColumnName";
  3002. }
  3003. } else {
  3004. $columnList[] = "$referenceTableName.$entityFieldNames";
  3005. }
  3006. if(count($columnList) > 1) {
  3007. $columnSql = getSqlForNameInDisplayFormat($columnList, $referenceModule);
  3008. } else {
  3009. $columnSql = implode('', $columnList);
  3010. }
  3011. if ($referenceModule == 'DocumentFolders' && $fieldInstance->getFieldName() == 'folderid') {
  3012. $columnSql = 'vtiger_attachmentsfolder.foldername';
  3013. }
  3014. if ($referenceModule == 'Currency' && $fieldInstance->getFieldName() == 'currency_id') {
  3015. $columnSql = "vtiger_currency_info$moduleName.currency_name";
  3016. }
  3017. $columnsSqlList[] = $columnSql;
  3018. }
  3019. }
  3020. return $columnsSqlList;
  3021. }
  3022. }
  3023. ?>