/*+***********************************************************************************
* 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.
*************************************************************************************/
jQuery.Class("Vtiger_RelatedList_Js",{},{
selectedRelatedTabElement : false,
parentRecordId : false,
parentModuleName : false,
relatedModulename : false,
relatedTabsContainer : false,
detailViewContainer : false,
relatedContentContainer : false,
setSelectedTabElement : function(tabElement) {
this.selectedRelatedTabElement = tabElement;
},
getSelectedTabElement : function(){
return this.selectedRelatedTabElement;
},
getParentId : function(){
return this.parentRecordId;
},
loadRelatedList : function(params){
var aDeferred = jQuery.Deferred();
var thisInstance = this;
if(typeof this.relatedModulename== "undefined" || this.relatedModulename.length <= 0 ) {
return;
}
var progressIndicatorElement = jQuery.progressIndicator({
'position' : 'html',
'blockInfo' : {
'enabled' : true
}
});
var completeParams = this.getCompleteParams();
jQuery.extend(completeParams,params);
AppConnector.request(completeParams).then(
function(responseData){
progressIndicatorElement.progressIndicator({
'mode' : 'hide'
})
thisInstance.relatedTabsContainer.find('li').removeClass('active');
thisInstance.selectedRelatedTabElement.addClass('active');
thisInstance.relatedContentContainer.html(responseData);
responseData = thisInstance.relatedContentContainer.html();
//thisInstance.triggerDisplayTypeEvent();
Vtiger_Helper_Js.showHorizontalTopScrollBar();
jQuery('.pageNumbers',thisInstance.relatedContentContainer).tooltip();
aDeferred.resolve(responseData);
jQuery('input[name="currentPageNum"]', thisInstance.relatedContentContainer).val(completeParams.page);
// Let listeners know about page state change.
app.notifyPostAjaxReady();
},
function(textStatus, errorThrown){
aDeferred.reject(textStatus, errorThrown);
}
);
return aDeferred.promise();
},
triggerDisplayTypeEvent : function() {
var widthType = app.cacheGet('widthType', 'narrowWidthType');
if(widthType) {
var elements = jQuery('.listViewEntriesTable').find('td,th');
elements.attr('class', widthType);
}
},
showSelectRelationPopup : function(){
var aDeferred = jQuery.Deferred();
var thisInstance = this;
var popupInstance = Vtiger_Popup_Js.getInstance();
popupInstance.show(this.getPopupParams(), function(responseString){
var responseData = JSON.parse(responseString);
var relatedIdList = Object.keys(responseData);
thisInstance.addRelations(relatedIdList).then(
function(data){
var relatedCurrentPage = thisInstance.getCurrentPageNum();
var params = {'page':relatedCurrentPage};
thisInstance.loadRelatedList(params).then(function(data){
aDeferred.resolve(data);
});
}
);
}
);
return aDeferred.promise();
},
addRelations : function(idList){
var aDeferred = jQuery.Deferred();
var sourceRecordId = this.parentRecordId;
var sourceModuleName = this.parentModuleName;
var relatedModuleName = this.relatedModulename;
var params = {};
params['mode'] = "addRelation";
params['module'] = sourceModuleName;
params['action'] = 'RelationAjax';
params['related_module'] = relatedModuleName;
params['src_record'] = sourceRecordId;
params['related_record_list'] = JSON.stringify(idList);
AppConnector.request(params).then(
function(responseData){
aDeferred.resolve(responseData);
},
function(textStatus, errorThrown){
aDeferred.reject(textStatus, errorThrown);
}
);
return aDeferred.promise();
},
getPopupParams : function(){
var parameters = {};
var parameters = {
'module' : this.relatedModulename,
'src_module' : this.parentModuleName,
'src_record' : this.parentRecordId,
'multi_select' : true
}
return parameters;
},
deleteRelation : function(relatedIdList) {
var aDeferred = jQuery.Deferred();
var params = {};
params['mode'] = "deleteRelation";
params['module'] = this.parentModuleName;
params['action'] = 'RelationAjax';
params['related_module'] = this.relatedModulename;
params['src_record'] = this.parentRecordId;
params['related_record_list'] = JSON.stringify(relatedIdList);
AppConnector.request(params).then(
function(responseData){
aDeferred.resolve(responseData);
},
function(textStatus, errorThrown){
aDeferred.reject(textStatus, errorThrown);
}
);
return aDeferred.promise();
},
getCurrentPageNum : function() {
return jQuery('input[name="currentPageNum"]',this.relatedContentContainer).val();
},
setCurrentPageNumber : function(pageNumber){
jQuery('input[name="currentPageNum"]').val(pageNumber);
},
/**
* Function to get Order by
*/
getOrderBy : function(){
return jQuery('#orderBy').val();
},
/**
* Function to get Sort Order
*/
getSortOrder : function(){
return jQuery("#sortOrder").val();
},
getCompleteParams : function(){
var params = {};
params['view'] = "Detail";
params['module'] = this.parentModuleName;
params['record'] = this.getParentId(),
params['relatedModule'] = this.relatedModulename,
params['sortorder'] = this.getSortOrder(),
params['orderby'] = this.getOrderBy(),
params['page'] = this.getCurrentPageNum();
params['mode'] = "showRelatedList"
return params;
},
/**
* Function to handle Sort
*/
sortHandler : function(headerElement){
var aDeferred = jQuery.Deferred();
var fieldName = headerElement.data('fieldname');
var sortOrderVal = headerElement.data('nextsortorderval');
var sortingParams = {
"orderby" : fieldName,
"sortorder" : sortOrderVal,
"tab_label" : this.selectedRelatedTabElement.data('label-key')
}
this.loadRelatedList(sortingParams).then(
function(data){
aDeferred.resolve(data);
},
function(textStatus, errorThrown){
aDeferred.reject(textStatus, errorThrown);
}
);
return aDeferred.promise();
},
/**
* Function to handle next page navigation
*/
nextPageHandler : function(){
var aDeferred = jQuery.Deferred();
var thisInstance = this;
var pageLimit = jQuery('#pageLimit').val();
var noOfEntries = jQuery('#noOfEntries').val();
if(noOfEntries == pageLimit){
var pageNumber = this.getCurrentPageNum();
var nextPage = parseInt(pageNumber) + 1;
var nextPageParams = {
'page' : nextPage
}
this.loadRelatedList(nextPageParams).then(
function(data){
thisInstance.setCurrentPageNumber(nextPage);
aDeferred.resolve(data);
},
function(textStatus, errorThrown){
aDeferred.reject(textStatus, errorThrown);
}
);
}
return aDeferred.promise();
},
/**
* Function to handle next page navigation
*/
previousPageHandler : function(){
var aDeferred = jQuery.Deferred();
var thisInstance = this;
var aDeferred = jQuery.Deferred();
var pageNumber = this.getCurrentPageNum();
if(pageNumber > 1){
var previousPage = parseInt(pageNumber) - 1;
var previousPageParams = {
'page' : previousPage
}
this.loadRelatedList(previousPageParams).then(
function(data){
thisInstance.setCurrentPageNumber(previousPage);
aDeferred.resolve(data);
},
function(textStatus, errorThrown){
aDeferred.reject(textStatus, errorThrown);
}
);
}
return aDeferred.promise();
},
/**
* Function to handle page jump in related list
*/
pageJumpHandler : function(e){
var aDeferred = jQuery.Deferred();
var thisInstance = this;
if(e.which == 13){
var element = jQuery(e.currentTarget);
var response = Vtiger_WholeNumberGreaterThanZero_Validator_Js.invokeValidation(element);
if(typeof response != "undefined"){
element.validationEngine('showPrompt',response,'',"topLeft",true);
e.preventDefault();
} else {
element.validationEngine('hideAll');
var jumpToPage = parseInt(element.val());
var totalPages = parseInt(jQuery('#totalPageCount').text());
if(jumpToPage > totalPages){
var error = app.vtranslate('JS_PAGE_NOT_EXIST');
element.validationEngine('showPrompt',error,'',"topLeft",true);
}
var invalidFields = element.parent().find('.formError');
if(invalidFields.length < 1){
var currentPage = jQuery('input[name="currentPageNum"]').val();
if(jumpToPage == currentPage){
var message = app.vtranslate('JS_YOU_ARE_IN_PAGE_NUMBER')+" "+jumpToPage;
var params = {
text: message,
type: 'info'
};
Vtiger_Helper_Js.showMessage(params);
e.preventDefault();
return false;
}
var jumptoPageParams = {
'page' : jumpToPage
}
this.loadRelatedList(jumptoPageParams).then(
function(data){
thisInstance.setCurrentPageNumber(jumpToPage);
aDeferred.resolve(data);
},
function(textStatus, errorThrown){
aDeferred.reject(textStatus, errorThrown);
}
);
} else {
e.preventDefault();
}
}
}
return aDeferred.promise();
},
/**
* Function to add related record for the module
*/
addRelatedRecord : function(element , callback){
var aDeferred = jQuery.Deferred();
var thisInstance = this;
var referenceModuleName = this.relatedModulename;
var parentId = this.getParentId();
var parentModule = this.parentModuleName;
var quickCreateParams = {};
var relatedParams = {};
var relatedField = element.data('name');
var fullFormUrl = element.data('url');
relatedParams[relatedField] = parentId;
var eliminatedKeys = new Array('view', 'module', 'mode', 'action');
var preQuickCreateSave = function(data){
var index,queryParam,queryParamComponents;
//To handle switch to task tab when click on add task from related list of activities
//As this is leading to events tab intially even clicked on add task
if(typeof fullFormUrl != 'undefined' && fullFormUrl.indexOf('?')!== -1) {
var urlSplit = fullFormUrl.split('?');
var queryString = urlSplit[1];
var queryParameters = queryString.split('&');
for(index=0; index').appendTo(data);
jQuery('').appendTo(data);
jQuery('').appendTo(data);
if(typeof relatedField != "undefined"){
var field = data.find('[name="'+relatedField+'"]');
//If their is no element with the relatedField name,we are adding hidden element with
//name as relatedField name,for saving of record with relation to parent record
if(field.length == 0){
jQuery('').appendTo(data);
}
}
for(index=0; index').appendTo(data);
}
}
if(typeof callback !== 'undefined') {
callback();
}
}
var postQuickCreateSave = function(data) {
thisInstance.loadRelatedList().then(
function(data){
aDeferred.resolve(data);
})
}
//If url contains params then seperate them and make them as relatedParams
if(typeof fullFormUrl != 'undefined' && fullFormUrl.indexOf('?')!== -1) {
var urlSplit = fullFormUrl.split('?');
var queryString = urlSplit[1];
var queryParameters = queryString.split('&');
for(var index=0; index