diff --git a/workflow/engine/classes/class.indicatorsCalculator.php b/workflow/engine/classes/class.indicatorsCalculator.php
index 2f4674f3d..23edaf60f 100644
--- a/workflow/engine/classes/class.indicatorsCalculator.php
+++ b/workflow/engine/classes/class.indicatorsCalculator.php
@@ -70,8 +70,6 @@ abstract class IndicatorDataSourcesEnum extends BasicEnum {
class indicatorsCalculator
{
- private static $connectionName = 'workflow';
-
private $userReportingMetadata = array("tableName" => "USR_REPORTING", "keyField" => "USR_UID");
private $processReportingMetadata = array("tableName" => "PRO_REPORTING", "keyField" => "PRO_UID");
private $userGroupReportingMetadata = array("tableName" => "USR_REPORTING", "keyField" => "USR_UID");
@@ -83,30 +81,57 @@ class indicatorsCalculator
private $ueiCostFormula = "SUM(TOTAL_CASES_OUT * CONFIGURED_TASK_TIME - TOTAL_TIME_BY_TASK * USER_HOUR_COST)";
private $ueiFormula = "SUM(TOTAL_CASES_OUT * CONFIGURED_TASK_TIME) / SUM(TOTAL_TIME_BY_TASK * USER_HOUR_COST)";
-//
-// public function processEfficiencyIndex($processList, $initDate, $endDate)
-// {
-// $resultList = $this->processEfficiencyIndexList($processList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return ($resultList[0]['PEI']);
-// }
+ public function getSkewOfDataDistribution($table, $field) {
+ /*$sqlString = "SET @median = (SELECT x.$field from $table x, $table y
+ GROUP BY x.$field
+ HAVING SUM(SIGN(1-SIGN(y.$field-x.$field)))/COUNT(*) > .5
+ LIMIT 1)";
+ */
+
+ $sqlString = "SELECT x.$field from $table x, $table y
+ GROUP BY x.$field
+ HAVING SUM(SIGN(1-SIGN(y.$field-x.$field)))/COUNT(*) > .5
+ LIMIT 1";
+
+ $returnValue = 0;
+ $connection = $this->pdoConnection();
+ $result = $this->pdoExecutorWithConnection($sqlString, array(), $connection);
+ $result2 = $this->pdoExecutorWithConnection("select @median", array(), $connection);
+ if (sizeof($result) > 0) {
+ $returnValue = current(reset($result2));
+ }
+ return $returnValue;
+ }
public function peiHistoric($processId, $initDate, $endDate, $periodicity) {
if (!is_a($initDate, 'DateTime')) throw new InvalidArgumentException ('initDate parameter must be a DateTime object.', 0);
if (!is_a($endDate, 'DateTime')) throw new InvalidArgumentException ('endDate parameter must be a DateTime object.', 0);
- $sqlString = $this->indicatorsBasicQueryBuilder(IndicatorDataSourcesEnum::USER
+ /*$sqlString = $this->indicatorsBasicQueryBuilder(IndicatorDataSourcesEnum::USER
, $processId, $periodicity, $initDate, $endDate
- , $this->peiFormula);
+ , $this->peiFormula);*/
- $returnValue = $this->propelExecutor($sqlString);
+ $qryParams = Array();
+ $sqlString = $this->indicatorsParamsQueryBuilder(IndicatorDataSourcesEnum::USER
+ , $processId, $periodicity, $initDate, $endDate
+ , $this->peiFormula, $qryParams);
+
+ //$returnValue = $this->propelExecutor($sqlString);
+
+ $returnValue = $this->pdoExecutor($sqlString, $qryParams);
return $returnValue;
}
public function indicatorData($indicatorId)
{
- $sqlString = "select * from DASHBOARD_INDICATOR where DAS_IND_UID= '$indicatorId'";
- $retval = $this->propelExecutor($sqlString);
- return $retval;
+ $qryParams = Array();
+ $qryParams[':indicatorId'] = $indicatorId;
+ $sqlString = "select * from DASHBOARD_INDICATOR where DAS_IND_UID= :indicatorId";
+ $returnValue = $this->pdoExecutor($sqlString, $qryParams);
+
+ /*$sqlString = "select * from DASHBOARD_INDICATOR where DAS_IND_UID= '$indicatorId'";
+ $retval = $this->propelExecutor($sqlString);*/
+ return $returnValue;
}
public function peiProcesses($indicatorId, $initDate, $endDate, $language)
@@ -120,6 +145,12 @@ class indicatorsCalculator
$endYear = $endDate->format("Y");
$endMonth = $endDate->format("m");
+ //$params[":initYear"] = $initYear;
+ //$params[":initMonth"] = $initMonth;
+ $params[":endYear"] = $endYear;
+ $params[":endMonth"] = $endMonth;
+ $params[":language"] = $language;
+
$sqlString = "
select
i.PRO_UID as uid,
@@ -139,17 +170,17 @@ class indicatorsCalculator
(select DAS_UID_PROCESS from DASHBOARD_INDICATOR where DAS_IND_UID = '$indicatorId')= '0'
)
AND
- IF (`YEAR` = $initYear, `MONTH`, `YEAR`) >= IF (`YEAR` = $initYear, $initMonth, $initYear)
- AND
- IF(`YEAR` = $endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = $endYear, $endMonth, $endYear)
+ IF(`YEAR` = :endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = :endYear, :endMonth, :endYear)
group by PRO_UID
) i
left join (select *
from CONTENT
where CON_CATEGORY = 'PRO_TITLE'
- and CON_LANG = '$language'
+ and CON_LANG = :language
) tp on i.PRO_UID = tp.CON_ID";
- $retval = $this->propelExecutor($sqlString);
+
+ //$retval = $this->propelExecutor($sqlString);
+ $retval = $this->pdoExecutor($sqlString, $params);
return $retval;
}
@@ -165,6 +196,12 @@ class indicatorsCalculator
$endYear = $endDate->format("Y");
$endMonth = $endDate->format("m");
+ //$params[":initYear"] = $initYear;
+ //$params[":initMonth"] = $initMonth;
+ $params[":endYear"] = $endYear;
+ $params[":endMonth"] = $endMonth;
+ $params[":language"] = $language;
+
//TODO ADD to USR_REPORTING the user's Group to speed up the query.
$sqlString = "
select
@@ -185,18 +222,17 @@ class indicatorsCalculator
left join
GROUP_USER gu on gu.USR_UID = ur.USR_UID
WHERE
- IF (`YEAR` = $initYear, `MONTH`, `YEAR`) >= IF (`YEAR` = $initYear, $initMonth, $initYear)
- AND
- IF(`YEAR` = $endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = $endYear, $endMonth, $endYear)
+ IF(`YEAR` = :endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = :endYear, :endMonth, :endYear)
group by gu.GRP_UID
) i
left join (select *
from CONTENT
where CON_CATEGORY = 'GRP_TITLE'
- and CON_LANG = 'en'
+ and CON_LANG = :language
) tp on i.GRP_UID = tp.CON_ID";
- $retval = $this->propelExecutor($sqlString);
+ $retval = $this->pdoExecutor($sqlString, $params);
+ //$retval = $this->propelExecutor($sqlString);
return $retval;
}
@@ -213,6 +249,13 @@ class indicatorsCalculator
$endYear = $endDate->format("Y");
$endMonth = $endDate->format("m");
+ //$params[":initYear"] = $initYear;
+ //$params[":initMonth"] = $initMonth;
+ $params[":endYear"] = $endYear;
+ $params[":endMonth"] = $endMonth;
+ $params[":language"] = $language;
+ $params[":groupId"] = $groupId;
+
$sqlString = " select
i.USR_UID as uid,
i.name,
@@ -232,78 +275,32 @@ class indicatorsCalculator
left join
GROUP_USER gu on gu.USR_UID = ur.USR_UID
LEFT JOIN USERS u on u.USR_UID = ur.USR_UID
- where (gu.GRP_UID = '$groupId' or ('$groupId' = '0' && gu.GRP_UID is null ))
+ where (gu.GRP_UID = :groupId or (:groupId = '0' && gu.GRP_UID is null ))
AND
- IF (`YEAR` = $initYear, `MONTH`, `YEAR`) >= IF (`YEAR` = $initYear, $initMonth, $initYear)
- AND
- IF(`YEAR` = $endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = $endYear, $endMonth, $endYear)
+ IF(`YEAR` = :endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = :endYear, :endMonth, :endYear)
group by ur.USR_UID
) i";
- $returnValue = $this->propelExecutor($sqlString);
- return $returnValue;
+
+ $retval = $this->pdoExecutor($sqlString, $params);
+ //$returnValue = $this->propelExecutor($sqlString);
+ return $retval;
}
-//
-// public function employeeEfficiencyIndex($employeeList, $initDate, $endDate)
-// {
-// $resultList = $this->employeeEfficiencyIndexList($employeeList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($resultList));
-// }
public function ueiHistoric($employeeId, $initDate, $endDate, $periodicity)
{
if (!is_a($initDate, 'DateTime')) throw new InvalidArgumentException ('initDate parameter must be a DateTime object.', 0);
if (!is_a($endDate, 'DateTime')) throw new InvalidArgumentException ('endDate parameter must be a DateTime object.', 0);
- $sqlString = $this->indicatorsBasicQueryBuilder(IndicatorDataSourcesEnum::USER
+ $qryParams = Array();
+ $sqlString = $this->indicatorsParamsQueryBuilder(IndicatorDataSourcesEnum::USER
, $employeeId, $periodicity, $initDate, $endDate
- , $this->ueiFormula);
- $returnValue = $this->propelExecutor($sqlString);
- return $returnValue;
+ , $this->ueiFormula, $qryParams);
+
+ $retval = $this->pdoExecutor($sqlString, $qryParams);
+ //$returnValue = $this->propelExecutor($sqlString);
+ return $retval;
}
-// public function employeeEfficiencyCost($employeeList, $initDate, $endDate)
-// {
-// $resultList = $this->employeeEfficiencyCostList($employeeList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($resultList));
-// }
-//
-// public function userCostByGroupHistoric($groupId, $initDate, $endDate, $periodicity) {
-// if (!is_a($initDate, 'DateTime')) throw new InvalidArgumentException ('initDate parameter must be a DateTime object.', 0);
-// if (!is_a($endDate, 'DateTime')) throw new InvalidArgumentException ('endDate parameter must be a DateTime object.', 0);
-//
-// $periodicitySelectFields = $this->periodicityFieldsForSelect($periodicity);
-// $periodicityGroup = $this->periodicityFieldsForGrouping($periodicity);
-// $initYear = $initDate->format("Y");
-// $initMonth = $initDate->format("m");
-// $initDay = $endDay = 1;
-// $endYear = $endDate->format("Y");
-// $endMonth = $endDate->format("m");
-//
-// $filterCondition = "";
-// if ($groupId != null && $groupId > 0) {
-// $filterCondition = " AND GRP_UID = '$groupId'";
-// }
-//
-// $sqlString = "SELECT (SUM(CONFIGURED_TASK_TIME) - SUM(TOTAL_TIME_BY_TASK)) * USER_HOUR_COST as EEC
-// FROM USR_REPORTING ur
-// LEFT JOIN GROUP_USER gu on gu.USR_UID =ur.USR_UID
-// LEFT JOIN GROUP_USER gu on gu.USR_UID =ur.USR_UID
-// WHERE
-// IF (`YEAR` = $initYear, `MONTH`, `YEAR`) >= IF (`YEAR` = $initYear, $initMonth, $initYear)
-// AND
-// IF(`YEAR` = $endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = $endYear, $endMonth, $endYear)"
-// . $filterCondition
-// . $periodicityGroup;
-// $returnValue = $this->propelExecutor($sqlString);
-// return $returnValue;
-// }
-
-// public function processEfficiencyCost($processList, $initDate, $endDate)
-// {
-// $resultList = $this->processEfficiencyCostList($processList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($resultList));
-// }
-
public function peiCostHistoric($processId, $initDate, $endDate, $periodicity)
{
if (!is_a($initDate, 'DateTime')) throw new InvalidArgumentException ('initDate parameter must be a DateTime object.', 0);
@@ -317,21 +314,26 @@ class indicatorsCalculator
$endYear = $endDate->format("Y");
$endMonth = $endDate->format("m");
+ //$params[":initYear"] = $initYear;
+ //$params[":initMonth"] = $initMonth;
+ $params[":endYear"] = $endYear;
+ $params[":endMonth"] = $endMonth;
+ $params[":processId"] = $processId;
+
$filterCondition = "";
if ($processId != null && $processId > 0) {
- $filterCondition = " AND PRO_UID = '$processId'";
+ $filterCondition = " AND PRO_UID = :processId";
}
$sqlString = "SELECT $periodicitySelectFields " . $this->peiCostFormula . " as PEC
FROM USR_REPORTING
WHERE
- IF (`YEAR` = $initYear, `MONTH`, `YEAR`) >= IF (`YEAR` = $initYear, $initMonth, $initYear)
- AND
- IF(`YEAR` = $endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = $endYear, $endMonth, $endYear)"
- . $filterCondition
- . $periodicityGroup;
+ IF(`YEAR` = :endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = :endYear, :endMonth, :endYear)"
+ . $filterCondition
+ . $periodicityGroup;
- $retval = $this->propelExecutor($sqlString);
+ $retval = $this->pdoExecutor($sqlString, $params);
+ //$retval = $this->propelExecutor($sqlString);
return $retval;
}
@@ -350,14 +352,6 @@ class indicatorsCalculator
if ($indicatorProcessId == "0" || strlen($indicatorProcessId) ==0) {
$indicatorProcessId = null;
}
- //$indicatorJson = unserialize($indicator['DAS_IND_PROPERTIES']);
- //$indicatorConfig = json_decode($indicatorJson);
-
- /*$graph1 = $indicatorConfig->{'IND_FIRST_FIGURE'};
- $freq1 = $indicatorConfig->{'IND_FIRST_FREQUENCY'};
- $graph2 = $indicatorConfig->{'IND_SECOND_FIGURE'};
- $freq2 = $indicatorConfig->{'IND_SECOND_FREQUENCY'};
- */
$graph1 = $indicator['DAS_IND_FIRST_FIGURE'];
$freq1 = $indicator['DAS_IND_FIRST_FREQUENCY'];
@@ -396,180 +390,16 @@ class indicatorsCalculator
throw new Exception(" The indicator id '$indicatorId' with type $indicatorType hasn't an associated operation.");
}
- $sqlString = $this->indicatorsBasicQueryBuilder(IndicatorDataSourcesEnum::PROCESS
+ $params = Array();
+ $sqlString = $this->indicatorsParamsQueryBuilder(IndicatorDataSourcesEnum::PROCESS
, $indicatorProcessId, $periodicity
, $initDate, $endDate
- , $calcField);
- $returnValue = $this->propelExecutor($sqlString);
- return $returnValue;
- }
-// /***** Indicators for overdue, new, completed ******/
-// public function totalOverdueCasesByProcess($processList, $initDate, $endDate)
-// {
-// $returnList = $this->totalOverdueCasesByProcessList($processList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($returnList));
-// }
-//
-// public function totalOverdueCasesByProcessList($processList, $initDate, $endDate, $periodicity)
-// {
-// return $this->sumCasesListByProcess($processList, $initDate, $endDate, $periodicity, "SUM(TOTAL_CASES_OVERDUE)", "");
-// }
-//
-// public function totalOverdueCasesByUser($userList, $initDate, $endDate)
-// {
-// $returnList = $this->totalOverdueCasesByUserList($userList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($returnList));
-// }
-//
-// public function totalOverdueCasesByUserList($userList, $initDate, $endDate, $periodicity)
-// {
-// return $this->sumCasesListByUser($userList, $initDate, $endDate, $periodicity, "SUM(TOTAL_CASES_OVERDUE)", "");
-// }
-//
-// //percent
-// public function percentOverdueCasesByProcess($processList, $initDate, $endDate)
-// {
-// $returnList = $this->percentOverdueCasesByProcessList($processList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($returnList));
-// }
-//
+ , $calcField, $params);
-// public function percentOverdueCasesByProcessList($processList, $initDate, $endDate, $periodicity)
-// {
-// return $this->sumCasesListByProcess($processList, $initDate, $endDate, $periodicity, "100 * SUM(TOTAL_CASES_OVERDUE)", "SUM(TOTAL_CASES_ON_TIME + TOTAL_CASES_OVERDUE)");
-// }
-//
-// public function percentOverdueCasesByUser($userList, $initDate, $endDate)
-// {
-// $returnList = $this->percentOverdueCasesByUserList($userList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($returnList));
-// }
-//
-// public function percentOverdueCasesByUserList($userList, $initDate, $endDate, $periodicity)
-// {
-// return $this->sumCasesListByUser($userList, $initDate, $endDate, $periodicity, "100 * SUM(TOTAL_CASES_OVERDUE)", "SUM(TOTAL_CASES_ON_TIME + TOTAL_CASES_OVERDUE)");
-// }
-//
-// //new cases
-// public function totalNewCasesByProcess($processList, $initDate, $endDate)
-// {
-// $returnList = $this->totalNewCasesByProcessList($processList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($returnList));
-// }
-//
-// public function totalNewCasesByProcessList($processList, $initDate, $endDate, $periodicity)
-// {
-// return $this->sumCasesListByProcess($processList, $initDate, $endDate, $periodicity, "SUM(TOTAL_CASES_IN)", "");
-// }
-//
-// public function totalNewCasesByUser($userList, $initDate, $endDate)
-// {
-// $returnList = $this->totalNewCasesByUserList($userList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($returnList));
-// }
-//
-// public function totalNewCasesByUserList($userList, $initDate, $endDate, $periodicity)
-// {
-// return $this->sumCasesListByUser($userList, $initDate, $endDate, $periodicity, "SUM(TOTAL_CASES_IN)", "");
-// }
-//
-//
-// //completed cases
-// public function totalCompletedCasesByProcess($processList, $initDate, $endDate)
-// {
-// $returnList = $this->totalCompletedCasesByProcessList($processList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($returnList));
-// }
-//
-// public function totalCompletedCasesByProcessList($processList, $initDate, $endDate, $periodicity)
-// {
-// return $this->sumCasesListByProcess($processList, $initDate, $endDate, $periodicity, "SUM(TOTAL_CASES_OUT)", "");
-// }
-//
-// public function totalCompletedCasesByUser($userList, $initDate, $endDate)
-// {
-// $returnList = $this->totalCompletedCasesByUserList($userList, $initDate, $endDate, ReportingPeriodicityEnum::NONE);
-// return current(reset($returnList));
-// }
-//
-// public function totalCompletedCasesByUserList($userList, $initDate, $endDate, $periodicity)
-// {
-// return $this->sumCasesListByUser($userList, $initDate, $endDate, $periodicity, "SUM(TOTAL_CASES_OUT)", "");
-// }
-//
-// public function sumCasesListByProcess($processList, $initDate, $endDate, $periodicity, $fieldToProcess, $fieldToCompare)
-// {
-// if ($processList != null && !is_array($processList)) throw new InvalidArgumentException ('employeeList parameter must be an Array or null value.', 0);
-// if (!is_a($initDate, 'DateTime')) throw new InvalidArgumentException ('initDate parameter must be a DateTime object.', 0);
-// if (!is_a($endDate, 'DateTime')) throw new InvalidArgumentException ('endDate parameter must be a DateTime object.', 0);
-//
-// $periodicitySelectFields = $this->periodicityFieldsForSelect($periodicity);
-// $periodicityGroup = $this->periodicityFieldsForGrouping($periodicity);
-// $initYear = $initDate->format("Y");
-// $initMonth = $initDate->format("m");
-// $initDay = $endDay = 1;
-// $endYear = $endDate->format("Y");
-// $endMonth = $endDate->format("m");
-//
-//
-// $userCondition = "";
-// if ($processList != null && sizeof($processList) > 0) {
-// $userCondition = " AND PRO_UID IN " . "('" . implode("','", $processList) . "')";
-// }
-// $comparationOperation = "";
-// if (strlen($fieldToCompare) > 0) {
-// $comparationOperation = "/$fieldToCompare";
-// }
-//
-// $sqlString = "SELECT $periodicitySelectFields $fieldToProcess$comparationOperation as Indicator
-// FROM PRO_REPORTING
-// WHERE
-// IF (`YEAR` = $initYear, `MONTH`, `YEAR`) >= IF (`YEAR` = $initYear, $initMonth, $initYear)
-// AND
-// IF(`YEAR` = $endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = $endYear, $endMonth, $endYear)"
-// . $userCondition
-// . $periodicityGroup;
-//
-// $retval = $this->propelExecutor($sqlString);
-// return $retval;
-// }
-//
-// public function sumCasesListByUser($processList, $initDate, $endDate, $periodicity, $fieldToProcess, $fieldToCompare)
-// {
-// if ($processList != null && !is_array($processList)) throw new InvalidArgumentException ('employeeList parameter must be an Array or null value.', 0);
-// if (!is_a($initDate, 'DateTime')) throw new InvalidArgumentException ('initDate parameter must be a DateTime object.', 0);
-// if (!is_a($endDate, 'DateTime')) throw new InvalidArgumentException ('endDate parameter must be a DateTime object.', 0);
-//
-// $periodicitySelectFields = $this->periodicityFieldsForSelect($periodicity);
-// $periodicityGroup = $this->periodicityFieldsForGrouping($periodicity);
-// $initYear = $initDate->format("Y");
-// $initMonth = $initDate->format("m");
-// $initDay = $endDay = 1;
-// $endYear = $endDate->format("Y");
-// $endMonth = $endDate->format("m");
-//
-// $userCondition = "";
-// if ($processList != null && sizeof($processList) > 0) {
-// $userCondition = " AND USR_UID IN " . "('" . implode("','", $processList) . "')";
-// }
-//
-// $comparationOperation = "";
-// if (strlen($fieldToCompare) > 0) {
-// $comparationOperation = "/" . $fieldToCompare;
-// }
-//
-// $sqlString = "SELECT $periodicitySelectFields $fieldToProcess$comparationOperation as Indicator
-// FROM USR_REPORTING
-// WHERE
-// IF (`YEAR` = $initYear, `MONTH`, `YEAR`) >= IF (`YEAR` = $initYear, $initMonth, $initYear)
-// AND
-// IF(`YEAR` = $endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = $endYear, $endMonth, $endYear)"
-// . $userCondition
-// . $periodicityGroup;
-//
-// $retval = $this->propelExecutor($sqlString);
-// return $retval;
-// }
+ $retval = $this->pdoExecutor($sqlString, $params);
+ //$returnValue = $this->propelExecutor($sqlString);
+ return $retval;
+ }
public function peiTasks($processList, $initDate, $endDate, $language)
{
@@ -577,7 +407,8 @@ class indicatorsCalculator
if ($processList != null && sizeof($processList) > 0) {
$processCondition = " WHERE PRO_UID IN " . "('" . implode("','", $processList) . "')";
}
- //TODO add dates condition in query
+ $params[':language'] = $language;
+
$sqlString = " select
i.TAS_UID as uid,
t.CON_VALUE as name,
@@ -599,53 +430,13 @@ class indicatorsCalculator
left join (select *
from CONTENT
where CON_CATEGORY = 'TAS_TITLE'
- and CON_LANG = '$language'
+ and CON_LANG = :language
) t on i.TAS_UID = t.CON_ID";
- $retval = $this->propelExecutor($sqlString);
+ $retval = $this->pdoExecutor($sqlString, $params);
+ //$retval = $this->propelExecutor($sqlString);
return $retval;
}
-// public function employeeTasksInfoList($userList, $initDate, $endDate, $language)
-// {
-// $userCondition = "";
-// if ($userList != null && sizeof($userList) > 0) {
-// $userCondition = " WHERE USR_UID IN " . "('" . implode("','", $userList) . "')";
-// }
-// //TODO add dates contidion to query
-// $sqlString = " select
-// i.PRO_UID as ProcessId,
-// tp.CON_VALUE as ProcessTitle,
-// i.TAS_UID as TaskId,
-// tt.CON_VALUE as TaskTitle,
-// i.EfficienceIndex,
-// i.TimeAverage,
-// i.TimeSdv,
-// i.CONFIGURED_TASK_TIME as ConfiguredTime
-// FROM
-// ( select
-// PRO_UID,
-// TAS_UID,
-// (AVG(CONFIGURED_TASK_TIME) + AVG(SDV_TIME))/ AVG(AVG_TIME) as EfficienceIndex,
-// AVG(AVG_TIME) as TimeAverage,
-// AVG(SDV_TIME) as TimeSdv,
-// CONFIGURED_TASK_TIME
-// from USR_REPORTING
-// $userCondition
-// group by PRO_UID, TAS_UID
-// ) i
-// left join (select *
-// from CONTENT
-// where CON_CATEGORY = 'TAS_TITLE'
-// and CON_LANG = '$language'
-// ) tt on i.TAS_UID = tt.CON_ID
-// left join (select *
-// from CONTENT
-// where CON_CATEGORY = 'PRO_TITLE'
-// and CON_LANG = '$language'
-// ) tp on i.PRO_UID = tp.CON_ID";
-// $retval = $this->propelExecutor($sqlString);
-// return $retval;
-// }
private function periodicityFieldsForSelect($periodicity) {
$periodicityFields = $this->periodicityFieldsString($periodicity);
@@ -685,7 +476,7 @@ class indicatorsCalculator
return $retval;
}
- private function propelExecutor($sqlString) {
+ /*private function propelExecutor($sqlString) {
$con = Propel::getConnection(self::$connectionName);
$qry = $con->PrepareStatement($sqlString);
try {
@@ -700,8 +491,55 @@ class indicatorsCalculator
}
return $rows;
}
+*/
+ private function pdoExecutor($sqlString, $params) {
+ /*G::loadClass('wsTools');
+ $currentWS = defined('SYS_SYS') ? SYS_SYS : 'Wokspace Undefined';
+ $workSpace = new workspaceTools($currentWS);
+ $host = $workSpace->dbHost;
+ $db = $workSpace->dbName;
+ $user = $workSpace->dbUser;
+ $pass = $workSpace->dbPass;
- private function indicatorsBasicQueryBuilder($reportingTable, $filterId, $periodicity, $initDate, $endDate, $fields ) {
+
+ $dbh = new PDO("mysql:host=".$host.";dbname=$db;charset=utf8", $user, $pass);
+
+ $statement = $dbh->prepare($sqlString);
+
+ $statement->execute($params);
+ $result = $statement->fetchAll(PDO::FETCH_ASSOC); */
+
+ $connection = $this->pdoConnection ();
+ $result = $this->pdoExecutorWithConnection($sqlString, $params, $connection);
+ return $result;
+ }
+
+ private function pdoConnection() {
+ G::loadClass('wsTools');
+ $currentWS = defined('SYS_SYS') ? SYS_SYS : 'Wokspace Undefined';
+ $workSpace = new workspaceTools($currentWS);
+ $host = $workSpace->dbHost;
+
+ $arrayHost = split(":", $workSpace->dbHost);
+ $host = "host=".$arrayHost[0];
+ $port = sizeof($arrayHost) > 0 ? ";port=".$arrayHost[1] : "";
+ $db = ";dbname=".$workSpace->dbName;
+ $user = $workSpace->dbUser;
+ $pass = $workSpace->dbPass;
+ $connString = "mysql:$host$port$db;";
+
+ $dbh = new PDO($connString, $user, $pass);
+ return $dbh;
+ }
+
+ private function pdoExecutorWithConnection($sqlString, $params, $connection) {
+ $statement = $connection->prepare($sqlString);
+ $statement->execute($params);
+ $result = $statement->fetchAll(PDO::FETCH_ASSOC);
+ return $result;
+ }
+
+ /*private function indicatorsBasicQueryBuilder($reportingTable, $filterId, $periodicity, $initDate, $endDate, $fields ) {
if (!is_a($initDate, 'DateTime')) throw new InvalidArgumentException ('initDate parameter must be a DateTime object.', 0);
if (!is_a($endDate, 'DateTime')) throw new InvalidArgumentException ('endDate parameter must be a DateTime object.', 0);
@@ -727,8 +565,41 @@ class indicatorsCalculator
. $filterCondition
. $periodicityGroup;
return $sqlString;
+ }*/
+
+
+ private function indicatorsParamsQueryBuilder($reportingTable, $filterId, $periodicity, $initDate, $endDate, $fields, &$params) {
+ if (!is_a($initDate, 'DateTime')) throw new InvalidArgumentException ('initDate parameter must be a DateTime object.', 0);
+ if (!is_a($endDate, 'DateTime')) throw new InvalidArgumentException ('endDate parameter must be a DateTime object.', 0);
+
+ $tableMetadata = $this->metadataForTable($reportingTable);
+ $periodicitySelectFields = $this->periodicityFieldsForSelect($periodicity);
+ $periodicityGroup = $this->periodicityFieldsForGrouping($periodicity);
+ $initYear = $initDate->format("Y");
+ $initMonth = $initDate->format("m");
+ $endYear = $endDate->format("Y");
+ $endMonth = $endDate->format("m");
+
+ $filterCondition = "";
+ if ($filterId != null && $filterId > 0) {
+ $filterCondition = " AND ".$tableMetadata["keyField"]." = '$filterId'";
+ }
+
+ //$params[":initYear"] = $initYear;
+ //$params[":initMonth"] = $initMonth;
+ $params[":endYear"] = $endYear;
+ $params[":endMonth"] = $endMonth;
+
+ $sqlString = "SELECT $periodicitySelectFields $fields
+ FROM ".$tableMetadata["tableName"].
+ " WHERE
+ IF(`YEAR` = :endYear, `MONTH`, `YEAR`) <= IF (`YEAR` = :endYear, :endMonth, :endYear)"
+ . $filterCondition
+ . $periodicityGroup;
+ return $sqlString;
}
+
private function metadataForTable($table) {
$returnVal = null;
switch (strtolower($table)) {
@@ -750,6 +621,23 @@ class indicatorsCalculator
}
return $returnVal;
}
+
+
+ /* For debug only:
+ * public function interpolateQuery($query, $params) {
+ $keys = array();
+ # build a regular expression for each parameter
+ foreach ($params as $key => $value) {
+ echo "
key", $key, " -- value", $value;
+ if (is_string($key)) {
+ $keys[] = '/:'.$key.'/';
+ } else {
+ $keys[] = '/[?]/';
+ }
+ }
+ $query = preg_replace($keys, $params, $query, 1, $count);
+ return $query;
+ }*/
}
diff --git a/workflow/engine/classes/model/AppCacheView.php b/workflow/engine/classes/model/AppCacheView.php
index 8e8624b11..9a2d1a8de 100755
--- a/workflow/engine/classes/model/AppCacheView.php
+++ b/workflow/engine/classes/model/AppCacheView.php
@@ -1793,67 +1793,52 @@ class AppCacheView extends BaseAppCacheView
return $criteria;
}
- /*----------------------------------********---------------------------------*/
- function fillReportByUser ()
- {
- try {
- global $sFilter;
- global $dateInit;
- global $dateFinish;
-
- if (strpos($sFilter, 'report_by_user') === false) {
- return false;
- }
- if ($dateInit == null) {
- eprintln("You must enter the starting date.", "red");
- eprintln('Example: +init-date"YYYY-MM-DD HH:MM:SS" +finish-date"YYYY-MM-DD HH:MM:SS"', "red");
- return false;
- }
-
- $dateFinish = ($dateFinish != null) ? $dateFinish : date("Y-m-d H:i:s");
-
- $appcv = new AppCacheView();
- $appcv->setPathToAppCacheFiles( PATH_METHODS . 'setup' . PATH_SEP . 'setupSchemas' . PATH_SEP );
- setExecutionMessage("Calculating data to fill the 'User Reporting'...");
- $appcv->fillReportByUser($dateInit, $dateFinish);
- setExecutionResultMessage("DONE");
- } catch (Exception $e) {
- setExecutionResultMessage("WITH ERRORS", "error");
- eprintln(" '-" . $e->getMessage(), "red");
- saveLog("fillReportByUser", "error", "Error in fill report by user: " . $e->getMessage());
- }
- }
-
- function fillReportByProcess ()
- {
- try {
- global $sFilter;
- global $dateInit;
- global $dateFinish;
-
- if (strpos($sFilter, 'report_by_process') === false) {
- return false;
- }
-
- if ($dateInit == null) {
- eprintln("You must enter the starting date.", "red");
- eprintln('Example: +init-date"YYYY-MM-DD HH:MM:SS" +finish-date"YYYY-MM-DD HH:MM:SS"', "red");
- return false;
- }
-
- $dateFinish = ($dateFinish != null) ? $dateFinish : date("Y-m-d H:i:s");
- $appcv = new AppCacheView();
- $appcv->setPathToAppCacheFiles( PATH_METHODS . 'setup' . PATH_SEP . 'setupSchemas' . PATH_SEP );
-
- setExecutionMessage("Calculating data to fill the 'Process Reporting'...");
- $appcv->fillReportByProcess($dateInit, $dateFinish);
- setExecutionResultMessage("DONE");
- } catch (Exception $e) {
- setExecutionResultMessage("WITH ERRORS", "error");
- eprintln(" '-" . $e->getMessage(), "red");
- saveLog("fillReportByProcess", "error", "Error in fill report by process: " . $e->getMessage());
- }
- }
+ /*----------------------------------********---------------------------------*/
+ public function fillReportByUser ($dateInit, $dateFinish)
+ {
+ $con = Propel::getConnection("workflow");
+ $stmt = $con->createStatement();
+
+ $filenameSql = $this->pathToAppCacheFiles . "triggerFillReportByUser.sql";
+
+ if (!file_exists($filenameSql)) {
+ throw (new Exception("file triggerFillReportByUser.sql doesn't exist"));
+ }
+
+ $sql = "TRUNCATE TABLE USR_REPORTING";
+ $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
+
+ $sql = explode(';', file_get_contents($filenameSql));
+
+ foreach ($sql as $key => $val) {
+ $val = str_replace('{init_date}', $dateInit, $val);
+ $val = str_replace('{finish_date}', $dateFinish, $val);
+ $stmt->executeQuery($val);
+ }
+ }
+
+ public function fillReportByProcess ($dateInit, $dateFinish)
+ {
+ $con = Propel::getConnection("workflow");
+ $stmt = $con->createStatement();
+
+ $filenameSql = $this->pathToAppCacheFiles . "triggerFillReportByProcess.sql";
+
+ if (!file_exists($filenameSql)) {
+ throw (new Exception("file triggerFillReportByProcess.sql doesn't exist"));
+ }
+
+ $sql = "TRUNCATE TABLE PRO_REPORTING";
+ $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
+
+ $sql = explode(';', file_get_contents($filenameSql));
+
+ foreach ($sql as $key => $val) {
+ $val = str_replace('{init_date}', $dateInit, $val);
+ $val = str_replace('{finish_date}', $dateFinish, $val);
+ $stmt->executeQuery($val);
+ }
+ }
/*----------------------------------********---------------------------------*/
}
diff --git a/workflow/engine/controllers/strategicDashboard.php b/workflow/engine/controllers/strategicDashboard.php
index 3ca5eaaf9..816785102 100644
--- a/workflow/engine/controllers/strategicDashboard.php
+++ b/workflow/engine/controllers/strategicDashboard.php
@@ -20,11 +20,17 @@ class StrategicDashboard extends Controller
{
global $RBAC;
- if ($RBAC->userCanAccess('PM_DASHBOARD') != 1) {
+ if ($RBAC->userCanAccess('PM_SETUP') != 1) {
G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels');
G::header( 'location: login/login' );
exit(0);
}
+ $licensedFeatures = & PMLicensedFeatures::getSingleton();
+ if (!$licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjBsZEJ6dnpJa3dTeWVLVT0=')) {
+ G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels' );
+ G::header( 'location: ../login/login' );
+ die;
+ }
$this->usrId = $RBAC->aUserInfo['USER_INFO']['USR_UID'];
$this->urlProxy = '/api/1.0/' . SYS_SYS . '/';
//change
diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql
index 527ae5862..5ae24fc38 100755
--- a/workflow/engine/data/mysql/insert.sql
+++ b/workflow/engine/data/mysql/insert.sql
@@ -59952,7 +59952,6 @@ INSERT INTO CATALOG (CAT_UID, CAT_LABEL_ID, CAT_TYPE, CAT_FLAG, CAT_OBSERVATION,
('300','ID_SEMESTER','PERIODICITY','','','2015-03-04','2015-03-04'),
('400','ID_YEAR','PERIODICITY','','','2015-03-04','2015-03-04'),
('1010','ID_PROCESS_EFFICIENCE','INDICATOR','','','2015-03-04','2015-03-04'),
-('1020','ID_PROCESS_INEFFICIENCE','INDICATOR','','','2015-03-04','2015-03-04'),
('1030','ID_EMPLYEE_EFFICIENCIE','INDICATOR','','','2015-03-04','2015-03-04'),
('1040','ID_USER_INEFFICIENCE','INDICATOR','','','2015-03-04','2015-03-04'),
('1050','ID_OVER_DUE','INDICATOR','%','Unit for displaying','2015-03-04','2015-03-04'),
diff --git a/workflow/engine/js/strategicDashboard/dashboard.js b/workflow/engine/js/strategicDashboard/dashboard.js
index 1825e2df4..1a68c3856 100644
--- a/workflow/engine/js/strategicDashboard/dashboard.js
+++ b/workflow/engine/js/strategicDashboard/dashboard.js
@@ -255,7 +255,7 @@
//Items by each type:
var proEffic = '