/*+***********************************************************************************
* 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.
*************************************************************************************/
Vtiger_Edit_Js("Calendar_Edit_Js",{
},{
relatedContactElement : false,
getRelatedContactElement : function() {
if(this.relatedContactElement == false) {
this.relatedContactElement = jQuery('#contact_id_display');
}
return this.relatedContactElement;
},
isEvents : function() {
var form = this.getForm();
var moduleName = form.find('[name="module"]').val();
if(moduleName == 'Events') {
return true;
}
return false;
},
getPopUpParams : function(container) {
var params = this._super(container);
var sourceFieldElement = jQuery('input[class="sourceField"]',container);
if(sourceFieldElement.attr('name') == 'contact_id') {
var form = this.getForm();
var parentIdElement = form.find('[name="parent_id"]');
if(parentIdElement.length > 0 && parentIdElement.val().length > 0) {
var closestContainer = parentIdElement.closest('td');
params['related_parent_id'] = parentIdElement.val();
params['related_parent_module'] = closestContainer.find('[name="popupReferenceModule"]').val();
}
}
return params;
},
registerReminderFieldCheckBox : function() {
this.getForm().find('input[name="set_reminder"]').on('change', function(e) {
var element = jQuery(e.currentTarget);
var closestDiv = element.closest('div').next();
if(element.is(':checked')) {
closestDiv.show();
} else {
closestDiv.hide();
}
})
},
/**
* Function which will register change event on recurrence field checkbox
*/
registerRecurrenceFieldCheckBox : function() {
var thisInstance = this;
thisInstance.getForm().find('input[name="recurringcheck"]').on('change', function(e) {
var element = jQuery(e.currentTarget);
var repeatUI = jQuery('#repeatUI');
if(element.is(':checked')) {
repeatUI.show();
} else {
repeatUI.hide();
}
});
},
/**
* Function which will register the change event for recurring type
*/
registerRecurringTypeChangeEvent : function() {
var thisInstance = this;
jQuery('#recurringType').on('change', function(e) {
var currentTarget = jQuery(e.currentTarget);
var recurringType = currentTarget.val();
thisInstance.changeRecurringTypesUIStyles(recurringType);
});
},
/**
* Function which will register the change event for repeatMonth radio buttons
*/
registerRepeatMonthActions : function() {
var thisInstance = this;
thisInstance.getForm().find('input[name="repeatMonth"]').on('change', function(e) {
//If repeatDay radio button is checked then only select2 elements will be enable
thisInstance.repeatMonthOptionsChangeHandling();
});
},
/**
* Function which will change the UI styles based on recurring type
* @params - recurringType - which recurringtype is selected
*/
changeRecurringTypesUIStyles : function(recurringType) {
var thisInstance = this;
if(recurringType == 'Daily' || recurringType == 'Yearly') {
jQuery('#repeatWeekUI').removeClass('show').addClass('hide');
jQuery('#repeatMonthUI').removeClass('show').addClass('hide');
} else if(recurringType == 'Weekly') {
jQuery('#repeatWeekUI').removeClass('hide').addClass('show');
jQuery('#repeatMonthUI').removeClass('show').addClass('hide');
} else if(recurringType == 'Monthly') {
jQuery('#repeatWeekUI').removeClass('show').addClass('hide');
jQuery('#repeatMonthUI').removeClass('hide').addClass('show');
}
},
/**
* This function will handle the change event for RepeatMonthOptions
*/
repeatMonthOptionsChangeHandling : function() {
//If repeatDay radio button is checked then only select2 elements will be enable
if(jQuery('#repeatDay').is(':checked')) {
jQuery('#repeatMonthDate').attr('disabled', true);
jQuery('#repeatMonthDayType').select2("enable");
jQuery('#repeatMonthDay').select2("enable");
} else {
jQuery('#repeatMonthDate').removeAttr('disabled');
jQuery('#repeatMonthDayType').select2("disable");
jQuery('#repeatMonthDay').select2("disable");
}
},
/**
* Function which will fill the already saved contacts on load
*/
fillRelatedContacts : function() {
var form = this.getForm();
var relatedContactValue = form.find('[name="relatedContactInfo"]').data('value');
for(var contactId in relatedContactValue) {
var info = relatedContactValue[contactId];
info.text = info.name;
relatedContactValue[contactId] = info;
}
this.getRelatedContactElement().select2('data',relatedContactValue);
},
addNewContactToRelatedList : function(newContactInfo){
var resultentData = new Array();
var element = jQuery('#contact_id_display');
var selectContainer = jQuery(element.data('select2').containerSelector);
var choices = selectContainer.find('.select2-search-choice');
choices.each(function(index,element){
resultentData.push(jQuery(element).data('select2-data'));
});
var select2FormatedResult = newContactInfo.data;
for(var i=0 ; i < select2FormatedResult.length; i++) {
var recordResult = select2FormatedResult[i];
recordResult.text = recordResult.name;
resultentData.push( recordResult );
}
jQuery('#contact_id_display').select2('data',resultentData);
},
referenceCreateHandler : function(container) {
var thisInstance = this;
var form = thisInstance.getForm();
var mode = jQuery(form).find('[name="module"]').val();
if(container.find('.sourceField').attr('name') != 'contact_id'){
this._super(container);
return;
}
var postQuickCreateSave = function(data) {
var params = {};
params.name = data.result._recordLabel;
params.id = data.result._recordId;
if(mode == "Calendar"){
thisInstance.setReferenceFieldValue(container, params);
return;
}
thisInstance.addNewContactToRelatedList({'data':[params]});
}
var referenceModuleName = this.getReferencedModuleName(container);
var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="'+ referenceModuleName +'"]');
if(quickCreateNode.length <= 0) {
Vtiger_Helper_Js.showPnotify(app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED'))
}
quickCreateNode.trigger('click',{'callbackFunction':postQuickCreateSave});
},
registerClearReferenceSelectionEvent : function(container) {
var thisInstance = this;
this._super(container);
this.getRelatedContactElement().closest('td').find('.clearReferenceSelection').on('click',function(e){
thisInstance.getRelatedContactElement().select2('data',[]);
});
},
/**
* Function to change the end time based on default call duration
*/
registerTimeStartChangeEvent : function(container) {
container.on('changeTime','input[name="time_start"]',function(e) {
var strtTimeElement = jQuery(e.currentTarget);
var endTimeElement = container.find('[name="time_end"]');
var dateStartElement = container.find('[name="date_start"]');
var endDateElement = container.find('[name="due_date"]');
if(endDateElement.data('userChangedTime') == true) {
return;
}
if(jQuery('[name="userChangedEndDateTime"]').val() == '1') {
return;
}
var startDate = dateStartElement.val();
var strtTime = strtTimeElement.val();
var result = Vtiger_Time_Validator_Js.invokeValidation(strtTimeElement);
if(result != true){
return;
}
var dateTime = startDate+' '+strtTime;
var dateFormat = container.find('[name="date_start"]').data('dateFormat');
var timeFormat = endTimeElement.data('format');
var date = Vtiger_Helper_Js.getDateInstance(dateTime,dateFormat);
var endDateInstance = Date.parse(date);
if(container.find('[name="activitytype"]').val() == 'Call'){
var defaulCallDuration = container.find('[name="defaultCallDuration"]').val();
endDateInstance.addMinutes(defaulCallDuration);
} else {
var defaultOtherEventDuration = container.find('[name="defaultOtherEventDuration"]').val();
endDateInstance.addMinutes(defaultOtherEventDuration);
}
var endDateString = app.getDateInVtigerFormat(dateFormat,endDateInstance);
if(timeFormat == 24){
var defaultTimeFormat = 'HH:mm';
} else {
defaultTimeFormat = 'hh:mm tt';
}
var endTimeString = endDateInstance.toString(defaultTimeFormat);
endDateElement.val(endDateString);
endTimeElement.val(endTimeString);
});
container.find('[name="date_start"]').on('change',function(e) {
var startDateElement = jQuery(e.currentTarget);
var result = Vtiger_Date_Validator_Js.invokeValidation(startDateElement);
if(result != true){
return;
}
var timeStartElement = startDateElement.closest('td.fieldValue').find('[name="time_start"]');
timeStartElement.trigger('changeTime');
});
container.find('input[name="time_start"]').on('focus',function(e){
var element = jQuery(e.currentTarget);
element.data('prevValue',element.val());
})
container.find('input[name="time_start"]').on('blur', function(e,data){
if(typeof data =='undefined'){
data = {};
}
if(typeof data.forceChange == 'undefined') {
data.forceChange = false;
}
var element = jQuery(e.currentTarget);
var currentValue = element.val();
var prevValue = element.data('prevValue');
if(currentValue != prevValue || data.forceChange) {
var list = element.data('timepicker-list');
if(!list) {
//To generate the list
element.timepicker('show');
element.timepicker('hide');
list = element.data('timepicker-list');
}
list.show();
e = jQuery.Event("keydown");
e.which = 13;
e.keyCode = 13;
element.trigger(e)
list.hide();
}
});
},
registerEndDateTimeChangeLogger : function(container) {
container.find('[name="time_end"]').on('changeTime',function(e) {
var timeElement = jQuery(e.currentTarget);
var result = Vtiger_Time_Validator_Js.invokeValidation(timeElement);
if(result != true){
return;
}
var timeDateElement = timeElement.closest('td.fieldValue').find('[name="due_date"]');
jQuery('[name="userChangedEndDateTime"]').val('1');
timeDateElement.data('userChangedTime',true);
});
container.find('[name="due_date"]').on('change',function(e) {
var dueDateElement = jQuery(e.currentTarget);
var result = Vtiger_Date_Validator_Js.invokeValidation(dueDateElement);
if(result != true){
return;
}
jQuery('[name="userChangedEndDateTime"]').val('1');
dueDateElement.data('userChangedTime',true);
});
},
/**
* Function to change the Other event Duration
*/
registerActivityTypeChangeEvent : function(container) {
container.on('change','[name="activitytype"]',function(e) {
container.find('input[name="time_start"]').trigger('changeTime');
});
},
/**
* This function will register the submit event on form
*/
registerFormSubmitEvent : function() {
var thisInstance = this;
var form = this.getForm();
form.on('submit', function(e) {
var recurringCheck = form.find('input[name="recurringcheck"]').is(':checked');
//If the recurring check is not enabled then recurring type should be --None--
if(recurringCheck == false) {
jQuery('#recurringType').append(jQuery('')).val('--None--');
}
if(thisInstance.isEvents()) {
jQuery(' ').appendTo(form).val(thisInstance.getRelatedContactElement().val().split(',').join(';'));
form.find('[name="contact_id"]').attr('name','');
var inviteeIdsList = jQuery('#selectedUsers').val();
if(inviteeIdsList != null) {
inviteeIdsList = jQuery('#selectedUsers').val().join(';')
}
jQuery('').appendTo(form).val(inviteeIdsList);
}
})
},
registerRelatedContactSpecificEvents : function() {
var thisInstance = this;
var form = this.getForm();
form.find('[name="contact_id"]').on(Vtiger_Edit_Js.preReferencePopUpOpenEvent,function(e){
var form = thisInstance.getForm();
var parentIdElement = form.find('[name="parent_id"]');
var container = parentIdElement.closest('td');
var popupReferenceModule = jQuery('input[name="popupReferenceModule"]',container).val();
if(popupReferenceModule == 'Leads' && parentIdElement.val().length > 0) {
e.preventDefault();
Vtiger_Helper_Js.showPnotify(app.vtranslate('LBL_CANT_SELECT_CONTACT_FROM_LEADS'));
}
})
//If module is not events then we dont have to register events
if(!this.isEvents()) {
return;
}
this.getRelatedContactElement().select2({
minimumInputLength: 3,
ajax : {
'url' : 'index.php?module=Contacts&action=BasicAjax&search_module=Contacts',
'dataType' : 'json',
'data' : function(term,page){
var data = {};
data['search_value'] = term;
var parentIdElement = form.find('[name="parent_id"]');
if(parentIdElement.val().length > 0) {
var closestContainer = parentIdElement.closest('td');
data['parent_id'] = parentIdElement.val();
data['parent_module'] = closestContainer.find('[name="popupReferenceModule"]').val();
}
return data;
},
'results' : function(data){
data.results = data.result;
for(var index in data.results ) {
var resultData = data.result[index];
resultData.text = resultData.label;
}
return data
},
transport : function(params){
return jQuery.ajax(params);
}
},
multiple : true
});
//To add multiple selected contact from popup
form.find('[name="contact_id"]').on(Vtiger_Edit_Js.refrenceMultiSelectionEvent,function(e,result){
thisInstance.addNewContactToRelatedList(result);
});
this.fillRelatedContacts();
},
/**
* Function to get reference search params
*/
getReferenceSearchParams : function(element){
var tdElement = jQuery(element).closest('td');
var contactField = tdElement.find('[name="contact_id"]');
var params = {};
if(contactField.length > 0){
var form = this.getForm();
var parentIdElement = form.find('[name="parent_id"]');
if(parentIdElement.val().length > 0) {
var closestContainer = parentIdElement.closest('td');
params['parent_id'] = parentIdElement.val();
params['parent_module'] = closestContainer.find('[name="popupReferenceModule"]').val();
}
}
var searchModule = this.getReferencedModuleName(tdElement);
params.search_module = searchModule;
return params;
},
registerBasicEvents : function(container) {
this._super(container);
this.registerActivityTypeChangeEvent(container);
this.registerTimeStartChangeEvent(container);
this.registerEndDateTimeChangeLogger(container);
//Required to set the end time based on the default ActivityType selected
container.find('[name="activitytype"]').trigger('change');
},
registerEvents : function(){
var statusToProceed = this.proceedRegisterEvents();
if(!statusToProceed){
return;
}
this.registerReminderFieldCheckBox();
this.registerRecurrenceFieldCheckBox();
this.registerFormSubmitEvent();
this.repeatMonthOptionsChangeHandling();
this.registerRecurringTypeChangeEvent();
this.registerRepeatMonthActions();
this.registerRelatedContactSpecificEvents();
this._super();
}
});