Merged colosa/processmaker into master

This commit is contained in:
jonathan quispe
2015-04-30 09:10:54 -04:00
14 changed files with 1760 additions and 358 deletions

View File

@@ -115,7 +115,7 @@ BarChart.prototype.drawBars = function(data, canvas, param) {
.attr("x", graphDim.left*2 + graphDim.width/2)
.attr("dy", "1.5em")
.style("text-anchor", "end")
.text("No data to draw...");
.text(param.canvas.noDataText);
data = [ {"value":"0", "datalabel":"None"} ];
}
@@ -1097,7 +1097,7 @@ PieChart.prototype.drawChart = function () {
PieChart.prototype.drawPie2D = function (dataset, canvas, param) {
if (dataset == null || dataset.length == 0) {
this.$container.html( "<div class='pm-charts-no-draw'>No data to draw ...</div>" );
this.$container.html( "<div class='pm-charts-no-draw'>"+param.canvas.noDataText+"</div>" );
}
var parameter = createDefaultParamsForGraphPie(param);
@@ -1443,7 +1443,7 @@ Pie3DChart.prototype.drawChart = function () {
Pie3DChart.prototype.drawPie3D = function (data, canvas, param) {
if (data == null || data.length == 0) {
this.$container.html( "<div class='pm-charts-no-draw'>No data to draw ...</div>" );
this.$container.html( "<div class='pm-charts-no-draw'>"+param.canvas.noDataText+"</div>" );
}
var duration_transition = 0;
@@ -1613,7 +1613,7 @@ RingChart.prototype.drawChart = function () {
RingChart.prototype.drawRing = function(data, canvas, param){
if (data == null || data.length == 0) {
this.$container.html( "<div class='pm-charts-no-draw'>No data to draw ...</div>" );
this.$container.html( "<div class='pm-charts-no-draw'>"+param.canvas.noDataText+"</div>" );
}
//d3.select('#'+parent).select('svg').remove();

View File

@@ -513,9 +513,9 @@ class indicatorsCalculator
$params[':usrUid'] = $usrUid;
$sqlString = "SELECT
COALESCE( SUM( DATEDIFF( DEL_DUE_DATE , NOW( ) ) < 0 ) , 0 ) AS OVERDUE,
COALESCE( SUM( DATEDIFF( DEL_DUE_DATE , NOW( ) ) > 0 ) , 0 ) AS ONTIME,
COALESCE( SUM( DATEDIFF( DEL_RISK_DATE , NOW( ) ) < 0 ) , 0 ) AS ATRISK
COALESCE( SUM( TIMEDIFF( DEL_DUE_DATE , NOW( ) ) < 0 ) , 0 ) AS OVERDUE,
COALESCE( SUM( TIMEDIFF( DEL_RISK_DATE , NOW( ) ) > 0 ) , 0 ) AS ONTIME,
COALESCE( SUM( TIMEDIFF( DEL_RISK_DATE , NOW( ) ) < 0 && TIMEDIFF( DEL_DUE_DATE , NOW( ) ) > 0) , 0 ) AS ATRISK
FROM LIST_INBOX
WHERE USR_UID = :usrUid
AND APP_STATUS = 'TO_DO'
@@ -534,9 +534,9 @@ class indicatorsCalculator
APP_TAS_TITLE AS taskTitle,
APP_PRO_TITLE AS proTitle,
COALESCE( SUM( DATEDIFF( DEL_DUE_DATE , NOW( ) ) < 0 ) , 0 ) AS overdue,
COALESCE( SUM( DATEDIFF( DEL_DUE_DATE , NOW( ) ) > 0 ) , 0 ) AS onTime,
COALESCE( SUM( DATEDIFF( DEL_RISK_DATE , NOW( ) ) < 0 ) , 0 ) AS atRisk
COALESCE( SUM( TIMEDIFF( DEL_DUE_DATE , NOW( ) ) < 0 ) , 0 ) AS overdue,
COALESCE( SUM( TIMEDIFF( DEL_RISK_DATE , NOW( ) ) > 0 ) , 0 ) AS onTime,
COALESCE( SUM( TIMEDIFF( DEL_RISK_DATE , NOW( ) ) < 0 && TIMEDIFF( DEL_DUE_DATE , NOW( ) ) > 0) , 0 ) AS atRisk
FROM LIST_INBOX
WHERE USR_UID = :usrUid
AND APP_STATUS = 'TO_DO'
@@ -561,8 +561,8 @@ class indicatorsCalculator
if (is_array($result) && isset($result[0])) {
$response['overdue'] = $result[0]['OVERDUE'];
$response['atRisk'] = $result[0]['ONTIME'];
$response['onTime'] = $result[0]['ATRISK'];
$response['atRisk'] = $result[0]['ATRISK'];
$response['onTime'] = $result[0]['ONTIME'];
$total = $response['overdue'] + $response['atRisk'] + $response['onTime'];
if ($total != 0) {
@@ -578,20 +578,20 @@ class indicatorsCalculator
$result[$key]['overdue'] = $value['overdue'];
$result[$key]['atRisk'] = $value['atRisk'];
$result[$key]['onTime'] = $value['onTime'];
$result[$key]['percentageOverdue'] = 0;
$result[$key]['percentageAtRisk'] = 0;
$result[$key]['percentageOnTime'] = 0;
$result[$key]['percentageTotalOverdue'] = 0;
$result[$key]['percentageTotalAtRisk'] = 0;
$result[$key]['percentageTotalOnTime'] = 0;
$result[$key]['percentageOverdue'] = 0;
$result[$key]['percentageAtRisk'] = 0;
$result[$key]['percentageOnTime'] = 0;
$result[$key]['percentageTotalOverdue'] = 0;
$result[$key]['percentageTotalAtRisk'] = 0;
$result[$key]['percentageTotalOnTime'] = 0;
$total = $value['overdue'] + $value['onTime'] + $value['atRisk'];
if ($total != 0) {
$result[$key]['percentageOverdue'] = ($value['overdue']*100)/$total;
$result[$key]['percentageAtRisk'] = ($value['atRisk']*100)/$total;
$result[$key]['percentageOnTime'] = ($value['onTime']*100)/$total;
$result[$key]['percentageTotalOverdue'] = $response['overdue'] != 0 ? ($value['overdue']*100)/$response['overdue']: 0;
$result[$key]['percentageTotalAtRisk'] = $response['atRisk'] != 0 ? ($value['atRisk']*100)/$response['atRisk'] : 0;
$result[$key]['percentageTotalOnTime'] = $response['onTime'] != 0 ? ($value['onTime']*100)/$response['onTime']: 0;
$result[$key]['percentageTotalOverdue'] = $response['overdue'] != 0 ? ($value['overdue']*100)/$response['overdue']: 0;
$result[$key]['percentageTotalAtRisk'] = $response['atRisk'] != 0 ? ($value['atRisk']*100)/$response['atRisk'] : 0;
$result[$key]['percentageTotalOnTime'] = $response['onTime'] != 0 ? ($value['onTime']*100)/$response['onTime']: 0;
}
}
$response['dataList'] = $result;

View File

@@ -404,7 +404,7 @@ class AppDelegation extends BaseAppDelegation
}
//Risk date
$riskDate = $calendar->dashCalculateDate($this->getDelDelegateDate(), round($riskTime), $data['TAS_TIMEUNIT'], $arrayCalendarData);
$riskDate = $calendar->dashCalculateDate($this->getDelDelegateDate(), $riskTime, $data['TAS_TIMEUNIT'], $arrayCalendarData);
return $riskDate;
} catch (Exception $e) {

View File

@@ -65,14 +65,18 @@ class DashboardIndicator extends BaseDashboardIndicator
$oldValue = current(reset($calculator->peiHistoric($uid, $compareDate, $compareDate, \ReportingPeriodicityEnum::NONE)));
$row['DAS_IND_VARIATION'] = $value - $oldValue;
$row['DAS_IND_OLD_VALUE'] = $oldValue;
$row['DAS_IND_PERCENT_VARIATION'] = round(($value - $oldValue) * 100 / (($oldValue == 0) ? 1 : $oldValue), 1);
$row['DAS_IND_PERCENT_VARIATION'] = $oldValue != 0
? round(($value - $oldValue) * 100 / $oldValue)
: "--";
break;
case '1030':
$value = current(reset($calculator->ueiHistoric(null, $measureDate, $measureDate, \ReportingPeriodicityEnum::NONE)));
$oldValue = current(reset($calculator->ueiHistoric($uid, $compareDate, $compareDate, \ReportingPeriodicityEnum::NONE)));
$row['DAS_IND_VARIATION'] = $value - $oldValue;
$row['DAS_IND_OLD_VALUE'] = $oldValue;
$row['DAS_IND_PERCENT_VARIATION'] = round(($value - $oldValue) * 100 / (($oldValue == 0) ? 1 : $oldValue), 1);
$row['DAS_IND_PERCENT_VARIATION'] = $oldValue != 0
? round(($value - $oldValue) * 100 / $oldValue)
: "--";
break;
case '1050':
$value = $calculator->statusIndicatorGeneral($userUid);

View File

@@ -78,7 +78,6 @@ ViewDashboardModel.prototype.getPositionIndicator = function(callBack) {
"y" : originalObject.y,
"width" : originalObject.width,
"height" : originalObject.height
};
graphData.push(map);
});

View File

@@ -90,18 +90,37 @@ ViewDashboardPresenter.prototype.dashboardIndicatorsViewModel = function(data) {
newObject.comparative = Math.round(newObject.comparative*1000)/1000;
newObject.comparative = ((newObject.comparative > 0)? "+": "") + newObject.comparative;
newObject.percentComparative = (newObject.percentComparative != '--')
? '(' + newObject.percentComparative + '%)'
: "";
newObject.value = (newObject.category == "normal")
? Math.round(newObject.value) + ""
: Math.round(newObject.value*100)/100 + ""
newObject.favorite = 0;
newObject.percentageOverdue = Math.round(newObject.percentageOverdue);
newObject.percentageAtRisk = Math.round(newObject.percentageAtRisk);
//to be sure that percentages sum up to 100 (the rounding will lost decimals)%
newObject.percentageOnTime = 100 - newObject.percentageOverdue - newObject.percentageAtRisk;
newObject.overdueVisibility = (newObject.percentageOverdue > 0)? "visible" : "hidden";
newObject.atRiskVisibility = (newObject.percentageAtRisk > 0)? "visible" : "hidden";
newObject.onTimeVisibility = (newObject.percentageOnTime > 0)? "visible" : "hidden";
newObject.percentageOverdueWidth = Math.round(newObject.percentageOverdue);
newObject.percentageAtRiskWidth = Math.round(newObject.percentageAtRisk);
//to be sure that percentages sum up to 100 (the rounding will lose decimals)%
newObject.percentageOnTimeWidth = 100 - newObject.percentageOverdueWidth - newObject.percentageAtRiskWidth;
newObject.percentageOverdueToShow = ((newObject.percentageOverdue == 0 ||newObject.percentageOverdue == null )
? ""
: newObject.percentageOverdueWidth + "%");
newObject.percentageAtRiskToShow = ((newObject.percentageAtRisk == 0 || newObject.percentageAtRisk == null)
? ""
: newObject.percentageAtRiskWidth + "%");
newObject.percentageOnTimeToShow = ((newObject.percentageOnTime == 0 || newObject.percentageOnTime == 0)
? G_STRING['ID_INBOX'] + ' ' + G_STRING['ID_EMPTY']
: newObject.percentageOnTimeWidth + "%");
newObject.overdueVisibility = (newObject.percentageOverdueWidth > 0) ? "visible" : "hidden";
newObject.atRiskVisibility = (newObject.percentageAtRiskWidth > 0) ? "visible" : "hidden";
newObject.onTimeVisibility = (newObject.percentageOnTimeWidth > 0) ? "visible" : "hidden";
returnList.push(newObject);
i++;
});

View File

@@ -353,20 +353,17 @@ $(document).ready(function() {
presenter.getDashboardIndicators(dashboardId, defaultInitDate(), defaultEndDate())
.done(function(indicatorsVM) {
fillIndicatorWidgets(indicatorsVM);
//TODO use real data
loadIndicator(getFavoriteIndicator().id, defaultInitDate(), defaultEndDate());
});
});
$('#indicatorsGridStack').on('click','.ind-button-selector', function() {
var indicatorId = $(this).data('indicator-id');
//TODO use real data
loadIndicator(indicatorId, defaultInitDate(), defaultEndDate());
});
$('body').on('click','.bread-back-selector', function() {
var indicatorId = window.currentIndicator.id;
//TODO use real data
loadIndicator(indicatorId, defaultInitDate(), defaultEndDate());
return false;
});
@@ -380,7 +377,6 @@ $(document).ready(function() {
"inefficiencyCost":$(this).data('detail-cost'),
"name":$(this).data('detail-name')
};
//TODO PASS REAL VALUES
presenter.getSpecialIndicatorSecondLevel(detailId, window.currentIndicator.type, defaultInitDate(), defaultEndDate())
.done(function (viewModel) {
fillSpecialIndicatorSecondView(viewModel);
@@ -406,8 +402,15 @@ var hideTitleAndSortDiv = function(){
switch (window.currentIndicator.type) {
case "1010":
case "1030":
$('#relatedLabel').css('visibility', 'visible');
$('#relatedLabel').show();
if($('.detail-button-selector').length == 0) {
$('#relatedLabel').hide();
//$('#relatedLabel').find('h3').text(G_STRING['ID_NO_DATA_TO_DISPLAY']);
}
else {
$('#relatedLabel').css('visibility', 'visible');
$('#relatedLabel').show();
}
break;
default:
$('#relatedLabel').hide();
@@ -419,7 +422,17 @@ var selectedOrderOfDetailList = function () {
return ($('#sortListButton').hasClass('fa-chevron-up') ? "up" : "down");
}
var selectDefaultMonthAndYear = function () {
var compareDate = new Date();
compareDate.setMonth(compareDate.getMonth() - 1);
var compareMonth = compareDate.getMonth() + 1;
var compareYear = compareDate.getYear();
$('#month').val(compareMonth);
$('#year').val(compareYear);
}
var initialDraw = function () {
selectDefaultMonthAndYear();
presenter.getUserDashboards(pageUserId)
.then(function(dashboardsVM) {
fillDashboardsList(dashboardsVM);
@@ -523,10 +536,6 @@ var fillIndicatorWidgets = function (presenterData) {
$.each(presenterData, function(key, indicator) {
var $widget = widgetBuilder.getIndicatorWidget(indicator);
grid.add_widget($widget, indicator.toDrawX, indicator.toDrawY, indicator.toDrawWidth, indicator.toDrawHeight, true);
//TODO will exist animation?
/*if (indicator.category == "normal") {
animateProgress(indicator, $widget);
}*/
var $title = $widget.find('.ind-title-selector');
if (indicator.favorite == "1") {
$title.addClass("panel-active");
@@ -548,7 +557,8 @@ var fillStatusIndicatorFirstView = function (presenterData) {
containerId:'graph1',
width:300,
height:300,
stretch:true
stretch:true,
noDataText: G_STRING.ID_DISPLAY_EMPTY
},
graph: {
@@ -608,7 +618,8 @@ var fillSpecialIndicatorFirstView = function(presenterData) {
containerId:'specialIndicatorGraph',
width:300,
height:300,
stretch:true
stretch:true,
noDataText: G_STRING.ID_NO_INEFFICIENT_PROCESSES
},
graph: {
allowDrillDown:false,
@@ -627,7 +638,8 @@ var fillSpecialIndicatorFirstView = function(presenterData) {
containerId:'specialIndicatorGraph',
width:500,
height:300,
stretch:true
stretch:true,
noDataText: G_STRING.ID_NO_INEFFICIENT_USER_GROUPS
},
graph: {
allowDrillDown:false,
@@ -725,11 +737,13 @@ var fillSpecialIndicatorSecondView = function(presenterData) {
if (window.currentIndicator.type == "1010") {
detailParams.graph.axisX.label = G_STRING['ID_TASK'] ;
detailParams.canvas.noDataText = G_STRING['ID_NO_INEFFICIENT_TASKS'] ;
var graph = new BarChart(presenterData.dataToDraw, detailParams, null, null);
graph.drawChart();
}
if (window.currentIndicator.type == "1030") {
detailParams.canvas.noDataText = G_STRING['ID_NO_INEFFICIENT_USERS'] ;
var graph = new BarChart(presenterData.dataToDraw, detailParams, null, null);
graph.drawChart();
}

View File

@@ -50,6 +50,22 @@ if ($actionAjax == "streaming") {
exit(0);
}
if ($actionAjax == "fileMobile") {
$app_uid = isset( $_REQUEST['a'] ) ? $_REQUEST['a'] : null;
$inp_doc_uid = isset( $_REQUEST['d'] ) ? $_REQUEST['d'] : null;
$structure = file_get_contents(PATH_HTML ."/mobile/index.json");
$structure = json_decode($structure);
foreach($structure as $build){
foreach($build as $file){
$file->lastModified = date ("D, d M Y H:i:s \G\M\T", filemtime(PATH_HTML ."/mobile/".$file->file));
}
}
G::header( 'Content-Type: application/json' );
echo G::json_encode($structure);
exit(0);
}
exit;
function rangeDownload($location,$mimeType)

View File

@@ -54,7 +54,7 @@ class Light
$task = new \ProcessMaker\BusinessModel\Task();
$task->setFormatFieldNameInUppercase(false);
$task->setArrayParamException(array("taskUid" => "act_uid", "stepUid" => "step_uid"));
$step = new \ProcessMaker\Services\Api\Project\Activity\Step();
$response = array();
foreach ($processList as $key => $processInfo) {
$tempTreeChildren = array ();
@@ -71,6 +71,9 @@ class Light
$newForm[$c]['index'] = $c+1;
$newForm[$c]['title'] = $form['obj_title'];
$newForm[$c]['description'] = $form['obj_description'];
$newForm[$c]['stepId'] = $form["step_uid"];
$trigger = $this->statusTriggers($step->doGetActivityStepTriggers($form["step_uid"], $tempTreeChild['taskId'], $tempTreeChild['processId']));
$newForm[$c]["triggers"] = $trigger;
$c++;
}
}
@@ -87,6 +90,20 @@ class Light
return $response;
}
public function statusTriggers($triggers)
{
$return = array("before" => false, "after"=> false);
foreach($triggers as $trigger){
if ($trigger['st_type'] == "BEFORE"){
$return["before"]= true;
}
if ($trigger['st_type'] == "AFTER"){
$return["after"]= true;
}
}
return $return;
}
/**
* Get counters each type of list
* @param $userId
@@ -810,5 +827,229 @@ class Light
}
return $response;
}
/**
* GET return array category
*
* @return array
*/
public function getCategoryList ()
{
$category = array ();
$category[] = array ("", G::LoadTranslation( "ID_ALL_CATEGORIES" ));
$criteria = new Criteria( 'workflow' );
$criteria->addSelectColumn( \ProcessCategoryPeer::CATEGORY_UID );
$criteria->addSelectColumn( \ProcessCategoryPeer::CATEGORY_NAME );
$criteria->addAscendingOrderByColumn(\ProcessCategoryPeer::CATEGORY_NAME);
$dataset = \ProcessCategoryPeer::doSelectRS( $criteria );
$dataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC );
$dataset->next();
while ($row = $dataset->getRow()) {
$category[] = array ($row['CATEGORY_UID'],$row['CATEGORY_NAME']);
$dataset->next();
}
return $category;
}
/**
* @param $action
* @param $categoryUid
* @param $userUid
* @return array
* @throws \PropelException
*/
public function getProcessList ($action, $categoryUid, $userUid)
{
//$action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : null;
//$categoryUid = isset( $_REQUEST['CATEGORY_UID'] ) ? $_REQUEST['CATEGORY_UID'] : null;
//$userUid = (isset( $_SESSION['USER_LOGGED'] ) && $_SESSION['USER_LOGGED'] != '') ? $_SESSION['USER_LOGGED'] : null;
// global $oAppCache;
$oAppCache = new \AppCacheView();
$processes = array ();
$processes[] = array ('',G::LoadTranslation( 'ID_ALL_PROCESS' ));
//get the list based in the action provided
switch ($action) {
case 'draft':
$cProcess = $oAppCache->getDraftListCriteria( $userUid ); //fast enough
break;
case 'sent':
$cProcess = $oAppCache->getSentListProcessCriteria( $userUid ); // fast enough
break;
case 'simple_search':
case 'search':
//in search action, the query to obtain all process is too slow, so we need to query directly to
//process and content tables, and for that reason we need the current language in AppCacheView.
G::loadClass( 'configuration' );
$oConf = new \Configurations();
$oConf->loadConfig( $x, 'APP_CACHE_VIEW_ENGINE', '', '', '', '' );
$appCacheViewEngine = $oConf->aConfig;
$lang = isset( $appCacheViewEngine['LANG'] ) ? $appCacheViewEngine['LANG'] : 'en';
$cProcess = new Criteria( 'workflow' );
$cProcess->clearSelectColumns();
$cProcess->addSelectColumn( \ProcessPeer::PRO_UID );
$cProcess->addSelectColumn( \ContentPeer::CON_VALUE );
if ($categoryUid) {
$cProcess->add( \ProcessPeer::PRO_CATEGORY, $categoryUid );
}
$del = DBAdapter::getStringDelimiter();
$conds = array ();
$conds[] = array (ProcessPeer::PRO_UID,ContentPeer::CON_ID);
$conds[] = array (ContentPeer::CON_CATEGORY,$del . 'PRO_TITLE' . $del);
$conds[] = array (ContentPeer::CON_LANG,$del . $lang . $del);
$cProcess->addJoinMC( $conds, Criteria::LEFT_JOIN );
$cProcess->add( ProcessPeer::PRO_STATUS, 'ACTIVE' );
$cProcess->addAscendingOrderByColumn(ContentPeer::CON_VALUE);
$oDataset = ProcessPeer::doSelectRS( $cProcess );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$processes[] = array ($aRow['PRO_UID'],$aRow['CON_VALUE']
);
$oDataset->next();
}
return print G::json_encode( $processes );
break;
case 'unassigned':
$cProcess = $oAppCache->getUnassignedListCriteria( $userUid );
break;
case 'paused':
$cProcess = $oAppCache->getPausedListCriteria( $userUid );
break;
case 'to_revise':
$cProcess = $oAppCache->getToReviseListCriteria( $userUid );
break;
case 'to_reassign':
$cProcess = $oAppCache->getToReassignListCriteria($userUid);
break;
case 'gral':
$cProcess = $oAppCache->getGeneralListCriteria();
break;
case 'todo':
default:
$cProcess = $oAppCache->getToDoListCriteria( $userUid ); //fast enough
break;
}
//get the processes for this user in this action
$cProcess->clearSelectColumns();
$cProcess->addSelectColumn( \AppCacheViewPeer::PRO_UID );
$cProcess->addSelectColumn( \AppCacheViewPeer::APP_PRO_TITLE );
$cProcess->setDistinct( \AppCacheViewPeer::PRO_UID );
if ($categoryUid) {
require_once 'classes/model/Process.php';
$cProcess->addAlias( 'CP', 'PROCESS' );
$cProcess->add( 'CP.PRO_CATEGORY', $categoryUid, Criteria::EQUAL );
$cProcess->addJoin( \AppCacheViewPeer::PRO_UID, 'CP.PRO_UID', Criteria::LEFT_JOIN );
$cProcess->addAsColumn( 'CATEGORY_UID', 'CP.PRO_CATEGORY' );
}
$cProcess->addAscendingOrderByColumn(\AppCacheViewPeer::APP_PRO_TITLE);
$oDataset = \AppCacheViewPeer::doSelectRS( $cProcess, \Propel::getDbConnection('workflow_ro') );
$oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
while ($aRow = $oDataset->getRow()) {
$processes[] = array ($aRow['PRO_UID'],$aRow['APP_PRO_TITLE']
);
$oDataset->next();
}
return $processes;
}
/**
* lista de usuarios a reasignar
*/
public function getUsersToReassign($usr_uid, $task_uid)
{
//G::LoadClass( 'tasks' );
G::LoadSystem( 'rbac' );
G::LoadClass( 'memcached' );
$memcache = \PMmemcached::getSingleton( SYS_SYS );
$RBAC = \RBAC::getSingleton( PATH_DATA, session_id() );
$RBAC->sSystem = 'PROCESSMAKER';
$RBAC->initRBAC();
$memKey = 'rbacSession' . session_id();
if (($RBAC->aUserInfo = $memcache->get( $memKey )) === false) {
$RBAC->loadUserRolePermission( $RBAC->sSystem, $usr_uid );
$memcache->set( $memKey, $RBAC->aUserInfo, \PMmemcached::EIGHT_HOURS );
}
$GLOBALS['RBAC'] = $RBAC;
$task = new \Task();
$tasks = $task->load($task_uid);
$case = new \Cases();
$result = new \stdclass();
$result->data = $case->getUsersToReassign($task_uid, $usr_uid, $tasks['PRO_UID']);
return $result;
}
/**
*
*/
public function reassignCase($usr_uid, $app_uid, $TO_USR_UID)
{
$cases = new \Cases();
$user = new \Users();
$app = new \Application();
$result = new \stdclass();
try {
$iDelIndex = $cases->getCurrentDelegation( $app_uid, $usr_uid );
$cases->reassignCase($app_uid, $iDelIndex, $usr_uid, $TO_USR_UID);
$caseData = $app->load($app_uid);
$userData = $user->load($TO_USR_UID);
$data['APP_NUMBER'] = $caseData['APP_NUMBER'];
$data['USER'] = $userData['USR_LASTNAME'] . ' ' . $userData['USR_FIRSTNAME']; //TODO change with the farmated username from environment conf
$result->status = 0;
$result->msg = G::LoadTranslation('ID_REASSIGNMENT_SUCCESS', SYS_LANG, $data);
} catch (\Exception $e) {
$result->status = 1;
$result->msg = $e->getMessage();
}
return $result;
}
/**
*
*/
public function pauseCase($usr_uid, $app_uid, $request_data)
{
$result = new \stdclass();
try {
$unpauseDate = $request_data['unpauseDate'] . ' '. $request_data['unpauseTime'];
$oCase = new \Cases();
$iDelIndex = $oCase->getCurrentDelegation( $app_uid, $usr_uid );
// Save the note pause reason
if ($request_data['noteContent'] != '') {
$request_data['noteContent'] = G::LoadTranslation('ID_CASE_PAUSE_LABEL_NOTE') . ' ' . $request_data['noteContent'];
$appNotes = new \AppNotes();
$noteContent = addslashes($request_data['noteContent']);
$appNotes->postNewNote($app_uid, $usr_uid, $noteContent, $request_data['notifyUser']);
}
// End save
$oCase->pauseCase($app_uid, $iDelIndex, $usr_uid, $unpauseDate);
$app = new \Application();
$caseData = $app->load($app_uid);
$data['APP_NUMBER'] = $caseData['APP_NUMBER'];
$data['UNPAUSE_DATE'] = $unpauseDate;
$result->success = true;
$result->msg = G::LoadTranslation('ID_CASE_PAUSED_SUCCESSFULLY', SYS_LANG, $data);
} catch (\Exception $e) {
throw $e;
}
return $result;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -59,7 +59,7 @@
</div>
<div class="col-xs-9 text-right"><i class="ind-symbol-selector fa fa-chevron-up fa-3x"></i>
<div class="small ind-comparative-selector">
<%- indicator.comparative %> (<%- indicator.percentComparative %> %)
<%- indicator.comparative %> <%- indicator.percentComparative %>
</div>
</div>
</div>
@@ -81,29 +81,29 @@
<div class="ind-container-selector panel grid-stack-item-content" style="min-width:200px;">
<a data-toggle="collapse" href="#efficiencyindex" aria-expanded="false" aria-controls="efficiencyindex">
<div class="panel-heading status-indicator-low"
style=" width:<%- indicator.percentageOverdue %>%;
visibility: <%- indicator.overdueVisibility %>" >
style=" width:<%- indicator.percentageOverdueWidth %>%;
visibility: <%- indicator.overdueVisibility %>;overflow:hidden;" >
<div class="row">
<div class="col-xs-12">
<div class="small ind-comparative-selector"><%- indicator.percentageOverdue %>%</div>
<div class="small ind-comparative-selector"><%- indicator.percentageOverdueToShow %></div>
</div>
</div>
</div>
<div class="panel-heading status-indicator-medium"
style=" width:<%- indicator.percentageAtRisk %>%;
visibility: <%- indicator.atRiskVisibility %>;" >
style=" width:<%- indicator.percentageAtRiskWidth %>%;
visibility: <%- indicator.atRiskVisibility %>;overflow:hidden;" >
<div class="row">
<div class="col-xs-12">
<div class="small ind-comparative-selector"><%- indicator.percentageAtRisk %>%</div>
<div class="small ind-comparative-selector"><%- indicator.percentageAtRiskToShow %></div>
</div>
</div>
</div>
<div class="panel-heading status-indicator-high"
style=" width:<%- indicator.percentageOnTime %>%;
visibility: <%- indicator.onTimeVisibility %>;">
style=" width:<%- indicator.percentageOnTimeWidth %>%;
visibility: <%- indicator.onTimeVisibility %>; overflow:hidden;">
<div class="row">
<div class="col-xs-12">
<div class="small ind-comparative-selector"><%- indicator.percentageOnTime %>%</div>
<div class="small ind-comparative-selector"><%- indicator.percentageOnTimeToShow %></div>
</div>
</div>
</div>
@@ -167,7 +167,8 @@
<div class="red sind-cost-number-selector">{$unitCost} <%- indicator.inefficiencyCostToShow %></div>
<div class="small grey sind-cost-selector ellipsis"></div>
</div>
<div class="col-xs-6" id="specialIndicatorGraph" style="width:540px;height:300px;"></div>
<div class="col-xs-6" id="specialIndicatorGraph" style="width:540px;height:300px;">
</div>
</div>
<div class="clearfix"></div>
</div>
@@ -204,7 +205,7 @@
</script>
<script type="text/template" class="specialIndicatorSecondViewDetailUei">
<div class="process-div well hideme detail-button-selector" data-gs-no-resize="true"
<div class="process-div well hideme detail-button-selector-uei" data-gs-no-resize="true"
id="detailData-<%- detailData.uid %>"
data-indicator-id="<%- detailData.indicatorId %>"
data-detail-id="<%- detailData.uid %>">
@@ -233,7 +234,7 @@
</script>
<script type="text/template" class="specialIndicatorSecondViewDetailPei">
<div class="process-div well hideme detail-button-selector" data-gs-no-resize="true"
<div class="process-div well hideme detail-button-selector-pei" data-gs-no-resize="true"
id="detailData-<%- detailData.uid %>"
data-indicator-id="<%- detailData.indicatorId %>"
data-detail-id="<%- detailData.uid %>">
@@ -323,18 +324,20 @@
<li class="ind-title-selector"></li>
</ol>
</div>
<div class="text-center huge" style="margin:0 auto; width:98%;">
<div class="col-xs-4" style="width:auto;">
<div class="status-graph-title-low">{translate label="ID_OVERDUE"}:</div>
<div id="graph1" style="width:400px; height:300px;"></div>
</div>
<div class="col-xs-4" style="width:auto;">
<div class="status-graph-title-medium">{translate label="ID_AT_RISK"}:</div>
<div id="graph2" style="width:400px; height:300px;"></div>
</div>
<div class="col-xs-4" style="width:auto;">
<div class="status-graph-title-high">{translate label="ID_ON_TIME"}:</div>
<div id="graph3" style="width:400px; height:300px;"></div>
<div class="text-center huge" style="margin:0 auto; width:100%; text-align:center;">
<div class="row" style="width:auto; margin:0 auto; display:inline-block;">
<div class="col-xs-4" style="width:auto;">
<div class="status-graph-title-low">{translate label="ID_OVERDUE"}:</div>
<div id="graph1" style="width:380px; height:300px;"></div>
</div>
<div class="col-xs-4" style="width:auto;">
<div class="status-graph-title-medium">{translate label="ID_AT_RISK"}:</div>
<div id="graph2" style="width:380px; height:300px;"></div>
</div>
<div class="col-xs-4" style="width:auto;">
<div class="status-graph-title-high">{translate label="ID_ON_TIME"}:</div>
<div id="graph3" style="width:380px; height:300px;"></div>
</div>
</div>
</div>
<div class="clearfix"></div>
@@ -436,7 +439,7 @@
<div>
<center><h3></h3></center>
</div>
<div>
<div id="sortby">
{translate label="ID_SORT_BY"} {translate label="ID_COSTS"} : &nbsp; <a id="sortListButton" class="fa fa-chevron-up fa-1x" style="color:#000;" href="#"></a>
</div>
</div>
@@ -453,3 +456,5 @@
</body>
</html>

View File

@@ -616,9 +616,11 @@ table.dataTable thead .sorting:after {
margin-top:10px;
}
.panel-red .panel-heading, .panel-low .panel-heading{
/*panel red for color must be white
* .panel-red .panel-heading, .panel-low .panel-heading{
color:rgba(0,0,0,0.4) !important;
}
*/
.panel-high .progress-bar{
background: #fcb322;