[evolvis-commits] r7132: [#613] Idee: reporting-Werkzeug i =?UTF-8?Q?ntegrieren=E2=86=B5=20Backup=20?==?UTF-8?Q?commit?=. works, but needs to be tested and optimized.
papel at evolvis.org
papel at evolvis.org
Wed Dec 22 16:12:34 CET 2010
Author: papel
Date: 2010-12-22 16:12:34 +0100 (Wed, 22 Dec 2010)
New Revision: 7132
Modified:
branches/papel-reporting/common/pm/taskReportingController.class.php
branches/papel-reporting/common/pm/taskReportingModel.class.php
Log:
[#613] Idee: reporting-Werkzeug integrieren
Backup commit. works, but needs to be tested and optimized.
Modified: branches/papel-reporting/common/pm/taskReportingController.class.php
===================================================================
--- branches/papel-reporting/common/pm/taskReportingController.class.php 2010-12-22 12:12:57 UTC (rev 7131)
+++ branches/papel-reporting/common/pm/taskReportingController.class.php 2010-12-22 15:12:34 UTC (rev 7132)
@@ -24,7 +24,7 @@
private $orderBy = '';
- private $asc = 0;
+ private $asc = 0;
private $submitted = 0;
@@ -174,6 +174,7 @@
public function getActivityUserPass() {
return $this->activityUserPass;
+
}
public function setReportDataHeader($reportDataHeader) {
@@ -216,6 +217,176 @@
return $this->reportTitles;
}
+ /**
+ * groupBy() - groups the results from evolvis and activity in an array
+ * if possible and gives it back. Needed because the activity datebase gets not grouped the way like the evolvis data
+ *
+ * @param stringy $evolvisActivityResult
+ *
+ * @return array $groupedResult
+ */
+ public function groupBy($evolvisActivityResult, $groupBy) {
+
+ }
+
+ /**
+ * orderBy() - Sorts the results from evolvis and activity in an array
+ * if possible and returns it. Needed because the activity datebase data gets not sorted the way like the evolvis data
+ *
+ * @param array $evolvisActivityResult
+ * @param string $orderBy - the param after that the result has to be sorted
+ * @param int $asc ascending or descending
+ *
+ * @return array $groupedResult
+ */
+ public function orderBy($evolvisActivityResult, $orderBy, $asc) {
+
+ }
+
+ /**
+ * mergeEvolvisActivityData() - Merges the Evolvis and Activity data and returns it.
+ *
+ * @param string $evolvisResult - the values of the string are separated with #sepRow# and #sepColumn#
+ * @param string $activityResult - the values of the string are separated with #sepRow# and #sepColumn#
+ *
+ * @return int $evolvisRowCount
+ */
+ public function isEvolvisRowCountBiggerThanActivity($evolvisResult, $activityResult) {
+
+ $evolvisCount = substr_count($evolvisResult, '#sepRow#');
+
+ $activityCount = substr_count($activityResult, '#sepRow#');
+
+ if($evolvisCount > $activityCount) {
+ $evolvisRowCount = 0;
+ } elseif($evolvisCount < $activityCount) {
+ $evolvisRowCount = 1;
+ } else { //$evolvisCount == $activityCount
+ $evolvisRowCount = 2;
+ }
+
+ return $evolvisRowCount;
+ }
+
+ /**
+ * mergeEvolvisActivityData() - Merges the Evolvis and Activity data and returns it.
+ *
+ * @param string $evolvisResult - the values of the string are separated with #sepRow# and #sepColumn#
+ * @param string $activityResult - the values of the string are separated with ascending or descending
+ *
+ * @return string $mergeResult
+ */
+ public function mergeEvolvisActivityData($evolvisResult, $activityResult) {
+
+ /*
+ foreach($evolvisResult as $evolvisHeader) {
+ echo '<br />$evolvisHeader => '.$evolvisHeader;
+ }
+
+ echo '<br /><br />';
+
+ foreach($activityResult as $activityHeader) {
+ echo '<br />$activityHeader => '.$activityHeader;
+ }
+
+ $connector = '';
+ if(trim($activityResult[0]) != '') {
+ $connector = '#sepColumn#';
+ }
+ $mergedHeaders = $evolvisResult[0]. $connector . $activityResult[0];
+
+ echo '<br /><br />$mergedHeaders => '.$mergedHeaders; */
+
+ /*
+ $evolvisHeader => Länge#sepColumn#Hours done
+ $activityHeader => Hours done
+
+ $evolvisData => 0#sepColumn#2#sepRow#0#sepColumn#3#sepRow#0#sepColumn#10#sepRow#0#sepColumn#0#sepRow#0#sepColumn#0#sepRow#0#sepColumn#0
+ $activityData => 2#sepRow#3#sepRow#10
+
+ //EVOLVIS:
+ 0#sepColumn#2
+ #sepRow#
+ 0#sepColumn#3
+ #sepRow#
+ 0#sepColumn#10
+ #sepRow#
+ 0#sepColumn#0
+ #sepRow#
+ 0#sepColumn#0
+ #sepRow#
+ 0#sepColumn#0
+
+
+ //ACTIVITY:
+ 2
+ #sepRow#
+ 3
+ #sepRow#
+ 10
+ */
+
+ #$mergedResult = array($mergedHeaders, );
+ $mergedResult = '';
+
+ return $mergedResult;
+ }
+
+ public function getFormatActivityDataForResult($selectRequest, $projectHours, $groupBy = false) {
+
+ $onceFlag = false;
+ foreach($projectHours[0] as $hour) {
+
+ if($selectRequest['hours_done']) {
+ if($onceFlag == false) {
+ $reportDataHeader_ .= _('Hours done'). '#sepColumn#';
+ }
+ $reportData_ .= $hour . '#sepColumn#';
+ }
+
+ if($selectRequest['hours_done_max']) {
+ if($onceFlag == false) {
+ $reportDataHeader_ .= _('Maximum hours done'). '#sepColumn#';
+ }
+ $reportData_ .= $hour . '#sepColumn#';
+ }
+
+ if($selectRequest['hours_done_min']) {
+ if($onceFlag == false) {
+ $reportDataHeader_ .= _('Minimum hours done'). '#sepColumn#';
+ }
+ $reportData_ .= $hour . '#sepColumn#';
+ }
+
+ if($selectRequest['hours_done_avg']) {
+ if($onceFlag == false) {
+ $reportDataHeader_ .= _('Average hours done'). '#sepColumn#';
+ }
+ $reportData_ .= $hour . '#sepColumn#';
+ }
+
+ if($selectRequest['hours_done_sum']) {
+ if($onceFlag == false) {
+ $reportDataHeader_ .= _('Summed hours done'). '#sepColumn#';
+ }
+ $reportData_ .= $hour . '#sepColumn#';
+ }
+
+ $reportData_ = substr($reportData_, 0, strlen($reportData_)-11);
+ $reportData_ .= '#sepRow#';
+ $onceFlag = true;
+ }
+
+ $activityDataHeaderAndData = array();
+ $reportDataHeader_ = substr($reportDataHeader_, 0, strlen($reportDataHeader_)-11);
+ $reportData_ = substr($reportData_, 0, strlen($reportData_)-8);
+
+ $activitydataHeaderAndData[0] = $reportDataHeader_;
+ $activitydataHeaderAndData[1] = $reportData_;
+
+ return $activitydataHeaderAndData;
+ }
+
public function getSubmittedCheckedDates() {
$whereRequest = $this->getWhereRequest();
@@ -238,7 +409,7 @@
$result = true;
}
- return $result;
+ return $result;
}
public function getCurrentDateAsArray() {
@@ -339,8 +510,8 @@
$selectRequest = $this->getSelectRequest();
- $evolvisProjectId = $selectRequest['group_id'];
- #$evolvisProjectId = 69;
+ #$evolvisProjectId = $selectRequest['group_id'];
+ $evolvisProjectId = 69;
$objModel = new taskReportingModel();
$objModel->setObjReportingInfo($this->getObjReportingInfo());
@@ -366,17 +537,194 @@
$selectRequest['hours_done_min'] ||
$selectRequest['hours_done_avg'] ||
$selectRequest['hours_done_sum']) {
- $projectInfo = $objModel->getActivityEvolvisProjectInfo($protocolPrefix, $host, $port, $user, $password, $evolvisProjectId);
+
+ //REACTIVATE LATER
+ #$projectInfo = $objModel->getActivityEvolvisProjectInfo($protocolPrefix, $host, $port, $user, $password, $evolvisProjectId);
+
+ //REMOVE LATER
+ $projectInfo = '[{"id":808,"resource-id":83,"hours":2,"name":"Implementierung","evolvisTaskId":305,"resource-name":"Apel, Patrick","date":"2010-09-09 00:00:00.0","position-id":207,"position-name":"Evolvis Feature Requests"},
+ {"id":809,"resource-id":83,"hours":2,"name":"Implementierung","evolvisTaskId":429,"resource-name":"Apel, Patrick","date":"2010-09-09 00:00:00.0","position-id":207,"position-name":"Evolvis Feature Requests"},
+ {"id":810,"resource-id":83,"hours":2,"name":"Implementierung","evolvisTaskId":430,"resource-name":"Apel, Patrick","date":"2010-09-09 00:00:00.0","position-id":207,"position-name":"Evolvis Feature Requests"},
+ {"id":811,"resource-id":83,"hours":8,"name":"Implementierung","evolvisTaskId":305,"resource-name":"Apel, Patrick","date":"2010-09-09 00:00:00.0","position-id":207,"position-name":"Evolvis Feature Requests"}]';
+
} else {
- $objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
+ //REACIVATE LATER
+ #$objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
}
-
+
+ /* id: 305 => hours done: 2
+ id: 429 => hours done: 2
+ id: 430 => hours done: 2
+ id: 305 => hours done: 8 */
+
+ /* Id => 305 | Id => 305
+ Id => 428
+ Id => 429 | Id => 429
+ Id => 430 | Id => 430
+ Id => 431
+ Id => 436 */
+
$objModel->setProjectInfo($projectInfo);
+ $intValue = $objModel->determineNeededSwitchCase($selectRequest);
+ $intValue = 0; #Remove if necessary
- $reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc);
- $reportDataHeader_ = $objModel->getReportDataHeader(); //Has to be after getReportData())
+ switch($intValue) {
+ case 0: // Evolvis database data and only hours done from the activity database data selected
+
+ #echo '<br />I am in case 0';
+ $groupedActivityData = array();
+ $groupInformation = array(array(array()));
+ $evolvisReportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, false);
+
+ $evolvisDataHeader_ = $objModel->getReportDataHeader(); // Needs to be after $reportData_
+
+ $offcutQuery = $objModel->getOffcutQuery();
+ $params = $objModel->getArrSqlParams();
+
+ $arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
+
+ $projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
+
+ $evolvisDataHeaderAndData = array($evolvisDataHeader_, $evolvisReportData_);
+
+ $evolvisNonAggData = $objModel->getAllChoosenNonAggData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc);
+ $groupInformation = $objModel->getPossibleGroupInformation($evolvisNonAggData, $projectHours);
+
+ /*
+ * $groupInformation[0][0][0] => project task id
+ * $groupInformation[0][0][1] => hours
+ */
+
+ $arrSqlQuerys = array();
+
+ $i = 0;
+ foreach($groupInformation as $info) {
+ $arrSqlQuerys[$i] = $objModel->getReportData2($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, $info);
+ $i++;
+ };
+
+ $arrMergedQuerysAndParams = array(array());
+ $arrMergedQuerysAndParams = $objModel->mergeSqlQuerys($arrSqlQuerys, $selectRequest, $whereRequest, $orderBy, $groupBy, $asc=0, $arrProjectTaskIds);
+
+ $evolvisReportData_ = $objModel->getReportData3($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, $arrMergedQuerysAndParams, $groupInformation);
+
+ $reportData_ = $evolvisReportData_;
+ $reportDataHeader_ = $evolvisDataHeader_;
+ break;
+
+ case 1: // Evolvis database data and only activity aggregation functions selected
+ echo '<br />I am in case 1';
+
+ $reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true);
+ $reportDataHeader_ = $objModel->getReportDataHeader();
+
+ $offcutQuery = $objModel->getOffcutQuery();
+ $params = $objModel->getArrSqlParams();
+
+ $arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
+ $projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
+
+ $activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
+
+ //Needs to get grouped by the values choosen
+ break;
+
+ case 2: // Evolvis database data and activity hours done and activity aggregation functions selected, so all is selected.
+ echo '<br />I am in case 2';
+
+ $reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true);
+ $reportDataHeader_ = $objModel->getReportDataHeader();
+
+ $offcutQuery = $objModel->getOffcutQuery();
+ $params = $objModel->getArrSqlParams();
+
+ $arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
+ $projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
+
+ //getFormatActivityDataForResult
+ $activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
+
+ //NEEDS TO BE TRIED TO GROUPBY HOURS DONE
+
+ #$this->isEvolvisRowCountBiggerThanActivity($evolvisReportData_, $activityReportData_);
+
+ break;
+
+ case 3: // Only Evolvis database data
+ echo '<br />I am in case 3';
+ $reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true);
+ $reportDataHeader_ = $objModel->getReportDataHeader();
+
+ //Ok. Now we can group by and order the data if someone choosed it.
+ break;
+ case 4: // Only Activity database data and some aggregation fields are selected (Just to feel like SQL for usability reasons)
+ echo '<br />I am in case 4';
+
+ $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true); /* The method sets
+ $objModel->setOffcutQuery() and $objModel->setArrSqlParams() those are needed for the right sortation of the activity database data.
+ **/
+
+ $offcutQuery = $objModel->getOffcutQuery();
+ $params = $objModel->getArrSqlParams();
+
+ $arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
+ $projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
+
+ $activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
+
+ $reportDataHeader_ = $activitydataHeaderAndData[0];
+ $reportData_ = $activitydataHeaderAndData[1];
+
+ break;
+ case 5: // Only Activity database data and only hours done selected (Just to feel like SQL for usability reasons).
+ echo '<br />I am in case 5';
+ $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true); /* The method sets
+ $objModel->setOffcutQuery() and $objModel->setArrSqlParams() those are needed for the right sortation of the activity database data.
+ **/
+ $offcutQuery = $objModel->getOffcutQuery();
+ $params = $objModel->getArrSqlParams();
+
+ $arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
+ $projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
+
+ $activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
+
+ $reportDataHeader_ = $activitydataHeaderAndData[0];
+ $reportData_ = $activitydataHeaderAndData[1];
+
+ break;
+ case 6: //Only Activity database data selected and only activity aggregation fields selected.
+ echo '<br />I am in case 6';
+
+ $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true); /* The method sets
+ $objModel->setOffcutQuery() and $objModel->setArrSqlParams() those are needed for the right sortation of the activity database data.
+ **/
+ $offcutQuery = $objModel->getOffcutQuery();
+ $params = $objModel->getArrSqlParams();
+
+ $arrProjectTaskIds = $objModel->getProjectTaskIdsByString($offcutQuery, $params);
+ $projectHours = $objModel->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
+
+ $activitydataHeaderAndData = $this->getFormatActivityDataForResult($selectRequest, $projectHours);
+
+ $reportDataHeader_ = $activitydataHeaderAndData[0];
+ $reportData_ = $activitydataHeaderAndData[1];
+
+ break;
+ case 7: // Nothing selected. Finished, but maybe I should include hours done too?
+ echo '<br />I am in case 7';
+ $reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, true);
+ $reportDataHeader_ = $objModel->getReportDataHeader();
+ break;
+
+ default: //6 Can not happen but anyway
+ $reportData_ = $objModel->getReportData($selectRequest, $whereRequest, $orderBy, $groupBy, $asc, false);
+ $reportDataHeader_ = $objModel->getReportDataHeader();
+ break;
+ }
+
$newArrReportDataHeader = array();
$newArrReportData = array();
$newArrReportTitle = array();
@@ -422,7 +770,7 @@
|| $oldArrReportData[count($oldArrReportData)-1] == '' && $this->isMergeReports()) {
if($objModel->isError() === true) {
-
+
$objView->setError($objModel->isError());
$objView->setErrorString($objModel->getErrorString());
$objView->setRow(false);
@@ -439,7 +787,8 @@
}
} else {
- $objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
+ //REACTIVATE LATER
+ #$objModel->testConnectionToActivity($protocolPrefix, $host, $port, $user, $password);
}
$group_id = $selectRequest['group_id'];
Modified: branches/papel-reporting/common/pm/taskReportingModel.class.php
===================================================================
--- branches/papel-reporting/common/pm/taskReportingModel.class.php 2010-12-22 12:12:57 UTC (rev 7131)
+++ branches/papel-reporting/common/pm/taskReportingModel.class.php 2010-12-22 15:12:34 UTC (rev 7132)
@@ -27,6 +27,10 @@
private $strProjectInfo = '';
+ private $strOffcutQuery = '';
+
+ private $arrSqlParams = array();
+
public function setProjectInfo($projectInfo) {
$this->strProjectInfo = $projectInfo;
}
@@ -83,7 +87,23 @@
return $this->reportDataHeader;
}
- public function testConnectionToActivity($protocolPrefix='ssl://', $host, $port, $username, $password) {
+ public function setOffcutQuery($strOffcutQuery) {
+ $this->strOffcutQuery = $strOffcutQuery;
+ }
+
+ public function getOffcutQuery() {
+ return $this->strOffcutQuery;
+ }
+
+ public function setArrSqlParams($params) {
+ $this->arrSqlParams = $params;
+ }
+
+ public function getArrSqlParams(){
+ return $this->arrSqlParams;
+ }
+
+ public function testConnectionToActivity($protocolPrefix='ssl://', $host, $port, $username, $password) {
$objReportingInfo = $this->getObjReportingInfo();
@@ -153,24 +173,38 @@
} else {
$objReportingInfo->setConnectionRefusedInfo(_('An error on login on Activity occurred. Hours done not available.'));
- }
+ }
return $result;
}
+ /**
+ * getProjectTaskIdsByString() - Returns the project task ids sorted the right way.
+ * The sorted project task ids are needed to sort the hours done in the right way.
+ *
+ * @param array $offcutSqlQuery - Part of a sql query string excluding the select clause
+ * @param array $params - Params like the value of the attribute GROUP BY or ORDER BY
+ *
+ * @return array $arrTaskIds;
+ */
public function getProjectTaskIdsByString($offcutSqlQuery, $params) {
//SELECT Clause
$sqlSelectClause = 'SELECT project_task_id';
$offcutSqlQuery_ = $sqlSelectClause . $offcutSqlQuery;
+ $strGroupBy = 'GROUP BY';
+ if(strpos($offcutSqlQuery_, $strGroupBy) != null) {
+ $offcutSqlQuery_ .= ' ,project_task_vw.project_task_id';
+ }
+
$res = db_query_params($offcutSqlQuery_, $params);
if(!$res || db_numrows($res) === 0) {
-
$error = db_error();
if(trim($error)!='') {
+
$this->setError(true);
$this->setErrorString($error);
} else {
@@ -182,14 +216,22 @@
}
$arrTaskIds = array();
- while ($arr = db_fetch_array($res)) {
+ while ($arr = db_fetch_array($res)) {
array_push($arrTaskIds, $arr[0]);
}
return $arrTaskIds;
}
-
+ /**
+ * getActivityProjectHours() - Parses the JASON formated activity data about every evolvis project task related to the project into an array.
+ * The data parsed and saved into an array will later be sorted the way the array $projectTaskIds is.
+ *
+ * @param array $projectTaskIds - The sorted $projectTaskIds
+ * @param string $projectInfo - The whole information about every evolvis task recorded in activity. The data is in the JASON format
+ *
+ * @return array $arrProjectTaskInfo_;
+ */
public function getActivityProjectHours($projectTaskIds, $projectInfo) {
$projectTask = split('},{',$projectInfo);
@@ -230,30 +272,115 @@
/* Now we got the evolvis project_task_ids but we need to sort them in the right way like
* the estimate hours are sorted.
- *
* Do not want to rewrite the loops, so I do it with another loops.
* */
-
+
$i = 0;
$arrProjectTaskInfo_ = array(array());
foreach($projectTaskIds as $singleProjectTaskId) { // 1
- // :
+ // :
foreach($arrProjectTaskInfo as $projectTaskInfo) { // n
if($singleProjectTaskId == $projectTaskInfo[1]) {
- $arrProjectTaskInfo_[0][$i] += $projectTaskInfo[0];
- $arrProjectTaskInfo_[1][$i] = $projectTaskInfo[1];
- }
-
+ $arrProjectTaskInfo_[0][$i] += $projectTaskInfo[0]; //Hour
+ $arrProjectTaskInfo_[1][$i] = $projectTaskInfo[1]; //ID
+ }
}
$i++;
}
+
+ $arrProjectTaskInfo__ = array(array());
+ $i = 0;
+ foreach($arrProjectTaskInfo_[1] as $id ){
+ $arrProjectTaskInfo__[1][$i] = $id; //ID
+ $i++;
+ }
+
+ $i = 0;
+ foreach($arrProjectTaskInfo_[0] as $hours ){
+ $arrProjectTaskInfo__[0][$i] = $hours; //ID
+ $i++;
+ }
+
+ return $arrProjectTaskInfo__;
+ }
+
+ public function getMaxActivityHours_($groupInformation) {
+ /* This fields should be sorted the same way.
+ * $groupInformation[0][0][0] => project task id
+ * $groupInformation[0][0][1] => hours
+ */
+
+ #GOT $groupInformation[$o][0][1];
+
+ $highestValue = $groupInformation[0][1];
+ for($i=1; $i<count($groupInformation); $i++) {
+ $tmpValue = $groupInformation[$i][1];
+
+ if($tmpValue > $highestValue) {
+ $highestValue = $tmpValue;
+ }
+ }
- return $arrProjectTaskInfo_;
+ return $highestValue;
}
- public function getMaxActivityHours($projectHours) {
+ public function getMinActivityHours_($groupInformation) {
+ /* This fields should be sorted the same way.
+ * $groupInformation[0][0][0] => project task id
+ * $groupInformation[0][0][1] => hours
+ */
+
+ #GOT $groupInformation[$o][0][1];
+
+ $lowestValue = $groupInformation[0][1];
+ for($i=1; $i<count($groupInformation); $i++) {
+ $tmpValue = $groupInformation[$i][1];
+
+ if($tmpValue < $lowestValue) {
+ $lowestValue = $tmpValue;
+ }
+ }
+
+ return $lowestValue;
+ }
+
+ public function getAvgActivityHours_($groupInformation) {
+ /* This fields should be sorted the same way.
+ * $groupInformation[0][0][0] => project task id
+ * $groupInformation[0][0][1] => hours
+ */
+
+ #GOT $groupInformation[$o][0][1];
+
+ for($i=0; $i<count($groupInformation); $i++) {
+ $tmpValue += $groupInformation[$i][1];
+ }
+
+ $avgHours = round(($tmpValue / $i) / 2);
+
+ return $avgHours;
+ }
+
+ public function getSumActivityHours_($groupInformation) {
+ /* This fields should be sorted the same way.
+ * $groupInformation[0][0][0] => project task id
+ * $groupInformation[0][0][1] => hours
+ */
+
+ #GOT $groupInformation[$o][0][1];
+
+ for($i=0; $i<count($groupInformation); $i++) {
+ $tmpValue += $groupInformation[$i][1];
+ }
+
+ return $tmpValue;
+ }
+
+ ############################################################
+
+ public function getMaxActivityHours($projectHours) {
return max($projectHours);
}
@@ -261,16 +388,463 @@
return min($projectHours);
}
- public function getAvgActivityHours($projectHours) {
- $avgHours = array_sum($projectHours) / count($projectHours);
+ public function getAvgActivityHours($projectHours) {
+ $avgHours = array_sum($projectHours) / count($projectHours);
return round($avgHours, 2);
}
public function getSumActivityHours($projectHours) {
return array_sum($projectHours);
}
+
+ public function getAllChoosenNonAggData($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0) {
+
+ /* This method will group the fields manually submitted without including aggregation fields. We can only call this method if one normal field is selected. If only aggregation fields are selected */
+
+ // SELECT CLAUSE
+ $select = 'SELECT project_task_id,'; //It is not grouped so it does not care.
+
+ $selectAllFlag = true; //false?
+ $countFields = 1;
+
+ #if($selectRequest['project_task_id']) { $select .= 'project_task_vw.project_task_id,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['summary']){ $select .= 'project_task_vw.summary,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['details']){ $select .= 'project_task_vw.details,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['parent_id']){ $select .= 'project_task_vw.parent_id,'; $countFields++; $selectAllFlag = false;}
+
+ if($selectRequest['duration']) { $select .= 'project_task_vw.duration,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['single_group_project_id']){ $select .= 'project_group_list_vw.group_project_id,'; $countFields++; $selectAllFlag = false;}
+
+ if($selectRequest['project_name']){ $select .= 'project_group_list_vw.project_name,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['description']){ $select .= 'project_group_list_vw.description,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['status_id']){ $select .= 'project_task_vw.status_id,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['status_name']){ $select .= 'project_task_vw.status_name,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['category_id']){ $select .= 'project_task_vw.category_id,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['category_name']){ $select .= 'project_task_vw.category_name,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['created_by']){ $select .= 'project_task_vw.created_by,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['user_name']){ $select .= 'project_task_vw.user_name,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['realname']){ $select .= 'project_task_vw.realname,'; $countFields++; $selectAllFlag = false;}
+ if($selectRequest['start_date']){ $select .= 'project_task_vw.start_date,'; $countFields++; $selectAllFlag = false;}
+
+ if($selectRequest['end_date']){ $select .= 'project_task_vw.end_date,'; $countFields++; $selectAllFlag = false;}
+
+ if($selectRequest['hours']){ $select .= 'project_task_vw.hours,'; $countFields++; $selectAllFlag = false;}
+
+ /* if($selectRequest['hours_done']){ } Uses in the other cases
+ */
+
+ if($selectRequest['priority']){ $select .= 'project_task_vw.priority,'; $countFields++; $selectAllFlag = false;}
+
+ if($selectRequest['percent_complete']){ $select .= 'project_task_vw.percent_complete,'; $countFields++; $selectAllFlag = false;}
+
+ // FROM CLAUSE
+ $from = ' FROM project_task_vw'. ' ' .
+ 'INNER JOIN project_group_list_vw'. ' ' .
+ 'ON'. ' ' .
+ 'project_task_vw.group_project_id = project_group_list_vw.group_project_id'. ' ';
+
+ // WHERE CLAUSE
+ $where = ' WHERE';
+
+ $params = array();
+ $countParams = 0;
+ foreach ($whereRequest['group_project_id'] as $group_project_id) {
+ $countParams ++;
+ $where .= ' project_group_list_vw.group_project_id = $' .$countParams. ' OR';
+ array_push($params, $group_project_id);
+ }
+
+ if($countParams > 0) {
+ $i = strlen($where);
+ $where = substr($where, 0, $i-3); //Deletes the last "OR" added from the foreach loop
+ }
+
+ $timestampStartDate = mktime(0, 0, 0, $whereRequest['start_date_month'], $whereRequest['start_date_day'], $whereRequest['start_date_year']);
+ $timestampEndDate = mktime(0, 0, 0, $whereRequest['end_date_month'], $whereRequest['end_date_day'], $whereRequest['end_date_year']);
+
+ if($countParams > 0) { $where.=' AND'; }
+ $countParams++;
+ $where.= ' start_date >= $'.$countParams;
+ array_push($params, $timestampStartDate);
+
+ $countParams++;
+ $where.= ' AND end_date <= $'.$countParams;
+ array_push($params, $timestampEndDate);
+
+ $countParams++;
+ $where.= ' AND project_group_list_vw.group_id = $'.$countParams;
+ array_push($params, $selectRequest['group_id']);
+
+ if($groupBy == '' && $orderBy != '') {
+ if($asc === 0) {
+ $where.= ' ASC';
+ } else {
+ $where.=' DESC';
+ }
+ }
+
+ $sqlQuery = $select . $from . $where;
+
+ $sqlQuery = preg_replace('/, FROM/', ' FROM', $sqlQuery);
+
+ $res = db_query_params($sqlQuery, $params);
+
+ if(!$res || db_numrows($res) === 0) {
+
+ $error = db_error();
+ if(trim($error)!='') {
+ $this->setError(true);
+ $this->setErrorString($error);
+ } else {
+ $this->setInfoString(_('No row was found.'));
+ $this->setRow(false);
+ }
+
+ return false;
+ }
+
+ $result = '';
+ $k = 0;
+ $arrResult = array(array());
+ while ($arr = db_fetch_array($res)) {
+
+ if($selectAllFlag) {
+ $countFields = (count($arr) / 2);
+ }
+
+ for($j=0; $j<$countFields; $j++) {
+ $arrResult[$k][$j] = $arr[$j];
+ }
+
+ $k++;
+ }
+
+ /* IMPORTANT:
+ * gforge=# SELECT hours, COUNT(project_task_id) FROM project_task_vw WHERE project_task_id != 407 GROUP BY hours UNION SELECT hours, COUNT(project_task_id) FROM project_task_vw WHERE project_task_id = 407 GROUP BY hours ORDER BY count;
+ */
+
+ return $arrResult;
+ }
+
+
+ public function getPossibleGroupInformation($evolvisNonAggData, $projectHours) {
+
+ /*
+ * In here I have to create the SQL Queries
+ */
+
+ /*
+ * There is a 1:n relation between the evolvis data and the activity data.
+ * It can be that there is no entry in activity for a task, because no one worked on it.
+ * So it does no care if it will be grouped or not, because the value of hours done is 0 anyway.
+ */
+
+ /* IMPORTANT:
+ * gforge=# SELECT hours, COUNT(project_task_id) FROM project_task_vw WHERE project_task_id != 407 GROUP BY hours UNION SELECT hours, COUNT(project_task_id) FROM project_task_vw WHERE project_task_id = 407 GROUP BY hours ORDER BY count;
+ */
+
+ $arrIdsToGroupBy = array(array(array()));
+ $arrIdsToGroupNotBy = array(array(array()));
+
+ $i = 0;
+ foreach($evolvisNonAggData as $evolvisData) {
+
+ $dataLoop1 = '';
+ $equalCount = 0;
+ $projectHourId = 0;
+ $projectHour = 0;
+ $idCount = 0;
+ $id_ = '';
+
+ $projectTaskId = $evolvisData[0];
+
+ foreach($projectHours[1] as $id) {
+ if($projectTaskId == $id) {
+ $id_ = $id;
+ break;
+ }
+ $idCount++;
+ }
+
+ foreach($evolvisData as $data) {
+ $dataLoop1 .= $data. ',';
+ }
+
+ $dataLoop1_ = split(',',$dataLoop1);
+ $dataLoop1 = '';
+
+ for($j=1; $j<(count($dataLoop1_)-1); $j++) { $dataLoop1 .= $dataLoop1_[$j].','; }
+
+ $dataLoop1a = $dataLoop1;
+
+ if($id_ == '') {
+
+ $dataLoop1 = $dataLoop1.'0';
+ } else {
+ $dataLoop1 = $dataLoop1.$projectHours[0][$idCount];
+ }
+
+ $k = 0;
+ $l = 0;
+ foreach($evolvisNonAggData as $evolvisData_) {
+ $dataLoop2 = '';
+ $id_ = '';
+ $idCount_ = 0;
+
+ $projectTaskId_ = $evolvisData_[0];
+ foreach($evolvisData_ as $data_) {
+ $dataLoop2 .= $data_. ',';
+ }
+
+ $dataLoop2_ = split(',',$dataLoop2);
+ $dataLoop2 = '';
+
+ for($j=1; $j<(count($dataLoop2_)-1); $j++) { $dataLoop2 .= $dataLoop2_[$j].','; }
+
+ $dataLoop2a = $dataLoop2;
+
+ foreach($projectHours[1] as $id) {
+ if($projectTaskId_ == $id) {
+ $id_ = $id;
+ break;
+ }
+ $idCount_++;
+ }
+
+ if($id_ == '') {
+ $dataLoop2 = $dataLoop2.'0';
+ } else {
+ $dataLoop2 = $dataLoop2.$projectHours[0][$idCount_];
+ }
+
+ if($dataLoop1a == $dataLoop2a) { #&& $id_ != '') {//Without hours done. If $id_ != '' there is an activity entry related to the evolvis entry.
+
+ if($dataLoop1 == $dataLoop2) { //&& $projectTaskId_ != $projectTaskId; //With hours done. (hours, percent_complete,...,hours done)
+
+ $arrIdsToGroupBy[$i][$k][0] = $projectTaskId_; //Includes all ids whose choosen fields can be grouped
+ $arrIdsToGroupBy[$i][$k][1] = $projectHours[0][$idCount_];
+
+ $k++;
+ }
+ }
+ }
+ $i++;
+ }
+
+ $arrIdsToGroupBy2 = $arrIdsToGroupBy;
+
+ //Need to delete double entries
+ for($i = 0; $i < count($arrIdsToGroupBy); $i++) { //$i => for every of the 46 project task ids //First array
+
+ for($j = 0; $j < count($arrIdsToGroupBy[$i]); $j++) {
+
+ $array1 = $arrIdsToGroupBy[$i][$j];
+ $count = count($arrIdsToGroupBy[$i][$j]);
+ $sameEntryCount = 0;
+
+ for($k = 0; $k < count($arrIdsToGroupBy2); $k++) { //Second array
+
+ for($l = 0; $l < count($arrIdsToGroupBy2[$k]); $l++) {
+
+ $array2 = $arrIdsToGroupBy2[$k][$l];
+
+ $array3 = array_diff($array1, $array2);
+
+ if($array3[0] == '') {
+ $sameEntryCount++;
+ }
+
+ if($sameEntryCount > 1) {
+ $arrIdsToGroupBy2[$k][$l][0] = 0;
+ $arrIdsToGroupBy2[$k][$l][1] = 0;
+ $sameEntryCount = 1;
+ }
+ }
+ }
+ }
+ }
+
+ //Transfer the data in a new array without empty indexes
+ $arrIdsToGroupBy3 = array(array(array()));
+ $k = 0;
+ $l = 0;
+
+ $flag = false;
+ for($i = 0; $i < count($arrIdsToGroupBy2); $i++) {
+
+ $flag = false;
+ for($j = 0; $j < count($arrIdsToGroupBy2[$i]); $j++) {
+
+ if($arrIdsToGroupBy2[$i][$j][0] != 0) {
+
+ $flag = true;
+
+ $arrIdsToGroupBy3[$k][$l][0] = $arrIdsToGroupBy2[$i][$j][0];
+ $arrIdsToGroupBy3[$k][$l][1] = $arrIdsToGroupBy2[$i][$j][1];
+ $l++;
+
+ }
+ }
+
+ if($flag == true) {
+ $k++;
+ }
+
+ $l=0;
+ }
+
+ /*
+ Id => 305 | Id => 305
+ Id => 428
+ Id => 429 | Id => 429
+ Id => 430 | Id => 430
+ Id => 431
+ Id => 436
+ */
+ return $arrIdsToGroupBy3;
+ }
+
+ public function mergeSqlQuerys($arrSqlQuerys) {
+
+ $query = '';
+ $params = array();
+ for($i = 0; $i < count($arrSqlQuerys); $i++) {
+ $query .= $arrSqlQuerys[$i][0];
+ if((count($arrSqlQuerys)-1) != $i) {
+ $query .= ' UNION ';
+ }
+
+ foreach($arrSqlQuerys[$i][1] as $param) {
+ array_push($params, $param);
+ }
+ }
+
+ $arrQueryParts = split(' ',$query);
+ $i = 0;
+
+ foreach($arrQueryParts as $queryParts) {
+
+ $searchPattern = '\\$+([0-9])';
+
+ if(ereg($searchPattern, $queryParts)) {
+ $i++;
+ $j = (strlen($queryParts))-1;
+ }
+
+ $searchPattern_ = '\\$+([0-9]{'.$j.'})';
+
+ ereg('\\$+([0-9]{'.$j.'})', $queryParts);
+
+ $part = ereg_replace($searchPattern_, '$'.$i.' ', $queryParts);
+
+ $part_ .= $part .' ';
+ }
+
+ $mergedSqlQuery = $part_;
+
+ $arrMergedQuerysAndParams[0] = $mergedSqlQuery;
+ $arrMergedQuerysAndParams[1] = $params;
+
+ return $arrMergedQuerysAndParams;
+ }
+
+ public function determineNeededSwitchCase($selectRequest) { //I think this method could be removed
+
+ $evolvisDbData = false;
+ $activityDbData = false;
+ $hoursDoneSelected = false;
+ $hoursAggSelected = false;
+
+ if($selectRequest['project_task_id']) { $evolvisDbData = true; }
+ if($selectRequest['project_task_id_max']) { $evolvisDbData = true; }
+ if($selectRequest['project_task_id_min']) { $evolvisDbData = true; }
+ if($selectRequest['project_task_id_count']) { $evolvisDbData = true; }
+ if($selectRequest['summary']){ $evolvisDbData = true; }
+ if($selectRequest['details']){ $evolvisDbData = true; }
+ if($selectRequest['parent_id']){ $evolvisDbData = true; }
+ if($selectRequest['parent_id_max']) { $evolvisDbData = true; }
+ if($selectRequest['parent_id_min']) { $evolvisDbData = true; }
+ if($selectRequest['parent_id_count']) { $evolvisDbData = true; }
+ if($selectRequest['duration']) { $evolvisDbData = true; }
+ if($selectRequest['duration_max']) { $evolvisDbData = true; }
+ if($selectRequest['duration_min']){ $evolvisDbData = true; }
+ if($selectRequest['duration_avg']){ $evolvisDbData = true; }
+ if($selectRequest['duration_sum']){ $evolvisDbData = true; }
+ if($selectRequest['single_group_project_id']){ $evolvisDbData = true; }
+ if($selectRequest['project_name']){ $evolvisDbData = true; }
+ if($selectRequest['description']){ $evolvisDbData = true; }
+ if($selectRequest['status_id']){ $evolvisDbData = true; }
+ if($selectRequest['status_name']){ $evolvisDbData = true; }
+ if($selectRequest['category_id']){ $evolvisDbData = true; }
+ if($selectRequest['category_name']){ $evolvisDbData = true; }
+ if($selectRequest['created_by']){ $evolvisDbData = true; }
+ if($selectRequest['user_name']){ $evolvisDbData = true; }
+ if($selectRequest['realname']){ $evolvisDbData = true; }
+ if($selectRequest['start_date']){ $evolvisDbData = true; }
+ if($selectRequest['start_date_max']){ $evolvisDbData = true; }
+ if($selectRequest['start_date_min']){ $evolvisDbData = true; }
+ if($selectRequest['start_date_avg']){ $evolvisDbData = true; }
+ if($selectRequest['end_date']){ $evolvisDbData = true; }
+ if($selectRequest['end_date_max']){ $evolvisDbData = true; }
+ if($selectRequest['end_date_min']){ $evolvisDbData = true; }
+ if($selectRequest['end_date_avg']){ $evolvisDbData = true; }
+ if($selectRequest['hours']){ $evolvisDbData = true; }
+ if($selectRequest['hours_max']){ $evolvisDbData = true; }
+ if($selectRequest['hours_min']){ $evolvisDbData = true; }
+ if($selectRequest['hours_avg']){ $evolvisDbData = true; }
+ if($selectRequest['hours_sum']){ $evolvisDbData = true; }
+
+ if($selectRequest['priority']){ $evolvisDbData = true; }
+ if($selectRequest['priority_max']){ $evolvisDbData = true; }
+ if($selectRequest['priority_min']){ $evolvisDbData = true; }
+ if($selectRequest['priority_avg']){ $evolvisDbData = true; }
+ if($selectRequest['percent_complete']){ $evolvisDbData = true; }
+ if($selectRequest['percent_complete_max']){ $evolvisDbData = true; }
+ if($selectRequest['percent_complete_min']){ $evolvisDbData = true; }
+ if($selectRequest['percent_complete_avg']){ $evolvisDbData = true; }
+ if($selectRequest['percent_complete_sum']){ $evolvisDbData = true; }
+
+ if($selectRequest['hours_done']){ $activityDbData = true; $hoursDoneSelected = true; }
+ if($selectRequest['hours_done_max']){ $activityDbData = true; $hoursAggSelected = true; }
+ if($selectRequest['hours_done_min']){ $activityDbData = true; $hoursAggSelected = true; }
+ if($selectRequest['hours_done_avg']){ $activityDbData = true; $hoursAggSelected = true; }
+ if($selectRequest['hours_done_sum']){ $activityDbData = true; $hoursAggSelected = true; }
+
+ if($evolvisDbData == true
+ && $activityDbData == true && $hoursAggSelected == false && $hoursDoneSelected == true) {
+ return 0; // Evolvis database data and only hours done from the activity database data selected
+ } elseif($evolvisDbData == true
+ && $activityDbData == true && $hoursAggSelected == true && $hoursDoneSelected == false) {
+ return 1; // Evolvis database data and only activity aggregation functions selected
+ } elseif($evolvisDbData == true
+ && $activityDbData == true && $hoursAggSelected == true && $hoursDoneSelected == true) {
+ return 2; // Evolvis database data and hours done and activity aggregation functions selected.
+ } elseif($evolvisDbData == true
+ && $activityDbData == false) {
+ return 3; // Only Evolvis database data
+ // BEGIN only activity database data
+ } elseif($evolvisDbData == false
+ && $activityDbData == true
+ && $hoursDoneSelected == true && $hoursAggSelected == true) {
+ return 4; // Only Activity database data and some activity aggregation fields are selected (Just to feel like SQL for usability reasons).
+ } elseif($evolvisDbData == false
+ && $activityDbData == true
+ && $hoursDoneSelected == true && $hoursAggSelected == false) {
+ return 5; // Only Activity database data and only hours done selected (Just to feel like SQL for usability reasons).
+ } elseif($evolvisDbData == false
+ && $activityDbData == true
+ && $hoursDoneSelected == false && $hoursAggSelected == true){
+ return 6; // Only Activity database data selected. Only aggregation fields selected.
+ // END only activity database data
+ } elseif($evolvisDbData == false
+ && $activityDbData == false) {
+ return 7; // Nothing selected. //finished, but maybe I should include hours done too.
+ } else {
+ return 8; // Can not happen but anyway.
+ }
+ }
- public function getReportData($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0) {
+ public function getReportData($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0, $groupByHoursDone=false) {
$arrReportHeader = array();
@@ -339,12 +913,6 @@
if($selectRequest['hours_avg']){ $select.=' ROUND(AVG(project_task_vw.hours)),'; array_push($arrReportHeader,_('Average hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
if($selectRequest['hours_sum']){ $select.=' SUM(project_task_vw.hours),'; array_push($arrReportHeader,_('Summed hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
- if($selectRequest['hours_done']){ array_push($arrReportHeader,_('Hours done')); $selectAllFlag = false; $countFields++; $doneHoursPos = $countFields;}
- if($selectRequest['hours_done_max']){ array_push($arrReportHeader,_('Maximum hours done')); $selectAllFlag = false; $countFields++; $maxHoursPos = $countFields;}
- if($selectRequest['hours_done_min']){ array_push($arrReportHeader,_('Minimum hours done')); $selectAllFlag = false; $countFields++; $minHoursPos = $countFields;}
- if($selectRequest['hours_done_avg']){ array_push($arrReportHeader,_('Average hours done')); $selectAllFlag = false; $countFields++; $avgHoursPos = $countFields;}
- if($selectRequest['hours_done_sum']){ array_push($arrReportHeader,_('Summed hours done')); $selectAllFlag = false; $countFields++; $sumHoursPos = $countFields;}
-
if($selectRequest['priority']){ $select.=' project_task_vw.priority,'; array_push($arrReportHeader,_('Priority')); array_push($arrGroupBy,'project_task_vw.priority'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
if($selectRequest['priority_max']){ $select.=' MAX(project_task_vw.priority),'; array_push($arrReportHeader,_('Maximal priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
if($selectRequest['priority_min']){ $select.=' MIN(project_task_vw.priority),'; array_push($arrReportHeader,_('Minimal priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
@@ -355,11 +923,19 @@
if($selectRequest['percent_complete_avg']){ $select.=' ROUND(AVG(project_task_vw.percent_complete)),'; array_push($arrReportHeader,_('Average percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
if($selectRequest['percent_complete_sum']){ $select.=' SUM(project_task_vw.percent_complete),'; array_push($arrReportHeader,_('Summed percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($groupByHoursDone == false) {
+ if($selectRequest['hours_done']){ array_push($arrReportHeader,_('Hours done')); $selectAllFlag = false; $countFields++; $doneHoursPos = $countFields;}
+ if($selectRequest['hours_done_max']){ array_push($arrReportHeader,_('Maximum hours done')); $selectAllFlag = false; $countFields++; $maxHoursPos = $countFields;}
+ if($selectRequest['hours_done_min']){ array_push($arrReportHeader,_('Minimum hours done')); $selectAllFlag = false; $countFields++; $minHoursPos = $countFields;}
+ if($selectRequest['hours_done_avg']){ array_push($arrReportHeader,_('Average hours done')); $selectAllFlag = false; $countFields++; $avgHoursPos = $countFields;}
+ if($selectRequest['hours_done_sum']){ array_push($arrReportHeader,_('Summed hours done')); $selectAllFlag = false; $countFields++; $sumHoursPos = $countFields;}
+ }
+
if($selectAllFlag == true) {
#$select.= ' *';
$select .= ' project_task_vw.project_task_id,
project_task_vw.group_project_id,
- project_task_vw.summary,
+ project_task_vw.summary,
project_task_vw.details,
project_task_vw.percent_complete,
project_task_vw.priority,
@@ -369,7 +945,7 @@
project_task_vw.created_by,
project_task_vw.status_id,
project_task_vw.category_id,
- project_task_vw.duration,
+ project_task_vw.duration,
project_task_vw.parent_id,
project_task_vw.category_name,
project_task_vw.status_name,
@@ -396,7 +972,7 @@
_('Created by'),
_('Status id'),
_('Category id'),
- _('Duration'),
+ _('Duration'),
_('Parent id'),
#_('Maximal duration'),
#_('Minimal duration'),
@@ -437,18 +1013,9 @@
#_('Summed percent complete'));
);
$startDateCount = 8;
- $endDateCount = 9;
+ $endDateCount = 9;
}
-
- #if(($selectRequest['hours_done'] ||
- # $selectRequest['hours_done_max'] ||
- # $selectRequest['hours_done_min'] ||
- # $selectRequest['hours_done_avg'] ||
- # $selectRequest['hours_done_sum']) && count($selectRequest)==(6-1)) { //1 is $selectRequest['group_id']
- # $select = 'project_task_id';
- #}
-
// FROM CLAUSE
$from = ' FROM project_task_vw'. ' ' .
'INNER JOIN project_group_list_vw'. ' ' .
@@ -469,7 +1036,7 @@
if($countParams > 0) {
$i = strlen($where);
$where = substr($where, 0, $i-3); //Deletes the last "OR" added from the foreach loop
- }
+ }
$timestampStartDate = mktime(0, 0, 0, $whereRequest['start_date_month'], $whereRequest['start_date_day'], $whereRequest['start_date_year']);
$timestampEndDate = mktime(0, 0, 0, $whereRequest['end_date_month'], $whereRequest['end_date_day'], $whereRequest['end_date_year']);
@@ -541,7 +1108,7 @@
}
}
- if($onlyAggFuncFlag == true && $groupBy == '') {;
+ if($onlyAggFuncFlag == true && $groupBy == '') {
$where = substr($where, 0, strlen($where)-8);
}
}
@@ -583,12 +1150,12 @@
$offcutSqlQuery = $from . $where;
$offcutSqlQuery_ = preg_replace('/, FROM/', ' FROM',$offcutSqlQuery);
-
+
$sqlQuery = preg_replace('/, FROM/', ' FROM', $sqlQuery);
$res = db_query_params($sqlQuery, $params);
- if(!$res || db_numrows($res) === 0) {
+ if(!$res || db_numrows($res) === 0) {
$error = db_error();
if(trim($error)!='') {
@@ -600,41 +1167,41 @@
}
return false;
- }
+ }
$commaSeparatedReportHeader = implode('#sepColumn#', $arrReportHeader);
$this->setReportDataHeader($commaSeparatedReportHeader);
$this->setInfoString(_('The PDF file is created.'));
- $arrProjectTaskIds = $this->getProjectTaskIdsByString($offcutSqlQuery_, $params);
-
- $projectInfo = $this->getProjectInfo();
+ $this->setOffcutQuery($offcutSqlQuery_);
+ $this->setArrSqlParams($params);
- if($selectRequest['hours_done'] ||
- $selectRequest['hours_done_max'] ||
- $selectRequest['hours_done_min'] ||
- $selectRequest['hours_done_avg'] ||
- $selectRequest['hours_done_sum']) {
- $projectHours = $this->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
- }
+ if($groupByHoursDone == false) {
+
+ $arrProjectTaskIds = $this->getProjectTaskIdsByString($offcutSqlQuery_, $params);
+
+ $projectInfo = $this->getProjectInfo();
+
+ $projectHours = $this->getActivityProjectHours($arrProjectTaskIds, $projectInfo);
- if($selectRequest['hours_done_max']) {
- $maxHours = $this->getMaxActivityHours($projectHours[0]);
- }
+ if($selectRequest['hours_done_max']) {
+ $maxHours = $this->getMaxActivityHours($projectHours[0]);
+ }
- if($selectRequest['hours_done_min']) {
- $minHours = $this->getMinActivityHours($projectHours[0]);
- }
+ if($selectRequest['hours_done_min']) {
+ $minHours = $this->getMinActivityHours($projectHours[0]);
+ }
- if($selectRequest['hours_done_avg']) {
- $avgHours = $this->getAvgActivityHours($projectHours[0]);
- }
+ if($selectRequest['hours_done_avg']) {
+ $avgHours = $this->getAvgActivityHours($projectHours[0]);
+ }
- if($selectRequest['hours_done_sum']) {
- $sumHours = $this->getSumActivityHours($projectHours[0]);
+ if($selectRequest['hours_done_sum']) {
+ $sumHours = $this->getSumActivityHours($projectHours[0]);
+ }
}
-
+
$result = '';
$k = 0;
while ($arr = db_fetch_array($res)) {
@@ -657,19 +1224,666 @@
$date = date(_('Y-m-d H:i'), $arr[$j]);
$result .= $date;
- } elseif($doneHoursPos-1 == $j) {
+ } elseif($doneHoursPos-1 == $j && $groupByHoursDone == false) {
- $result .= $projectHours[0][$k];
+ $projectHour = $projectHours[0][$k];
+ if($projectHour == null || $projectHour == '') {
+ $projectHour = 0;
+ }
+ $result .= $projectHour;
$k++;
+ } elseif($maxHoursPos-1 == $j && $groupByHoursDone == false) {
+ if($maxHours == null || $maxHours == '') {
+ $maxHours = 0;
+ }
+ $result .= $maxHours;
+ } elseif($minHoursPos-1 == $j && $groupByHoursDone == false) {
+ if($minHours == null || $minHours == '') {
+ $minHours = 0;
+ }
+ $result .= $minHours;
+ } elseif($avgHoursPos-1 == $j && $groupByHoursDone == false) {
+ if($avgHours == null || $avgHours == '') {
+ $avgHours = 0;
+ }
+ $result .= $avgHours;
+ } elseif($sumHoursPos-1 == $j && $groupByHoursDone == false) {
+ if($sumHours == null || $sumHours == '') {
+ $sumHours = 0;
+ }
+ $result .= $sumHours;
+ } else {
+ $result .= $arr[$j];
+ }
+
+ if($j+1<$countFields) { $result .= '#sepColumn#'; }
+ if($j+1==$countFields) { $result .= '#sepRow#'; }
+ }
+ }
+
+ $result = substr($result, 0, strlen($result)-8);
+
+ //Only returns the formated data.
+
+ return $result;
+ }
+
+ public function getReportData2($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0, $arrProjectTaskIds) {
+
+ $arrReportHeader = array();
+ $arrGroupBy = array();
+
+ $aggFuncFlag = false;
+ $onlyAggFuncFlag = true;
+
+ $startDateCount = -1;
+ $startDateCountMax = -1;
+ $startDateCountMin = -1;
+ $startDateCountAvg = -1;
+
+ $endDateCount = -1;
+ $endDateCountMax = -1;
+ $endDateCountMin = -1;
+ $endDateCountAvg = -1;
+
+ $doneHoursPos = -1;
+ $maxHoursPos = -1;
+ $minHoursPos = -1;
+ $avgHoursPos = -1;
+ $sumHoursPos = -1;
+
+ $countFields = 0;
+ //SELECT CLAUSE
+ $selectAllFlag = true;
+
+ $select ='SELECT ';
+ if($selectRequest['project_task_id']) { $select.=' project_task_vw.project_task_id,'; array_push($arrReportHeader,_('Project task id')); array_push($arrGroupBy,'project_task_vw.project_task_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['project_task_id_max']) { $select.=' MAX(project_task_vw.project_task_id),'; array_push($arrReportHeader,_('Maximal project task id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['project_task_id_min']) { $select.=' MIN(project_task_vw.project_task_id),'; array_push($arrReportHeader,_('Minimal project task id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['project_task_id_count']) { $select.=' COUNT(project_task_vw.project_task_id),'; array_push($arrReportHeader,_('Project task id count')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['summary']){ $select.=' project_task_vw.summary,'; array_push($arrReportHeader,_('Summary')); array_push($arrGroupBy,'project_task_vw.summary'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['details']){ $select.=' project_task_vw.details,'; array_push($arrReportHeader,_('Details')); array_push($arrGroupBy,'project_task_vw.details'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['parent_id']){ $select.=' project_task_vw.parent_id,'; array_push($arrReportHeader,_('Parent id')); array_push($arrGroupBy,'project_task_vw.parent_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['parent_id_max']) { $select.=' MAX(project_task_vw.parent_id),'; array_push($arrReportHeader,_('Maximal parent id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['parent_id_min']) { $select.=' MIN(project_task_vw.parent_id),'; array_push($arrReportHeader,_('Minimal parent id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['parent_id_count']) { $select.=' COUNT(project_task_vw.parent_id),'; array_push($arrReportHeader,_('Parent id count')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['duration']) { $select.=' project_task_vw.duration,'; array_push($arrReportHeader,_('Duration')); array_push($arrGroupBy,'duration'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['duration_max']) { $select.=' MAX(project_task_vw.duration),'; array_push($arrReportHeader,_('Maximal duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['duration_min']){ $select.=' MIN(project_task_vw.duration),'; array_push($arrReportHeader,_('Minimal duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['duration_avg']){ $select.=' ROUND(AVG(project_task_vw.duration)),'; array_push($arrReportHeader,_('Average duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['duration_sum']){ $select.=' SUM(project_task_vw.duration),'; array_push($arrReportHeader,_('Summed duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['single_group_project_id']){ $select.=' project_group_list_vw.group_project_id,'; array_push($arrReportHeader,_('Group project id')); array_push($arrGroupBy,'project_group_list_vw.group_project_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['project_name']){ $select.=' project_group_list_vw.project_name,'; array_push($arrReportHeader,_('Project name')); array_push($arrGroupBy,'project_group_list_vw.project_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['description']){ $select.=' project_group_list_vw.description,'; array_push($arrReportHeader,_('Description')); array_push($arrGroupBy,'project_group_list_vw.description'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['status_id']){ $select.=' project_task_vw.status_id,'; array_push($arrReportHeader,_('Status id')); array_push($arrGroupBy,'project_task_vw.status_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['status_name']){ $select.=' project_task_vw.status_name,'; array_push($arrReportHeader,_('Status name')); array_push($arrGroupBy,'project_task_vw.status_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['category_id']){ $select.=' project_task_vw.category_id,'; array_push($arrReportHeader,_('Category id')); array_push($arrGroupBy,'project_task_vw.category_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['category_name']){ $select.=' project_task_vw.category_name,'; array_push($arrReportHeader,_('Category name')); array_push($arrGroupBy,'project_task_vw.category_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['created_by']){ $select.=' project_task_vw.created_by,'; array_push($arrReportHeader,_('Created by')); array_push($arrGroupBy,'project_task_vw.created_by'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['user_name']){ $select.=' project_task_vw.user_name,'; array_push($arrReportHeader,_('Username')); array_push($arrGroupBy,'project_task_vw.user_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['realname']){ $select.=' project_task_vw.realname,'; array_push($arrReportHeader,_('Real name')); array_push($arrGroupBy,'project_task_vw.realname'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['start_date']){ $select.=' project_task_vw.start_date,'; array_push($arrReportHeader,_('Start date')); array_push($arrGroupBy,'project_task_vw.start_date'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $startDateCount=$countFields; }
+ if($selectRequest['start_date_max']){ $select.=' MAX(project_task_vw.start_date),'; array_push($arrReportHeader,_('Maximal start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountMax=$countFields; }
+ if($selectRequest['start_date_min']){ $select.=' MIN(project_task_vw.start_date),'; array_push($arrReportHeader,_('Minimal start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountMin=$countFields; }
+ if($selectRequest['start_date_avg']){ $select.=' ROUND(AVG(project_task_vw.start_date)),'; array_push($arrReportHeader,_('Average start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountAvg=$countFields; }
+ if($selectRequest['end_date']){ $select.=' project_task_vw.end_date,'; array_push($arrReportHeader,_('End date')); array_push($arrGroupBy,'project_task_vw.end_date'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $endDateCount=$countFields; }
+ if($selectRequest['end_date_max']){ $select.=' MAX(project_task_vw.end_date),'; array_push($arrReportHeader,_('Maximal end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountMax=$countFields; }
+ if($selectRequest['end_date_min']){ $select.=' MIN(project_task_vw.end_date),'; array_push($arrReportHeader,_('Minimal end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountMin=$countFields;}
+ if($selectRequest['end_date_avg']){ $select.=' ROUND(AVG(project_task_vw.end_date)),'; array_push($arrReportHeader,_('Average end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountAvg=$countFields;}
+ if($selectRequest['hours']){ $select.=' project_task_vw.hours,'; array_push($arrReportHeader,_('Hours')); array_push($arrGroupBy,'project_task_vw.hours'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['hours_max']){ $select.=' MAX(project_task_vw.hours),'; array_push($arrReportHeader,_('Maximal hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['hours_min']){ $select.=' MIN(project_task_vw.hours),'; array_push($arrReportHeader,_('Minimal hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['hours_avg']){ $select.=' ROUND(AVG(project_task_vw.hours)),'; array_push($arrReportHeader,_('Average hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['hours_sum']){ $select.=' SUM(project_task_vw.hours),'; array_push($arrReportHeader,_('Summed hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+
+ if($selectRequest['priority']){ $select.=' project_task_vw.priority,'; array_push($arrReportHeader,_('Priority')); array_push($arrGroupBy,'project_task_vw.priority'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['priority_max']){ $select.=' MAX(project_task_vw.priority),'; array_push($arrReportHeader,_('Maximal priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['priority_min']){ $select.=' MIN(project_task_vw.priority),'; array_push($arrReportHeader,_('Minimal priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['priority_avg']){ $select.=' ROUND(AVG(project_task_vw.priority)),'; array_push($arrReportHeader,_('Average priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['percent_complete']){ $select.=' project_task_vw.percent_complete,'; array_push($arrReportHeader,_('Percent complete')); array_push($arrGroupBy,'project_task_vw.percent_complete'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['percent_complete_max']){ $select.=' MAX(project_task_vw.percent_complete),'; array_push($arrReportHeader,_('Maximal percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['percent_complete_min']){ $select.=' MIN(project_task_vw.percent_complete),'; array_push($arrReportHeader,_('Minimal percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['percent_complete_avg']){ $select.=' ROUND(AVG(project_task_vw.percent_complete)),'; array_push($arrReportHeader,_('Average percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['percent_complete_sum']){ $select.=' SUM(project_task_vw.percent_complete),'; array_push($arrReportHeader,_('Summed percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+
+
+ if($selectAllFlag == true) {
+ #$select.= ' *';
+ $select .= ' project_task_vw.project_task_id,
+ project_task_vw.group_project_id,
+ project_task_vw.summary,
+ project_task_vw.details,
+ project_task_vw.percent_complete,
+ project_task_vw.priority,
+ project_task_vw.hours,
+ project_task_vw.start_date,
+ project_task_vw.end_date,
+ project_task_vw.created_by,
+ project_task_vw.status_id,
+ project_task_vw.category_id,
+ project_task_vw.duration,
+ project_task_vw.parent_id,
+ project_task_vw.category_name,
+ project_task_vw.status_name,
+ project_task_vw.user_name,
+ project_task_vw.realname,
+ project_group_list_vw.project_name,
+ project_group_list_vw.description';
+ $arrReportHeader = array(_('Project task id'),
+ _('Group project id'),
+ #_('Maximal project task id'),
+ #_('Minimal project task id'),
+ #_('Project task id count'),
+ _('Summary'),
+ _('Details'),
+ #_('Parent id'),
+ #_('Maximal parent id'),
+ #_('Minimal parent id'),
+ #_('Parent id count'),
+ _('Percent complete'),
+ _('Priority'),
+ _('Hours'),
+ _('Start date'),
+ _('End date'),
+ _('Created by'),
+ _('Status id'),
+ _('Category id'),
+ _('Duration'),
+ _('Parent id'),
+ #_('Maximal duration'),
+ #_('Minimal duration'),
+ #_('Average duration'),
+ #_('Summed duration'),
+ #_('Last modified date'),
+ _('Category name'),
+ _('Status name'),
+ _('Username'),
+ _('Real name'),
+ #_('Group project id'),
+ #_('Group id'),
+ _('Project name'),
+ #_('Is plubic'),
+ _('Description')
+ #_('Maximal start date'),
+ #_('Minimal start date'),
+ #_('Average start date'),
+ #_('End date'),
+ #_('Maximal end date'),
+ #_('Minimal end date'),
+ #_('Average end date'),
+ #_('Maximal hours'),
+ #_('Minimal hours'),
+ #_('Average hours'),
+ #_('Summed hours'),
+ #_('Hours done'),
+ #_('Maximal hours done'),
+ #_('Minimal hours done'),
+ #_('Average hours done'),
+ #_('Summed hours done'),
+ #_('Maximal priority'),
+ #_('Minimal priority'),
+ #_('Average priority'),
+ #_('Maximal percent complete'),
+ #_('Minimal percent complete'),
+ #_('Average percent complete'));
+ #_('Summed percent complete'));
+ );
+ $startDateCount = 8;
+ $endDateCount = 9;
+ }
+
+ // FROM CLAUSE
+ $from = ' FROM project_task_vw'. ' ' .
+ 'INNER JOIN project_group_list_vw'. ' ' .
+ 'ON'. ' ' .
+ 'project_task_vw.group_project_id = project_group_list_vw.group_project_id'. ' ';
+
+ // WHERE CLAUSE
+ $where = ' WHERE';
+
+ $params = array();
+ $countParams = 0;
+ foreach ($whereRequest['group_project_id'] as $group_project_id) {
+ $countParams ++;
+ $where .= ' project_group_list_vw.group_project_id = $' .$countParams. ' OR';
+ array_push($params, $group_project_id);
+ }
+
+ if($countParams > 0) {
+ $i = strlen($where);
+ $where = substr($where, 0, $i-3); //Deletes the last "OR" added from the foreach loop
+ }
+
+ $timestampStartDate = mktime(0, 0, 0, $whereRequest['start_date_month'], $whereRequest['start_date_day'], $whereRequest['start_date_year']);
+ $timestampEndDate = mktime(0, 0, 0, $whereRequest['end_date_month'], $whereRequest['end_date_day'], $whereRequest['end_date_year']);
+
+ if($countParams > 0) { $where.=' AND'; }
+ $countParams++;
+ $where.= ' start_date >= $'.$countParams;
+ array_push($params, $timestampStartDate);
+
+ $countParams++;
+ $where.= ' AND end_date <= $'.$countParams;
+ array_push($params, $timestampEndDate);
+
+ $countParams++;
+ $where.= ' AND project_group_list_vw.group_id = $'.$countParams;
+ array_push($params, $selectRequest['group_id']);
+
+ foreach($arrProjectTaskIds as $ids) {
+ $countParams ++;
+ $where .= ' OR project_task_id = $'.$countParams;
+ array_push($params, $ids[0]);
+ }
+
+ $tblPrefix = '';
+ if($groupBy != '' && get_magic_quotes_gpc() == true
+ || $aggFuncFlag == true && get_magic_quotes_gpc() == true) {
+ switch($groupBy) {
+ case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
+ break;
+ case 'project_name': $tblPrefix = 'project_group_list_vw.';
+ break;
+ case 'description': $tblPrefix = 'project_group_list_vw.';
+ default: $tblPrefix = 'project_task_vw.';
+ break;
+ }
+ /* $countParams++;
+ $where.=' GROUP BY $'.$countParams;
+ array_push($params, $prefix.$groupBy);
+
+ It does not work with placeholders and array params.
+ So I used the security function enabled through the method
+ db_query_params() in here. */
+ if($groupBy === 'single_group_project_id') {
+ $groupBy = 'group_project_id';
+ }
+
+ $where.= ' GROUP BY ';
+ $groupBy__ = '';
+ $groupAvailable = false;
+ foreach($arrGroupBy as $groupBy_) {
+ if($groupBy == $groupBy_) {
+ $groupAvailable = true;
+ }
+ $groupBy__.=' '.$groupBy_.',';
+ }
+
+ $where.= $groupBy__;
+ if($groupBy == '') {
+ $where = substr($where, 0, strlen($where)-1);
+ }
+
+ if(!$groupAvailable) {
+ if($groupBy != '') {
+ $where.=$tblPrefix.$groupBy;
+ }
+ } else {
+ if(!$onlyAggFuncFlag) {
+ $where = substr($where, 0, strlen($where)-1);
+ } else {
+ $where = substr($where, 0, strlen($where)-8);
+ }
+
+ if($groupBy != '' && !$onlyAggFuncFlag) {
+ $where.=', '.$tblPrefix.$groupBy;
+ }
+ }
+
+ if($onlyAggFuncFlag == true && $groupBy == '') {
+ $where = substr($where, 0, strlen($where)-8);
+ }
+ }
+
+ $tblPrefix = '';
+ if($orderBy != '' && get_magic_quotes_gpc() == true) {
+ switch($orderBy) {
+ case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
+ break;
+ case 'project_name': $tblPrefix = 'project_group_list_vw.';
+ break;
+ case 'description': $tblPrefix = 'project_group_list_vw.';
+ default: $tblPrefix = 'project_task_vw.';
+ break;
+ }
+ /* $countParams++;
+ $where.= ' ORDER BY $'.$countParams;
+ array_push($params, $orderBy);
+
+ It does not work with placeholders and array params.
+ So I used the security function enabled through the method
+ db_query_params() in here. */
+ if($orderBy === 'single_group_project_id') {
+ $orderBy = 'group_project_id';
+ }
+
+ $where.= ' ORDER BY '.$tblPrefix.$orderBy;
+ }
+
+ if($groupBy == '' && $orderBy != '') {
+ if($asc === 0) {
+ $where.= ' ASC';
+ } else {
+ $where.=' DESC';
+ }
+ }
+
+ $sqlQuery = $select . $from . $where;
+
+ $offcutSqlQuery = $from . $where;
+ $offcutSqlQuery_ = preg_replace('/, FROM/', ' FROM',$offcutSqlQuery);
+
+ $sqlQuery = preg_replace('/, FROM/', ' FROM', $sqlQuery);
+
+ $arrSqlQueryInfo = array(array());
+ $arrSqlQueryInfo[0] = $sqlQuery;
+ $arrSqlQueryInfo[1] = $params;
+
+ return $arrSqlQueryInfo;
+ }
+
+ public function getReportData3($selectRequest, $whereRequest, $orderBy='', $groupBy='', $asc=0, $arrMergedQuerysAndParams, $groupInformation) {
+
+ /* $selectRequest needed to know the order of the data, so I can convert the timestamp in a date.
+ * $whereRequest needed to group and order the merged Query again, so that the whole output will be merged.
+ * Otherwise every string will ordered and grouped his own way. Group By and order by has to be at the last of the merged Queries.
+ * $groupInformation includes the hours done to put into an aggregation function.
+ * */
+
+ $arrReportHeader = array();
+
+ $arrGroupBy = array();
+
+ $aggFuncFlag = false;
+ $onlyAggFuncFlag = true;
+
+ $startDateCount = -1;
+ $startDateCountMax = -1;
+ $startDateCountMin = -1;
+ $startDateCountAvg = -1;
+
+ $endDateCount = -1;
+ $endDateCountMax = -1;
+ $endDateCountMin = -1;
+ $endDateCountAvg = -1;
+
+ $doneHoursPos = -1;
+ $maxHoursPos = -1;
+ $minHoursPos = -1;
+ $avgHoursPos = -1;
+ $sumHoursPos = -1;
+
+ $countFields = 0;
+ $projectTaskIdChoosen = false;
+ //SELECT CLAUSE IS NOT NEEDED, BECAUSE WE HAVE A SQL QUERY ALREADY
+
+ if($selectRequest['project_task_id']) { array_push($arrReportHeader,_('Project task id')); array_push($arrGroupBy,'project_task_vw.project_task_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $projectTaskIdChoosen = true; $countFields++; }
+ if($selectRequest['project_task_id_max']) { array_push($arrReportHeader,_('Maximal project task id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['project_task_id_min']) { array_push($arrReportHeader,_('Minimal project task id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['project_task_id_count']) { $select.=' COUNT(project_task_vw.project_task_id),'; array_push($arrReportHeader,_('Project task id count')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['summary']){ array_push($arrReportHeader,_('Summary')); array_push($arrGroupBy,'project_task_vw.summary'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['details']){ array_push($arrReportHeader,_('Details')); array_push($arrGroupBy,'project_task_vw.details'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['parent_id']){ array_push($arrReportHeader,_('Parent id')); array_push($arrGroupBy,'project_task_vw.parent_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['parent_id_max']) { array_push($arrReportHeader,_('Maximal parent id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['parent_id_min']) { array_push($arrReportHeader,_('Minimal parent id')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['parent_id_count']) { array_push($arrReportHeader,_('Parent id count')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['duration']) { array_push($arrReportHeader,_('Duration')); array_push($arrGroupBy,'duration'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['duration_max']) { array_push($arrReportHeader,_('Maximal duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['duration_min']){ array_push($arrReportHeader,_('Minimal duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['duration_avg']){ array_push($arrReportHeader,_('Average duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['duration_sum']){ array_push($arrReportHeader,_('Summed duration')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['single_group_project_id']){ array_push($arrReportHeader,_('Group project id')); array_push($arrGroupBy,'project_group_list_vw.group_project_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['project_name']){ array_push($arrReportHeader,_('Project name')); array_push($arrGroupBy,'project_group_list_vw.project_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['description']){ array_push($arrReportHeader,_('Description')); array_push($arrGroupBy,'project_group_list_vw.description'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['status_id']){ array_push($arrReportHeader,_('Status id')); array_push($arrGroupBy,'project_task_vw.status_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['status_name']){ array_push($arrReportHeader,_('Status name')); array_push($arrGroupBy,'project_task_vw.status_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['category_id']){ array_push($arrReportHeader,_('Category id')); array_push($arrGroupBy,'project_task_vw.category_id'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['category_name']){ array_push($arrReportHeader,_('Category name')); array_push($arrGroupBy,'project_task_vw.category_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['created_by']){ array_push($arrReportHeader,_('Created by')); array_push($arrGroupBy,'project_task_vw.created_by'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['user_name']){ array_push($arrReportHeader,_('Username')); array_push($arrGroupBy,'project_task_vw.user_name'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['realname']){ array_push($arrReportHeader,_('Real name')); array_push($arrGroupBy,'project_task_vw.realname'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['start_date']){ array_push($arrReportHeader,_('Start date')); array_push($arrGroupBy,'project_task_vw.start_date'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $startDateCount=$countFields; }
+ if($selectRequest['start_date_max']){ array_push($arrReportHeader,_('Maximal start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountMax=$countFields; }
+ if($selectRequest['start_date_min']){ array_push($arrReportHeader,_('Minimal start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountMin=$countFields; }
+ if($selectRequest['start_date_avg']){ array_push($arrReportHeader,_('Average start date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $startDateCountAvg=$countFields; }
+ if($selectRequest['end_date']){ array_push($arrReportHeader,_('End date')); array_push($arrGroupBy,'project_task_vw.end_date'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; $endDateCount=$countFields; }
+ if($selectRequest['end_date_max']){ array_push($arrReportHeader,_('Maximal end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountMax=$countFields; }
+ if($selectRequest['end_date_min']){ array_push($arrReportHeader,_('Minimal end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountMin=$countFields;}
+ if($selectRequest['end_date_avg']){ array_push($arrReportHeader,_('Average end date')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; $endDateCountAvg=$countFields;}
+ if($selectRequest['hours']){ array_push($arrReportHeader,_('Hours')); array_push($arrGroupBy,'project_task_vw.hours'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['hours_max']){ array_push($arrReportHeader,_('Maximal hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['hours_min']){ array_push($arrReportHeader,_('Minimal hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['hours_avg']){ array_push($arrReportHeader,_('Average hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['hours_sum']){ array_push($arrReportHeader,_('Summed hours')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+
+ if($selectRequest['priority']){ array_push($arrReportHeader,_('Priority')); array_push($arrGroupBy,'project_task_vw.priority'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['priority_max']){ array_push($arrReportHeader,_('Maximal priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['priority_min']){ array_push($arrReportHeader,_('Minimal priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['priority_avg']){ array_push($arrReportHeader,_('Average priority')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['percent_complete']){ array_push($arrReportHeader,_('Percent complete')); array_push($arrGroupBy,'project_task_vw.percent_complete'); $selectAllFlag = false; $onlyAggFuncFlag = false; $countFields++; }
+ if($selectRequest['percent_complete_max']){ array_push($arrReportHeader,_('Maximal percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['percent_complete_min']){ array_push($arrReportHeader,_('Minimal percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['percent_complete_avg']){ array_push($arrReportHeader,_('Average percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+ if($selectRequest['percent_complete_sum']){ array_push($arrReportHeader,_('Summed percent complete')); $selectAllFlag = false; $aggFuncFlag = true; $countFields++; }
+
+ if($selectRequest['hours_done']){ array_push($arrReportHeader,_('Hours done')); $selectAllFlag = false; $countFields++; $doneHoursPos = $countFields;}
+ if($selectRequest['hours_done_max']){ array_push($arrReportHeader,_('Maximum hours done')); $selectAllFlag = false; $countFields++; $maxHoursPos = $countFields;}
+ if($selectRequest['hours_done_min']){ array_push($arrReportHeader,_('Minimum hours done')); $selectAllFlag = false; $countFields++; $minHoursPos = $countFields;}
+ if($selectRequest['hours_done_avg']){ array_push($arrReportHeader,_('Average hours done')); $selectAllFlag = false; $countFields++; $avgHoursPos = $countFields;}
+ if($selectRequest['hours_done_sum']){ array_push($arrReportHeader,_('Summed hours done')); $selectAllFlag = false; $countFields++; $sumHoursPos = $countFields;}
+
+ // FROM CLAUSE IST NOT NEEDED ANYMORE
+
+ // WHERE CLAUSE IST NOT NEEDED ANYMORE
+ $where = '';
+
+ $tblPrefix = '';
+ if($groupBy != '' && get_magic_quotes_gpc() == true
+ || $aggFuncFlag == true && get_magic_quotes_gpc() == true) {
+ switch($groupBy) {
+ case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
+ break;
+ case 'project_name': $tblPrefix = 'project_group_list_vw.';
+ break;
+ case 'description': $tblPrefix = 'project_group_list_vw.';
+ default: $tblPrefix = 'project_task_vw.';
+ break;
+ }
+ /* $countParams++;
+ $where.=' GROUP BY $'.$countParams;
+ array_push($params, $prefix.$groupBy);
+
+ It does not work with placeholders and array params.
+ So I used the security function enabled through the method
+ db_query_params() in here. */
+ if($groupBy === 'single_group_project_id') {
+ $groupBy = 'group_project_id';
+ }
+
+ $where.= ' GROUP BY ';
+ $groupBy__ = '';
+ $groupAvailable = false;
+ foreach($arrGroupBy as $groupBy_) {
+ if($groupBy == $groupBy_) {
+ $groupAvailable = true;
+ }
+ $groupBy__.=' '.$groupBy_.',';
+ }
+
+ $where.= $groupBy__;
+ if($groupBy == '') {
+ $where = substr($where, 0, strlen($where)-1);
+ }
+
+ if(!$groupAvailable) {
+ if($groupBy != '') {
+ $where.=$tblPrefix.$groupBy;
+ }
+ } else {
+ if(!$onlyAggFuncFlag) {
+ $where = substr($where, 0, strlen($where)-1);
+ } else {
+ $where = substr($where, 0, strlen($where)-8);
+ }
+
+ if($groupBy != '' && !$onlyAggFuncFlag) {
+ $where.=', '.$tblPrefix.$groupBy;
+ }
+ }
+
+ if($onlyAggFuncFlag == true && $groupBy == '') {
+ $where = substr($where, 0, strlen($where)-8);
+ }
+ }
+
+ $tblPrefix = '';
+ if($orderBy != '' && get_magic_quotes_gpc() == true) {
+ switch($orderBy) {
+ case 'single_group_project_id': $tblPrefix = 'project_group_list_vw.';
+ break;
+ case 'project_name': $tblPrefix = 'project_group_list_vw.';
+ break;
+ case 'description': $tblPrefix = 'project_group_list_vw.';
+ default: $tblPrefix = 'project_task_vw.';
+ break;
+ }
+ /* $countParams++;
+ $where.= ' ORDER BY $'.$countParams;
+ array_push($params, $orderBy);
+
+ It does not work with placeholders and array params.
+ So I used the security function enabled through the method
+ db_query_params() in here. */
+ if($orderBy === 'single_group_project_id') {
+ $orderBy = 'group_project_id';
+ }
+
+ $where.= ' ORDER BY '.$tblPrefix.$orderBy;
+ }
+
+ if($groupBy == '' && $orderBy != '') {
+ if($asc === 0) {
+ $where.= ' ASC';
+ } else {
+ $where.=' DESC';
+ }
+ }
+
+ $res = db_query_params($arrMergedQuerysAndParams[0], $arrMergedQuerysAndParams[1]);
+
+ if(!$res || db_numrows($res) === 0) {
+
+ $error = db_error();
+ if(trim($error)!='') {
+ $this->setError(true);
+ $this->setErrorString($error);
+ } else {
+ $this->setInfoString(_('No row was found.'));
+ $this->setRow(false);
+ }
+
+ return false;
+ }
+
+ $result = '';
+ $k = 0;
+ $o = 0;
+ $hours = 0;
+ while ($arr = db_fetch_array($res)) {
+
+ if($selectAllFlag) {
+ $countFields = (count($arr) / 2);
+ }
+
+ for($j=0; $j<$countFields; $j++) {
+
+ foreach($groupInformation as $groupInformationParts) {
+ foreach($groupInformationParts as $infoParts) {
+ if($infoParts[0] == $arr[0]) {
+ $hours = $infoParts[1];
+ }
+ }
+ }
+
+ if($startDateCount-1 == $j
+ || $startDateCountMax-1 == $j
+ || $startDateCountMin-1 == $j
+ || $startDateCountAvg-1 == $j
+ || $endDateCount-1 == $j
+ || $endDateCountMax-1 == $j
+ || $endDateCountMin-1 == $j
+ || $endDateCountAvg-1 == $j) {
+ $date = date(_('Y-m-d H:i'), $arr[$j]);
+ $result .= $date;
+
+ } elseif($doneHoursPos-1 == $j) {
+
+ if($projectTaskIdChoosen == true) {
+
+ $projectHour = $hours;
+ } else {
+ $projectHour = ($groupInformation[$o][0][1]);
+ }
+
+ if($projectHour == null || $projectHour == '') {
+ $projectHour = 0;
+ }
+ $result .= $projectHour;
+
+ $k++;
} elseif($maxHoursPos-1 == $j) {
+
+ if($projectTaskIdChoosen == true) {
+ $maxHours = $hours;
+ } else {
+ $maxHours = $this->getMaxActivityHours_($groupInformation[$o]);
+ }
+
+ if($maxHours == null || $maxHours == '') {
+ $maxHours = 0;
+ }
$result .= $maxHours;
+
} elseif($minHoursPos-1 == $j) {
+
+ if($projectTaskIdChoosen == true) {
+ $minHours = $hours;
+ } else {
+ $minHours = $this->getMinActivityHours_($groupInformation[$o]);
+ }
+
+ if($minHours == null || $minHours == '') {
+ $minHours = 0;
+ }
$result .= $minHours;
+
} elseif($avgHoursPos-1 == $j) {
+
+ if($projectTaskIdChoosen == true) {
+ $avgHours = $hours;
+ } else {
+ $avgHours = $this->getAvgActivityHours_($groupInformation[$o]);
+ }
+
+ if($avgHours == null || $avgHours == '') {
+ $avgHours = 0;
+ }
$result .= $avgHours;
+
} elseif($sumHoursPos-1 == $j) {
+
+ if($projectTaskIdChoosen == true) {
+ $sumHours = $hours;
+ } else {
+ $sumHours = $this->getSumActivityHours_($groupInformation[$o]);
+ }
+
+ if($sumHours == null || $sumHours == '') {
+ $sumHours = 0;
+ }
$result .= $sumHours;
+
} else {
$result .= $arr[$j];
}
@@ -677,11 +1891,14 @@
if($j+1<$countFields) { $result .= '#sepColumn#'; }
if($j+1==$countFields) { $result .= '#sepRow#'; }
}
-
+
+ if($projectTaskIdChoosen == false) {
+ $o++;
+ }
}
$result = substr($result, 0, strlen($result)-8);
-
+
return $result;
}
@@ -706,7 +1923,7 @@
$arr_[$i]['group_project_id'] = $arr[0];
$arr_[$i]['project_name'] = $arr[1];
- $i++;
+ $i++;
}
return $arr_;
More information about the evolvis-commits
mailing list