Merged colosa/processmaker into master
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -78,7 +78,6 @@ ViewDashboardModel.prototype.getPositionIndicator = function(callBack) {
|
||||
"y" : originalObject.y,
|
||||
"width" : originalObject.width,
|
||||
"height" : originalObject.height
|
||||
|
||||
};
|
||||
graphData.push(map);
|
||||
});
|
||||
|
||||
@@ -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++;
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
801
workflow/engine/src/ProcessMaker/BusinessModel/ProcessMap.php
Normal file
801
workflow/engine/src/ProcessMaker/BusinessModel/ProcessMap.php
Normal file
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
@@ -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"} : <a id="sortListButton" class="fa fa-chevron-up fa-1x" style="color:#000;" href="#"></a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -453,3 +456,5 @@
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user