PageRenderTime 74ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 1ms

/modules/Reports/ReportRun.php

https://bitbucket.org/yousef_fadila/vtiger
PHP | 3331 lines | 2792 code | 320 blank | 219 comment | 977 complexity | e66695f58dc94f4507e027cf05742c8f MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0

Large files files are truncated, but you can click here to view the full file

  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('data/CRMEntity.php');
  18. require_once("modules/Reports/Reports.php");
  19. require_once 'modules/Reports/ReportUtils.php';
  20. require_once("vtlib/Vtiger/Module.php");
  21. class ReportRun extends CRMEntity
  22. {
  23. var $primarymodule;
  24. var $secondarymodule;
  25. var $orderbylistsql;
  26. var $orderbylistcolumns;
  27. var $selectcolumns;
  28. var $groupbylist;
  29. var $reporttype;
  30. var $reportname;
  31. var $totallist;
  32. var $_groupinglist = false;
  33. var $_columnslist = false;
  34. var $_stdfilterlist = false;
  35. var $_columnstotallist = false;
  36. var $_advfiltersql = false;
  37. var $append_currency_symbol_to_value = array('Products_Unit_Price','Services_Price',
  38. 'Invoice_Total', 'Invoice_Sub_Total', 'Invoice_S&H_Amount', 'Invoice_Discount_Amount', 'Invoice_Adjustment',
  39. 'Quotes_Total', 'Quotes_Sub_Total', 'Quotes_S&H_Amount', 'Quotes_Discount_Amount', 'Quotes_Adjustment',
  40. 'SalesOrder_Total', 'SalesOrder_Sub_Total', 'SalesOrder_S&H_Amount', 'SalesOrder_Discount_Amount', 'SalesOrder_Adjustment',
  41. 'PurchaseOrder_Total', 'PurchaseOrder_Sub_Total', 'PurchaseOrder_S&H_Amount', 'PurchaseOrder_Discount_Amount', 'PurchaseOrder_Adjustment'
  42. );
  43. var $ui10_fields = array();
  44. var $ui101_fields = array();
  45. var $groupByTimeParent = array( 'Quarter'=>array('Year'),
  46. 'Month'=>array('Year')
  47. );
  48. /** Function to set reportid,primarymodule,secondarymodule,reporttype,reportname, for given reportid
  49. * This function accepts the $reportid as argument
  50. * It sets reportid,primarymodule,secondarymodule,reporttype,reportname for the given reportid
  51. */
  52. function ReportRun($reportid)
  53. {
  54. $oReport = new Reports($reportid);
  55. $this->reportid = $reportid;
  56. $this->primarymodule = $oReport->primodule;
  57. $this->secondarymodule = $oReport->secmodule;
  58. $this->reporttype = $oReport->reporttype;
  59. $this->reportname = $oReport->reportname;
  60. }
  61. /** Function to get the columns for the reportid
  62. * This function accepts the $reportid and $outputformat (optional)
  63. * This function returns $columnslist Array($tablename:$columnname:$fieldlabel:$fieldname:$typeofdata=>$tablename.$columnname As Header value,
  64. * $tablename1:$columnname1:$fieldlabel1:$fieldname1:$typeofdata1=>$tablename1.$columnname1 As Header value,
  65. * |
  66. * $tablenamen:$columnnamen:$fieldlabeln:$fieldnamen:$typeofdatan=>$tablenamen.$columnnamen As Header value
  67. * )
  68. *
  69. */
  70. function getQueryColumnsList($reportid,$outputformat='')
  71. {
  72. // Have we initialized information already?
  73. if($this->_columnslist !== false) {
  74. return $this->_columnslist;
  75. }
  76. global $adb;
  77. global $modules;
  78. global $log,$current_user,$current_language;
  79. $ssql = "select vtiger_selectcolumn.* from vtiger_report inner join vtiger_selectquery on vtiger_selectquery.queryid = vtiger_report.queryid";
  80. $ssql .= " left join vtiger_selectcolumn on vtiger_selectcolumn.queryid = vtiger_selectquery.queryid";
  81. $ssql .= " where vtiger_report.reportid = ?";
  82. $ssql .= " order by vtiger_selectcolumn.columnindex";
  83. $result = $adb->pquery($ssql, array($reportid));
  84. $permitted_fields = Array();
  85. while($columnslistrow = $adb->fetch_array($result))
  86. {
  87. $fieldname ="";
  88. $fieldcolname = $columnslistrow["columnname"];
  89. list($tablename,$colname,$module_field,$fieldname,$single) = split(":",$fieldcolname);
  90. list($module,$field) = split("_",$module_field,2);
  91. $inventory_fields = array('quantity','listprice','serviceid','productid','discount','comment');
  92. $inventory_modules = array('SalesOrder','Quotes','PurchaseOrder','Invoice');
  93. require('user_privileges/user_privileges_'.$current_user->id.'.php');
  94. if(sizeof($permitted_fields[$module]) == 0 && $is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1)
  95. {
  96. $permitted_fields[$module] = $this->getaccesfield($module);
  97. }
  98. if(in_array($module,$inventory_modules)){
  99. $permitted_fields = array_merge($permitted_fields,$inventory_fields);
  100. }
  101. $selectedfields = explode(":",$fieldcolname);
  102. if($is_admin == false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1
  103. && !in_array($selectedfields[3], $permitted_fields[$module])) {
  104. //user has no access to this field, skip it.
  105. continue;
  106. }
  107. $concatSql = getSqlForNameInDisplayFormat(array('first_name'=>$selectedfields[0].".first_name",'last_name'=>$selectedfields[0].".last_name"), 'Users');
  108. $querycolumns = $this->getEscapedColumns($selectedfields);
  109. if(isset($module) && $module!="") {
  110. $mod_strings = return_module_language($current_language,$module);
  111. }
  112. $fieldlabel = trim(preg_replace("/$module/"," ",$selectedfields[2],1));
  113. $mod_arr=explode('_',$fieldlabel);
  114. $fieldlabel = trim(str_replace("_"," ",$fieldlabel));
  115. //modified code to support i18n issue
  116. $fld_arr = explode(" ",$fieldlabel);
  117. if(($mod_arr[0] == '')) {
  118. $mod = $module;
  119. $mod_lbl = getTranslatedString($module,$module); //module
  120. } else {
  121. $mod = $mod_arr[0];
  122. array_shift($fld_arr);
  123. $mod_lbl = getTranslatedString($fld_arr[0],$mod); //module
  124. }
  125. $fld_lbl_str = implode(" ",$fld_arr);
  126. $fld_lbl = getTranslatedString($fld_lbl_str,$module); //fieldlabel
  127. $fieldlabel = $mod_lbl." ".$fld_lbl;
  128. if(($selectedfields[0] == "vtiger_usersRel1") && ($selectedfields[1] == 'user_name') && ($selectedfields[2] == 'Quotes_Inventory_Manager')){
  129. $columnslist[$fieldcolname] = "trim( $concatSql ) as ".$module."_Inventory_Manager";
  130. continue;
  131. }
  132. if((CheckFieldPermission($fieldname,$mod) != 'true' && $colname!="crmid" && (!in_array($fieldname,$inventory_fields) && in_array($module,$inventory_modules))) || empty($fieldname))
  133. {
  134. continue;
  135. }
  136. else
  137. {
  138. $this->labelMapping[$selectedfields[2]] = str_replace(" ","_",$fieldlabel);
  139. $header_label = $selectedfields[2]; // Header label to be displayed in the reports table
  140. // To check if the field in the report is a custom field
  141. // and if yes, get the label of this custom field freshly from the vtiger_field as it would have been changed.
  142. // Asha - Reference ticket : #4906
  143. if($querycolumns == "")
  144. {
  145. if($selectedfields[4] == 'C')
  146. {
  147. $field_label_data = split("_",$selectedfields[2]);
  148. $module= $field_label_data[0];
  149. if($module!=$this->primarymodule)
  150. $columnslist[$fieldcolname] = "case when (".$selectedfields[0].".".$selectedfields[1]."='1')then 'yes' else case when (vtiger_crmentity$module.crmid !='') then 'no' else '-' end end as '$selectedfields[2]'";
  151. else
  152. $columnslist[$fieldcolname] = "case when (".$selectedfields[0].".".$selectedfields[1]."='1')then 'yes' else case when (vtiger_crmentity.crmid !='') then 'no' else '-' end end as '$selectedfields[2]'";
  153. }
  154. elseif($selectedfields[0] == 'vtiger_activity' && $selectedfields[1] == 'status')
  155. {
  156. $columnslist[$fieldcolname] = " case when (vtiger_activity.status not like '') then vtiger_activity.status else vtiger_activity.eventstatus end as Calendar_Status";
  157. }
  158. elseif($selectedfields[0] == 'vtiger_activity' && $selectedfields[1] == 'date_start')
  159. {
  160. $columnslist[$fieldcolname] = "cast(concat(vtiger_activity.date_start,' ',vtiger_activity.time_start) as DATETIME) as Calendar_Start_Date_and_Time";
  161. }
  162. elseif(stristr($selectedfields[0],"vtiger_users") && ($selectedfields[1] == 'user_name'))
  163. {
  164. $temp_module_from_tablename = str_replace("vtiger_users","",$selectedfields[0]);
  165. if($module!=$this->primarymodule){
  166. $condition = "and vtiger_crmentity".$module.".crmid!=''";
  167. } else {
  168. $condition = "and vtiger_crmentity.crmid!=''";
  169. }
  170. if($temp_module_from_tablename == $module)
  171. $columnslist[$fieldcolname] = " case when(".$selectedfields[0].".last_name NOT LIKE '' $condition ) THEN ".$concatSql." else vtiger_groups".$module.".groupname end as '".$module."_$field'";
  172. else//Some Fields can't assigned to groups so case avoided (fields like inventory manager)
  173. $columnslist[$fieldcolname] = $selectedfields[0].".user_name as '".$header_label."'";
  174. }
  175. elseif(stristr($selectedfields[0],"vtiger_crmentity") && ($selectedfields[1] == 'modifiedby')) {
  176. $concatSql = getSqlForNameInDisplayFormat(array('last_name'=>'vtiger_lastModifiedBy'.$module.'.last_name', 'first_name'=>'vtiger_lastModifiedBy'.$module.'.first_name'), 'Users');
  177. $columnslist[$fieldcolname] = "trim($concatSql) as $header_label";
  178. }
  179. elseif($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  180. {
  181. $columnslist[$fieldcolname] = "vtiger_crmentity.".$selectedfields[1]." AS '".$header_label."'";
  182. }
  183. elseif($selectedfields[0] == 'vtiger_products' && $selectedfields[1] == 'unit_price')//handled for product fields in Campaigns Module Reports
  184. {
  185. $columnslist[$fieldcolname] = "concat(".$selectedfields[0].".currency_id,'::',innerProduct.actual_unit_price) as '". $header_label ."'";
  186. }
  187. elseif(in_array($selectedfields[2], $this->append_currency_symbol_to_value)) {
  188. $columnslist[$fieldcolname] = "concat(".$selectedfields[0].".currency_id,'::',".$selectedfields[0].".".$selectedfields[1].") as '" . $header_label ."'";
  189. }
  190. 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
  191. {
  192. if($selectedfields[1] == 'filelocationtype'){
  193. $columnslist[$fieldcolname] = "case ".$selectedfields[0].".".$selectedfields[1]." when 'I' then 'Internal' when 'E' then 'External' else '-' end as '$selectedfields[2]'";
  194. } else if($selectedfields[1] == 'folderid'){
  195. $columnslist[$fieldcolname] = "vtiger_attachmentsfolder.foldername as '$selectedfields[2]'";
  196. } elseif($selectedfields[1] == 'filestatus'){
  197. $columnslist[$fieldcolname] = "case ".$selectedfields[0].".".$selectedfields[1]." when '1' then 'yes' when '0' then 'no' else '-' end as '$selectedfields[2]'";
  198. } elseif($selectedfields[1] == 'filesize'){
  199. $columnslist[$fieldcolname] = "case ".$selectedfields[0].".".$selectedfields[1]." when '' then '-' else concat(".$selectedfields[0].".".$selectedfields[1]."/1024,' ','KB') end as '$selectedfields[2]'";
  200. }
  201. }
  202. elseif($selectedfields[0] == 'vtiger_inventoryproductrel')//handled for product fields in Campaigns Module Reports
  203. {
  204. if($selectedfields[1] == 'discount'){
  205. $columnslist[$fieldcolname] = " case when (vtiger_inventoryproductrel{$module}.discount_amount != '') 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 ."'";
  206. } else if($selectedfields[1] == 'productid'){
  207. $columnslist[$fieldcolname] = "vtiger_products{$module}.productname as '" . $header_label ."'";
  208. } else if($selectedfields[1] == 'serviceid'){
  209. $columnslist[$fieldcolname] = "vtiger_service{$module}.servicename as '" . $header_label ."'";
  210. } else {
  211. $columnslist[$fieldcolname] = $selectedfields[0].$module.".".$selectedfields[1]." as '".$header_label."'";
  212. }
  213. }
  214. elseif(stristr($selectedfields[1],'cf_')==true && stripos($selectedfields[1],'cf_')==0)
  215. {
  216. $columnslist[$fieldcolname] = $selectedfields[0].".".$selectedfields[1]." AS '".$adb->sql_escape_string(decode_html($header_label))."'";
  217. }
  218. else
  219. {
  220. $columnslist[$fieldcolname] = $selectedfields[0].".".$selectedfields[1]." AS '".$header_label."'";
  221. }
  222. }
  223. else
  224. {
  225. $columnslist[$fieldcolname] = $querycolumns;
  226. }
  227. }
  228. }
  229. if ($outputformat == "HTML") $columnslist['vtiger_crmentity:crmid:LBL_ACTION:crmid:I'] = 'vtiger_crmentity.crmid AS "LBL_ACTION"' ;
  230. // Save the information
  231. $this->_columnslist = $columnslist;
  232. $log->info("ReportRun :: Successfully returned getQueryColumnsList".$reportid);
  233. return $columnslist;
  234. }
  235. /** Function to get field columns based on profile
  236. * @ param $module : Type string
  237. * returns permitted fields in array format
  238. */
  239. function getaccesfield($module) {
  240. global $current_user;
  241. global $adb;
  242. $access_fields = Array();
  243. $profileList = getCurrentUserProfileList();
  244. $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";
  245. $params = array();
  246. if($module == "Calendar")
  247. {
  248. if (count($profileList) > 0) {
  249. $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
  250. and vtiger_field.presence IN (0,2) and vtiger_profile2field.profileid in (". generateQuestionMarks($profileList) .") group by vtiger_field.fieldid order by block,sequence";
  251. array_push($params, $profileList);
  252. } else {
  253. $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
  254. and vtiger_field.presence IN (0,2) group by vtiger_field.fieldid order by block,sequence";
  255. }
  256. }
  257. else
  258. {
  259. array_push($params, $module);
  260. if (count($profileList) > 0) {
  261. $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
  262. 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";
  263. array_push($params, $profileList);
  264. } else {
  265. $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
  266. and vtiger_field.presence IN (0,2) and vtiger_def_org_field.visible=0 group by vtiger_field.fieldid order by block,sequence";
  267. }
  268. }
  269. $result = $adb->pquery($query, $params);
  270. while($collistrow = $adb->fetch_array($result))
  271. {
  272. $access_fields[] = $collistrow["fieldname"];
  273. }
  274. //added to include ticketid for Reports module in select columnlist for all users
  275. if($module == "HelpDesk")
  276. $access_fields[] = "ticketid";
  277. return $access_fields;
  278. }
  279. /** Function to get Escapedcolumns for the field in case of multiple parents
  280. * @ param $selectedfields : Type Array
  281. * returns the case query for the escaped columns
  282. */
  283. function getEscapedColumns($selectedfields) {
  284. $tableName = $selectedfields[0];
  285. $columnName = $selectedfields[1];
  286. $moduleFieldLabel = $selectedfields[2];
  287. $fieldName = $selectedfields[3];
  288. list($moduleName, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  289. $fieldInfo = getFieldByReportLabel($moduleName, $fieldLabel);
  290. if($moduleName == 'ModComments' && $fieldName == 'creator') {
  291. $concatSql = getSqlForNameInDisplayFormat(array('first_name' => 'vtiger_usersModComments.first_name',
  292. 'last_name' => 'vtiger_usersModComments.last_name'), 'Users');
  293. $queryColumn = "trim(case when (vtiger_usersModComments.user_name not like '' and vtiger_crmentity.crmid!='') then $concatSql end) as 'ModComments_Creator'";
  294. } elseif(($fieldInfo['uitype'] == '10' || isReferenceUIType($fieldInfo['uitype']))
  295. && $fieldInfo['uitype'] != '52' && $fieldInfo['uitype'] != '53') {
  296. $fieldSqlColumns = $this->getReferenceFieldColumnList($moduleName, $fieldInfo);
  297. if(count($fieldSqlColumns) > 0) {
  298. $queryColumn = "(CASE WHEN $tableName.$columnName NOT LIKE '' THEN (CASE";
  299. foreach($fieldSqlColumns as $columnSql) {
  300. $queryColumn .= " WHEN $columnSql NOT LIKE '' THEN $columnSql";
  301. }
  302. $queryColumn .= " ELSE '' END) ELSE '' END) AS $moduleFieldLabel";
  303. }
  304. }
  305. return $queryColumn;
  306. }
  307. /** Function to get selectedcolumns for the given reportid
  308. * @ param $reportid : Type Integer
  309. * returns the query of columnlist for the selected columns
  310. */
  311. function getSelectedColumnsList($reportid)
  312. {
  313. global $adb;
  314. global $modules;
  315. global $log;
  316. $ssql = "select vtiger_selectcolumn.* from vtiger_report inner join vtiger_selectquery on vtiger_selectquery.queryid = vtiger_report.queryid";
  317. $ssql .= " left join vtiger_selectcolumn on vtiger_selectcolumn.queryid = vtiger_selectquery.queryid where vtiger_report.reportid = ? ";
  318. $ssql .= " order by vtiger_selectcolumn.columnindex";
  319. $result = $adb->pquery($ssql, array($reportid));
  320. $noofrows = $adb->num_rows($result);
  321. if ($this->orderbylistsql != "")
  322. {
  323. $sSQL .= $this->orderbylistsql.", ";
  324. }
  325. for($i=0; $i<$noofrows; $i++)
  326. {
  327. $fieldcolname = $adb->query_result($result,$i,"columnname");
  328. $ordercolumnsequal = true;
  329. if($fieldcolname != "")
  330. {
  331. for($j=0;$j<count($this->orderbylistcolumns);$j++)
  332. {
  333. if($this->orderbylistcolumns[$j] == $fieldcolname)
  334. {
  335. $ordercolumnsequal = false;
  336. break;
  337. }else
  338. {
  339. $ordercolumnsequal = true;
  340. }
  341. }
  342. if($ordercolumnsequal)
  343. {
  344. $selectedfields = explode(":",$fieldcolname);
  345. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  346. $selectedfields[0] = "vtiger_crmentity";
  347. $sSQLList[] = $selectedfields[0].".".$selectedfields[1]." '".$selectedfields[2]."'";
  348. }
  349. }
  350. }
  351. $sSQL .= implode(",",$sSQLList);
  352. $log->info("ReportRun :: Successfully returned getSelectedColumnsList".$reportid);
  353. return $sSQL;
  354. }
  355. /** Function to get advanced comparator in query form for the given Comparator and value
  356. * @ param $comparator : Type String
  357. * @ param $value : Type String
  358. * returns the check query for the comparator
  359. */
  360. function getAdvComparator($comparator,$value,$datatype="")
  361. {
  362. global $log,$adb,$default_charset,$ogReport;
  363. $value=html_entity_decode(trim($value),ENT_QUOTES,$default_charset);
  364. $value_len = strlen($value);
  365. $is_field = false;
  366. if($value_len > 1 && $value[0]=='$' && $value[$value_len-1]=='$'){
  367. $temp = str_replace('$','',$value);
  368. $is_field = true;
  369. }
  370. if($datatype=='C'){
  371. $value = str_replace("yes","1",str_replace("no","0",$value));
  372. }
  373. if($is_field==true){
  374. $value = $this->getFilterComparedField($temp);
  375. }
  376. if($comparator == "e")
  377. {
  378. if(trim($value) == "NULL")
  379. {
  380. $rtvalue = " is NULL";
  381. }elseif(trim($value) != "")
  382. {
  383. $rtvalue = " = ".$adb->quote($value);
  384. }elseif(trim($value) == "" && $datatype == "V")
  385. {
  386. $rtvalue = " = ".$adb->quote($value);
  387. }else
  388. {
  389. $rtvalue = " is NULL";
  390. }
  391. }
  392. if($comparator == "n")
  393. {
  394. if(trim($value) == "NULL")
  395. {
  396. $rtvalue = " is NOT NULL";
  397. }elseif(trim($value) != "")
  398. {
  399. $rtvalue = " <> ".$adb->quote($value);
  400. }elseif(trim($value) == "" && $datatype == "V")
  401. {
  402. $rtvalue = " <> ".$adb->quote($value);
  403. }else
  404. {
  405. $rtvalue = " is NOT NULL";
  406. }
  407. }
  408. if($comparator == "s")
  409. {
  410. $rtvalue = " like '". formatForSqlLike($value, 2,$is_field) ."'";
  411. }
  412. if($comparator == "ew")
  413. {
  414. $rtvalue = " like '". formatForSqlLike($value, 1,$is_field) ."'";
  415. }
  416. if($comparator == "c")
  417. {
  418. $rtvalue = " like '". formatForSqlLike($value,0,$is_field) ."'";
  419. }
  420. if($comparator == "k")
  421. {
  422. $rtvalue = " not like '". formatForSqlLike($value,0,$is_field) ."'";
  423. }
  424. if($comparator == "l")
  425. {
  426. $rtvalue = " < ".$adb->quote($value);
  427. }
  428. if($comparator == "g")
  429. {
  430. $rtvalue = " > ".$adb->quote($value);
  431. }
  432. if($comparator == "m")
  433. {
  434. $rtvalue = " <= ".$adb->quote($value);
  435. }
  436. if($comparator == "h")
  437. {
  438. $rtvalue = " >= ".$adb->quote($value);
  439. }
  440. if($comparator == "b") {
  441. $rtvalue = " < ".$adb->quote($value);
  442. }
  443. if($comparator == "a") {
  444. $rtvalue = " > ".$adb->quote($value);
  445. }
  446. if($is_field==true){
  447. $rtvalue = str_replace("'","",$rtvalue);
  448. $rtvalue = str_replace("\\","",$rtvalue);
  449. }
  450. $log->info("ReportRun :: Successfully returned getAdvComparator");
  451. return $rtvalue;
  452. }
  453. /** Function to get field that is to be compared in query form for the given Comparator and field
  454. * @ param $field : field
  455. * returns the value for the comparator
  456. */
  457. function getFilterComparedField($field){
  458. global $adb,$ogReport;
  459. $field = split('#',$field);
  460. $module = $field[0];
  461. $fieldname = trim($field[1]);
  462. $tabid = getTabId($module);
  463. $field_query = $adb->pquery("SELECT tablename,columnname,typeofdata,fieldname,uitype FROM vtiger_field WHERE tabid = ? AND fieldname= ?",array($tabid,$fieldname));
  464. $fieldtablename = $adb->query_result($field_query,0,'tablename');
  465. $fieldcolname = $adb->query_result($field_query,0,'columnname');
  466. $typeofdata = $adb->query_result($field_query,0,'typeofdata');
  467. $fieldtypeofdata=ChangeTypeOfData_Filter($fieldtablename,$fieldcolname,$typeofdata[0]);
  468. $uitype = $adb->query_result($field_query,0,'uitype');
  469. /*if($tr[0]==$ogReport->primodule)
  470. $value = $adb->query_result($field_query,0,'tablename').".".$adb->query_result($field_query,0,'columnname');
  471. else
  472. $value = $adb->query_result($field_query,0,'tablename').$tr[0].".".$adb->query_result($field_query,0,'columnname');
  473. */
  474. if($uitype == 68 || $uitype == 59)
  475. {
  476. $fieldtypeofdata = 'V';
  477. }
  478. if($fieldtablename == "vtiger_crmentity")
  479. {
  480. $fieldtablename = $fieldtablename.$module;
  481. }
  482. if($fieldname == "assigned_user_id")
  483. {
  484. $fieldtablename = "vtiger_users".$module;
  485. $fieldcolname = "user_name";
  486. }
  487. if($fieldtablename == "vtiger_crmentity" && $fieldname == "modifiedby")
  488. {
  489. $fieldtablename = "vtiger_lastModifiedBy".$module;
  490. $fieldcolname = "user_name";
  491. }
  492. if($fieldname == "assigned_user_id1")
  493. {
  494. $fieldtablename = "vtiger_usersRel1";
  495. $fieldcolname = "user_name";
  496. }
  497. $value = $fieldtablename.".".$fieldcolname;
  498. return $value;
  499. }
  500. /** Function to get the advanced filter columns for the reportid
  501. * This function accepts the $reportid
  502. * This function returns $columnslist Array($columnname => $tablename:$columnname:$fieldlabel:$fieldname:$typeofdata=>$tablename.$columnname filtercriteria,
  503. * $tablename1:$columnname1:$fieldlabel1:$fieldname1:$typeofdata1=>$tablename1.$columnname1 filtercriteria,
  504. * |
  505. * $tablenamen:$columnnamen:$fieldlabeln:$fieldnamen:$typeofdatan=>$tablenamen.$columnnamen filtercriteria
  506. * )
  507. *
  508. */
  509. function getAdvFilterList($reportid) {
  510. global $adb, $log;
  511. $advft_criteria = array();
  512. $sql = 'SELECT * FROM vtiger_relcriteria_grouping WHERE queryid = ? ORDER BY groupid';
  513. $groupsresult = $adb->pquery($sql, array($reportid));
  514. $i = 1;
  515. $j = 0;
  516. while($relcriteriagroup = $adb->fetch_array($groupsresult)) {
  517. $groupId = $relcriteriagroup["groupid"];
  518. $groupCondition = $relcriteriagroup["group_condition"];
  519. $ssql = 'select vtiger_relcriteria.* from vtiger_report
  520. inner join vtiger_relcriteria on vtiger_relcriteria.queryid = vtiger_report.queryid
  521. left join vtiger_relcriteria_grouping on vtiger_relcriteria.queryid = vtiger_relcriteria_grouping.queryid
  522. and vtiger_relcriteria.groupid = vtiger_relcriteria_grouping.groupid';
  523. $ssql.= " where vtiger_report.reportid = ? AND vtiger_relcriteria.groupid = ? order by vtiger_relcriteria.columnindex";
  524. $result = $adb->pquery($ssql, array($reportid, $groupId));
  525. $noOfColumns = $adb->num_rows($result);
  526. if($noOfColumns <= 0) continue;
  527. while($relcriteriarow = $adb->fetch_array($result)) {
  528. $columnIndex = $relcriteriarow["columnindex"];
  529. $criteria = array();
  530. $criteria['columnname'] = html_entity_decode($relcriteriarow["columnname"]);
  531. $criteria['comparator'] = $relcriteriarow["comparator"];
  532. $advfilterval = $relcriteriarow["value"];
  533. $col = explode(":",$relcriteriarow["columnname"]);
  534. $criteria['value'] = $advfilterval;
  535. $criteria['column_condition'] = $relcriteriarow["column_condition"];
  536. $advft_criteria[$i]['columns'][$j] = $criteria;
  537. $advft_criteria[$i]['condition'] = $groupCondition;
  538. $j++;
  539. }
  540. if(!empty($advft_criteria[$i]['columns'][$j-1]['column_condition'])) {
  541. $advft_criteria[$i]['columns'][$j-1]['column_condition'] = '';
  542. }
  543. $i++;
  544. }
  545. // Clear the condition (and/or) for last group, if any.
  546. if(!empty($advft_criteria[$i-1]['condition'])) $advft_criteria[$i-1]['condition'] = '';
  547. return $advft_criteria;
  548. }
  549. function generateAdvFilterSql($advfilterlist) {
  550. global $adb;
  551. $advfiltersql = "";
  552. foreach($advfilterlist as $groupindex => $groupinfo) {
  553. $groupcondition = $groupinfo['condition'];
  554. $groupcolumns = $groupinfo['columns'];
  555. if(count($groupcolumns) > 0) {
  556. $advfiltergroupsql = "";
  557. foreach($groupcolumns as $columnindex => $columninfo) {
  558. $fieldcolname = $columninfo["columnname"];
  559. $comparator = $columninfo["comparator"];
  560. $value = $columninfo["value"];
  561. $columncondition = $columninfo["column_condition"];
  562. if($fieldcolname != "" && $comparator != "") {
  563. $selectedfields = explode(":",$fieldcolname);
  564. $moduleFieldLabel = $selectedfields[2];
  565. list($moduleName, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  566. $fieldInfo = getFieldByReportLabel($moduleName, $fieldLabel);
  567. $concatSql = getSqlForNameInDisplayFormat(array('first_name'=>$selectedfields[0].".first_name",'last_name'=>$selectedfields[0].".last_name"), 'Users');
  568. // Added to handle the crmentity table name for Primary module
  569. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule) {
  570. $selectedfields[0] = "vtiger_crmentity";
  571. }
  572. //Added to handle yes or no for checkbox field in reports advance filters. -shahul
  573. if($selectedfields[4] == 'C') {
  574. if(strcasecmp(trim($value),"yes")==0)
  575. $value="1";
  576. if(strcasecmp(trim($value),"no")==0)
  577. $value="0";
  578. }
  579. $valuearray = explode(",",trim($value));
  580. $datatype = (isset($selectedfields[4])) ? $selectedfields[4] : "";
  581. if(isset($valuearray) && count($valuearray) > 1 && $comparator != 'bw') {
  582. $advcolumnsql = "";
  583. for($n=0;$n<count($valuearray);$n++) {
  584. if(($selectedfields[0] == "vtiger_users".$this->primarymodule || $selectedfields[0] == "vtiger_users".$this->secondarymodule) && $selectedfields[1] == 'user_name') {
  585. $module_from_tablename = str_replace("vtiger_users","",$selectedfields[0]);
  586. $advcolsql[] = " trim($concatSql)".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype)." or vtiger_groups".$module_from_tablename.".groupname ".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  587. } elseif($selectedfields[1] == 'status') {//when you use comma seperated values.
  588. if($selectedfields[2] == 'Calendar_Status')
  589. $advcolsql[] = "(case when (vtiger_activity.status not like '') then vtiger_activity.status else vtiger_activity.eventstatus end)".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  590. elseif($selectedfields[2] == 'HelpDesk_Status')
  591. $advcolsql[] = "vtiger_troubletickets.status".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  592. } elseif($selectedfields[1] == 'description') {//when you use comma seperated values.
  593. if($selectedfields[0]=='vtiger_crmentity'.$this->primarymodule)
  594. $advcolsql[] = "vtiger_crmentity.description".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  595. else
  596. $advcolsql[] = $selectedfields[0].".".$selectedfields[1].$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  597. } elseif($selectedfields[2] == 'Quotes_Inventory_Manager'){
  598. $advcolsql[] = ("trim($concatSql)".$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype));
  599. } else {
  600. $advcolsql[] = $selectedfields[0].".".$selectedfields[1].$this->getAdvComparator($comparator,trim($valuearray[$n]),$datatype);
  601. }
  602. }
  603. //If negative logic filter ('not equal to', 'does not contain') is used, 'and' condition should be applied instead of 'or'
  604. if($comparator == 'n' || $comparator == 'k')
  605. $advcolumnsql = implode(" and ",$advcolsql);
  606. else
  607. $advcolumnsql = implode(" or ",$advcolsql);
  608. $fieldvalue = " (".$advcolumnsql.") ";
  609. } elseif(($selectedfields[0] == "vtiger_users".$this->primarymodule || $selectedfields[0] == "vtiger_users".$this->secondarymodule) && $selectedfields[1] == 'user_name') {
  610. $module_from_tablename = str_replace("vtiger_users","",$selectedfields[0]);
  611. $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);
  612. } elseif($comparator == 'bw' && count($valuearray) == 2) {
  613. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule) {
  614. $fieldvalue = "("."vtiger_crmentity.".$selectedfields[1]." between '".trim($valuearray[0])."' and '".trim($valuearray[1])."')";
  615. } else {
  616. $fieldvalue = "(".$selectedfields[0].".".$selectedfields[1]." between '".trim($valuearray[0])."' and '".trim($valuearray[1])."')";
  617. }
  618. } elseif($selectedfields[0] == "vtiger_crmentity".$this->primarymodule) {
  619. $fieldvalue = "vtiger_crmentity.".$selectedfields[1]." ".$this->getAdvComparator($comparator,trim($value),$datatype);
  620. } elseif($selectedfields[2] == 'Quotes_Inventory_Manager'){
  621. $fieldvalue = ("trim($concatSql)" . $this->getAdvComparator($comparator,trim($value),$datatype));
  622. } elseif($selectedfields[1]=='modifiedby') {
  623. $module_from_tablename = str_replace("vtiger_crmentity","",$selectedfields[0]);
  624. if($module_from_tablename != '') {
  625. $tableName = 'vtiger_lastModifiedBy'.$module_from_tablename;
  626. } else {
  627. $tableName = 'vtiger_lastModifiedBy'.$this->primarymodule;
  628. }
  629. $fieldvalue = getSqlForNameInDisplayFormat(array('last_name'=>"$tableName.last_name",'first_name'=>"$tableName.first_name"), 'Users').
  630. $this->getAdvComparator($comparator,trim($value),$datatype);
  631. } elseif($selectedfields[0] == "vtiger_activity" && $selectedfields[1] == 'status') {
  632. $fieldvalue = "(case when (vtiger_activity.status not like '') then vtiger_activity.status else vtiger_activity.eventstatus end)".$this->getAdvComparator($comparator,trim($value),$datatype);
  633. } elseif($comparator == 'e' && (trim($value) == "NULL" || trim($value) == '')) {
  634. $fieldvalue = "(".$selectedfields[0].".".$selectedfields[1]." IS NULL OR ".$selectedfields[0].".".$selectedfields[1]." = '')";
  635. } elseif($selectedfields[0] == 'vtiger_inventoryproductrel' && ($selectedfields[1] == 'productid' || $selectedfields[1] == 'serviceid')) {
  636. if($selectedfields[1] == 'productid'){
  637. $fieldvalue = "vtiger_products{$this->primarymodule}.productname ".$this->getAdvComparator($comparator,trim($value),$datatype);
  638. } else if($selectedfields[1] == 'serviceid'){
  639. $fieldvalue = "vtiger_service{$this->primarymodule}.servicename ".$this->getAdvComparator($comparator,trim($value),$datatype);
  640. }
  641. } elseif($fieldInfo['uitype'] == '10' || isReferenceUIType($fieldInfo['uitype'])) {
  642. $comparatorValue = $this->getAdvComparator($comparator,trim($value),$datatype);
  643. $fieldSqls = array();
  644. $fieldSqlColumns = $this->getReferenceFieldColumnList($moduleName, $fieldInfo);
  645. foreach($fieldSqlColumns as $columnSql) {
  646. $fieldSqls[] = $columnSql.$comparatorValue;
  647. }
  648. $fieldvalue = ' ('. implode(' OR ', $fieldSqls).') ';
  649. } else {
  650. $fieldvalue = $selectedfields[0].".".$selectedfields[1].$this->getAdvComparator($comparator,trim($value),$datatype);
  651. }
  652. $advfiltergroupsql .= $fieldvalue;
  653. if(!empty($columncondition)) {
  654. $advfiltergroupsql .= ' '.$columncondition.' ';
  655. }
  656. }
  657. }
  658. if (trim($advfiltergroupsql) != "") {
  659. $advfiltergroupsql = "( $advfiltergroupsql ) ";
  660. if(!empty($groupcondition)) {
  661. $advfiltergroupsql .= ' '. $groupcondition . ' ';
  662. }
  663. $advfiltersql .= $advfiltergroupsql;
  664. }
  665. }
  666. }
  667. if (trim($advfiltersql) != "") $advfiltersql = '('.$advfiltersql.')';
  668. return $advfiltersql;
  669. }
  670. function getAdvFilterSql($reportid) {
  671. // Have we initialized information already?
  672. if($this->_advfiltersql !== false) {
  673. return $this->_advfiltersql;
  674. }
  675. global $log;
  676. $advfilterlist = $this->getAdvFilterList($reportid);
  677. $advfiltersql = $this->generateAdvFilterSql($advfilterlist);
  678. // Save the information
  679. $this->_advfiltersql = $advfiltersql;
  680. $log->info("ReportRun :: Successfully returned getAdvFilterSql".$reportid);
  681. return $advfiltersql;
  682. }
  683. /** Function to get the Standard filter columns for the reportid
  684. * This function accepts the $reportid datatype Integer
  685. * This function returns $stdfilterlist Array($columnname => $tablename:$columnname:$fieldlabel:$fieldname:$typeofdata=>$tablename.$columnname filtercriteria,
  686. * $tablename1:$columnname1:$fieldlabel1:$fieldname1:$typeofdata1=>$tablename1.$columnname1 filtercriteria,
  687. * )
  688. *
  689. */
  690. function getStdFilterList($reportid)
  691. {
  692. // Have we initialized information already?
  693. if($this->_stdfilterlist !== false) {
  694. return $this->_stdfilterlist;
  695. }
  696. global $adb, $log;
  697. $stdfilterlist = array();
  698. $stdfiltersql = "select vtiger_reportdatefilter.* from vtiger_report";
  699. $stdfiltersql .= " inner join vtiger_reportdatefilter on vtiger_report.reportid = vtiger_reportdatefilter.datefilterid";
  700. $stdfiltersql .= " where vtiger_report.reportid = ?";
  701. $result = $adb->pquery($stdfiltersql, array($reportid));
  702. $stdfilterrow = $adb->fetch_array($result);
  703. if(isset($stdfilterrow)) {
  704. $fieldcolname = $stdfilterrow["datecolumnname"];
  705. $datefilter = $stdfilterrow["datefilter"];
  706. $startdate = $stdfilterrow["startdate"];
  707. $enddate = $stdfilterrow["enddate"];
  708. if($fieldcolname != "none") {
  709. $selectedfields = explode(":",$fieldcolname);
  710. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  711. $selectedfields[0] = "vtiger_crmentity";
  712. $moduleFieldLabel = $selectedfields[3];
  713. list($moduleName, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  714. $fieldInfo = getFieldByReportLabel($moduleName, $fieldLabel);
  715. $typeOfData = $fieldInfo['typeofdata'];
  716. list($type, $typeOtherInfo) = explode('~', $typeOfData, 2);
  717. if($datefilter != "custom") {
  718. $startenddate = $this->getStandarFiltersStartAndEndDate($datefilter);
  719. $startdate = $startenddate[0];
  720. $enddate = $startenddate[1];
  721. }
  722. if($startdate != "0000-00-00" && $enddate != "0000-00-00" && $startdate != "" && $enddate != ""
  723. && $selectedfields[0] != "" && $selectedfields[1] != "") {
  724. $startDateTime = new DateTimeField($startdate.' '. date('H:i:s'));
  725. $userStartDate = $startDateTime->getDisplayDate();
  726. if($type == 'DT') {
  727. $userStartDate = $userStartDate.' 00:00:00';
  728. }
  729. $startDateTime = getValidDBInsertDateTimeValue($userStartDate);
  730. $endDateTime = new DateTimeField($enddate.' '. date('H:i:s'));
  731. $userEndDate = $endDateTime->getDisplayDate();
  732. if($type == 'DT') {
  733. $userEndDate = $userEndDate.' 23:59:00';
  734. }
  735. $endDateTime = getValidDBInsertDateTimeValue($userEndDate);
  736. if ($selectedfields[1] == 'birthday') {
  737. $tableColumnSql = "DATE_FORMAT(".$selectedfields[0].".".$selectedfields[1].", '%m%d')";
  738. $startDateTime = "DATE_FORMAT('$startDateTime', '%m%d')";
  739. $endDateTime = "DATE_FORMAT('$endDateTime', '%m%d')";
  740. } else {
  741. if($selectedfields[0] == 'vtiger_activity' && ($selectedfields[1] == 'date_start' || $selectedfields[1] == 'due_date')) {
  742. $tableColumnSql = '';
  743. if($selectedfields[1] == 'date_start') {
  744. $tableColumnSql = "CAST((CONCAT(date_start,' ',time_start)) AS DATETIME)";
  745. } else {
  746. $tableColumnSql = "CAST((CONCAT(due_date,' ',time_end)) AS DATETIME)";
  747. }
  748. } else {
  749. $tableColumnSql = $selectedfields[0].".".$selectedfields[1];
  750. }
  751. $startDateTime = "'$startDateTime'";
  752. $endDateTime = "'$endDateTime'";
  753. }
  754. $stdfilterlist[$fieldcolname] = $tableColumnSql." between ".$startDateTime." and ".$endDateTime;
  755. }
  756. }
  757. }
  758. // Save the information
  759. $this->_stdfilterlist = $stdfilterlist;
  760. $log->info("ReportRun :: Successfully returned getStdFilterList".$reportid);
  761. return $stdfilterlist;
  762. }
  763. /** Function to get the RunTime filter columns for the given $filtercolumn,$filter,$startdate,$enddate
  764. * @ param $filtercolumn : Type String
  765. * @ param $filter : Type String
  766. * @ param $startdate: Type String
  767. * @ param $enddate : Type String
  768. * This function returns $stdfilterlist Array($columnname => $tablename:$columnname:$fieldlabel=>$tablename.$columnname 'between' $startdate 'and' $enddate)
  769. *
  770. */
  771. function RunTimeFilter($filtercolumn,$filter,$startdate,$enddate)
  772. {
  773. if($filtercolumn != "none")
  774. {
  775. $selectedfields = explode(":",$filtercolumn);
  776. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  777. $selectedfields[0] = "vtiger_crmentity";
  778. if($filter == "custom")
  779. {
  780. if($startdate != "0000-00-00" && $enddate != "0000-00-00" && $startdate != "" &&
  781. $enddate != "" && $selectedfields[0] != "" && $selectedfields[1] != "") {
  782. $stdfilterlist[$filtercolumn] = $selectedfields[0].".".$selectedfields[1]." between '".$startdate." 00:00:00' and '".$enddate." 23:59:00'";
  783. }
  784. }else
  785. {
  786. if($startdate != "" && $enddate != "")
  787. {
  788. $startenddate = $this->getStandarFiltersStartAndEndDate($filter);
  789. if($startenddate[0] != "" && $startenddate[1] != "" && $selectedfields[0] != "" && $selectedfields[1] != "")
  790. {
  791. $stdfilterlist[$filtercolumn] = $selectedfields[0].".".$selectedfields[1]." between '".$startenddate[0]." 00:00:00' and '".$startenddate[1]." 23:59:00'";
  792. }
  793. }
  794. }
  795. }
  796. return $stdfilterlist;
  797. }
  798. /** Function to get the RunTime Advanced filter conditions
  799. * @ param $advft_criteria : Type Array
  800. * @ param $advft_criteria_groups : Type Array
  801. * This function returns $advfiltersql
  802. *
  803. */
  804. function RunTimeAdvFilter($advft_criteria,$advft_criteria_groups) {
  805. $adb = PearDatabase::getInstance();
  806. $advfilterlist = array();
  807. if(!empty($advft_criteria)) {
  808. foreach($advft_criteria as $column_index => $column_condition) {
  809. if(empty($column_condition)) continue;
  810. $adv_filter_column = $column_condition["columnname"];
  811. $adv_filter_comparator = $column_condition["comparator"];
  812. $adv_filter_value = $column_condition["value"];
  813. $adv_filter_column_condition = $column_condition["columncondition"];
  814. $adv_filter_groupid = $column_condition["groupid"];
  815. $column_info = explode(":",$adv_filter_column);
  816. $moduleFieldLabel = $column_info[2];
  817. $fieldName = $column_info[3];
  818. list($module, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  819. $fieldInfo = getFieldByReportLabel($module, $fieldLabel);
  820. $fieldType = null;
  821. if(!empty($fieldInfo)) {
  822. $field = WebserviceField::fromArray($adb, $fieldInfo);
  823. $fieldType = $field->getFieldDataType();
  824. }
  825. if($fieldType == 'currency') {
  826. // Some of the currency fields like Unit Price, Total, Sub-total etc of Inventory modules, do not need currency conversion
  827. if($field->getUIType() == '72') {
  828. $adv_filter_value = CurrencyField::convertToDBFormat($adv_filter_value, null, true);
  829. } else {
  830. $adv_filter_value = CurrencyField::convertToDBFormat($adv_filter_value);
  831. }
  832. }
  833. $temp_val = explode(",",$adv_filter_value);
  834. if(($column_info[4] == 'D' || ($column_info[4] == 'T' && $column_info[1] != 'time_start' && $column_info[1] != 'time_end')
  835. || ($column_info[4] == 'DT'))
  836. && ($column_info[4] != '' && $adv_filter_value != '' )) {
  837. $val = Array();
  838. for($x=0;$x<count($temp_val);$x++) {
  839. if($column_info[4] == 'D') {
  840. $date = new DateTimeField(trim($temp_val[$x]));
  841. $val[$x] = $date->getDBInsertDateValue();
  842. } elseif($column_info[4] == 'DT') {
  843. $date = new DateTimeField(trim($temp_val[$x]));
  844. $val[$x] = $date->getDBInsertDateTimeValue();
  845. } else {
  846. $date = new DateTimeField(trim($temp_val[$x]));
  847. $val[$x] = $date->getDBInsertTimeValue();
  848. }
  849. }
  850. $adv_filter_value = implode(",",$val);
  851. }
  852. $criteria = array();
  853. $criteria['columnname'] = $adv_filter_column;
  854. $criteria['comparator'] = $adv_filter_comparator;
  855. $criteria['value'] = $adv_filter_value;
  856. $criteria['column_condition'] = $adv_filter_column_condition;
  857. $advfilterlist[$adv_filter_groupid]['columns'][] = $criteria;
  858. }
  859. foreach($advft_criteria_groups as $group_index => $group_condition_info) {
  860. if(empty($group_condition_info)) continue;
  861. if(empty($advfilterlist[$group_index])) continue;
  862. $advfilterlist[$group_index]['condition'] = $group_condition_info["groupcondition"];
  863. $noOfGroupColumns = count($advfilterlist[$group_index]['columns']);
  864. if(!empty($advfilterlist[$group_index]['columns'][$noOfGroupColumns-1]['column_condition'])) {
  865. $advfilterlist[$group_index]['columns'][$noOfGroupColumns-1]['column_condition'] = '';
  866. }
  867. }
  868. $noOfGroups = count($advfilterlist);
  869. if(!empty($advfilterlist[$noOfGroups]['condition'])) {
  870. $advfilterlist[$noOfGroups]['condition'] = '';
  871. }
  872. $advfiltersql = $this->generateAdvFilterSql($advfilterlist);
  873. }
  874. return $advfiltersql;
  875. }
  876. /** Function to get standardfilter for the given reportid
  877. * @ param $reportid : Type Integer
  878. * returns the query of columnlist for the selected columns
  879. */
  880. function getStandardCriterialSql($reportid)
  881. {
  882. global $adb;
  883. global $modules;
  884. global $log;
  885. $sreportstdfiltersql = "select vtiger_reportdatefilter.* from vtiger_report";
  886. $sreportstdfiltersql .= " inner join vtiger_reportdatefilter on vtiger_report.reportid = vtiger_reportdatefilter.datefilterid";
  887. $sreportstdfiltersql .= " where vtiger_report.reportid = ?";
  888. $result = $adb->pquery($sreportstdfiltersql, array($reportid));
  889. $noofrows = $adb->num_rows($result);
  890. for($i=0; $i<$noofrows; $i++) {
  891. $fieldcolname = $adb->query_result($result,$i,"datecolumnname");
  892. $datefilter = $adb->query_result($result,$i,"datefilter");
  893. $startdate = $adb->query_result($result,$i,"startdate");
  894. $enddate = $adb->query_result($result,$i,"enddate");
  895. if($fieldcolname != "none") {
  896. $selectedfields = explode(":",$fieldcolname);
  897. if($selectedfields[0] == "vtiger_crmentity".$this->primarymodule)
  898. $selectedfields[0] = "vtiger_crmentity";
  899. if($datefilter == "custom") {
  900. if($startdate != "0000-00-00" && $enddate != "0000-00-00" && $selectedfields[0] != "" && $selectedfields[1] != ""
  901. && $startdate != '' && $enddate != '') {
  902. $startDateTime = new DateTimeField($startdate.' '. date('H:i:s'));
  903. $startdate = $startDateTime->getDisplayDate();
  904. $endDateTime = new DateTimeField($enddate.' '. date('H:i:s'));
  905. $enddate = $endDateTime->getDisplayDate();
  906. $sSQL .= $selectedfields[0].".".$selectedfields[1]." between '".$startdate."' and '".$enddate."'";
  907. }
  908. } else {
  909. $startenddate = $this->getStandarFiltersStartAndEndDate($datefilter);
  910. $startDateTime = new DateTimeField($startenddate[0].' '. date('H:i:s'));
  911. $startdate = $startDateTime->getDisplayDate();
  912. $endDateTime = new DateTimeField($startenddate[1].' '. date('H:i:s'));
  913. $enddate = $endDateTime->getDisplayDate();
  914. if($startenddate[0] != "" && $startenddate[1] != "" && $selectedfields[0] != "" && $selectedfields[1] != "") {
  915. $sSQL .= $selectedfields[0].".".$selectedfields[1]." between '".$startdate."' and '".$enddate."'";
  916. }
  917. }
  918. }
  919. }
  920. $log->info("ReportRun :: Successfully returned getStandardCriterialSql".$reportid);
  921. return $sSQL;
  922. }
  923. /** Function to get standardfilter startdate and enddate for the given type
  924. * @ param $type : Type String
  925. * returns the $datevalue Array in the given format
  926. * $datevalue = Array(0=>$startdate,1=>$enddate)
  927. */
  928. function getStandarFiltersStartAndEndDate($type)
  929. {
  930. $today = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d"), date("Y")));
  931. $tomorrow = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+1, date("Y")));
  932. $yesterday = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-1, date("Y")));
  933. $currentmonth0 = date("Y-m-d",mktime(0, 0, 0, date("m"), "01", date("Y")));
  934. $currentmonth1 = date("Y-m-t");
  935. $lastmonth0 = date("Y-m-d",mktime(0, 0, 0, date("m")-1, "01", date("Y")));
  936. $lastmonth1 = date("Y-m-t", strtotime("-1 Month"));
  937. $nextmonth0 = date("Y-m-d",mktime(0, 0, 0, date("m")+1, "01", date("Y")));
  938. $nextmonth1 = date("Y-m-t", strtotime("+1 Month"));
  939. $lastweek0 = date("Y-m-d",strtotime("-2 week Sunday"));
  940. $lastweek1 = date("Y-m-d",strtotime("-1 week Saturday"));
  941. $thisweek0 = date("Y-m-d",strtotime("-1 week Sunday"));
  942. $thisweek1 = date("Y-m-d",strtotime("this Saturday"));
  943. $nextweek0 = date("Y-m-d",strtotime("this Sunday"));
  944. $nextweek1 = date("Y-m-d",strtotime("+1 week Saturday"));
  945. $next7days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+6, date("Y")));
  946. $next30days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+29, date("Y")));
  947. $next60days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+59, date("Y")));
  948. $next90days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+89, date("Y")));
  949. $next120days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")+119, date("Y")));
  950. $last7days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-6, date("Y")));
  951. $last30days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-29, date("Y")));
  952. $last60days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-59, date("Y")));
  953. $last90days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-89, date("Y")));
  954. $last120days = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-119, date("Y")));
  955. $currentFY0 = date("Y-m-d",mktime(0, 0, 0, "01", "01", date("Y")));
  956. $currentFY1 = date("Y-m-t",mktime(0, 0, 0, "12", date("d"), date("Y")));
  957. $lastFY0 = date("Y-m-d",mktime(0, 0, 0, "01", "01", date("Y")-1));
  958. $lastFY1 = date("Y-m-t", mktime(0, 0, 0, "12", date("d"), date("Y")-1));
  959. $nextFY0 = date("Y-m-d",mktime(0, 0, 0, "01", "01", date("Y")+1));
  960. $nextFY1 = date("Y-m-t", mktime(0, 0, 0, "12", date("d"), date("Y")+1));
  961. if(date("m") <= 3)
  962. {
  963. $cFq = date("Y-m-d",mktime(0, 0, 0, "01","01",date("Y")));
  964. $cFq1 = date("Y-m-d",mktime(0, 0, 0, "03","31",date("Y")));
  965. $nFq = date("Y-m-d",mktime(0, 0, 0, "04","01",date("Y")));
  966. $nFq1 = date("Y-m-d",mktime(0, 0, 0, "06","30",date("Y")));
  967. $pFq = date("Y-m-d",mktime(0, 0, 0, "10","01",date("Y")-1));
  968. $pFq1 = date("Y-m-d",mktime(0, 0, 0, "12","31",date("Y")-1));
  969. }else if(date("m") > 3 and date("m") <= 6)
  970. {
  971. $pFq = date("Y-m-d",mktime(0, 0, 0, "01","01",date("Y")));
  972. $pFq1 = date("Y-m-d",mktime(0, 0, 0, "03","31",date("Y")));
  973. $cFq = date("Y-m-d",mktime(0, 0, 0, "04","01",date("Y")));
  974. $cFq1 = date("Y-m-d",mktime(0, 0, 0, "06","30",date("Y")));
  975. $nFq = date("Y-m-d",mktime(0, 0, 0, "07","01",date("Y")));
  976. $nFq1 = date("Y-m-d",mktime(0, 0, 0, "09","30",date("Y")));
  977. }else if(date("m") > 6 and date("m") <= 9)
  978. {
  979. $nFq = date("Y-m-d",mktime(0, 0, 0, "10","01",date("Y")));
  980. $nFq1 = date("Y-m-d",mktime(0, 0, 0, "12","31",date("Y")));
  981. $pFq = date("Y-m-d",mktime(0, 0, 0, "04","01",date("Y")));
  982. $pFq1 = date("Y-m-d",mktime(0, 0, 0, "06","30",date("Y")));
  983. $cFq = date("Y-m-d",mktime(0, 0, 0, "07","01",date("Y")));
  984. $cFq1 = date("Y-m-d",mktime(0, 0, 0, "09","30",date("Y")));
  985. }
  986. else if(date("m") > 9 and date("m") <= 12)
  987. {
  988. $nFq = date("Y-m-d",mktime(0, 0, 0, "01","01",date("Y")+1));
  989. $nFq1 = date("Y-m-d",mktime(0, 0, 0, "03","31",date("Y")+1));
  990. $pFq = date("Y-m-d",mktime(0, 0, 0, "07","01",date("Y")));
  991. $pFq1 = date("Y-m-d",mktime(0, 0, 0, "09","30",date("Y")));
  992. $cFq = date("Y-m-d",mktime(0, 0, 0, "10","01",date("Y")));
  993. $cFq1 = date("Y-m-d",mktime(0, 0, 0, "12","31",date("Y")));
  994. }
  995. if($type == "today" )
  996. {
  997. $datevalue[0] = $today;
  998. $datevalue[1] = $today;
  999. }
  1000. elseif($type == "yesterday" )
  1001. {
  1002. $datevalue[0] = $yesterday;
  1003. $datevalue[1] = $yesterday;
  1004. }
  1005. elseif($type == "tomorrow" )
  1006. {
  1007. $datevalue[0] = $tomorrow;
  1008. $datevalue[1] = $tomorrow;
  1009. }
  1010. elseif($type == "thisweek" )
  1011. {
  1012. $datevalue[0] = $thisweek0;
  1013. $datevalue[1] = $thisweek1;
  1014. }
  1015. elseif($type == "lastweek" )
  1016. {
  1017. $datevalue[0] = $lastweek0;
  1018. $datevalue[1] = $lastweek1;
  1019. }
  1020. elseif($type == "nextweek" )
  1021. {
  1022. $datevalue[0] = $nextweek0;
  1023. $datevalue[1] = $nextweek1;
  1024. }
  1025. elseif($type == "thismonth…

Large files files are truncated, but you can click here to view the full file