/*+***********************************************************************************
* 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.
*************************************************************************************/
Settings_Vtiger_Edit_Js("Settings_Workflows_Edit_Js",{
instance : {}
},{
currentInstance : false,
workFlowsContainer : false,
init : function() {
this.initiate();
},
/**
* Function to get the container which holds all the workflow elements
* @return jQuery object
*/
getContainer : function() {
return this.workFlowsContainer;
},
/**
* Function to set the reports container
* @params : element - which represents the workflow container
* @return : current instance
*/
setContainer : function(element) {
this.workFlowsContainer = element;
return this;
},
/*
* Function to return the instance based on the step of the Workflow
*/
getInstance : function(step) {
if(step in Settings_Workflows_Edit_Js.instance ){
return Settings_Workflows_Edit_Js.instance[step];
} else {
var moduleClassName = 'Settings_Workflows_Edit'+step+'_Js' ;
Settings_Workflows_Edit_Js.instance[step] = new window[moduleClassName]();
return Settings_Workflows_Edit_Js.instance[step]
}
},
/*
* Function to get the value of the step
* returns 1 or 2 or 3
*/
getStepValue : function(){
var container = this.currentInstance.getContainer();
return jQuery('.step',container).val();
},
/*
* Function to initiate the step 1 instance
*/
initiate : function(container){
if(typeof container == 'undefined') {
container = jQuery('.workFlowContents');
}
if(container.is('.workFlowContents')) {
this.setContainer(container);
}else{
this.setContainer(jQuery('.workFlowContents',container));
}
this.initiateStep('1');
this.currentInstance.registerEvents();
},
/*
* Function to initiate all the operations for a step
* @params step value
*/
initiateStep : function(stepVal) {
var step = 'step'+stepVal;
this.activateHeader(step);
var currentInstance = this.getInstance(stepVal);
this.currentInstance = currentInstance;
},
/*
* Function to activate the header based on the class
* @params class name
*/
activateHeader : function(step) {
var headersContainer = jQuery('.crumbs ');
headersContainer.find('.active').removeClass('active');
jQuery('#'+step,headersContainer).addClass('active');
},
/*
* Function to register the click event for next button
*/
registerFormSubmitEvent : function(form) {
var thisInstance = this;
if(jQuery.isFunction(thisInstance.currentInstance.submit)){
form.on('submit',function(e){
var form = jQuery(e.currentTarget);
var specialValidation = true;
if(jQuery.isFunction(thisInstance.currentInstance.isFormValidate)){
var specialValidation = thisInstance.currentInstance.isFormValidate();
}
if ( form.validationEngine('validate') && specialValidation) {
thisInstance.currentInstance.submit().then(function(data){
thisInstance.getContainer().append(data);
var stepVal = thisInstance.getStepValue();
var nextStepVal = parseInt(stepVal) + 1;
thisInstance.initiateStep(nextStepVal);
thisInstance.currentInstance.initialize();
var container = thisInstance.currentInstance.getContainer();
thisInstance.registerFormSubmitEvent(container);
thisInstance.currentInstance.registerEvents();
});
}
e.preventDefault();
})
}
},
back : function(){
var step = this.getStepValue();
var prevStep = parseInt(step) - 1;
this.currentInstance.initialize();
var container = this.currentInstance.getContainer();
var workflowRecordElement = jQuery('[name="record"]',container);
var workFlowId = workflowRecordElement.val();
container.remove();
this.initiateStep(prevStep);
var currentContainer = this.currentInstance.getContainer();
currentContainer.show();
jQuery('[name="record"]',currentContainer).val(workFlowId);
var modulesList = jQuery('#moduleName',currentContainer);
if(modulesList.length > 0 && workFlowId != '') {
modulesList.attr('disabled','disabled').trigger('liszt:updated');
}
},
getPopUp : function(container) {
var thisInstance = this;
if(typeof container == 'undefined') {
container = thisInstance.getContainer();
}
container.on('click','.getPopupUi',function(e) {
var fieldValueElement = jQuery(e.currentTarget);
var fieldValue = fieldValueElement.val();
var fieldUiHolder = fieldValueElement.closest('.fieldUiHolder');
var valueType = fieldUiHolder.find('[name="valuetype"]').val();
if(valueType == '') {
valueType = 'rawtext';
}
var conditionsContainer = fieldValueElement.closest('.conditionsContainer');
var conditionRow = fieldValueElement.closest('.conditionRow');
var clonedPopupUi = conditionsContainer.find('.popupUi').clone(true,true).removeClass('popupUi').addClass('clonedPopupUi')
clonedPopupUi.find('select').addClass('chzn-select');
clonedPopupUi.find('.fieldValue').val(fieldValue);
if(fieldValueElement.hasClass('date')){
clonedPopupUi.find('.textType').find('option[value="rawtext"]').attr('data-ui','input');
var dataFormat = fieldValueElement.data('date-format');
if(valueType == 'rawtext') {
var value = fieldValueElement.val();
} else {
value = '';
}
var clonedDateElement = ''
clonedPopupUi.find('.fieldValueContainer').prepend(clonedDateElement);
} else if(fieldValueElement.hasClass('time')) {
clonedPopupUi.find('.textType').find('option[value="rawtext"]').attr('data-ui','input');
if(valueType == 'rawtext') {
var value = fieldValueElement.val();
} else {
value = '';
}
var clonedTimeElement = ''
clonedPopupUi.find('.fieldValueContainer').prepend(clonedTimeElement);
} else if(fieldValueElement.hasClass('boolean')) {
clonedPopupUi.find('.textType').find('option[value="rawtext"]').attr('data-ui','input');
if(valueType == 'rawtext') {
var value = fieldValueElement.val();
} else {
value = '';
}
var clonedBooleanElement = '';
clonedPopupUi.find('.fieldValueContainer').prepend(clonedBooleanElement);
var fieldValue = clonedPopupUi.find('.fieldValueContainer input').val();
if(value == 'true:boolean' || value == '') {
clonedPopupUi.find('.fieldValueContainer input').attr('checked', 'checked');
} else {
clonedPopupUi.find('.fieldValueContainer input').removeAttr('checked');
}
}
var callBackFunction = function(data) {
data.find('.clonedPopupUi').removeClass('hide');
var moduleNameElement = conditionRow.find('[name="modulename"]');
if(moduleNameElement.length > 0){
var moduleName = moduleNameElement.val();
data.find('.useFieldElement').addClass('hide');
data.find('[name="'+moduleName+'"]').removeClass('hide');
}
app.changeSelectElementView(data);
app.registerEventForDatePickerFields(data);
app.registerEventForTimeFields(data);
thisInstance.postShowModalAction(data,valueType);
thisInstance.registerChangeFieldEvent(data);
thisInstance.registerSelectOptionEvent(data);
thisInstance.registerPopUpSaveEvent(data,fieldUiHolder);
thisInstance.registerRemoveModalEvent(data);
data.find('.fieldValue').filter(':visible').trigger('focus');
}
conditionsContainer.find('.clonedPopUp').html(clonedPopupUi);
jQuery('.clonedPopupUi').on('shown', function () {
if(typeof callBackFunction == 'function'){
callBackFunction(jQuery('.clonedPopupUi',conditionsContainer));
}
});
jQuery('.clonedPopUp',conditionsContainer).find('.clonedPopupUi').modal();
});
},
registerRemoveModalEvent : function(data) {
data.on('click','.closeModal',function(e) {
data.modal('hide');
});
},
registerPopUpSaveEvent : function(data,fieldUiHolder) {
jQuery('[name="saveButton"]',data).on('click',function(e){
var valueType = jQuery('.textType',data).val();
fieldUiHolder.find('[name="valuetype"]').val(valueType);
var fieldValueElement = fieldUiHolder.find('.getPopupUi');
if(valueType != 'rawtext'){
fieldValueElement.removeAttr('data-validation-engine');
fieldValueElement.removeClass('validate[funcCall[Vtiger_Base_Validator_Js.invokeValidation]]');
}else{
fieldValueElement.addClass('validate[funcCall[Vtiger_Base_Validator_Js.invokeValidation]]');
fieldValueElement.attr('data-validation-engine','validate[funcCall[Vtiger_Base_Validator_Js.invokeValidation]]');
}
var fieldType = data.find('.fieldValue').filter(':visible').attr('type');
var fieldValue = data.find('.fieldValue').filter(':visible').val();
//For checkbox field type, handling fieldValue
if(fieldType == 'checkbox'){
if(data.find('.fieldValue').filter(':visible').is(':checked')) {
fieldValue = 'true:boolean';
} else {
fieldValue = 'false:boolean';
}
}
fieldValueElement.val(fieldValue);
data.modal('hide');
fieldValueElement.validationEngine('hide');
});
},
registerSelectOptionEvent : function(data) {
jQuery('.useField,.useFunction',data).on('change',function(e){
var currentElement = jQuery(e.currentTarget);
var newValue = currentElement.val();
var oldValue = data.find('.fieldValue').filter(':visible').val();
if(currentElement.hasClass('useField')){
if(oldValue != ''){
var concatenatedValue = oldValue+' '+newValue;
} else {
concatenatedValue = newValue;
}
} else {
concatenatedValue = oldValue+newValue;
}
data.find('.fieldValue').val(concatenatedValue);
currentElement.val('').trigger('liszt:updated');
});
},
registerChangeFieldEvent : function(data) {
jQuery('.textType',data).on('change',function(e){
var valueType = jQuery(e.currentTarget).val();
var useFieldContainer = jQuery('.useFieldContainer',data);
var useFunctionContainer = jQuery('.useFunctionContainer',data);
var uiType = jQuery(e.currentTarget).find('option:selected').data('ui');
jQuery('.fieldValue',data).hide();
jQuery('[data-'+uiType+']',data).show();
if(valueType == 'fieldname') {
useFieldContainer.removeClass('hide');
useFunctionContainer.addClass('hide');
} else if(valueType == 'expression') {
useFieldContainer.removeClass('hide');
useFunctionContainer.removeClass('hide');
} else {
useFieldContainer.addClass('hide');
useFunctionContainer.addClass('hide');
}
jQuery('.helpmessagebox',data).addClass('hide');
jQuery('#'+valueType+'_help',data).removeClass('hide');
data.find('.fieldValue').val('');
});
},
postShowModalAction : function(data,valueType) {
if(valueType == 'fieldname') {
jQuery('.useFieldContainer',data).removeClass('hide');
jQuery('.textType',data).val(valueType).trigger('liszt:updated');
} else if(valueType == 'expression') {
jQuery('.useFieldContainer',data).removeClass('hide');
jQuery('.useFunctionContainer',data).removeClass('hide');
jQuery('.textType',data).val(valueType).trigger('liszt:updated');
}
jQuery('#'+valueType+'_help',data).removeClass('hide');
var uiType = jQuery('.textType',data).find('option:selected').data('ui');
jQuery('.fieldValue',data).hide();
jQuery('[data-'+uiType+']',data).show();
},
/*
* Function to register the click event for back step
*/
registerBackStepClickEvent : function(){
var thisInstance = this;
var container = this.getContainer();
container.on('click','.backStep',function(e){
thisInstance.back();
});
},
registerEvents : function(){
var form = this.currentInstance.getContainer();
this.registerFormSubmitEvent(form);
this.registerBackStepClickEvent();
}
});