/*+**********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
************************************************************************************/
Reports_Detail_Js("Reports_ChartDetail_Js",{
/**
* Function used to display message when there is no data from the server
*/
displayNoDataMessage : function() {
$('#chartcontent').html('
'+app.vtranslate('JS_NO_CHART_DATA_AVAILABLE')+'
').css(
{'text-align':'center', 'position':'relative', 'top':'100px'});
},
/**
* Function returns if there is no data from the server
*/
isEmptyData : function() {
var jsonData = jQuery('input[name=data]').val();
var data = JSON.parse(jsonData);
var values = data['values'];
if(jsonData == '' || values == '') {
return true;
}
return false;
}
},{
/**
* Function returns instance of the chart type
*/
getInstance : function() {
var chartType = jQuery('input[name=charttype]').val();
var chartClassName = chartType.toCamelCase();
var chartClass = window["Report_"+chartClassName + "_Js"];
var instance = false;
if(typeof chartClass != 'undefined') {
instance = new chartClass();
instance.postInitializeCalls();
}
return instance;
},
registerSaveOrGenerateReportEvent : function(){
var thisInstance = this;
jQuery('.generateReport').on('click',function(e){
if(!jQuery('#chartDetailForm').validationEngine('validate')) {
e.preventDefault();
return false;
}
var advFilterCondition = thisInstance.calculateValues();
var recordId = thisInstance.getRecordId();
var currentMode = jQuery(e.currentTarget).data('mode');
var postData = {
'advanced_filter': advFilterCondition,
'record' : recordId,
'view' : "ChartSaveAjax",
'module' : app.getModuleName(),
'mode' : currentMode,
'charttype' : jQuery('input[name=charttype]').val(),
'groupbyfield' : jQuery('#groupbyfield').val(),
'datafields' : jQuery('#datafields').val()
};
var reportChartContents = thisInstance.getContentHolder().find('#reportContentsDiv');
var element = jQuery('');
element.progressIndicator({
'position':'html',
'blockInfo': {
'enabled' : true,
'elementToBlock' : reportChartContents
}
});
e.preventDefault();
AppConnector.request(postData).then(
function(data){
element.progressIndicator({'mode' : 'hide'});
reportChartContents.html(data);
thisInstance.registerEventForChartGeneration();
}
);
});
},
registerEventForChartGeneration : function() {
var thisInstance = this;
try {
thisInstance.getInstance(); // instantiate the object and calls init function
jQuery('#chartcontent').trigger(Vtiger_Widget_Js.widgetPostLoadEvent);
} catch(error) {
console.log("error");
console.log(error);
Reports_ChartDetail_Js.displayNoDataMessage();
return;
}
},
registerEventForModifyCondition : function() {
jQuery('button[name=modify_condition]').on('click', function() {
var filter = jQuery('#filterContainer');
var icon = jQuery(this).find('i');
var classValue = icon.attr('class');
if(classValue == 'icon-chevron-right') {
icon.removeClass('icon-chevron-right').addClass('icon-chevron-down');
filter.show('slow');
} else {
icon.removeClass('icon-chevron-down').addClass('icon-chevron-right');
filter.hide('slow');
}
return false;
});
},
registerEvents : function(){
this._super();
this.registerEventForModifyCondition();
this.registerEventForChartGeneration();
Reports_ChartEdit3_Js.registerFieldForChosen();
Reports_ChartEdit3_Js.initSelectValues();
jQuery('#chartDetailForm').validationEngine(app.validationEngineOptions);
}
});
Vtiger_Pie_Widget_Js('Report_Piechart_Js',{},{
postInitializeCalls : function() {
var clickThrough = jQuery('input[name=clickthrough]').val();
if(clickThrough != '') {
var thisInstance = this;
this.getContainer().on("jqplotDataClick", function(evt, seriesIndex, pointIndex, neighbor) {
var linkUrl = thisInstance.data['links'][pointIndex];
if(linkUrl) window.location.href = linkUrl;
});
this.getContainer().on("jqplotDataHighlight", function(evt, seriesIndex, pointIndex, neighbor) {
$('.jqplot-event-canvas').css( 'cursor', 'pointer' );
});
this.getContainer().on("jqplotDataUnhighlight", function(evt, seriesIndex, pointIndex, neighbor) {
$('.jqplot-event-canvas').css( 'cursor', 'auto' );
});
}
},
postLoadWidget : function() {
if(!Reports_ChartDetail_Js.isEmptyData()) {
this.loadChart();
}else{
this.positionNoDataMsg();
}
},
positionNoDataMsg : function() {
Reports_ChartDetail_Js.displayNoDataMessage();
},
getPlotContainer : function(useCache) {
if(typeof useCache == 'undefined'){
useCache = false;
}
if(this.plotContainer == false || !useCache) {
var container = this.getContainer();
this.plotContainer = jQuery('#chartcontent');
}
return this.plotContainer;
},
init : function() {
this._super(jQuery('#reportContentsDiv'));
},
generateData : function() {
if(Reports_ChartDetail_Js.isEmptyData()) {
Reports_ChartDetail_Js.displayNoDataMessage();
return false;
}
var jsonData = jQuery('input[name=data]').val();
var data = this.data = JSON.parse(jsonData);
var values = data['values'];
var chartData = [];
for(var i in values) {
chartData[i] = [];
chartData[i].push(data['labels'][i]);
chartData[i].push(values[i]);
}
return {'chartData':chartData, 'labels':data['labels'], 'data_labels':data['data_labels'], 'title' : data['graph_label']};
}
});
Vtiger_Barchat_Widget_Js('Report_Verticalbarchart_Js', {},{
postInitializeCalls : function() {
jQuery('table.jqplot-table-legend').css('width','95px');
var thisInstance = this;
this.getContainer().on('jqplotDataClick', function(ev, gridpos, datapos, neighbor, plot) {
var linkUrl = thisInstance.data['links'][neighbor[0]-1];
if(linkUrl) window.location.href = linkUrl;
});
this.getContainer().on("jqplotDataHighlight", function(evt, seriesIndex, pointIndex, neighbor) {
$('.jqplot-event-canvas').css( 'cursor', 'pointer' );
});
this.getContainer().on("jqplotDataUnhighlight", function(evt, seriesIndex, pointIndex, neighbor) {
$('.jqplot-event-canvas').css( 'cursor', 'auto' );
});
},
postLoadWidget : function() {
if(!Reports_ChartDetail_Js.isEmptyData()) {
this.loadChart();
}else{
this.positionNoDataMsg();
}
this.postInitializeCalls();
},
positionNoDataMsg : function() {
Reports_ChartDetail_Js.displayNoDataMessage();
},
getPlotContainer : function(useCache) {
if(typeof useCache == 'undefined'){
useCache = false;
}
if(this.plotContainer == false || !useCache) {
var container = this.getContainer();
this.plotContainer = jQuery('#chartcontent');
}
return this.plotContainer;
},
init : function() {
this._super(jQuery('#reportContentsDiv'));
},
generateChartData : function() {
if(Reports_ChartDetail_Js.isEmptyData()) {
Reports_ChartDetail_Js.displayNoDataMessage();
return false;
}
var jsonData = jQuery('input[name=data]').val();
var data = this.data = JSON.parse(jsonData);
var values = data['values'];
var chartData = [];
var yMaxValue = 0;
if(data['type'] == 'singleBar') {
chartData[0] = [];
for(var i in values) {
var multiValue = values[i];
for(var j in multiValue) {
chartData[0].push(multiValue[j]);
if(multiValue[j] > yMaxValue) yMaxValue = multiValue[j];
}
}
} else {
chartData[0] = [];
chartData[1] = [];
chartData[2] = [];
for(var i in values) {
var multiValue = values[i];
var info = [];
for(var j in multiValue) {
chartData[j].push(multiValue[j]);
if(multiValue[j] > yMaxValue) yMaxValue = multiValue[j];
}
}
}
yMaxValue = yMaxValue + (yMaxValue*0.15);
return {'chartData':chartData,
'yMaxValue':yMaxValue,
'labels':data['labels'],
'data_labels':data['data_labels'],
'title' : data['graph_label']
};
}
});
Report_Verticalbarchart_Js('Report_Horizontalbarchart_Js', {},{
generateChartData : function() {
if(Reports_ChartDetail_Js.isEmptyData()) {
Reports_ChartDetail_Js.displayNoDataMessage();
return false;
}
var jsonData = jQuery('input[name=data]').val();
var data = this.data = JSON.parse(jsonData);
var values = data['values'];
var chartData = [];
var yMaxValue = 0;
if(data['type'] == 'singleBar') {
for(var i in values) {
var multiValue = values[i];
chartData[i] = [];
for(var j in multiValue) {
chartData[i].push(multiValue[j]);
chartData[i].push(parseInt(i)+1);
if(multiValue[j] > yMaxValue){
yMaxValue = multiValue[j];
}
}
}
chartData = [chartData];
} else {
chartData = [];
chartData[0] = [];
chartData[1] = [];
chartData[2] = [];
for(var i in values) {
var multiValue = values[i];
for(var j in multiValue) {
chartData[j][i] = [];
chartData[j][i].push(multiValue[j]);
chartData[j][i].push(parseInt(i)+1);
if(multiValue[j] > yMaxValue){
yMaxValue = multiValue[j];
}
}
}
}
yMaxValue = yMaxValue + (yMaxValue*0.15);
return {'chartData':chartData,
'yMaxValue':yMaxValue,
'labels':data['labels'],
'data_labels':data['data_labels'],
'title' : data['graph_label']
};
},
loadChart : function() {
var data = this.generateChartData();
var labels = data['labels'];
jQuery.jqplot('chartcontent', data['chartData'], {
title: data['title'],
animate: !$.jqplot.use_excanvas,
seriesDefaults: {
renderer:$.jqplot.BarRenderer,
showDataLabels: true,
pointLabels: { show: true, location: 'e', edgeTolerance: -15 },
shadowAngle: 135,
rendererOptions: {
barDirection: 'horizontal'
}
},
axes: {
yaxis: {
tickRenderer: jQuery.jqplot.CanvasAxisTickRenderer,
renderer: jQuery.jqplot.CategoryAxisRenderer,
ticks: labels,
tickOptions: {
angle: -45
}
}
},
legend: {
show: true,
location: 'e',
placement: 'outside',
showSwatch : true,
showLabels : true,
labels:data['data_labels']
}
});
jQuery('table.jqplot-table-legend').css('width','95px');
},
postInitializeCalls : function() {
var thisInstance = this;
this.getContainer().on("jqplotDataClick", function(ev, gridpos, datapos, neighbor, plot) {
var linkUrl = thisInstance.data['links'][neighbor[1]-1];
if(linkUrl) window.location.href = linkUrl;
});
this.getContainer().on("jqplotDataHighlight", function(evt, seriesIndex, pointIndex, neighbor) {
$('.jqplot-event-canvas').css( 'cursor', 'pointer' );
});
this.getContainer().on("jqplotDataUnhighlight", function(evt, seriesIndex, pointIndex, neighbor) {
$('.jqplot-event-canvas').css( 'cursor', 'auto' );
});
}
});
Report_Verticalbarchart_Js('Report_Linechart_Js', {},{
generateData : function() {
if(Reports_ChartDetail_Js.isEmptyData()) {
Reports_ChartDetail_Js.displayNoDataMessage();
return false;
}
var jsonData = jQuery('input[name=data]').val();
var data = this.data = JSON.parse(jsonData);
var values = data['values'];
var chartData = [];
var yMaxValue = 0;
chartData[1] = []
chartData[2] = []
chartData[0] = []
for(var i in values) {
var value = values[i];
for(var j in value) {
chartData[j].push(value[j]);
}
}
yMaxValue = yMaxValue + yMaxValue*0.15;
return {'chartData':chartData,
'yMaxValue':yMaxValue,
'labels':data['labels'],
'data_labels':data['data_labels'],
'title' : data['graph_label']
};
},
loadChart : function() {
var data = this.generateData();
var plot2 = $.jqplot('chartcontent', data['chartData'], {
title: data['title'],
legend:{
show:true,
labels:data['data_labels'],
location:'ne',
showSwatch : true,
showLabels : true,
placement: 'outside'
},
seriesDefaults: {
pointLabels: {
show: true
}
},
axes: {
xaxis: {
min:0,
pad: 1,
renderer: $.jqplot.CategoryAxisRenderer,
ticks:data['labels'],
tickOptions: {
formatString: '%b %#d'
}
}
},
cursor: {
show: true
}
});
jQuery('table.jqplot-table-legend').css('width','95px');
}
});