PageRenderTime 49ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/modules/Reports/Save.php

https://bitbucket.org/yousef_fadila/vtiger
PHP | 530 lines | 413 code | 60 blank | 57 comment | 135 complexity | 4e046a4b6a22516d8b0f32697d3da18d 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. require_once('modules/Reports/Reports.php');
  11. require_once('include/logging.php');
  12. require_once('include/database/PearDatabase.php');
  13. require_once("include/Zend/Json.php");
  14. require_once 'modules/Reports/ReportUtils.php';
  15. require_once('modules/Reports/CustomReportUtils.php');
  16. global $adb;
  17. global $log,$current_user;
  18. $reportid = vtlib_purify($_REQUEST["record"]);
  19. //<<<<<<<selectcolumn>>>>>>>>>
  20. $selectedcolumnstring = $_REQUEST["selectedColumnsString"];
  21. //<<<<<<<selectcolumn>>>>>>>>>
  22. //<<<<<<<reportsortcol>>>>>>>>>
  23. $sort_by1 = decode_html(vtlib_purify($_REQUEST["Group1"]));
  24. $sort_order1 = vtlib_purify($_REQUEST["Sort1"]);
  25. $sort_by2 =decode_html(vtlib_purify($_REQUEST["Group2"]));
  26. $sort_order2 = vtlib_purify($_REQUEST["Sort2"]);
  27. $sort_by3 = decode_html(vtlib_purify($_REQUEST["Group3"]));
  28. $sort_order3 = vtlib_purify($_REQUEST["Sort3"]);
  29. //<<<<<<<reportgrouptime>>>>>>>
  30. $groupTime1 = vtlib_purify($_REQUEST['groupbytime1']);
  31. $groupTime2 = vtlib_purify($_REQUEST['groupbytime2']);
  32. $groupTime3 = vtlib_purify($_REQUEST['groupbytime3']);
  33. //<<<<<<<reportgrouptime>>>>>>>
  34. //<<<<<<<reportsortcol>>>>>>>>>
  35. $selectedcolumns = explode(";",$selectedcolumnstring);
  36. if(!in_array($sort_by1,$selectedcolumns)){
  37. $selectedcolumns[] = $sort_by1;
  38. }
  39. if(!in_array($sort_by2,$selectedcolumns)){
  40. $selectedcolumns[] = $sort_by2;
  41. }
  42. if(!in_array($sort_by3,$selectedcolumns)){
  43. $selectedcolumns[] = $sort_by3;
  44. }
  45. //<<<<<<<reportmodules>>>>>>>>>
  46. $pmodule = vtlib_purify($_REQUEST["primarymodule"]);
  47. $smodule = vtlib_purify($_REQUEST["secondarymodule"]);
  48. //<<<<<<<reportmodules>>>>>>>>>
  49. //<<<<<<<report>>>>>>>>>
  50. $reportname = vtlib_purify($_REQUEST["reportName"]);
  51. $reportdescription = vtlib_purify($_REQUEST["reportDesc"]);
  52. $reporttype = vtlib_purify($_REQUEST["reportType"]);
  53. $folderid = vtlib_purify($_REQUEST["folder"]);
  54. //<<<<<<<report>>>>>>>>>
  55. //<<<<<<<standarfilters>>>>>>>>>
  56. $stdDateFilterField = vtlib_purify($_REQUEST["stdDateFilterField"]);
  57. $stdDateFilter = vtlib_purify($_REQUEST["stdDateFilter"]);
  58. $startdate = $_REQUEST["startdate"];
  59. $enddate = $_REQUEST["enddate"];
  60. $dbCurrentDateTime = new DateTimeField(date('Y-m-d H:i:s'));
  61. if(!empty($startdate)) {
  62. $startDateTime = new DateTimeField($startdate.' '. $dbCurrentDateTime->getDisplayTime());
  63. $startdate = $startDateTime->getDBInsertDateValue();
  64. }
  65. if(!empty($enddate)) {
  66. $endDateTime = new DateTimeField($enddate.' '. $dbCurrentDateTime->getDisplayTime());
  67. $enddate = $endDateTime->getDBInsertDateValue();
  68. }
  69. //<<<<<<<standardfilters>>>>>>>>>
  70. //<<<<<<<shared entities>>>>>>>>>
  71. $sharetype = vtlib_purify($_REQUEST["stdtypeFilter"]);
  72. $shared_entities = vtlib_purify($_REQUEST["selectedColumnsStr"]);
  73. //<<<<<<<shared entities>>>>>>>>>
  74. //<<<<<<<columnstototal>>>>>>>>>>
  75. $allKeys = array_keys($_REQUEST);
  76. for ($i=0;$i<count($allKeys);$i++)
  77. {
  78. $string = substr($allKeys[$i], 0, 3);
  79. if($string == "cb:")
  80. {
  81. $columnstototal[] = $allKeys[$i];
  82. }
  83. }
  84. //<<<<<<<columnstototal>>>>>>>>>
  85. //<<<<<<<advancedfilter>>>>>>>>
  86. $json = new Zend_Json();
  87. $advft_criteria = $_REQUEST['advft_criteria'];
  88. $advft_criteria = $json->decode($advft_criteria);
  89. $advft_criteria_groups = $_REQUEST['advft_criteria_groups'];
  90. $advft_criteria_groups = $json->decode($advft_criteria_groups);
  91. //<<<<<<<advancedfilter>>>>>>>>
  92. //<<<<<<<scheduled report>>>>>>>>
  93. $isReportScheduled = vtlib_purify($_REQUEST['isReportScheduled']);
  94. $selectedRecipients = vtlib_purify($_REQUEST['selectedRecipientsString']);
  95. $scheduledFormat = vtlib_purify($_REQUEST['scheduledReportFormat']);
  96. $scheduledInterval = vtlib_purify($_REQUEST['scheduledIntervalString']);
  97. //<<<<<<<scheduled report>>>>>>>>
  98. if($reportid == "")
  99. {
  100. $genQueryId = $adb->getUniqueID("vtiger_selectquery");
  101. if($genQueryId != "")
  102. {
  103. $iquerysql = "insert into vtiger_selectquery (QUERYID,STARTINDEX,NUMOFOBJECTS) values (?,?,?)";
  104. $iquerysqlresult = $adb->pquery($iquerysql, array($genQueryId,0,0));
  105. $log->info("Reports :: Save->Successfully saved vtiger_selectquery");
  106. if($iquerysqlresult!=false)
  107. {
  108. //<<<<step2 vtiger_selectcolumn>>>>>>>>
  109. if(!empty($selectedcolumns))
  110. {
  111. for($i=0 ;$i<count($selectedcolumns);$i++)
  112. {
  113. if(!empty($selectedcolumns[$i])){
  114. $icolumnsql = "insert into vtiger_selectcolumn (QUERYID,COLUMNINDEX,COLUMNNAME) values (?,?,?)";
  115. $icolumnsqlresult = $adb->pquery($icolumnsql, array($genQueryId,$i,(decode_html($selectedcolumns[$i]))));
  116. }
  117. }
  118. }
  119. if($shared_entities != "")
  120. {
  121. if($sharetype == "Shared")
  122. {
  123. $selectedcolumn = explode(";",$shared_entities);
  124. for($i=0 ;$i< count($selectedcolumn) -1 ;$i++)
  125. {
  126. $temp = split("::",$selectedcolumn[$i]);
  127. $icolumnsql = "insert into vtiger_reportsharing (reportid,shareid,setype) values (?,?,?)";
  128. $icolumnsqlresult = $adb->pquery($icolumnsql, array($genQueryId,$temp[1],$temp[0]));
  129. }
  130. }
  131. }
  132. $log->info("Reports :: Save->Successfully saved vtiger_selectcolumn");
  133. //<<<<step2 vtiger_selectcolumn>>>>>>>>
  134. if($genQueryId != "")
  135. {
  136. $ireportsql = "insert into vtiger_report (REPORTID,FOLDERID,REPORTNAME,DESCRIPTION,REPORTTYPE,QUERYID,STATE,OWNER,SHARINGTYPE) values (?,?,?,?,?,?,?,?,?)";
  137. $ireportparams = array($genQueryId, $folderid, $reportname, $reportdescription, $reporttype, $genQueryId,'CUSTOM',$current_user->id,$sharetype);
  138. $ireportresult = $adb->pquery($ireportsql, $ireportparams);
  139. $log->info("Reports :: Save->Successfully saved vtiger_report");
  140. if($ireportresult!=false)
  141. {
  142. //<<<<reportmodules>>>>>>>
  143. $ireportmodulesql = "insert into vtiger_reportmodules (REPORTMODULESID,PRIMARYMODULE,SECONDARYMODULES) values (?,?,?)";
  144. $ireportmoduleresult = $adb->pquery($ireportmodulesql, array($genQueryId, $pmodule, $smodule));
  145. $log->info("Reports :: Save->Successfully saved vtiger_reportmodules");
  146. //<<<<reportmodules>>>>>>>
  147. //<<<<step3 vtiger_reportsortcol>>>>>>>
  148. if($sort_by1 != "")
  149. {
  150. $sort_by1sql = "insert into vtiger_reportsortcol (SORTCOLID,REPORTID,COLUMNNAME,SORTORDER) values (?,?,?,?)";
  151. $sort_by1result = $adb->pquery($sort_by1sql, array(1, $genQueryId, $sort_by1, $sort_order1));
  152. if(CustomReportUtils::IsDateField($sort_by1)){
  153. $groupByTime1Sql = "INSERT INTO vtiger_reportgroupbycolumn(REPORTID,SORTID,SORTCOLNAME,DATEGROUPBYCRITERIA) values(?,?,?,?)";
  154. $groupByTime1Res = $adb->pquery($groupByTime1Sql,array($genQueryId,1,$sort_by1,$groupTime1));
  155. }
  156. }
  157. if($sort_by2 != "")
  158. {
  159. $sort_by2sql = "insert into vtiger_reportsortcol (SORTCOLID,REPORTID,COLUMNNAME,SORTORDER) values (?,?,?,?)";
  160. $sort_by2result = $adb->pquery($sort_by2sql, array(2,$genQueryId,$sort_by2,$sort_order2));
  161. if(CustomReportUtils::IsDateField($sort_by2)){
  162. $groupByTime2Sql = "INSERT INTO vtiger_reportgroupbycolumn(REPORTID,SORTID,SORTCOLNAME,DATEGROUPBYCRITERIA) values(?,?,?,?)";
  163. $groupByTime2Res = $adb->pquery($groupByTime2Sql,array($genQueryId,2,$sort_by2,$groupTime2));
  164. }
  165. }
  166. if($sort_by3 != "")
  167. {
  168. $sort_by3sql = "insert into vtiger_reportsortcol (SORTCOLID,REPORTID,COLUMNNAME,SORTORDER) values (?,?,?,?)";
  169. $sort_by3result = $adb->pquery($sort_by3sql, array(3,$genQueryId,$sort_by3,$sort_order3));
  170. if(CustomReportUtils::IsDateField($sort_by3)){
  171. $groupByTime3Sql = "INSERT INTO vtiger_reportgroupbycolumn(REPORTID,SORTID,SORTCOLNAME,DATEGROUPBYCRITERIA) values(?,?,?,?)";
  172. $groupByTime3Res = $adb->pquery($groupByTime3Sql,array($genQueryId,3,$sort_by3,$groupTime3));
  173. }
  174. }
  175. $log->info("Reports :: Save->Successfully saved vtiger_reportsortcol");
  176. //<<<<step3 vtiger_reportsortcol>>>>>>>
  177. //<<<<step5 standarfilder>>>>>>>
  178. $ireportmodulesql = "insert into vtiger_reportdatefilter (DATEFILTERID,DATECOLUMNNAME,DATEFILTER,STARTDATE,ENDDATE) values (?,?,?,?,?)";
  179. $ireportmoduleresult = $adb->pquery($ireportmodulesql, array($genQueryId, $stdDateFilterField, $stdDateFilter, $startdate, $enddate));
  180. $log->info("Reports :: Save->Successfully saved vtiger_reportdatefilter");
  181. //<<<<step5 standarfilder>>>>>>>
  182. //<<<<step4 columnstototal>>>>>>>
  183. for ($i=0;$i<count($columnstototal);$i++)
  184. {
  185. $ireportsummarysql = "insert into vtiger_reportsummary (REPORTSUMMARYID,SUMMARYTYPE,COLUMNNAME) values (?,?,?)";
  186. $ireportsummaryresult = $adb->pquery($ireportsummarysql, array($genQueryId, $i, $columnstototal[$i]));
  187. }
  188. $log->info("Reports :: Save->Successfully saved vtiger_reportsummary");
  189. //<<<<step4 columnstototal>>>>>>>
  190. //<<<<step5 advancedfilter>>>>>>>
  191. foreach($advft_criteria as $column_index => $column_condition) {
  192. if(empty($column_condition)) continue;
  193. $adv_filter_column = $column_condition["columnname"];
  194. $adv_filter_comparator = $column_condition["comparator"];
  195. $adv_filter_value = $column_condition["value"];
  196. $adv_filter_column_condition = $column_condition["columncondition"];
  197. $adv_filter_groupid = $column_condition["groupid"];
  198. $column_info = explode(":",$adv_filter_column);
  199. $moduleFieldLabel = $column_info[2];
  200. $fieldName = $column_info[3];
  201. list($module, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  202. $fieldInfo = getFieldByReportLabel($module, $fieldLabel);
  203. $fieldType = null;
  204. if(!empty($fieldInfo)) {
  205. $field = WebserviceField::fromArray($adb, $fieldInfo);
  206. $fieldType = $field->getFieldDataType();
  207. }
  208. if($fieldType == 'currency') {
  209. if($field->getUIType() == '71') {
  210. $adv_filter_value = CurrencyField::convertToDBFormat($adv_filter_value, null, true);
  211. } else {
  212. $adv_filter_value = CurrencyField::convertToDBFormat($adv_filter_value);
  213. }
  214. }
  215. $temp_val = explode(",",$adv_filter_value);
  216. if(($column_info[4] == 'D' || ($column_info[4] == 'T' && $column_info[1] != 'time_start' && $column_info[1] != 'time_end') || ($column_info[4] == 'DT')) && ($column_info[4] != '' && $adv_filter_value != '' ))
  217. {
  218. $val = Array();
  219. for($x=0;$x<count($temp_val);$x++) {
  220. if(trim($temp_val[$x]) != '') {
  221. $date = new DateTimeField(trim($temp_val[$x]));
  222. if($column_info[4] == 'D') {
  223. $val[$x] = DateTimeField::convertToDBFormat(
  224. trim($temp_val[$x]));
  225. } elseif($column_info[4] == 'DT') {
  226. $val[$x] = $date->getDBInsertDateTimeValue();
  227. } else {
  228. $val[$x] = $date->getDBInsertTimeValue();
  229. }
  230. }
  231. }
  232. $adv_filter_value = implode(",",$val);
  233. }
  234. $irelcriteriasql = "insert into vtiger_relcriteria(QUERYID,COLUMNINDEX,COLUMNNAME,COMPARATOR,VALUE,GROUPID,COLUMN_CONDITION) values (?,?,?,?,?,?,?)";
  235. $irelcriteriaresult = $adb->pquery($irelcriteriasql, array($genQueryId, $column_index, $adv_filter_column, $adv_filter_comparator, $adv_filter_value, $adv_filter_groupid, $adv_filter_column_condition));
  236. // Update the condition expression for the group to which the condition column belongs
  237. $groupConditionExpression = '';
  238. if(!empty($advft_criteria_groups[$adv_filter_groupid]["conditionexpression"])) {
  239. $groupConditionExpression = $advft_criteria_groups[$adv_filter_groupid]["conditionexpression"];
  240. }
  241. $groupConditionExpression = $groupConditionExpression .' '. $column_index .' '. $adv_filter_column_condition;
  242. $advft_criteria_groups[$adv_filter_groupid]["conditionexpression"] = $groupConditionExpression;
  243. }
  244. foreach($advft_criteria_groups as $group_index => $group_condition_info) {
  245. if(empty($group_condition_info)) continue;
  246. if(empty($group_condition_info["conditionexpression"])) continue; // Case when the group doesn't have any column criteria
  247. $irelcriteriagroupsql = "insert into vtiger_relcriteria_grouping(GROUPID,QUERYID,GROUP_CONDITION,CONDITION_EXPRESSION) values (?,?,?,?)";
  248. $irelcriteriagroupresult = $adb->pquery($irelcriteriagroupsql, array($group_index, $genQueryId, $group_condition_info["groupcondition"], $group_condition_info["conditionexpression"]));
  249. }
  250. $log->info("Reports :: Save->Successfully saved vtiger_relcriteria");
  251. //<<<<step5 advancedfilter>>>>>>>
  252. //<<<<step7 scheduledReport>>>>>>>
  253. if($isReportScheduled == 'on' || $isReportScheduled == '1'){
  254. $scheduleReportSql = 'INSERT INTO vtiger_scheduled_reports (reportid,recipients,schedule,format,next_trigger_time) VALUES (?,?,?,?,?)';
  255. $adb->pquery($scheduleReportSql, array($genQueryId,$selectedRecipients,$scheduledInterval,$scheduledFormat,date("Y-m-d H:i:s")));
  256. }
  257. //<<<<step7 scheduledReport>>>>>>>
  258. }else
  259. {
  260. $errormessage = "<font color='red'><B>Error Message<ul>
  261. <li><font color='red'>Error while inserting the record</font>
  262. </ul></B></font> <br>" ;
  263. echo $errormessage;
  264. die;
  265. }
  266. }
  267. }else
  268. {
  269. $errormessage = "<font color='red'><B>Error Message<ul>
  270. <li><font color='red'>Error while inserting the record</font>
  271. </ul></B></font> <br>" ;
  272. echo $errormessage;
  273. die;
  274. }
  275. echo '<script>window.opener.location.href =window.opener.location.href;self.close();</script>';
  276. }
  277. }else
  278. {
  279. if($reportid != "")
  280. {
  281. if(!empty($selectedcolumns))
  282. {
  283. $idelcolumnsql = "delete from vtiger_selectcolumn where queryid=?";
  284. $idelcolumnsqlresult = $adb->pquery($idelcolumnsql, array($reportid));
  285. if($idelcolumnsqlresult != false)
  286. {
  287. for($i=0 ;$i<count($selectedcolumns);$i++)
  288. {
  289. if(!empty($selectedcolumns[$i])){
  290. $icolumnsql = "insert into vtiger_selectcolumn (QUERYID,COLUMNINDEX,COLUMNNAME) values (?,?,?)";
  291. $icolumnsqlresult = $adb->pquery($icolumnsql, array($reportid,$i,(decode_html($selectedcolumns[$i]))));
  292. }
  293. }
  294. }
  295. }
  296. $delsharesqlresult = $adb->pquery("DELETE FROM vtiger_reportsharing WHERE reportid=?", array($reportid));
  297. if($delsharesqlresult != false && $sharetype=="Shared" && $shared_entities!='')
  298. {
  299. $selectedcolumn = explode(";",$shared_entities);
  300. for($i=0 ;$i< count($selectedcolumn) -1 ;$i++)
  301. {
  302. $temp = split("::",$selectedcolumn[$i]);
  303. $icolumnsql = "INSERT INTO vtiger_reportsharing (reportid,shareid,setype) VALUES (?,?,?)";
  304. $icolumnsqlresult = $adb->pquery($icolumnsql, array($reportid,$temp[1],$temp[0]));
  305. }
  306. }
  307. //<<<<reportmodules>>>>>>>
  308. $ireportmodulesql = "UPDATE vtiger_reportmodules SET primarymodule=?,secondarymodules=? WHERE reportmodulesid=?";
  309. $ireportmoduleresult = $adb->pquery($ireportmodulesql, array($pmodule, $smodule,$reportid));
  310. $log->info("Reports :: Save->Successfully saved vtiger_reportmodules");
  311. //<<<<reportmodules>>>>>>>
  312. $ireportsql = "update vtiger_report set REPORTNAME=?, DESCRIPTION=?, REPORTTYPE=?, SHARINGTYPE=? where REPORTID=?";
  313. $ireportparams = array($reportname, $reportdescription, $reporttype, $sharetype, $reportid);
  314. $ireportresult = $adb->pquery($ireportsql, $ireportparams);
  315. $log->info("Reports :: Save->Successfully saved vtiger_report");
  316. $idelreportsortcolsql = "delete from vtiger_reportsortcol where reportid=?";
  317. $idelreportsortcolsqlresult = $adb->pquery($idelreportsortcolsql, array($reportid));
  318. $delReportGroupTimeSQL = "DELETE FROM vtiger_reportgroupbycolumn WHERE reportid=?";
  319. $delReportGroupTimeRES = $adb->pquery($delReportGroupTimeSQL,array($reportid));
  320. $log->info("Reports :: Save->Successfully deleted vtiger_reportsortcol");
  321. if($idelreportsortcolsqlresult!=false)
  322. {
  323. //<<<<step3 vtiger_reportsortcol>>>>>>>
  324. if($sort_by1 != "")
  325. {
  326. $sort_by1sql = "insert into vtiger_reportsortcol (SORTCOLID,REPORTID,COLUMNNAME,SORTORDER) values (?,?,?,?)";
  327. $sort_by1result = $adb->pquery($sort_by1sql, array(1, $reportid, $sort_by1, $sort_order1));
  328. if(CustomReportUtils::IsDateField($sort_by1)){
  329. $groupByTime1Sql = "INSERT INTO vtiger_reportgroupbycolumn(REPORTID,SORTID,SORTCOLNAME,DATEGROUPBYCRITERIA) values(?,?,?,?)";
  330. $groupByTime1Res = $adb->pquery($groupByTime1Sql,array($reportid,1,$sort_by1,$groupTime1));
  331. }
  332. }
  333. if($sort_by2 != "")
  334. {
  335. $sort_by2sql = "insert into vtiger_reportsortcol (SORTCOLID,REPORTID,COLUMNNAME,SORTORDER) values (?,?,?,?)";
  336. $sort_by2result = $adb->pquery($sort_by2sql, array(2, $reportid, $sort_by2, $sort_order2));
  337. if(CustomReportUtils::IsDateField($sort_by2)){
  338. $groupByTime2Sql = "INSERT INTO vtiger_reportgroupbycolumn(REPORTID,SORTID,SORTCOLNAME,DATEGROUPBYCRITERIA) values(?,?,?,?)";
  339. $groupByTime2Res = $adb->pquery($groupByTime2Sql,array($reportid,2,$sort_by2,$groupTime2));
  340. }
  341. }
  342. if($sort_by3 != "")
  343. {
  344. $sort_by3sql = "insert into vtiger_reportsortcol (SORTCOLID,REPORTID,COLUMNNAME,SORTORDER) values (?,?,?,?)";
  345. $sort_by3result = $adb->pquery($sort_by3sql, array(3, $reportid, $sort_by3, $sort_order3));
  346. if(CustomReportUtils::IsDateField($sort_by3)){
  347. $groupByTime3Sql = "INSERT INTO vtiger_reportgroupbycolumn(REPORTID,SORTID,SORTCOLNAME,DATEGROUPBYCRITERIA) values(?,?,?,?)";
  348. $groupByTime3Res = $adb->pquery($groupByTime3Sql,array($reportid,3,$sort_by3,$groupTime3));
  349. }
  350. }
  351. $log->info("Reports :: Save->Successfully saved vtiger_reportsortcol");
  352. //<<<<step3 vtiger_reportsortcol>>>>>>>
  353. $idelreportdatefiltersql = "delete from vtiger_reportdatefilter where datefilterid=?";
  354. $idelreportdatefiltersqlresult = $adb->pquery($idelreportdatefiltersql, array($reportid));
  355. //<<<<step5 standarfilder>>>>>>>
  356. $ireportmodulesql = "insert into vtiger_reportdatefilter (DATEFILTERID,DATECOLUMNNAME,DATEFILTER,STARTDATE,ENDDATE) values (?,?,?,?,?)";
  357. $ireportmoduleresult = $adb->pquery($ireportmodulesql, array($reportid, $stdDateFilterField, $stdDateFilter, $startdate, $enddate));
  358. $log->info("Reports :: Save->Successfully saved vtiger_reportdatefilter");
  359. //<<<<step5 standarfilder>>>>>>>
  360. //<<<<step4 columnstototal>>>>>>>
  361. $idelreportsummarysql = "delete from vtiger_reportsummary where reportsummaryid=?";
  362. $idelreportsummarysqlresult = $adb->pquery($idelreportsummarysql, array($reportid));
  363. for ($i=0;$i<count($columnstototal);$i++)
  364. {
  365. $ireportsummarysql = "insert into vtiger_reportsummary (REPORTSUMMARYID,SUMMARYTYPE,COLUMNNAME) values (?,?,?)";
  366. $ireportsummaryresult = $adb->pquery($ireportsummarysql, array($reportid, $i, $columnstototal[$i]));
  367. }
  368. $log->info("Reports :: Save->Successfully saved vtiger_reportsummary");
  369. //<<<<step4 columnstototal>>>>>>>
  370. //<<<<step5 advancedfilter>>>>>>>
  371. $idelrelcriteriasql = "delete from vtiger_relcriteria where queryid=?";
  372. $idelrelcriteriasqlresult = $adb->pquery($idelrelcriteriasql, array($reportid));
  373. $idelrelcriteriagroupsql = "delete from vtiger_relcriteria_grouping where queryid=?";
  374. $idelrelcriteriagroupsqlresult = $adb->pquery($idelrelcriteriagroupsql, array($reportid));
  375. foreach($advft_criteria as $column_index => $column_condition) {
  376. if(empty($column_condition)) continue;
  377. $adv_filter_column = $column_condition["columnname"];
  378. $adv_filter_comparator = $column_condition["comparator"];
  379. $adv_filter_value = $column_condition["value"];
  380. $adv_filter_column_condition = $column_condition["columncondition"];
  381. $adv_filter_groupid = $column_condition["groupid"];
  382. $column_info = explode(":",$adv_filter_column);
  383. $moduleFieldLabel = $column_info[2];
  384. $fieldName = $column_info[3];
  385. list($module, $fieldLabel) = explode('_', $moduleFieldLabel, 2);
  386. $fieldInfo = getFieldByReportLabel($module, $fieldLabel);
  387. $fieldType = null;
  388. if(!empty($fieldInfo)) {
  389. $field = WebserviceField::fromArray($adb, $fieldInfo);
  390. $fieldType = $field->getFieldDataType();
  391. }
  392. if($fieldType == 'currency') {
  393. // Some of the currency fields like Unit Price, Total, Sub-total etc of Inventory modules, do not need currency conversion
  394. if($field->getUIType() == '72') {
  395. $adv_filter_value = CurrencyField::convertToDBFormat($adv_filter_value, null, true);
  396. } else {
  397. $adv_filter_value = CurrencyField::convertToDBFormat($adv_filter_value);
  398. }
  399. }
  400. $temp_val = explode(",",$adv_filter_value);
  401. if(($column_info[4] == 'D' || ($column_info[4] == 'T' && $column_info[1] != 'time_start' && $column_info[1] != 'time_end') || ($column_info[4] == 'DT')) && ($column_info[4] != '' && $adv_filter_value != '' ))
  402. {
  403. $val = Array();
  404. for($x=0;$x<count($temp_val);$x++) {
  405. if(trim($temp_val[$x]) != '') {
  406. $date = new DateTimeField(trim($temp_val[$x]));
  407. if($column_info[4] == 'D') {
  408. $val[$x] = DateTimeField::convertToDBFormat(
  409. trim($temp_val[$x]));
  410. } elseif($column_info[4] == 'DT') {
  411. $val[$x] = $date->getDBInsertDateTimeValue();
  412. } else {
  413. $val[$x] = $date->getDBInsertTimeValue();
  414. }
  415. }
  416. }
  417. $adv_filter_value = implode(",",$val);
  418. }
  419. $irelcriteriasql = "insert into vtiger_relcriteria(QUERYID,COLUMNINDEX,COLUMNNAME,COMPARATOR,VALUE,GROUPID,COLUMN_CONDITION) values (?,?,?,?,?,?,?)";
  420. $irelcriteriaresult = $adb->pquery($irelcriteriasql, array($reportid, $column_index, $adv_filter_column, $adv_filter_comparator, $adv_filter_value, $adv_filter_groupid, $adv_filter_column_condition));
  421. // Update the condition expression for the group to which the condition column belongs
  422. $groupConditionExpression = '';
  423. if(!empty($advft_criteria_groups[$adv_filter_groupid]["conditionexpression"])) {
  424. $groupConditionExpression = $advft_criteria_groups[$adv_filter_groupid]["conditionexpression"];
  425. }
  426. $groupConditionExpression = $groupConditionExpression .' '. $column_index .' '. $adv_filter_column_condition;
  427. $advft_criteria_groups[$adv_filter_groupid]["conditionexpression"] = $groupConditionExpression;
  428. }
  429. foreach($advft_criteria_groups as $group_index => $group_condition_info) {
  430. if(empty($group_condition_info)) continue;
  431. if(empty($group_condition_info["conditionexpression"])) continue; // Case when the group doesn't have any column criteria
  432. $irelcriteriagroupsql = "insert into vtiger_relcriteria_grouping(GROUPID,QUERYID,GROUP_CONDITION,CONDITION_EXPRESSION) values (?,?,?,?)";
  433. $irelcriteriagroupresult = $adb->pquery($irelcriteriagroupsql, array($group_index, $reportid, $group_condition_info["groupcondition"], $group_condition_info["conditionexpression"]));
  434. }
  435. $log->info("Reports :: Save->Successfully saved vtiger_relcriteria");
  436. //<<<<step5 advancedfilter>>>>>>>
  437. //<<<<step7 scheduledReport>>>>>>>
  438. if($isReportScheduled == 'off' || $isReportScheduled == '0' || $isReportScheduled == '') {
  439. $deleteScheduledReportSql = "DELETE FROM vtiger_scheduled_reports WHERE reportid=?";
  440. $adb->pquery($deleteScheduledReportSql, array($reportid));
  441. } else{
  442. $checkScheduledResult = $adb->pquery('SELECT 1 FROM vtiger_scheduled_reports WHERE reportid=?', array($reportid));
  443. if($adb->num_rows($checkScheduledResult) > 0) {
  444. $scheduledReportSql = 'UPDATE vtiger_scheduled_reports SET recipients=?,schedule=?,format=? WHERE reportid=?';
  445. $adb->pquery($scheduledReportSql, array($selectedRecipients,$scheduledInterval,$scheduledFormat,$reportid));
  446. } else {
  447. $scheduleReportSql = 'INSERT INTO vtiger_scheduled_reports (reportid,recipients,schedule,format,next_trigger_time) VALUES (?,?,?,?,?)';
  448. $adb->pquery($scheduleReportSql, array($reportid,$selectedRecipients,$scheduledInterval,$scheduledFormat,date("Y-m-d H:i:s")));
  449. }
  450. }
  451. //<<<<step7 scheduledReport>>>>>>>
  452. }else
  453. {
  454. $errormessage = "<font color='red'><B>Error Message<ul>
  455. <li><font color='red'>Error while inserting the record</font>
  456. </ul></B></font> <br>" ;
  457. echo $errormessage;
  458. die;
  459. }
  460. }else
  461. {
  462. $errormessage = "<font color='red'><B>Error Message<ul>
  463. <li><font color='red'>Error while inserting the record</font>
  464. </ul></B></font> <br>" ;
  465. echo $errormessage;
  466. die;
  467. }
  468. echo '<script>window.opener.location.href = window.opener.location.href;self.close();</script>';
  469. }
  470. ?>