Merged in dashboards2 (pull request #1854)

Dashboards bugs and improvements
This commit is contained in:
Julio Cesar Laura Avendaño
2015-04-06 09:23:22 -04:00
10 changed files with 499 additions and 533 deletions

View File

@@ -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 "<br>key", $key, " -- value", $value;
if (is_string($key)) {
$keys[] = '/:'.$key.'/';
} else {
$keys[] = '/[?]/';
}
}
$query = preg_replace($keys, $params, $query, 1, $count);
return $query;
}*/
}

View File

@@ -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);
}
}
/*----------------------------------********---------------------------------*/
}

View File

@@ -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

View File

@@ -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'),

View File

@@ -255,7 +255,7 @@
//Items by each type:
var proEffic = '<div class="col-lg-3 col-md-6 dashPro" id="proEfficItem" data-gs-min-width="3" data-gs-min-height="2" data-gs-max-height="2">\
<div class="proGreen panel panel-green grid-stack-item-content">\
<div class="proGreen panel panel-green grid-stack-item-content" style="min-width: 200px;">\
<a data-toggle="collapse" href="#efficiencyindex" aria-expanded="false" aria-controls="efficiencyindex">\
<div class="panel-heading">\
<div class="row">\
@@ -273,7 +273,7 @@
</div>';
var userEffic = '<div class="col-lg-3 col-md-6 dashUsr" id="userEfficItem" data-gs-min-width="3" data-gs-min-height="2" data-gs-max-height="2">\
<div class="proRed panel panel-red grid-stack-item-content">\
<div class="proRed panel panel-red grid-stack-item-content" style="min-width: 200px;">\
<a data-toggle="collapse" href="#userefficiency" aria-expanded="false" aria-controls="userefficiency">\
<div class="panel-heading">\
<div class="row">\
@@ -291,7 +291,7 @@
</div>';
var compCases = '<div class="col-lg-3 col-md-6" id="generalLowItem" data-gs-min-width="3" data-gs-min-height="2" data-gs-max-height="2">\
<div class="panel ie-panel panel-primary grid-stack-item-content">\
<div class="panel ie-panel panel-primary grid-stack-item-content" style="min-width: 200px;">\
<a data-toggle="collapse" href="#completedcases" aria-expanded="false" aria-controls="completedcases">\
<div class="panel-heading">\
<div class="row">\
@@ -312,7 +312,7 @@
</div>';
var numCases = '<div class="col-lg-3 col-md-6" id="generalGreatItem" data-gs-min-width="3" data-gs-min-height="2" data-gs-max-height="2">\
<div class="panel ie-panel panel-yellow grid-stack-item-content">\
<div class="panel ie-panel panel-yellow grid-stack-item-content" style="min-width: 200px;">\
<a data-toggle="collapse" href="#numbercases" aria-expanded="false" aria-controls="numbercases">\
<div class="panel-heading">\
<div class="row">\
@@ -333,11 +333,44 @@
</div>';
//Data by Indicator elements:
var proEfficDataGen = '<div class="process-div well" id="proEfficiencyData" data-gs-no-resize="true" style="height:auto;"><div class="panel-heading greenbg"><span id="proEfficTitle"> '+ G_STRING.ID_PRO_EFFICIENCY_INDEX +' </span></div><div class="text-center huge"><div class="col-xs-3 vcenter"><div id="proEfficIndex" class="green">26%</div><div class="small grey">'+ G_STRING.ID_EFFICIENCY_INDEX +'</div></div><div class="col-xs-3 vcenter"><div id="proEfficCost" class="red">$1813.50</div><div class="small grey">'+ G_STRING.ID_INEFFICIENCY_COST +'</div></div><div class="col-xs-6" id="proEfficGenGraph" style="width:500px;height:300px; margin-left:80px;"><img src="../dist/img/graph.png"/></div></div><div class="clearfix"></div></div>';
var proEfficDataGen = '<div class="process-div well" id="proEfficiencyData" data-gs-no-resize="true" style="clear:both;position:relative;height:auto;">\
<div class="panel-heading greenbg"><span id="proEfficTitle"> '+ G_STRING.ID_PRO_EFFICIENCY_INDEX +' </span></div>\
<div class="text-center huge">\
<div class="col-xs-3 vcenter">\
<div id="proEfficIndex" class="green">26%</div>\
<div class="small grey">'+ G_STRING.ID_EFFICIENCY_INDEX +'</div>\
</div>\
<div class="col-xs-3 vcenter">\
<div id="proEfficCost" class="red">$1813.50</div>\
<div class="small grey">'+ G_STRING.ID_INEFFICIENCY_COST +'</div>\
</div>\
<div class="col-xs-6" id="proEfficGenGraph" style="width:500px;height:300px; margin-left:80px;"><img src="../dist/img/graph.png" /></div>\
</div>\
<div class="clearfix"></div>\
</div>';
var proEfficData = '<div class="process-div well" id="proEfficiencyData" data-gs-no-resize="true"><div class="panel-heading greenbg"><ol class="breadcrumb"><li><a id="link" href="javascript:back();"><i class="fa fa-chevron-left fa-fw"></i><span id="proEfficTitle"> '+ G_STRING.ID_PRO_EFFICIENCY_INDEX +' </span></a></li><li id="proDetName">Process 1 name</li></ol></div><div class="text-center huge"><div class="col-xs-3 vcenter"><div id="proEfficIndex" class="green">26%</div><div class="small grey">'+ G_STRING.ID_EFFICIENCY_INDEX +'</div></div><div class="col-xs-3 vcenter"><div id="proEfficCost" class="red">$1813.50</div><div class="small grey">'+ G_STRING.ID_INEFFICIENCY_COST +'</div></div><div class="col-xs-6" id="proEfficGraph" style="width:570px; height:300px; margin-left:70px; "><img src="../dist/img/graph.png"/></div></div><div class="clearfix"></div></div>';
var proEfficData = '<div class="process-div well" id="proEfficiencyData" data-gs-no-resize="true" style="clear:both;position:relative;">\
<div class="panel-heading greenbg">\
<ol class="breadcrumb">\
<li><a id="link" href="javascript:back();"><i class="fa fa-chevron-left fa-fw"></i><span id="proEfficTitle"> '+ G_STRING.ID_PRO_EFFICIENCY_INDEX +' </span></a></li>\
<li id="proDetName">Process 1 name</li>\
</ol>\
</div>\
<div class="text-center huge">\
<div class="col-xs-3 vcenter">\
<div id="proEfficIndex" class="green">26%</div>\
<div class="small grey">'+ G_STRING.ID_EFFICIENCY_INDEX +'</div>\
</div>\
<div class="col-xs-3 vcenter">\
<div id="proEfficCost" class="red">$1813.50</div>\
<div class="small grey">'+ G_STRING.ID_INEFFICIENCY_COST +'</div>\
</div>\
<div class="col-xs-6" id="proEfficGraph" style="width:570px; height:300px; margin-left:70px; "><img src="../dist/img/graph.png" /></div>\
</div>\
<div class="clearfix"></div>\
</div>';
var proEfficDetail = '<div id="process" class="process-div well hideme" data-gs-no-resize="true">\
var proEfficDetail = '<div id="process" class="process-div well hideme" data-gs-no-resize="true" style="clear:both;position:relative;">\
<div class="col-lg-12 vcenter-task">\
<a href="#" class="process-button">\
<div class="col-xs-3 text-left title-process">\
@@ -402,11 +435,32 @@
</div>\
</div>';
var generalDataLow = '<div class="process-div well" data-gs-no-resize="true"><div class="panel-heading bluebg"><ol class="breadcrumb"><li id="generalLowTitle">'+ G_STRING.ID_COMPLETED_CASES +'</li></ol></div><div class="text-center huge"><div class="col-xs-6" id="generalGraph1" style="width:600px; height:300px;"><img src="../dist/img/graph.png"/></div><div class="col-xs-6" id="generalGraph2" style="width:600px; height:300px;margin-left:60px;"><img src="../dist/img/graph.png"/></div></div><div class="clearfix"></div></div>';
var generalDataLow = '<div class="process-div well" data-gs-no-resize="true" style="clear:both;position:relative;height:auto;">\
<div class="panel-heading bluebg">\
<ol class="breadcrumb">\
<li id="generalLowTitle">'+ G_STRING.ID_COMPLETED_CASES +'</li>\
</ol>\
</div>\
<div class="text-center huge">\
<div class="col-xs-6" id="generalGraph1" style="width:600px; height:300px;"><img src="../dist/img/graph.png" /></div>\
<div class="col-xs-6" id="generalGraph2" style="width:600px; height:300px;margin-left:60px;"><img src="../dist/img/graph.png" /></div>\
</div>\
<div class="clearfix"></div>\
</div>';
var generalDataGreat = ' <div class="process-div well" data-gs-no-resize="true"><div class="panel-heading yellowbg"><ol class="breadcrumb"><li id="generalGreatTitle">'+ G_STRING.ID_NUMBER_CASES +'</li></ol></div><div class="text-center huge"><div class="col-xs-6" id="generalGraph1" style="width:600px; height:300px;"><img src="../dist/img/graph.png"/></div><div class="col-xs-6" id="generalGraph2" style="width:600px; height:300px; margin-left:60px;"><img src="../dist/img/graph.png"/></div></div><div class="clearfix"></div></div>';
var generalDataGreat = '<div class="process-div well" data-gs-no-resize="true" style="clear:both;position:relative;height:auto;">\
<div class="panel-heading yellowbg">\
<ol class="breadcrumb">\
<li id="generalGreatTitle">'+ G_STRING.ID_NUMBER_CASES +'</li>\
</ol>\
</div>\
<div class="text-center huge">\
<div class="col-xs-6" id="generalGraph1" style="width:600px; height:300px;"><img src="../dist/img/graph.png" /></div>\
<div class="col-xs-6" id="generalGraph2" style="width:600px; height:300px; margin-left:60px;"><img src="../dist/img/graph.png" /></div>\
</div>\
<div class="clearfix"></div>\
</div>';
var oType;
var actualDashId;

View File

@@ -55,7 +55,7 @@ if ($RBAC->userCanAccess('PM_SETUP') == 1 || $RBAC->userCanAccess('PM_USERS') ==
// NEW DASHBOARD MODULE
$licensedFeatures = & PMLicensedFeatures::getSingleton();
if ($licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjBsZEJ6dnpJa3dTeWVLVT0=') && ($RBAC->userCanAccess('PM_SETUP') == 1 || $RBAC->userCanAccess('PM_USERS') == 1)) {
$G_TMP_MENU->AddIdRawOption('DASHBOARD+', 'strategicDashboard/main', G::LoadTranslation('ID_DASHBOARD'), '', '', '', 'x-pm-dashboard');
$G_TMP_MENU->AddIdRawOption('DASHBOARD+', 'strategicDashboard/main', G::LoadTranslation('ID_STRATEGIC_DASHBOARD'), '', '', '', 'x-pm-dashboard');
}
/*----------------------------------********---------------------------------*/

View File

@@ -20,7 +20,6 @@ INSERT INTO PRO_REPORTING (
TOTAL_CASES_OVERDUE,
TOTAL_CASES_ON_TIME
)
SELECT
APPLICATION.PRO_UID,
DATE_FORMAT(APPLICATION.APP_INIT_DATE, '%m') AS `MONTH`,

View File

@@ -24,6 +24,13 @@
$RBAC->requirePermissions( 'PM_DASHBOARD' );
$licensedFeatures = & PMLicensedFeatures::getSingleton();
if (!$licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjBsZEJ6dnpJa3dTeWVLVT0=')) {
G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels' );
G::header( 'location: ../login/login' );
die;
}
$G_MAIN_MENU = 'processmaker';
$G_ID_MENU_SELECTED = 'DASHBOARD+';

View File

@@ -147,7 +147,8 @@ Ext.onReady( function() {
sortInfo: {
field: 'OWNER_TYPE',
direction: 'ASC'
}
},
autoLoad: true
});
storeGroup = new Ext.data.GroupingStore( {
@@ -208,7 +209,8 @@ Ext.onReady( function() {
store: store,
displayInfo: true,
displayMsg: _('ID_GRID_PAGE_DISPLAYING_0WNER_MESSAGE') + '&nbsp; &nbsp; ',
emptyMsg: _('ID_GRID_PAGE_NO_OWNER_MESSAGE'),
//emptyMsg: _('ID_GRID_PAGE_NO_OWNER_MESSAGE')
emptyMsg: ''
});
cmodel = new Ext.grid.ColumnModel({
@@ -387,21 +389,13 @@ Ext.onReady( function() {
ownerInfoGrid = new Ext.grid.GridPanel({
region : 'center',
//layout : 'fit',
id : 'ownerInfoGrid',
height : 200,
//autoWidth : true,
//anchor : '80%',
width : '100%',
//stateful : true,
stateId : 'gridDashboardList',
//enableColumnResize : true,
enableHdMenu: true,
frame : false,
columnLines : false,
/*viewConfig : {
forceFit:true
},*/
store: store,
cm: cmodel,
sm: smodel,
@@ -474,7 +468,9 @@ Ext.onReady( function() {
OWNER_LABEL : selection.data.field1,
OWNER_TYPE : selection.data.field3
});
store.insert(store.getCount(), ow);
ownerInfoGrid.store.insert(store.getCount(), ow);
ownerInfoGrid.store.totalCount = data.length +1;
ownerInfoGrid.store.sort('OWNER_LABEL', 'ASC');
ownerInfoGrid.getView().refresh();
Ext.getCmp('searchIem').clearValue();
@@ -505,7 +501,7 @@ Ext.onReady( function() {
enableTabScroll : true,
//anchor : '98%',
width : '100%',
height : 300,
height : 315,
defaults : {
autoScroll :true
},
@@ -522,7 +518,7 @@ Ext.onReady( function() {
Ext.MessageBox.show({
title: _('ID_CONFIRM'),
msg: _('ID_DELETE_INDICATOR_SURE'),
buttons: Ext.MessageBox.YESNOCANCEL,
buttons: Ext.MessageBox.YESNO,
fn: function(buttonId) {
switch(buttonId) {
case 'no':
@@ -537,9 +533,6 @@ Ext.onReady( function() {
tabActivate.remove(component.id);
tabPanel.remove(component);
break;
case 'cancel':
flag = true;
break;
}
},
scope: that
@@ -662,8 +655,8 @@ Ext.onReady( function() {
{
text : _('ID_CANCEL'),
id : 'cancel',
handler : function(){
location.href = 'dashboardList';
handler : function() {
window.location = 'dashboardList';
}
}
]
@@ -710,7 +703,6 @@ Ext.onReady( function() {
loadIndicators(DAS_UID);
} else {
addTab();
tabPanel.getItem(0).show();
}
if (typeof(__DASHBOARD_ERROR__) !== 'undefined') {
@@ -719,19 +711,20 @@ Ext.onReady( function() {
});
//==============================================================//
var addTab = function () {
var addTab = function (flag) {
if (tabPanel.items.items.length > 3 ) {
PMExt.warning(_('ID_DASHBOARD'), _('ID_MAX_INDICATOR_DASHBOARD'));
return false;
}
tabPanel.add({
//title : _('ID_INDICATOR') + (++indexTab),
var tab = {
title : _('ID_INDICATOR')+ ' '+ (++indexTab),
id : indexTab,
iconCls : 'tabs',
width : "100%",
items : [
new Ext.Panel({
height : 260,
height : 275,
width : "100%",
border : true,
bodyStyle : 'padding:10px',
items : [
@@ -789,38 +782,69 @@ var addTab = function () {
}
}
}),
{
fieldLabel : _('ID_INDICATOR_GOAL'),
id : 'IND_GOAL_'+ indexTab,
xtype : 'textfield',
anchor : '40%',
maskRe : /([0-9\.]+)$/,
maxLength : 9,
width : 8,
allowBlank : false
},
new Ext.form.ComboBox({
anchor : '85%',
editable : false,
fieldLabel : _('ID_DIRECTION'),
id : 'DAS_IND_DIRECTION_'+ indexTab,
displayField : 'label',
valueField : 'id',
value : 2,
forceSelection : false,
selectOnFocus : true,
typeAhead : true,
autocomplete : true,
triggerAction : 'all',
mode : 'local',
store : new Ext.data.ArrayStore({
id: 0,
fields: [
'id',
'label'
],
data: [['1', _('ID_LESS_THAN')], ['2', _('ID_MORE_THAN')]]
})
new Ext.form.FieldSet({
title : _('ID_INDICATOR_GOAL'),
width : "90%",
id : 'fieldSet_'+ indexTab,
bodyStyle: 'paddingLeft: 75px;',
paddingLeft: "30px",
marginLeft : "60px",
layout : 'hbox',
items : [
new Ext.form.ComboBox({
editable : false,
id : 'DAS_IND_DIRECTION_'+ indexTab,
displayField : 'label',
valueField : 'id',
value : '2',
forceSelection : false,
selectOnFocus : true,
typeAhead : true,
autocomplete : true,
width : 90,
triggerAction : 'all',
mode : 'local',
allowBlank : false,
store : new Ext.data.ArrayStore({
id: 2,
fields: [
'id',
'label'
],
data: [['1', _('ID_LESS_THAN')], ['2', _('ID_MORE_THAN')]]
})
}),
{
fieldLabel : _('ID_INDICATOR_GOAL'),
id : 'IND_GOAL_'+ indexTab,
xtype : 'textfield',
anchor : '40%',
maskRe : /([0-9\.]+)$/,
maxLength : 9,
width : 80,
allowBlank : false,
listeners : {
focus : function(tb, e) {
Ext.QuickTips.register({
target: tb,
title: _('ID_HELP'),
text: _('ID_GOAL_HELP')
});
}
}
}
],
listeners:
{
render: function()
{
var index = tabPanel.getActiveTab().id;
var myfieldset = document.getElementById('fieldSet_'+index);
myfieldset.style.marginLeft = "70px";
myfieldset.style.marginRight = "70px";
}
}
}),
new Ext.form.ComboBox({
anchor : '85%',
@@ -915,7 +939,12 @@ var addTab = function () {
},
},
closable:true
})/*.show(false)*/;
};
if (flag != 'load') {
tabPanel.add(tab).show();
} else {
tabPanel.add(tab);
}
};
@@ -1049,77 +1078,70 @@ var saveDashboard = function () {
var saveAllIndicators = function (DAS_UID) {
for (var tab in tabActivate) {
if (tab == 'remove') {
if (tab == 'remove' || tab == 'indexOf' || tab == 'map') {
continue;
}
tabPanel.getItem(tabActivate[tab]).show();
var fieldsTab = tabPanel.getItem(tabActivate[tab]).items.items[0].items.items[0].items.items;
var goal = fieldsTab[3];
fieldsTab.push(goal.items.items[0]);
fieldsTab.push(goal.items.items[1]);
data = [];
data['DAS_UID'] = DAS_UID;
for (var index in fieldsTab) {
var node = fieldsTab[index];
if (index == 'remove') {
if (index == 'remove' || index == 'map') {
continue;
}
id = node.id;
value = node.getValue();
switch (index) {
case "0":
data['DAS_IND_UID'] = value.trim();
break;
case "1":
if (value.trim() == '') {
PMExt.warning(_('ID_DASHBOARD'), _('ID_INDICATOR_TITLE_REQUIRED', tabPanel.getItem(tabActivate[tab]).title));
node.focus(true,10);
return false;
}
data['DAS_IND_TITLE'] = value.trim();
break;
case "2":
if (value.trim() == '') {
PMExt.warning(_('ID_DASHBOARD'), _('ID_INDICATOR_TYPE_REQUIRED', tabPanel.getItem(tabActivate[tab]).title));
node.focus(true,10);
return false;
}
data['DAS_IND_TYPE'] = value.trim();
break;
case "3":
data['DAS_IND_GOAL'] = value.trim();
break;
case "4":
data['DAS_IND_DIRECTION'] = value;
break;
case "5":
if (value.trim() == '') {
PMExt.warning(_('ID_DASHBOARD'), _('ID_INDICATOR_PROCESS_REQUIRED', tabPanel.getItem(tabActivate[tab]).title));
node.focus(true,10);
return false;
}
data['DAS_UID_PROCESS'] = value;
break;
case "6":
data['DAS_IND_FIRST_FIGURE'] = value;
break;
case "7":
data['DAS_IND_FIRST_FREQUENCY'] = value;
break;
case "8":
data['DAS_IND_SECOND_FIGURE'] = value;
break;
case "9":
data['DAS_IND_SECOND_FREQUENCY'] = value;
break;
if (typeof id == 'undefined' || id.indexOf('fieldSet_') != -1 ) {
continue;
}
id = id.split('_');
field = '';
for (var part = 0; part<id.length-1; part++) {
if (part == 0) {
field = id[part];
} else {
field = field+'_'+id[part];
}
}
value = node.getValue();
if (field == 'IND_TITLE' && value.trim() == '') {
PMExt.warning(_('ID_DASHBOARD'), _('ID_INDICATOR_TITLE_REQUIRED', tabPanel.getItem(tabActivate[tab]).title));
node.focus(true,10);
return false;
} else if (field == 'IND_TYPE' && value.trim() == '') {
PMExt.warning(_('ID_DASHBOARD'), _('ID_INDICATOR_TYPE_REQUIRED', tabPanel.getItem(tabActivate[tab]).title));
node.focus(true,10);
return false;
} else if (field == 'IND_GOAL' && value.trim() == '') {
PMExt.warning(_('ID_DASHBOARD'), _('ID_INDICATOR_GOAL_REQUIRED', tabPanel.getItem(tabActivate[tab]).title));
node.focus(true,10);
return false;
} else if (field == 'IND_PROCESS' && value.trim() == '') {
PMExt.warning(_('ID_DASHBOARD'), _('ID_INDICATOR_PROCESS_REQUIRED', tabPanel.getItem(tabActivate[tab]).title));
node.focus(true,10);
return false;
}
field = field == 'IND_TITLE' ? 'DAS_IND_TITLE' : field;
field = field == 'IND_TYPE' ? 'DAS_IND_TYPE' : field;
field = field == 'IND_PROCESS' ? 'DAS_UID_PROCESS' : field;
field = field == 'IND_GOAL' ? 'DAS_IND_GOAL' : field;
data[field] = value.trim();
}
saveDashboardIndicator(data);
}
location.href = 'dashboardList';
window.location = 'dashboardList';
};
var saveDashboardIndicator = function (options) {
if (options['DAS_IND_UID'] == '') {
Ext.Ajax.request({
@@ -1196,8 +1218,6 @@ var saveAllDashboardOwner = function (DAS_UID) {
};
var saveDashboardOwner = function (DAS_UID, uid, type) {
myMask.msg = _('ID_SAVING');
myMask.show();
Ext.Ajax.request({
url : urlProxy + 'dashboard/owner',
method: 'POST',
@@ -1212,11 +1232,9 @@ var saveDashboardOwner = function (DAS_UID, uid, type) {
},
success: function (response) {
var jsonResp = Ext.util.JSON.decode(response.responseText);
myMask.hide();
},
failure: function (response) {
var jsonResp = Ext.util.JSON.decode(response.responseText);
myMask.hide();
PMExt.error(_('ID_ERROR'),jsonResp.error.message);
}
});
@@ -1233,12 +1251,12 @@ var loadIndicators = function (DAS_UID) {
success: function (response) {
var jsonResp = Ext.util.JSON.decode(response.responseText);
if (jsonResp == '') {
addTab();
addTab('load');
}
dataIndicator = jsonResp;
for (var i=0; i<=jsonResp.length-1; i++) {
addTab();
addTab('load');
tabPanel.getItem(i+1).setTitle(jsonResp[i]['DAS_IND_TITLE']);
}
tabPanel.getItem(0).show();

View File

@@ -29,13 +29,13 @@
<script type="text/javascript" src="/js/d3/d3.js" ></script>
<script type="text/javascript" src="/js/d3/d3.tip.js"></script>
<script type="text/javascript" src="/js/pmchart/pmCharts.js"></script>
<script>
<script type="text/javascript" >
var urlProxy = '{$urlProxy}';
var usrId = '{$usrId}';
var token = '{$credentials.access_token}';
var G_STRING = [];
{foreach from=$translation key=index item=option}
G_STRING['{$index}'] = '{$option}';
G_STRING['{$index}'] = "{$option}";
{/foreach}
</script>
<script type="text/javascript" src="/jscore/strategicDashboard/dashboardProxyTest.js"></script>
@@ -56,37 +56,47 @@
<i class="fa fa-chevron-down fa-1x"></i>
</a>
<h4 id="titleH4" class="header-dashboard">{translate label="ID_MANAGERS_DASHBOARDS"}</h4>
<div class="pull-right dashboard-right">
<h5 class="pull-left">{translate label="ID_DASH_COMPARE_MONTH"}:</h5>
<button type="button" class="btn btn-compare btn-success pull-right btn-date">{translate label="ID_DASH_COMPARE"}</button>
<div class="pull-right dashboard-right container-fluid">
<select id="year" class="form-control pull-right ">
{literal}
<script>
now = new Date();
anio = now.getFullYear();
for(a=anio;a>=anio-7;a--){
document.write('<option value="'+a+'">'+a+'</option>');
}
</script>
{/literal}
</select>
<div class="row pull-left">
<div class="span4 pull-left">
<h5 class="pull-left">{translate label="ID_DASH_COMPARE_MONTH"}:</h5>
</div>
<select id="mounth" class="form-control pull-right ">
<option value="1">{translate label="ID_MONTH_ABB_1"}</option>
<option value="2">{translate label="ID_MONTH_ABB_2"}</option>
<option value="3">{translate label="ID_MONTH_ABB_3"}</option>
<option value="4">{translate label="ID_MONTH_ABB_4"}</option>
<option value="5">{translate label="ID_MONTH_ABB_5"}</option>
<option value="6">{translate label="ID_MONTH_ABB_6"}</option>
<option value="7">{translate label="ID_MONTH_ABB_7"}</option>
<option value="8">{translate label="ID_MONTH_ABB_8"}</option>
<option value="9">{translate label="ID_MONTH_ABB_9"}</option>
<option value="10">{translate label="ID_MONTH_ABB_10"}</option>
<option value="11">{translate label="ID_MONTH_ABB_11"}</option>
<option value="12">{translate label="ID_MONTH_ABB_12"}</option>
</select>
<div class="span4 pull-left">
<button type="button" class="btn btn-compare btn-success pull-right btn-date">{translate label="ID_DASH_COMPARE"}</button>
</div>
<div class="span4 pull-left">
<select id="year" class="form-control pull-right ">
{literal}
<script>
now = new Date();
anio = now.getFullYear();
for(a=anio;a>=anio-7;a--){
document.write('<option value="'+a+'">'+a+'</option>');
}
</script>
{/literal}
</select>
<select id="mounth" class="form-control pull-right ">
<option value="1">{translate label="ID_MONTH_ABB_1"}</option>
<option value="2">{translate label="ID_MONTH_ABB_2"}</option>
<option value="3">{translate label="ID_MONTH_ABB_3"}</option>
<option value="4">{translate label="ID_MONTH_ABB_4"}</option>
<option value="5">{translate label="ID_MONTH_ABB_5"}</option>
<option value="6">{translate label="ID_MONTH_ABB_6"}</option>
<option value="7">{translate label="ID_MONTH_ABB_7"}</option>
<option value="8">{translate label="ID_MONTH_ABB_8"}</option>
<option value="9">{translate label="ID_MONTH_ABB_9"}</option>
<option value="10">{translate label="ID_MONTH_ABB_10"}</option>
<option value="11">{translate label="ID_MONTH_ABB_11"}</option>
<option value="12">{translate label="ID_MONTH_ABB_12"}</option>
</select>
</div>
</div>
</div>
<div class="clearfix"></div>
<div class="collapse" id="collapseExample">