2070 lines
68 KiB
JavaScript
2070 lines
68 KiB
JavaScript
/*+***********************************************************************************
|
||
* 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.
|
||
*************************************************************************************/
|
||
var isFirstTime = true;
|
||
|
||
Vtiger.Class('Vtiger_Index_Js', {
|
||
files: [],
|
||
hideNC: true,
|
||
|
||
getInstance : function() {
|
||
return new Vtiger_Index_Js();
|
||
},
|
||
|
||
/**
|
||
* Function to show the content of a file in an iframe
|
||
* @param {type} e
|
||
* @param {type} recordId
|
||
* @returns {undefined}
|
||
*/
|
||
previewFile: function (e, recordId, attachmentId) {
|
||
e.stopPropagation();
|
||
if (recordId) {
|
||
var params = {
|
||
module: 'ModComments',
|
||
view: 'FilePreview',
|
||
record: recordId,
|
||
attachmentid: attachmentId
|
||
};
|
||
var modalParams = {
|
||
cb: function (modalContainer) {
|
||
modalContainer.find('.viewer').zoomer();
|
||
},
|
||
'ignoreScroll' : true
|
||
};
|
||
app.request.post({data: params}).then(function (err, res) {
|
||
app.helper.showModal(res, modalParams);
|
||
});
|
||
}
|
||
},
|
||
|
||
/**
|
||
* Function to show email preview in popup
|
||
*/
|
||
showEmailPreview : function(recordId, parentId) {
|
||
var popupInstance = Vtiger_Popup_Js.getInstance();
|
||
var params = {};
|
||
params['module'] = "Emails";
|
||
params['view'] = "ComposeEmail";
|
||
params['mode'] = "emailPreview";
|
||
params['record'] = recordId;
|
||
params['parentId'] = parentId;
|
||
params['relatedLoad'] = true;
|
||
|
||
var callback = function(data){
|
||
emailPreviewClass = app.getModuleSpecificViewClass('EmailPreview','Vtiger');
|
||
_controller = new window[emailPreviewClass]();
|
||
_controller.registerEventsForActionButtons();
|
||
var descriptionContent = data.find('#iframeDescription').val();
|
||
var frameElement = jQuery("#emailPreviewIframe")[0].contentWindow.document;
|
||
frameElement.open();
|
||
frameElement.close();
|
||
jQuery('#emailPreviewIframe').contents().find('html').html(descriptionContent);
|
||
jQuery("#emailPreviewIframe").height(jQuery('#emailPreviewIframe').contents().find('html').height());
|
||
jQuery('#emailPreviewIframe').contents().find('html').find('a').on('click', function(e) {
|
||
e.preventDefault();
|
||
var url = jQuery(e.currentTarget).attr('href');
|
||
window.open(url, '_blank');
|
||
});
|
||
}
|
||
popupInstance.showPopup(params,null,callback);
|
||
},
|
||
|
||
/**
|
||
* Function to show compose email popup based on number of
|
||
* email fields in given module,if email fields are more than
|
||
* one given option for user to select email for whom mail should
|
||
* be sent,or else straight away open compose email popup
|
||
* @params : accepts params object
|
||
*
|
||
* @cb: callback function to recieve the child window reference.
|
||
*/
|
||
|
||
showComposeEmailPopup : function(params, cb){
|
||
var currentModule = "Emails";
|
||
app.helper.showProgress();
|
||
app.helper.checkServerConfig(currentModule).then(function(data){
|
||
if(data == true){
|
||
app.request.post({data:params}).then(function(err,data){
|
||
if(err === null){
|
||
data = jQuery(data);
|
||
var form = data.find('#SendEmailFormStep1');
|
||
var emailFields = form.find('.emailField');
|
||
var length = emailFields.length;
|
||
var emailEditInstance = new Emails_MassEdit_Js();
|
||
|
||
var prefsNeedToUpdate = form.find('#prefsNeedToUpdate').val();
|
||
if(prefsNeedToUpdate && length > 1) {
|
||
app.helper.hideProgress();
|
||
app.helper.showModal(data);
|
||
emailEditInstance.registerEmailFieldSelectionEvent(cb);
|
||
return true;
|
||
}
|
||
|
||
if(length > 1) {
|
||
var saveRecipientPref = form.find('#saveRecipientPrefs').is(':checked');
|
||
if(saveRecipientPref) {
|
||
var params = form.serializeFormData();
|
||
emailEditInstance.showComposeEmailForm(params).then(function(response) {
|
||
jQuery(document).on('shown.bs.modal', function() {
|
||
if (typeof cb === 'function') cb(response);
|
||
});
|
||
});
|
||
}else {
|
||
app.helper.hideProgress();
|
||
app.helper.showModal(data);
|
||
emailEditInstance.registerEmailFieldSelectionEvent(cb);
|
||
}
|
||
}else{
|
||
emailFields.attr('checked','checked');
|
||
var params = form.serialize();
|
||
emailEditInstance.showComposeEmailForm(params).then(function(response) {
|
||
jQuery(document).on('shown.bs.modal', function() {
|
||
if (typeof cb === 'function') cb(response);
|
||
});
|
||
});
|
||
}
|
||
}
|
||
});
|
||
} else {
|
||
app.helper.showAlertBox({'message':app.vtranslate('JS_EMAIL_SERVER_CONFIGURATION')});
|
||
}
|
||
});
|
||
},
|
||
|
||
showRecipientPreferences: function (module) {
|
||
var params = {
|
||
module: module,
|
||
view: "RecipientPreferences",
|
||
};
|
||
|
||
var callback = function (data) {
|
||
var form = jQuery(data).find('#recipientsForm');
|
||
if (form.find('#multiEmailContainer').height() > 300) {
|
||
app.helper.showVerticalScroll(form.find('#multiEmailContainer'),{
|
||
setHeight: '300px',
|
||
autoHideScrollbar: false,
|
||
});
|
||
}
|
||
|
||
form.on('submit', function (e) {
|
||
e.preventDefault();
|
||
form.find('.savePreference').attr('disabled', true);
|
||
var params = form.serialize();
|
||
app.helper.hideModal();
|
||
app.helper.showProgress();
|
||
app.request.post({"data":params}).then(function (err,data) {
|
||
if (err == null) {
|
||
app.helper.hideProgress();
|
||
app.helper.showSuccessNotification({"message":''});
|
||
} else {
|
||
app.helper.showErrorNotification({"message":''});
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
app.helper.showProgress();
|
||
app.request.post({"data":params}).then(function (err,data) {
|
||
if(err == null){
|
||
app.helper.hideProgress();
|
||
app.helper.showModal(data,{"cb":callback});
|
||
}
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function to show record address in Google Map
|
||
* @param {type} e
|
||
* @returns {undefined}
|
||
*/
|
||
showMap : function(e) {
|
||
var currentElement = jQuery(e);
|
||
var params1 = {
|
||
'module' : 'Google',
|
||
'action' : 'MapAjax',
|
||
'mode' : 'getLocation',
|
||
'recordid' : currentElement.data('record'),
|
||
'source_module' : currentElement.data('module')
|
||
};
|
||
app.request.post({"data":params1}).then(function(error,response) {
|
||
var result = JSON.parse(response);
|
||
var address = result.address;
|
||
var location = jQuery.trim((address).replace(/\,/g," "));
|
||
if(location == '' || location == null) {
|
||
app.helper.showAlertNotification({message:app.vtranslate('Please add address information to view on map')});
|
||
return false;
|
||
} else {
|
||
var params = {
|
||
'module' : 'Google',
|
||
'view' : 'Map',
|
||
'mode' : 'showMap',
|
||
'viewtype' : 'detail',
|
||
'record' : currentElement.data('record'),
|
||
'source_module' : currentElement.data('module')
|
||
};
|
||
var popupInstance = Vtiger_Popup_Js.getInstance();
|
||
popupInstance.showPopup(params, '', function(data) {
|
||
var mapInstance = new Google_Map_Js();
|
||
mapInstance.showMap(data);
|
||
});
|
||
}
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function registers event for Calendar Reminder popups
|
||
*/
|
||
registerActivityReminder : function() {
|
||
var activityReminderInterval = app.getActivityReminderInterval();
|
||
if(activityReminderInterval != '') {
|
||
var cacheActivityReminder = app.storage.get('activityReminder', 0);
|
||
var currentTime = new Date().getTime()/1000;
|
||
var nextActivityReminderCheck = app.storage.get('nextActivityReminderCheckTime', 0);
|
||
//If activity Reminder Changed, nextActivityReminderCheck should reset
|
||
if(activityReminderInterval != cacheActivityReminder) {
|
||
nextActivityReminderCheck = 0;
|
||
}
|
||
if(currentTime >= nextActivityReminderCheck) {
|
||
Vtiger_Index_Js.requestReminder();
|
||
} else {
|
||
var nextInterval = nextActivityReminderCheck - currentTime;
|
||
setTimeout(function() {Vtiger_Index_Js.requestReminder()}, nextInterval*1000);
|
||
}
|
||
}
|
||
},
|
||
|
||
/**
|
||
* Function request for reminder popups
|
||
*/
|
||
requestReminder : function() {
|
||
var activityReminder = app.getActivityReminderInterval();
|
||
if(!activityReminder) {
|
||
return;
|
||
}
|
||
var currentTime = new Date().getTime()/1000;
|
||
//requestReminder function should call after activityreminder popup interval
|
||
setTimeout(function() {Vtiger_Index_Js.requestReminder()}, activityReminder*1000);
|
||
app.storage.set('activityReminder', activityReminder);
|
||
//setting next activity reminder check time
|
||
app.storage.set('nextActivityReminderCheckTime', currentTime + parseInt(activityReminder));
|
||
|
||
app.request.post({
|
||
'data' : {
|
||
'module' : 'Calendar',
|
||
'action' : 'ActivityReminder',
|
||
'mode' : 'getReminders'
|
||
}
|
||
}).then(function(e, res) {
|
||
//console.log(JSON.stringify(res));
|
||
//res = res.replace('{', '{');
|
||
if(res != null && !res.hasOwnProperty('result')) {
|
||
for(i=0; i< res.length; i++) {
|
||
var record = res[i];
|
||
if(typeof record == 'object') {
|
||
Vtiger_Index_Js.showReminderPopup(record);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function display the Reminder popup
|
||
*/
|
||
showReminderPopup : function(record) {
|
||
var notifyParams = {
|
||
'title' : record.activitytype + ' - ' +
|
||
'<a target="_blank" href="index.php?module=Calendar&view=Detail&record='+record.id+'">'+record.subject+'</a> '+
|
||
'<i id="reminder-postpone-'+record.id+'" title="'+app.vtranslate('JS_POSTPONE')+'" class="cursorPointer fa fa-clock-o"></i>',
|
||
'message' : '<div class="col-sm-12">'+
|
||
'<div class="row">'+
|
||
'<div class="col-sm-12 font13px">'+
|
||
app.vtranslate('JS_START_DATE_TIME') + ' : ' + record.date_start+
|
||
'</div>'+
|
||
'<div class="col-sm-12 font13px">'+
|
||
app.vtranslate('JS_END_DATE_TIME') + ' : ' + record.due_date+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div>'
|
||
};
|
||
var settings = {
|
||
'element' : 'body',
|
||
'type' : 'danger',
|
||
'delay' : 0
|
||
};
|
||
|
||
jQuery.notify(notifyParams, settings);
|
||
jQuery('#reminder-postpone-'+record.id).on('click', function(e) {
|
||
jQuery(e.currentTarget).closest('.notificationHeader').find('[data-notify="dismiss"]').trigger('click');
|
||
app.request.post({
|
||
'data' : {
|
||
'module' : 'Calendar',
|
||
'action' : 'ActivityReminder',
|
||
'mode' : 'postpone',
|
||
'record' : record.id
|
||
}
|
||
}).then(function(e,res) {});
|
||
});
|
||
jQuery('#reminder-postpone-'+record.id).closest('[data-notify="container"]').draggable({'containment' : 'body'});
|
||
}
|
||
|
||
}, {
|
||
_SearchIntiatedEventName : 'VT_SEARCH_INTIATED',
|
||
usernames : [],
|
||
userList : {},
|
||
autoFillElement : false,
|
||
|
||
init : function() {
|
||
this.addComponents();
|
||
},
|
||
|
||
addComponents : function() {
|
||
this.addComponent('Vtiger_BasicSearch_Js');
|
||
},
|
||
|
||
registerListEssentialsToggleEvent : function() {
|
||
jQuery('.main-container').on('click', '.essentials-toggle', function() {
|
||
jQuery('.sidebar-essentials').toggleClass('hide');
|
||
jQuery(".content-area").toggleClass("full-width");
|
||
var params = {
|
||
'module' : 'Users',
|
||
'action' : 'IndexAjax',
|
||
'mode' : 'toggleLeftPanel',
|
||
'showPanel' : +jQuery('.sidebar-essentials').hasClass('hide')
|
||
}
|
||
app.request.post({data: params});
|
||
if(jQuery('.sidebar-essentials').hasClass('hide')) {
|
||
jQuery('.essentials-toggle-marker').removeClass('fa-chevron-left')
|
||
.addClass('fa-chevron-right');
|
||
} else {
|
||
jQuery('.essentials-toggle-marker').removeClass('fa-chevron-right')
|
||
.addClass('fa-chevron-left');
|
||
}
|
||
app.event.trigger("Vtiger.Post.MenuToggle");
|
||
});
|
||
},
|
||
|
||
registerModuleQtips : function() {
|
||
jQuery('.module-qtip').qtip({
|
||
position: {
|
||
my: 'left center',
|
||
at: 'center right',
|
||
adjust: {
|
||
y: 1
|
||
}
|
||
},
|
||
style: {
|
||
classes: 'qtip-dark qtip-shadow module-name-tooltip'
|
||
},
|
||
show: {
|
||
delay: 500
|
||
}
|
||
});
|
||
},
|
||
|
||
registerEvents: function() {
|
||
this.registerMenuToggle();
|
||
this.registerGlobalSearch();
|
||
this.registerAppTriggerEvent();
|
||
this.registerModuleQtips();
|
||
this.registerListEssentialsToggleEvent();
|
||
this.registerAdvanceSeachIntiator();
|
||
this.registerQuickCreateEvent();
|
||
this.registerQuickCreateSubMenus();
|
||
this.registerPostQuickCreateEvent();
|
||
this.registerEventForTaskManagement();
|
||
this.registerFileChangeEvent();
|
||
this.registerMultiUpload();
|
||
this.registerHoverEventOnAttachment();
|
||
//this.addBodyScroll();
|
||
this.modulesMenuScrollbar();
|
||
this.modulesMenuClearIconTitle();
|
||
Vtiger_Index_Js.registerActivityReminder();
|
||
//reference preview event registeration
|
||
this.registerReferencePreviewEvent();
|
||
this.registerEventForPostSaveFail();
|
||
|
||
vtUtils.enableTooltips();
|
||
},
|
||
|
||
addBodyScroll: function () {
|
||
app.helper.showVerticalScroll(
|
||
$("body"),
|
||
{
|
||
setHeight: $(window).height() - 92,
|
||
theme: "inset-dark",
|
||
alwaysShowScrollbar: 2,
|
||
autoExpandScrollbar: true,
|
||
live: "on",
|
||
setTop: 0,
|
||
scrollInertia: 70,
|
||
mouseWheel:{ preventDefault: true }
|
||
|
||
}
|
||
);
|
||
},
|
||
registerEventForTaskManagement : function(){
|
||
var globalNav = jQuery('.global-nav');
|
||
globalNav.on("click",".taskManagement",function(e){
|
||
if(jQuery("#taskManagementContainer").length > 0){
|
||
app.helper.hidePageOverlay();
|
||
return false;
|
||
}
|
||
|
||
var params = {
|
||
'module' : 'Calendar',
|
||
'view' : 'TaskManagement',
|
||
'mode' : 'showManagementView'
|
||
}
|
||
app.helper.showProgress();
|
||
app.request.post({"data":params}).then(function(err,data){
|
||
if(err === null){
|
||
app.helper.loadPageOverlay(data,{'ignoreScroll' : true,'backdrop': 'static'}).then(function(){
|
||
app.helper.hideProgress();
|
||
$('#overlayPage').find('.data').css('height','100vh');
|
||
|
||
var taskManagementPageOffset = jQuery('.taskManagement').offset();
|
||
$('#overlayPage').find(".arrow").css("left",taskManagementPageOffset.left+13);
|
||
$('#overlayPage').find(".arrow").addClass("show");
|
||
|
||
vtUtils.showSelect2ElementView($('#overlayPage .data-header').find('select[name="assigned_user_id"]'),{placeholder:"User : All"});
|
||
vtUtils.showSelect2ElementView($('#overlayPage .data-header').find('select[name="taskstatus"]'),{placeholder:"Status : All"});
|
||
var js = new Vtiger_TaskManagement_Js();
|
||
js.registerEvents();
|
||
});
|
||
}else{
|
||
app.helper.showErrorNotification({"message":err});
|
||
}
|
||
});
|
||
});
|
||
},
|
||
|
||
registerPostQuickCreateEvent : function(){
|
||
var thisInstance = this;
|
||
|
||
app.event.on("post.QuickCreateForm.show",function(event,form){
|
||
form.find('#goToFullForm').on('click', function(e) {
|
||
window.onbeforeunload = true;
|
||
var form = jQuery(e.currentTarget).closest('form');
|
||
var editViewUrl = jQuery(e.currentTarget).data('editViewUrl');
|
||
if (typeof goToFullFormCallBack != "undefined") {
|
||
goToFullFormCallBack(form);
|
||
}
|
||
thisInstance.quickCreateGoToFullForm(form, editViewUrl);
|
||
});
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function to navigate from quickcreate to editView Fullform
|
||
* @param accepts form element as parameter
|
||
*/
|
||
quickCreateGoToFullForm: function(form, editViewUrl) {
|
||
var formData = form.serializeFormData();
|
||
//As formData contains information about both view and action removed action and directed to view
|
||
delete formData.module;
|
||
delete formData.action;
|
||
delete formData.picklistDependency;
|
||
var formDataUrl = jQuery.param(formData);
|
||
var completeUrl = editViewUrl + "&" + formDataUrl;
|
||
window.location.href = completeUrl;
|
||
},
|
||
|
||
registerQuickCreateSubMenus : function() {
|
||
jQuery("#quickCreateModules").on("click",".quickCreateModuleSubmenu",function(e){
|
||
e.preventDefault();
|
||
e.stopImmediatePropagation();
|
||
jQuery(e.currentTarget).closest('.dropdown').toggleClass('open');
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function to register Quick Create Event
|
||
* @returns {undefined}
|
||
*/
|
||
registerQuickCreateEvent : function (){
|
||
var thisInstance = this;
|
||
jQuery("#quickCreateModules").on("click",".quickCreateModule",function(e,params){
|
||
var quickCreateElem = jQuery(e.currentTarget);
|
||
var quickCreateUrl = quickCreateElem.data('url');
|
||
var quickCreateModuleName = quickCreateElem.data('name');
|
||
if (typeof params === 'undefined') {
|
||
params = {};
|
||
}
|
||
if (typeof params.callbackFunction === 'undefined') {
|
||
params.callbackFunction = function(data, err) {
|
||
//fix for Refresh list view after Quick create
|
||
var parentModule=app.getModuleName();
|
||
var viewname=app.view();
|
||
if((quickCreateModuleName == parentModule) && (viewname=="List")){
|
||
var listinstance = app.controller();
|
||
listinstance.loadListViewRecords();
|
||
}
|
||
};
|
||
}
|
||
app.helper.showProgress();
|
||
thisInstance.getQuickCreateForm(quickCreateUrl,quickCreateModuleName,params).then(function(data){
|
||
app.helper.hideProgress();
|
||
var callbackparams = {
|
||
'cb' : function (container){
|
||
thisInstance.registerPostReferenceEvent(container);
|
||
app.event.trigger('post.QuickCreateForm.show',form);
|
||
app.helper.registerLeavePageWithoutSubmit(form);
|
||
app.helper.registerModalDismissWithoutSubmit(form);
|
||
},
|
||
backdrop : 'static',
|
||
keyboard : false
|
||
}
|
||
|
||
app.helper.showModal(data, callbackparams);
|
||
var form = jQuery('form[name="QuickCreate"]');
|
||
var moduleName = form.find('[name="module"]').val();
|
||
app.helper.showVerticalScroll(jQuery('form[name="QuickCreate"] .modal-body'), {'autoHideScrollbar': true});
|
||
|
||
var targetInstance = thisInstance;
|
||
var moduleInstance = Vtiger_Edit_Js.getInstanceByModuleName(moduleName);
|
||
if(typeof(moduleInstance.quickCreateSave) === 'function'){
|
||
targetInstance = moduleInstance;
|
||
targetInstance.registerBasicEvents(form);
|
||
}
|
||
|
||
vtUtils.applyFieldElementsView(form);
|
||
targetInstance.quickCreateSave(form,params);
|
||
});
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function to register quick create tab events
|
||
*/
|
||
registerQuickcreateTabEvents : function(form) {
|
||
var thisInstance = this;
|
||
var tabElements = form.closest('.modal-content').find('.nav.nav-pills , .nav.nav-tabs').find('a');
|
||
|
||
//This will remove the name attributes and assign it to data-element-name . We are doing this to avoid
|
||
//Multiple element to send as in calendar
|
||
var quickCreateTabOnHide = function(tabElement) {
|
||
var container = jQuery(tabElement.attr('data-target'));
|
||
|
||
container.find('[name]').each(function(index, element) {
|
||
element = jQuery(element);
|
||
element.attr('data-element-name', element.attr('name')).removeAttr('name');
|
||
});
|
||
};
|
||
|
||
//This will add the name attributes and get value from data-element-name . We are doing this to avoid
|
||
//Multiple element to send as in calendar
|
||
var quickCreateTabOnShow = function(tabElement) {
|
||
var container = jQuery(tabElement.attr('data-target'));
|
||
|
||
container.find('[data-element-name]').each(function(index, element) {
|
||
element = jQuery(element);
|
||
element.attr('name', element.attr('data-element-name')).removeAttr('data-element-name');
|
||
});
|
||
};
|
||
|
||
tabElements.on('shown.bs.tab', function(e) {
|
||
var previousTab = jQuery(e.relatedTarget);
|
||
var currentTab = jQuery(e.currentTarget);
|
||
|
||
quickCreateTabOnHide(previousTab);
|
||
quickCreateTabOnShow(currentTab);
|
||
|
||
if(form.find('[name="module"]').val()=== 'Calendar') {
|
||
var sourceModule = currentTab.data('source-module');
|
||
form.find('[name="calendarModule"]').val(sourceModule);
|
||
var moduleInstance = Vtiger_Edit_Js.getInstanceByModuleName('Calendar');
|
||
moduleInstance.registerEventForPicklistDependencySetup(form);
|
||
}
|
||
|
||
//while switching tabs we have to show scroll bar
|
||
//thisInstance.showQuickCreateScrollBar(form);
|
||
//while switching tabs we have to clear the invalid fields list
|
||
//form.data('jqv').InvalidFields = [];
|
||
});
|
||
|
||
//remove name attributes for inactive tab elements
|
||
quickCreateTabOnHide(tabElements.closest('li').filter(':not(.active)').find('a'));
|
||
},
|
||
|
||
/**
|
||
* Register Quick Create Save Event
|
||
* @param {type} form
|
||
* @returns {undefined}
|
||
*/
|
||
quickCreateSave : function(form,invokeParams){
|
||
var params = {
|
||
submitHandler: function(form) {
|
||
// to Prevent submit if already submitted
|
||
jQuery("button[name='saveButton']").attr("disabled","disabled");
|
||
if(this.numberOfInvalids() > 0) {
|
||
return false;
|
||
}
|
||
var formData = jQuery(form).serialize();
|
||
app.request.post({data:formData}).then(function(err,data){
|
||
app.helper.hideProgress();
|
||
if(err === null) {
|
||
jQuery('.vt-notification').remove();
|
||
app.event.trigger("post.QuickCreateForm.save",data,jQuery(form).serializeFormData());
|
||
app.helper.hideModal();
|
||
var message = typeof formData.record !== 'undefined' ? app.vtranslate('JS_RECORD_UPDATED'):app.vtranslate('JS_RECORD_CREATED');
|
||
app.helper.showSuccessNotification({"message":message},{delay:4000});
|
||
invokeParams.callbackFunction(data, err);
|
||
//To unregister onbefore unload event registered for quickcreate
|
||
window.onbeforeunload = null;
|
||
}else{
|
||
app.event.trigger('post.save.failed', err);
|
||
jQuery("button[name='saveButton']").removeAttr('disabled');
|
||
}
|
||
});
|
||
},
|
||
validationMeta: quickcreate_uimeta
|
||
};
|
||
form.vtValidate(params);
|
||
},
|
||
|
||
/**
|
||
* Function to get Quick Create Form
|
||
* @param {type} url
|
||
* @param {type} moduleName
|
||
* @returns {unresolved}
|
||
*/
|
||
getQuickCreateForm: function(url, moduleName, params) {
|
||
var aDeferred = jQuery.Deferred();
|
||
var requestParams = app.convertUrlToDataParams(url);
|
||
jQuery.extend(requestParams, params.data);
|
||
app.request.post({data:requestParams}).then(function(err,data) {
|
||
aDeferred.resolve(data);
|
||
});
|
||
return aDeferred.promise();
|
||
},
|
||
|
||
registerMenuToggle : function(){
|
||
jQuery("#menu-toggle").on('click', function(e) {
|
||
e.preventDefault();
|
||
$("#modnavigator").toggleClass('hide');
|
||
$(".content-area").toggleClass("full-width");
|
||
var params = {
|
||
'module' : 'Users',
|
||
'action' : 'IndexAjax',
|
||
'mode' : 'toggleLeftPanel',
|
||
'showPanel' : +jQuery("#modnavigator").hasClass('hide')
|
||
}
|
||
app.request.post({data: params});
|
||
app.event.trigger("Vtiger.Post.MenuToggle");
|
||
});
|
||
},
|
||
|
||
registerAppTriggerEvent : function() {
|
||
jQuery('.app-menu').removeClass('hide');
|
||
var toggleAppMenu = function(type) {
|
||
var appMenu = jQuery('.app-menu');
|
||
var appNav = jQuery('.app-nav');
|
||
appMenu.appendTo('#page');
|
||
appMenu.css({
|
||
'top' : appNav.offset().top + appNav.height(),
|
||
'left' : 0
|
||
});
|
||
if(typeof type === 'undefined') {
|
||
type = appMenu.is(':hidden') ? 'show' : 'hide';
|
||
}
|
||
if(type == 'show') {
|
||
appMenu.show(200, function() {});
|
||
} else {
|
||
appMenu.hide(200, function() {});
|
||
}
|
||
};
|
||
|
||
jQuery('.app-trigger, .app-icon, .app-navigator').on('click',function(e){
|
||
e.stopPropagation();
|
||
toggleAppMenu();
|
||
});
|
||
|
||
jQuery('html').on('click', function() {
|
||
toggleAppMenu('hide');
|
||
});
|
||
|
||
jQuery(document).keyup(function (e) {
|
||
if (e.keyCode == 27) {
|
||
if(!jQuery('.app-menu').is(':hidden')) {
|
||
toggleAppMenu('hide');
|
||
}
|
||
}
|
||
});
|
||
|
||
jQuery('.app-modules-dropdown-container').hover(function(e) {
|
||
var dropdownContainer = jQuery(e.currentTarget);
|
||
jQuery('.dropdown').removeClass('open');
|
||
if(dropdownContainer.length) {
|
||
if(dropdownContainer.hasClass('dropdown-compact')) {
|
||
dropdownContainer.find('.app-modules-dropdown').css('top', dropdownContainer.position().top - 8);
|
||
} else {
|
||
dropdownContainer.find('.app-modules-dropdown').css('top', '');
|
||
}
|
||
dropdownContainer.addClass('open').find('.app-item').addClass('active-app-item');
|
||
}
|
||
}, function(e) {
|
||
var dropdownContainer = jQuery(e.currentTarget);
|
||
dropdownContainer.find('.app-item').removeClass('active-app-item');
|
||
setTimeout(function() {
|
||
if(dropdownContainer.find('.app-modules-dropdown').length && !dropdownContainer.find('.app-modules-dropdown').is(':hover') && !dropdownContainer.is(':hover')) {
|
||
dropdownContainer.removeClass('open');
|
||
}
|
||
}, 500);
|
||
|
||
});
|
||
|
||
jQuery('.app-item').on('click', function() {
|
||
var url = jQuery(this).data('defaultUrl');
|
||
if(url) {
|
||
window.location.href = url;
|
||
}
|
||
});
|
||
|
||
jQuery(window).resize(function() {
|
||
//jQuery(".app-modules-dropdown").mCustomScrollbar("destroy");
|
||
app.helper.showVerticalScroll(jQuery(".app-modules-dropdown").not('.dropdown-modules-compact'), {
|
||
setHeight: $(window).height(),
|
||
autoExpandScrollbar: true
|
||
});
|
||
jQuery('.dropdown-modules-compact').each(function() {
|
||
var element = jQuery(this);
|
||
var heightPer = parseFloat(element.data('height'));
|
||
app.helper.showVerticalScroll(element, {
|
||
setHeight: $(window).height()*heightPer - 3,
|
||
autoExpandScrollbar: true,
|
||
scrollbarPosition: 'outside'
|
||
});
|
||
});
|
||
});
|
||
app.helper.showVerticalScroll(jQuery(".app-modules-dropdown").not('.dropdown-modules-compact'), {
|
||
setHeight: $(window).height(),
|
||
autoExpandScrollbar: true,
|
||
scrollbarPosition: 'outside'
|
||
});
|
||
jQuery('.dropdown-modules-compact').each(function() {
|
||
var element = jQuery(this);
|
||
var heightPer = parseFloat(element.data('height'));
|
||
app.helper.showVerticalScroll(element, {
|
||
setHeight: $(window).height()*heightPer - 3,
|
||
autoExpandScrollbar: true,
|
||
scrollbarPosition: 'outside'
|
||
});
|
||
});
|
||
},
|
||
|
||
registerGlobalSearch : function() {
|
||
var thisInstance = this;
|
||
jQuery('.search-link .keyword-input').on('keypress',function(e){
|
||
if(e.which == 13) {
|
||
|
||
var element = jQuery(e.currentTarget);
|
||
var searchValue = element.val();
|
||
var data = {};
|
||
data['searchValue'] = searchValue;
|
||
element.trigger(thisInstance._SearchIntiatedEventName,data);
|
||
}
|
||
});
|
||
},
|
||
|
||
registerAdvanceSeachIntiator : function () {
|
||
jQuery('#adv-search').on('click',function(e){
|
||
var advanceSearchInstance = new Vtiger_AdvanceSearch_Js();
|
||
advanceSearchInstance.advanceSearchTriggerIntiatorHandler();
|
||
// advanceSearchInstance.initiateSearch().then(function() {
|
||
// advanceSearchInstance.selectBasicSearchValue();
|
||
// });
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function which will handle the reference auto complete event registrations
|
||
* @params - container <jQuery> - element in which auto complete fields needs to be searched
|
||
*/
|
||
registerAutoCompleteFields : function(container) {
|
||
var thisInstance = this;
|
||
container.find('input.autoComplete').autocomplete({
|
||
'minLength' : '3',
|
||
'source' : function(request, response){
|
||
//element will be array of dom elements
|
||
//here this refers to auto complete instance
|
||
var inputElement = jQuery(this.element[0]);
|
||
var searchValue = request.term;
|
||
var params = thisInstance.getReferenceSearchParams(inputElement);
|
||
params.module = app.getModuleName();
|
||
if (jQuery('#QuickCreate').length > 0) {
|
||
params.module = container.find('[name="module"]').val();
|
||
}
|
||
params.search_value = searchValue;
|
||
if(params.search_module && params.search_module!= 'undefined') {
|
||
thisInstance.searchModuleNames(params).then(function(data){
|
||
var reponseDataList = new Array();
|
||
var serverDataFormat = data;
|
||
if(serverDataFormat.length <= 0) {
|
||
jQuery(inputElement).val('');
|
||
serverDataFormat = new Array({
|
||
'label' : 'No Results Found',
|
||
'type' : 'no results'
|
||
});
|
||
}
|
||
for(var id in serverDataFormat){
|
||
var responseData = serverDataFormat[id];
|
||
reponseDataList.push(responseData);
|
||
}
|
||
response(reponseDataList);
|
||
});
|
||
} else {
|
||
jQuery(inputElement).val('');
|
||
serverDataFormat = new Array({
|
||
'label' : 'No Results Found',
|
||
'type' : 'no results'
|
||
});
|
||
response(serverDataFormat);
|
||
}
|
||
},
|
||
'select' : function(event, ui ){
|
||
var selectedItemData = ui.item;
|
||
//To stop selection if no results is selected
|
||
if(typeof selectedItemData.type != 'undefined' && selectedItemData.type=="no results"){
|
||
return false;
|
||
}
|
||
var element = jQuery(this);
|
||
var parent = element.closest('td');
|
||
if(parent.length == 0){
|
||
parent = element.closest('.fieldValue');
|
||
}
|
||
var sourceField = parent.find('.sourceField');
|
||
selectedItemData.record = selectedItemData.id;
|
||
selectedItemData.source_module = parent.find('input[name="popupReferenceModule"]').val();
|
||
selectedItemData.selectedName = selectedItemData.label;
|
||
var fieldName = sourceField.attr("name");
|
||
parent.find('input[name="'+fieldName+'"]').val(selectedItemData.id);
|
||
element.attr("value",selectedItemData.id);
|
||
element.data("value",selectedItemData.id);
|
||
parent.find('.clearReferenceSelection').removeClass('hide');
|
||
parent.find('.referencefield-wrapper').addClass('selected');
|
||
element.attr("disabled","disabled");
|
||
//trigger reference field selection event
|
||
sourceField.trigger(Vtiger_Edit_Js.referenceSelectionEvent,selectedItemData);
|
||
//trigger post reference selection
|
||
sourceField.trigger(Vtiger_Edit_Js.postReferenceSelectionEvent,{'data':selectedItemData});
|
||
}
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function to register clear reference selection event
|
||
* @param <jQUery> container
|
||
*/
|
||
registerClearReferenceSelectionEvent : function(container) {
|
||
container.off('click', '.clearReferenceSelection');
|
||
container.on('click', '.clearReferenceSelection',function(e){
|
||
e.preventDefault();
|
||
var element = jQuery(e.currentTarget);
|
||
var parentTdElement = element.closest('td');
|
||
if(parentTdElement.length == 0){
|
||
parentTdElement = element.closest('.fieldValue');
|
||
}
|
||
var inputElement = parentTdElement.find('.inputElement');
|
||
var fieldName = parentTdElement.find('.sourceField').attr("name");
|
||
|
||
parentTdElement.find('.referencefield-wrapper').removeClass('selected');
|
||
inputElement.removeAttr("disabled").removeAttr('readonly');
|
||
inputElement.attr("value","");
|
||
inputElement.data('value','');
|
||
inputElement.val("");
|
||
parentTdElement.find('input[name="'+fieldName+'"]').val("");
|
||
element.addClass('hide');
|
||
element.trigger(Vtiger_Edit_Js.referenceDeSelectionEvent);
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function which will register event for create of reference record
|
||
* This will allow users to create reference record from edit view of other record
|
||
*/
|
||
registerReferenceCreate : function(container) {
|
||
var thisInstance = this;
|
||
container.on('click','.createReferenceRecord', function(e) {
|
||
var element = jQuery(e.currentTarget);
|
||
var controlElementTd = thisInstance.getParentElement(element);
|
||
thisInstance.referenceCreateHandler(controlElementTd);
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Funtion to register popup search event for reference field
|
||
* @param <jQuery> container
|
||
*/
|
||
referenceModulePopupRegisterEvent : function(container) {
|
||
var thisInstance = this;
|
||
container.off('click', '.relatedPopup');
|
||
container.on("click",'.relatedPopup',function(e) {
|
||
thisInstance.openPopUp(e);
|
||
});
|
||
container.on('change','.referenceModulesList',function(e){
|
||
var element = jQuery(e.currentTarget);
|
||
var closestTD = thisInstance.getParentElement(element).next();
|
||
var popupReferenceModule = element.val();
|
||
var referenceModuleElement = jQuery('input[name="popupReferenceModule"]', closestTD).length ?
|
||
jQuery('input[name="popupReferenceModule"]', closestTD) : jQuery('input.popupReferenceModule', closestTD);
|
||
var prevSelectedReferenceModule = referenceModuleElement.val();
|
||
referenceModuleElement.val(popupReferenceModule);
|
||
|
||
//If Reference module is changed then we should clear the previous value
|
||
if(prevSelectedReferenceModule != popupReferenceModule) {
|
||
closestTD.find('.clearReferenceSelection').trigger('click');
|
||
}
|
||
});
|
||
},
|
||
|
||
/**
|
||
* Function to open popup list modal
|
||
*/
|
||
openPopUp : function(e) {
|
||
var thisInstance = this;
|
||
var parentElem = thisInstance.getParentElement(jQuery(e.target));
|
||
|
||
var params = this.getPopUpParams(parentElem);
|
||
params.view = 'Popup';
|
||
|
||
var isMultiple = false;
|
||
if(params.multi_select) {
|
||
isMultiple = true;
|
||
}
|
||
|
||
var sourceFieldElement = jQuery('input[class="sourceField"]',parentElem);
|
||
|
||
var prePopupOpenEvent = jQuery.Event(Vtiger_Edit_Js.preReferencePopUpOpenEvent);
|
||
sourceFieldElement.trigger(prePopupOpenEvent);
|
||
|
||
if(prePopupOpenEvent.isDefaultPrevented()) {
|
||
return ;
|
||
}
|
||
var popupInstance = Vtiger_Popup_Js.getInstance();
|
||
|
||
app.event.off(Vtiger_Edit_Js.popupSelectionEvent);
|
||
app.event.one(Vtiger_Edit_Js.popupSelectionEvent,function(e,data) {
|
||
var responseData = JSON.parse(data);
|
||
var dataList = new Array();
|
||
jQuery.each(responseData, function(key, value){
|
||
var counter = 0;
|
||
for(var valuekey in value){
|
||
if(valuekey == 'name') continue;
|
||
if(typeof valuekey == 'object') continue;
|
||
// var referenceModule = value[valuekey].module;
|
||
// if(typeof referenceModule == "undefined") {
|
||
// referenceModule = value.module;
|
||
// }
|
||
// if(parentElem.find('[name="popupReferenceModule"]').val() != referenceModule) continue;
|
||
//
|
||
var data = {
|
||
'name' : value.name,
|
||
'id' : key
|
||
}
|
||
if(valuekey == 'info') {
|
||
data['name'] = value.name;
|
||
}
|
||
dataList.push(data);
|
||
if(!isMultiple && counter === 0) {
|
||
counter++;
|
||
thisInstance.setReferenceFieldValue(parentElem, data);
|
||
}
|
||
}
|
||
});
|
||
|
||
if(isMultiple) {
|
||
sourceFieldElement.trigger(Vtiger_Edit_Js.refrenceMultiSelectionEvent,{'data':dataList});
|
||
}
|
||
sourceFieldElement.trigger(Vtiger_Edit_Js.postReferenceSelectionEvent,{'data':responseData});
|
||
});
|
||
popupInstance.showPopup(params,Vtiger_Edit_Js.popupSelectionEvent,function() {});
|
||
},
|
||
|
||
/**
|
||
* Functions changes the value of max upload size variable
|
||
* @param {type} container
|
||
* @returns {unresolved}
|
||
*/
|
||
getMaxiumFileUploadingSize: function (container) {
|
||
//TODO : get it from the server
|
||
return container.find('.maxUploadSize').data('value');
|
||
},
|
||
|
||
/**
|
||
* Function display file size in kb,mb,gb etc
|
||
*/
|
||
convertFileSizeInToDisplayFormat: function (fileSizeInBytes) {
|
||
var i = -1;
|
||
var byteUnits = [' kB', ' MB', ' GB', ' TB', 'PB', 'EB', 'ZB', 'YB'];
|
||
do {
|
||
fileSizeInBytes = fileSizeInBytes / 1024;
|
||
i++;
|
||
} while (fileSizeInBytes > 1024);
|
||
|
||
return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
|
||
|
||
},
|
||
|
||
/**
|
||
* Function will trigger whenever customer filename got added or changed
|
||
* @returns {undefined}
|
||
*/
|
||
registerFileChangeEvent: function () {
|
||
var thisInstance = this;
|
||
var container = jQuery('body');
|
||
Vtiger_Index_Js.files = '';
|
||
container.on('change', 'input[name="filename[]"],input[name="imagename[]"]', function(e){
|
||
if(e.target.type == "text") return false;
|
||
|
||
var files_uploaded=[];
|
||
var fileSize = 0;
|
||
jQuery.each(e.target.files,function(key,element){
|
||
files_uploaded[key] = element;
|
||
fileSize += Number(element['size']);
|
||
});
|
||
|
||
|
||
Vtiger_Index_Js.files = files_uploaded;
|
||
var element = container.find('input[name="filename[]"],input[name="imagename[]"]');
|
||
//ignore all other types than file
|
||
if(element.attr('type') != 'file'){
|
||
return ;
|
||
}
|
||
var uploadFileSizeHolder = element.closest('.fileUploadContainer').find('.uploadedFileSize');
|
||
var maxFileSize = thisInstance.getMaxiumFileUploadingSize(container);
|
||
if(fileSize > maxFileSize) {
|
||
alert(app.vtranslate('JS_EXCEEDS_MAX_UPLOAD_SIZE'));
|
||
var removeFileLinks = jQuery('.MultiFile-remove');
|
||
jQuery(removeFileLinks[removeFileLinks.length - 1]).click();
|
||
} else {
|
||
if(container.length > 1){
|
||
jQuery('div.fieldsContainer').find('form#I_form').find('input[name="filename"]').css('width','80px');
|
||
jQuery('div.fieldsContainer').find('form#W_form').find('input[name="filename"]').css('width','80px');
|
||
} else {
|
||
container.find('input[name="filename[]"]').css('width','80px');
|
||
}
|
||
}
|
||
});
|
||
},
|
||
|
||
|
||
/**
|
||
* Will register multiple file upload plugin
|
||
* @returns {undefined}
|
||
* Reference: http://www.fyneworks.com/jquery/multifile/
|
||
*/
|
||
registerMultiUpload: function () {
|
||
var indexInstance = Vtiger_Index_Js.getInstance();
|
||
if (jQuery('input[type="file"].multi').is(":visible")) { //if the container is visible on the page
|
||
jQuery('input[type="file"]').MultiFile();
|
||
indexInstance.registerHoverEventOnAttachment();
|
||
} else {
|
||
setTimeout(indexInstance.registerMultiUpload, 50); //wait 50 ms, then try again
|
||
}
|
||
},
|
||
|
||
//removed toggle class for quickcreate
|
||
|
||
/**
|
||
* Function register on mouseover and mouseout events
|
||
* @returns {undefined}
|
||
*/
|
||
registerHoverEventOnAttachment: function () {
|
||
jQuery('body').on('mouseover', '.filePreview', function (e) {
|
||
jQuery(e.currentTarget).closest('div').find('a[name="downloadfile"] i').removeClass('hide').css('display','block');
|
||
}).on('mouseout', '.filePreview', function (e) {
|
||
jQuery(e.currentTarget).closest('div').find('a[name="downloadfile"] i').addClass('hide');
|
||
});
|
||
},
|
||
/*
|
||
* Function to get reference select popup parameters
|
||
*/
|
||
getPopUpParams : function(container) {
|
||
var params = {};
|
||
var sourceModule = app.getModuleName();
|
||
var editTaskContainer = jQuery('[name="editTask"]');
|
||
if(editTaskContainer.length > 0){
|
||
sourceModule = editTaskContainer.find('#sourceModule').val();
|
||
}
|
||
var quickCreateConatiner = jQuery('[name="QuickCreate"]');
|
||
if(quickCreateConatiner.length!=0){
|
||
sourceModule = quickCreateConatiner.find('input[name="module"]').val();
|
||
}
|
||
var searchResultContainer = jQuery('#searchResults-container');
|
||
if(searchResultContainer.length) {
|
||
sourceModule = jQuery('select#searchModuleList').val();
|
||
}
|
||
var popupReferenceModuleElement = jQuery('input[name="popupReferenceModule"]',container).length ?
|
||
jQuery('input[name="popupReferenceModule"]',container) : jQuery('input.popupReferenceModule',container);
|
||
var popupReferenceModule = popupReferenceModuleElement.val();
|
||
var sourceFieldElement = jQuery('input[class="sourceField"]',container);
|
||
if(!sourceFieldElement.length) {
|
||
sourceFieldElement = jQuery('input.sourceField',container);
|
||
}
|
||
var sourceField = sourceFieldElement.attr('name');
|
||
var sourceRecordElement = jQuery('input[name="record"]');
|
||
var sourceRecordId = '';
|
||
var recordId = app.getRecordId();
|
||
if(sourceRecordElement.length > 0) {
|
||
sourceRecordId = sourceRecordElement.val();
|
||
} else if(recordId) {
|
||
sourceRecordId = recordId;
|
||
} else if(app.view() == 'List') {
|
||
var editRecordId = jQuery('#listview-table').find('tr.listViewEntries.edited').data('id');
|
||
if(editRecordId) {
|
||
sourceRecordId = editRecordId;
|
||
}
|
||
}
|
||
|
||
if(searchResultContainer.length) {
|
||
sourceRecordId = searchResultContainer.find('tr.listViewEntries.edited').data('id')
|
||
}
|
||
|
||
var isMultiple = false;
|
||
if(sourceFieldElement.data('multiple') == true) {
|
||
isMultiple = true;
|
||
}
|
||
|
||
// TODO : Need to recheck. We don't have reference field module name if that module is disabled
|
||
if(typeof popupReferenceModule == "undefined"){
|
||
popupReferenceModule = "undefined";
|
||
}
|
||
|
||
var params = {
|
||
'module' : popupReferenceModule,
|
||
'src_module' : sourceModule,
|
||
'src_field' : sourceField,
|
||
'src_record' : sourceRecordId
|
||
}
|
||
|
||
if(isMultiple) {
|
||
params.multi_select = true ;
|
||
}
|
||
return params;
|
||
},
|
||
|
||
/*
|
||
* Function to set reference field value
|
||
*/
|
||
setReferenceFieldValue : function(container, params) {
|
||
var sourceField = container.find('input.sourceField').attr('name');
|
||
var fieldElement = container.find('input[name="'+sourceField+'"]');
|
||
var sourceFieldDisplay = sourceField+"_display";
|
||
var fieldDisplayElement = container.find('input[name="'+sourceFieldDisplay+'"]');
|
||
var popupReferenceModuleElement = container.find('input[name="popupReferenceModule"]').length ? container.find('input[name="popupReferenceModule"]') : container.find('input.popupReferenceModule');
|
||
var popupReferenceModule = popupReferenceModuleElement.val();
|
||
var selectedName = params.name;
|
||
var id = params.id;
|
||
|
||
if (id && selectedName) {
|
||
if(!fieldDisplayElement.length) {
|
||
fieldElement.attr('value',id);
|
||
fieldElement.data('value', id);
|
||
fieldElement.val(selectedName);
|
||
} else {
|
||
fieldElement.val(id);
|
||
fieldElement.data('value', id);
|
||
fieldDisplayElement.val(selectedName);
|
||
if(selectedName) {
|
||
fieldDisplayElement.attr('readonly', 'readonly');
|
||
} else {
|
||
fieldDisplayElement.removeAttr("readonly");
|
||
}
|
||
}
|
||
|
||
if(selectedName) {
|
||
fieldElement.parent().find('.clearReferenceSelection').removeClass('hide');
|
||
fieldElement.parent().find('.referencefield-wrapper').addClass('selected');
|
||
}else {
|
||
fieldElement.parent().find('.clearReferenceSelection').addClass('hide');
|
||
fieldElement.parent().find('.referencefield-wrapper').removeClass('selected');
|
||
}
|
||
fieldElement.trigger(Vtiger_Edit_Js.referenceSelectionEvent, {'source_module' : popupReferenceModule, 'record' : id, 'selectedName' : selectedName});
|
||
}
|
||
},
|
||
|
||
/*
|
||
* Function to get referenced module name
|
||
*/
|
||
getReferencedModuleName : function(parentElement) {
|
||
var referenceModuleElement = jQuery('input[name="popupReferenceModule"]',parentElement).length ?
|
||
jQuery('input[name="popupReferenceModule"]',parentElement) : jQuery('input.popupReferenceModule',parentElement);
|
||
return referenceModuleElement.val();
|
||
},
|
||
|
||
/*
|
||
* Function to show quick create modal while creating from reference field
|
||
*/
|
||
referenceCreateHandler : function(container) {
|
||
var thisInstance = this;
|
||
var postQuickCreateSave = function(data) {
|
||
var module = thisInstance.getReferencedModuleName(container);
|
||
var params = {};
|
||
params.name = data._recordLabel;
|
||
params.id = data._recordId;
|
||
params.module = module;
|
||
thisInstance.setReferenceFieldValue(container, params);
|
||
|
||
var tdElement = thisInstance.getParentElement(container.find('[value="'+ module +'"]'));
|
||
var sourceField = tdElement.find('input[class="sourceField"]').attr('name');
|
||
var fieldElement = tdElement.find('input[name="'+sourceField+'"]');
|
||
thisInstance.autoFillElement = fieldElement;
|
||
thisInstance.postRefrenceSearch(params, container);
|
||
|
||
tdElement.find('input[class="sourceField"]').trigger(Vtiger_Edit_Js.postReferenceQuickCreateSave, {'data' : data});
|
||
}
|
||
|
||
var referenceModuleName = this.getReferencedModuleName(container);
|
||
var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="'+ referenceModuleName +'"]');
|
||
if(quickCreateNode.length <= 0) {
|
||
var notificationOptions = {
|
||
'title' : app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED')
|
||
}
|
||
app.helper.showAlertNotification(notificationOptions);
|
||
}
|
||
quickCreateNode.trigger('click',[{'callbackFunction':postQuickCreateSave}]);
|
||
},
|
||
|
||
/**
|
||
* Function to get reference search params
|
||
*/
|
||
getReferenceSearchParams : function(element){
|
||
var tdElement = this.getParentElement(element);
|
||
var params = {};
|
||
var referenceModuleElement = jQuery('input[name="popupReferenceModule"]',tdElement).length ?
|
||
jQuery('input[name="popupReferenceModule"]',tdElement) : jQuery('input.popupReferenceModule',tdElement);
|
||
var searchModule = referenceModuleElement.val();
|
||
params.search_module = searchModule;
|
||
return params;
|
||
},
|
||
|
||
searchModuleNames : function(params) {
|
||
var aDeferred = jQuery.Deferred();
|
||
|
||
if(typeof params.module == 'undefined') {
|
||
params.module = app.getModuleName();
|
||
}
|
||
|
||
if(typeof params.action == 'undefined') {
|
||
params.action = 'BasicAjax';
|
||
}
|
||
|
||
if(typeof params.base_record == 'undefined') {
|
||
var record = jQuery('[name="record"]');
|
||
var recordId = app.getRecordId();
|
||
if(record.length) {
|
||
params.base_record = record.val();
|
||
} else if(recordId) {
|
||
params.base_record = recordId;
|
||
} else if(app.view() == 'List') {
|
||
var editRecordId = jQuery('#listview-table').find('tr.listViewEntries.edited').data('id');
|
||
if(editRecordId) {
|
||
params.base_record = editRecordId;
|
||
}
|
||
}
|
||
}
|
||
app.request.get({data:params}).then(
|
||
function(err, res){
|
||
aDeferred.resolve(res);
|
||
},
|
||
function(error){
|
||
//TODO : Handle error
|
||
aDeferred.reject();
|
||
}
|
||
);
|
||
return aDeferred.promise();
|
||
},
|
||
|
||
/*
|
||
* Function to get Field parent element
|
||
*/
|
||
getParentElement : function(element) {
|
||
var parent = element.closest('td');
|
||
// added to support from all views which may not be table format
|
||
if(parent.length === 0) {
|
||
parent = element.closest('.td').length ?
|
||
element.closest('.td') : element.closest('.fieldValue');
|
||
}
|
||
return parent;
|
||
},
|
||
|
||
getUserNameForId : function(id) {
|
||
for(var key in userList) {
|
||
if(userList[key] === id) {
|
||
return key;
|
||
}
|
||
}
|
||
return null;
|
||
},
|
||
|
||
modulesMenuScrollbar : function(){
|
||
app.helper.showVerticalScroll(jQuery("#modnavigator #modules-menu"),{autoHideScrollbar:true});
|
||
},
|
||
|
||
modulesMenuClearIconTitle: function() {
|
||
jQuery('#modules-menu i').removeAttr('title');
|
||
jQuery('#modules-menu .custom-module').removeAttr('title');
|
||
},
|
||
|
||
registerChangeTemplateEvent: function (container, recordId) {
|
||
var sourceModule = container.find('#sourceModuleName').val();
|
||
var thisInstance = this;
|
||
var select = container.find('#fieldList');
|
||
select.on("change", function () {
|
||
var templateId = select.val();
|
||
thisInstance.showQuickPreviewForId(recordId, sourceModule, app.getAppName(), templateId);
|
||
});
|
||
},
|
||
|
||
registerMoreRecentUpdatesClickEvent: function (container, recordId) {
|
||
var moduleName = container.find('#sourceModuleName').val();
|
||
container.find('.moreRecentUpdates').on('click', function () {
|
||
var recentUpdateURL = "index.php?view=Detail&mode=showRecentActivities&page=1&module=" + moduleName + "&record=" + recordId + "&tab_label=LBL_UPDATES";
|
||
window.location.href = recentUpdateURL;
|
||
});
|
||
},
|
||
|
||
registerNavigationEvents: function (container) {
|
||
this.registerNextRecordClickEvent(container);
|
||
this.registerPreviousRecordClickEvent(container);
|
||
},
|
||
|
||
registerNextRecordClickEvent: function(container){
|
||
var self = this;
|
||
container.find('#quickPreviewNextRecordButton').on('click',function(e){
|
||
var element = jQuery(e.currentTarget);
|
||
var nextRecordId = element.data('record') || element.data('id');
|
||
var moduleName = container.find('#sourceModuleName').val();
|
||
var appName = element.data('app');
|
||
var templateId, fieldList = container.find('#fieldList');
|
||
if(fieldList.length) {
|
||
templateId = fieldList.val();
|
||
}
|
||
self.showQuickPreviewForId(nextRecordId, moduleName, appName, templateId, false, 'navigation');
|
||
});
|
||
},
|
||
|
||
registerPreviousRecordClickEvent: function(container){
|
||
var self = this;
|
||
container.find('#quickPreviewPreviousRecordButton').on('click', function (e) {
|
||
var element = jQuery(e.currentTarget);
|
||
var prevRecordId = element.data('record') || element.data('id');
|
||
var moduleName = container.find('#sourceModuleName').val();
|
||
var appName = element.data('app');
|
||
var templateId, fieldList = container.find('#fieldList');
|
||
if(fieldList.length) {
|
||
templateId = fieldList.val();
|
||
}
|
||
self.showQuickPreviewForId(prevRecordId, moduleName, appName, templateId, false, 'navigation');
|
||
});
|
||
},
|
||
|
||
_showInventoryQuickPreviewForId: function (recordId, moduleName, templateId, isReference, mode) {
|
||
var thisInstance = this;
|
||
var params = {};
|
||
if(typeof moduleName === 'undefined') {
|
||
moduleName = app.module();
|
||
}
|
||
params['module'] = moduleName;
|
||
params['record'] = recordId;
|
||
params['view'] = 'RecordQuickPreview';
|
||
if(isReference == true){
|
||
params['navigation'] = 'false';
|
||
}
|
||
else{
|
||
params['navigation'] = 'true';
|
||
}
|
||
|
||
if (templateId) {
|
||
params['templateid'] = templateId;
|
||
}
|
||
|
||
if(mode) {
|
||
params['preview_mode'] = mode;
|
||
}
|
||
|
||
app.helper.showProgress();
|
||
app.request.get({data: params}).then(function (err, response) {
|
||
app.helper.hideProgress();
|
||
if (templateId && mode != 'navigation') {
|
||
jQuery('#pdfViewer').html(response);
|
||
return;
|
||
}
|
||
var params = {
|
||
cb: function () {
|
||
thisInstance.registerChangeTemplateEvent(jQuery('#helpPageOverlay'), recordId);
|
||
thisInstance.registerNavigationEvents(jQuery('#helpPageOverlay'));
|
||
}
|
||
};
|
||
jQuery('#helpPageOverlay').css({"width": "870px", "box-shadow": "-8px 0 5px -5px lightgrey", 'height': '100vh', 'background': 'white'});
|
||
app.helper.loadHelpPageOverlay(response, params);
|
||
var params = {
|
||
setHeight: "100%",
|
||
alwaysShowScrollbar: 2,
|
||
autoExpandScrollbar: true,
|
||
setTop: 0,
|
||
scrollInertia: 70,
|
||
mouseWheel: {preventDefault: true}
|
||
};
|
||
app.helper.showVerticalScroll(jQuery('.quickPreview .modal-body'), params);
|
||
});
|
||
},
|
||
|
||
_showQuickPreviewForId: function (recordId, moduleName, appName, isReference) {
|
||
var self = this;
|
||
var params = {};
|
||
if (typeof moduleName === 'undefined') {
|
||
moduleName = app.module();
|
||
}
|
||
params['module'] = moduleName;
|
||
params['record'] = recordId;
|
||
params['view'] = 'RecordQuickPreview';
|
||
if(isReference === true){
|
||
params['navigation'] = 'false';
|
||
}
|
||
else{
|
||
params['navigation'] = 'true';
|
||
}
|
||
params['app'] = appName;
|
||
|
||
app.helper.showProgress();
|
||
app.request.get({data: params}).then(function (err, response) {
|
||
app.helper.hideProgress();
|
||
jQuery('#helpPageOverlay').css({"width": "550px", "box-shadow": "-8px 0 5px -5px lightgrey", 'height': '100vh', 'background': 'white'});
|
||
var callBack = function(container){
|
||
self.registerMoreRecentUpdatesClickEvent(container,recordId);
|
||
//Register Navigation Events
|
||
self.registerNavigationEvents(container);
|
||
};
|
||
app.helper.loadHelpPageOverlay(response, {
|
||
'cb' : callBack
|
||
});
|
||
var params = {
|
||
setHeight: "100%",
|
||
alwaysShowScrollbar: 2,
|
||
autoExpandScrollbar: true,
|
||
setTop: 0,
|
||
scrollInertia: 70,
|
||
mouseWheel: {preventDefault: true}
|
||
};
|
||
app.helper.showVerticalScroll(jQuery('.quickPreview .modal-body'), params);
|
||
});
|
||
},
|
||
|
||
isInventoryModule : function(moduleName) {
|
||
var inventoryModules = jQuery('#inventoryModules').val();
|
||
return inventoryModules.indexOf(moduleName) !== -1;
|
||
},
|
||
|
||
showQuickPreviewForId: function(recordId, moduleName, appName, templateId, isReference, mode) {
|
||
var self = this;
|
||
if(self.isInventoryModule(moduleName)) {
|
||
self._showInventoryQuickPreviewForId(recordId, moduleName, templateId, isReference, mode);
|
||
} else {
|
||
self._showQuickPreviewForId(recordId, moduleName, appName, isReference);
|
||
}
|
||
},
|
||
|
||
registerReferencePreviewEvent : function() {
|
||
var self = this;
|
||
var view = app.view();
|
||
jQuery('body').on('click', '.js-reference-display-value', function(e) {
|
||
e.preventDefault();
|
||
e.stopPropagation();
|
||
var currentTarget = jQuery(this);
|
||
if(currentTarget.closest('#popupPageContainer').length) {
|
||
return; //no action in reference selection popup
|
||
}
|
||
var href = currentTarget.attr('href');
|
||
if(view === 'List') {
|
||
if(currentTarget.data('timer')) {
|
||
//if list view single click has set a time, clear it
|
||
clearTimeout(currentTarget.data('timer'));
|
||
currentTarget.data('timer', null);
|
||
}
|
||
//perform show preview only after 500ms in list view to support double click edit action
|
||
if (!currentTarget.data('preview-timer') && typeof href != 'undefined') {
|
||
currentTarget.data('preview-timer', setTimeout(function () {
|
||
var data = app.convertUrlToDataParams(href);
|
||
self.showQuickPreviewForId(data.record, data.module, app.getAppName(),'',true);
|
||
currentTarget.data('preview-timer',null);
|
||
}, 500));
|
||
}
|
||
} else {
|
||
var data = app.convertUrlToDataParams(href);
|
||
self.showQuickPreviewForId(data.record, data.module, app.getAppName(),'',true);
|
||
}
|
||
});
|
||
|
||
if(view === 'List') {
|
||
/*
|
||
* when reference display value is double clicked in list view,
|
||
* should initiate inline edit instead of showing preview
|
||
*/
|
||
jQuery('body').on('dblclick', '.js-reference-display-value', function(e) {
|
||
e.preventDefault();
|
||
var currentTarget = jQuery(this);
|
||
if (currentTarget.data('preview-timer')) {
|
||
clearTimeout(currentTarget.data('preview-timer'));
|
||
currentTarget.data('preview-timer', null);
|
||
};
|
||
});
|
||
}
|
||
},
|
||
|
||
registerPostReferenceEvent : function(container) {
|
||
var thisInstance = this;
|
||
|
||
container.find('.sourceField').on(Vtiger_Edit_Js.postReferenceSelectionEvent,function(e,result){
|
||
var dataList = result.data;
|
||
var element = jQuery(e.currentTarget);
|
||
|
||
if(typeof element.data('autofill') != 'undefined') {
|
||
thisInstance.autoFillElement = element;
|
||
if(typeof(dataList.id) == 'undefined'){
|
||
thisInstance.postRefrenceComplete(dataList, container);
|
||
}else {
|
||
thisInstance.postRefrenceSearch(dataList, container);
|
||
}
|
||
}
|
||
});
|
||
},
|
||
|
||
postRefrenceComplete : function(data, container){
|
||
var thisInstance = this;
|
||
if(!data)
|
||
return ;
|
||
|
||
jQuery.each(data, function(id, value){
|
||
thisInstance.fillReferenceFieldValue(value, container);
|
||
});
|
||
},
|
||
|
||
getRelatedFieldElements: function(container, autoFillData){
|
||
var parentElems = {};
|
||
if (autoFillData) {
|
||
var field = container.find('#'+autoFillData.fieldname+'_display').closest('td');
|
||
parentElems['parent_id'] = field;
|
||
}
|
||
return parentElems;
|
||
},
|
||
|
||
fillReferenceFieldValue : function(data, container){
|
||
var thisInstance = this;
|
||
var autoFillElement = this.autoFillElement;
|
||
var autoFillData = autoFillElement.data('autofill');
|
||
var completedValues = [];
|
||
for(var index in autoFillData){
|
||
var value = autoFillData[index];
|
||
var referenceContainer = thisInstance.getRelatedFieldElements(container, value);
|
||
jQuery.each(data, function(datakey, datavalue){
|
||
for(var name in datavalue){
|
||
if(typeof datavalue[name] == 'object'){
|
||
var key = name;
|
||
var dataList = {
|
||
'name': datavalue[key].name,
|
||
'id' : datavalue[key].id
|
||
}
|
||
|
||
if(value.module == datavalue[key].module){
|
||
var autoFillElement = thisInstance.autoFillElement;
|
||
var autoFillData = value;
|
||
var popupReferenceModuleElement = autoFillElement.parent().parent().find('[name=popupReferenceModule]').length ?
|
||
autoFillElement.parent().parent().find('[name=popupReferenceModule]') : autoFillElement.parent().parent().find('.popupReferenceModule');
|
||
var module = popupReferenceModuleElement.val();
|
||
var elementName = autoFillElement.attr('name');
|
||
var selectedName = container.find('#'+elementName+'_display').val();
|
||
var message = app.vtranslate('JS_OVERWRITE_AUTOFILL_MSG1')+' '+app.vtranslate('SINGLE_'+autoFillData.module)+" "+app.vtranslate('JS_OVERWRITE_AUTOFILL_MSG2')+" "+app.vtranslate('SINGLE_'+module)+' ('+selectedName+') '+app.vtranslate('SINGLE_'+autoFillData.module)+" ?";
|
||
var parentId = container.find('[name='+autoFillData.fieldname+']').val();
|
||
|
||
if(parentId != dataList.id && parentId) {
|
||
if(jQuery.inArray(datavalue[key].module, completedValues) === -1) {
|
||
completedValues.push(datavalue[key].module);
|
||
thisInstance.confirmAndFillDetails(referenceContainer[key], dataList, message);
|
||
}
|
||
} else {
|
||
thisInstance.setReferenceFieldValue(referenceContainer[key], dataList);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
},
|
||
|
||
confirmAndFillDetails : function(container, data, message) {
|
||
var thisInstance = this;
|
||
app.helper.showConfirmationBox({'message' : message}).then(
|
||
function(e) {
|
||
thisInstance.setReferenceFieldValue(container, data);
|
||
},
|
||
function(error, err){
|
||
}
|
||
);
|
||
},
|
||
|
||
/**
|
||
* Function to show duplication notification
|
||
*/
|
||
registerEventForPostSaveFail : function() {
|
||
app.event.on('post.save.failed', function (e, err) {
|
||
jQuery('.vt-notification').remove();
|
||
var options = {
|
||
message: err.message
|
||
};
|
||
if (err.title) {
|
||
options['title'] = err.title;
|
||
}
|
||
var settings = {
|
||
'delay': 0
|
||
};
|
||
app.helper.showErrorNotification(options, settings);
|
||
});
|
||
},
|
||
|
||
postRefrenceSearch: function(resultData, container){
|
||
var thisInstance = this;
|
||
var module;
|
||
if(!resultData.module) {
|
||
var autoFillElement = this.autoFillElement;
|
||
var popupReferenceModuleElement = autoFillElement.parent().parent().find('[name=popupReferenceModule]').length ?
|
||
autoFillElement.parent().parent().find('[name=popupReferenceModule]') : autoFillElement.parent().parent().find('.popupReferenceModule');
|
||
module = popupReferenceModuleElement.val();
|
||
}else {
|
||
module = resultData.module;
|
||
}
|
||
if(!resultData.id)
|
||
return;
|
||
|
||
var params = {
|
||
module: module,
|
||
action: 'RelationAjax',
|
||
mode: 'getRelatedRecordInfo',
|
||
id: resultData.id
|
||
};
|
||
|
||
app.request.post({'data' : params}).then(function(err, data){
|
||
if(err == null){
|
||
thisInstance.postRefrenceComplete(data, container);
|
||
}
|
||
});
|
||
}
|
||
});
|
||
|
||
|
||
|
||
|
||
// Map COMPTES
|
||
var map = L.map('map');
|
||
var layer = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
|
||
attribution: '',
|
||
|
||
})
|
||
|
||
// Map COMPTES
|
||
function MapCompte(latitude , longitude){
|
||
|
||
//Clear Marker Layers
|
||
map.eachLayer(function (layer) {
|
||
map.removeLayer(layer);
|
||
});
|
||
|
||
layer.addTo(map);
|
||
|
||
map.setView([ latitude , longitude ], 13);
|
||
|
||
var stuSplit = L.latLng(latitude , longitude);
|
||
var myMarker = L.marker(stuSplit, { title: 'Votre Position Actuelle' }).addTo(map);
|
||
|
||
|
||
|
||
$('#myModal').on('shown.bs.modal', function() {
|
||
map.invalidateSize();
|
||
});
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
function Questionnaire(formValues) {
|
||
|
||
var params = new window.URLSearchParams(window.location.search);
|
||
var RecordId = params.get('record');
|
||
if(RecordId===null)
|
||
RecordId = sessionStorage.getItem("question_origin_id");
|
||
var count = formValues.length;
|
||
var fieldNameValueMap = {};
|
||
for(var i=0 ; i<count;i++){
|
||
var dataElement = formValues[i];
|
||
fieldNameValueMap[dataElement["name"]] = dataElement["value"];
|
||
}
|
||
|
||
|
||
var accountID = fieldNameValueMap["parent_id"] ;
|
||
|
||
|
||
var produit1_id = fieldNameValueMap["produit_id"] ;
|
||
if (produit1_id === undefined) {produit1_id ="";}
|
||
var produit2_id = fieldNameValueMap["produit2_id"] ;
|
||
if (produit2_id === undefined) {produit2_id ="";}
|
||
var produit3_id = fieldNameValueMap["produit3_id"] ;
|
||
if (produit3_id === undefined) {produit3_id ="";}
|
||
var produit4_id = fieldNameValueMap["produit4_id"] ;
|
||
if (produit4_id === undefined) {produit4_id ="";}
|
||
var produit5_id = fieldNameValueMap["produit5_id"] ;
|
||
if (produit5_id === undefined) {produit5_id ="";}
|
||
|
||
|
||
if(fieldNameValueMap["module"] == "Events"){
|
||
ExisteQuestionnaires(produit1_id , produit2_id , produit3_id , produit4_id , produit5_id , accountID,RecordId);
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
function showMyModalQuestionnaires(origin_id) {
|
||
$('body').append('<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="static" data-keyboard="false">'+
|
||
' <div class="modal-dialog" role="document">'+
|
||
'<div class="modal-content">'+
|
||
' <div class="modal-header">'+
|
||
|
||
'<h4 class="modal-title" id="myModalLabel">Questionnaires</h4>'+
|
||
' </div>'+
|
||
' <div class="modal-body">'+
|
||
' <div id="res"></div>'+
|
||
'</div>'+
|
||
' <div class="modal-footer">'+
|
||
' <center>'+
|
||
'<button type="submit" name="EnregistrerQuestionnaire" onclick="saveData('+origin_id+')" class="btn addButton btn-success" >Enregistrer</button>'+
|
||
'<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>'+
|
||
' </center>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div> '+
|
||
|
||
'<style>'+
|
||
'.modal-body{'+
|
||
'max-height: calc(100vh - 200px);'+
|
||
'overflow-y: auto;'+
|
||
'}</style>' );
|
||
|
||
}
|
||
|
||
function AffichierFormulaire(formulairesIDs , accountID, origin_id) {
|
||
|
||
showMyModalQuestionnaires(origin_id);
|
||
|
||
$.ajax({
|
||
type: "GET",
|
||
url: "index.php?module=Questionnaire&view=Questionnaire&accountID="+accountID+"&formulairesIDs="+formulairesIDs,
|
||
contentType: "application/json; charset=utf-8",
|
||
success: function(result) {
|
||
$('#myModal').modal("show");
|
||
$("#res").html(result);
|
||
}
|
||
});
|
||
}
|
||
|
||
function ExisteQuestionnaires(produit1_id , produit2_id , produit3_id , produit4_id , produit5_id , accountID, origin_id) {
|
||
// $.ajax({
|
||
// type: "GET",
|
||
// url: "index.php?module=QuestionnaireTraitement&view=QuestionnaireTraitement&produit1_id="+produit1_id+"&produit2_id="+produit2_id+"&produit3_id="+produit3_id+"&produit4_id="+produit4_id+"&produit5_id="+produit5_id+"&accountID="+accountID+"&origin_id="+origin_id,
|
||
// async : false,
|
||
// dataType: "application/json",
|
||
// success: function(formulairesIDs) {
|
||
// if(formulairesIDs != ""){
|
||
// AffichierFormulaire(formulairesIDs ,accountID,origin_id);
|
||
// };
|
||
// }
|
||
// });
|
||
$.get("index.php?module=QuestionnaireTraitement&view=QuestionnaireTraitement&produit1_id="+produit1_id+"&produit2_id="+produit2_id+"&produit3_id="+produit3_id+"&produit4_id="+produit4_id+"&produit5_id="+produit5_id+"&accountID="+accountID+"&origin_id="+origin_id,
|
||
function(data, status){
|
||
if(status==="success" && data != "")
|
||
AffichierFormulaire(data ,accountID,origin_id);
|
||
});
|
||
|
||
|
||
}
|
||
|
||
|
||
function saveData(origin_id){
|
||
|
||
var formValues = $("#form").serializeArray();
|
||
formValues.shift();
|
||
|
||
|
||
//reorganiser les donnees Post pour verifier les questions obligatoires
|
||
var fieldNameValueMap = {};
|
||
var allQuestion = [];
|
||
var obligatoire = true;
|
||
for(var gg=0; gg < formValues.length; gg++){
|
||
value = formValues[gg]['value'];
|
||
name = formValues[gg]['name'];
|
||
if(name != "type"){
|
||
if(name.indexOf("autres") != 0){//ELIMINER LE CHAMP AUTRES
|
||
fieldNameValueMap[name] = value;
|
||
}
|
||
}else if(name == "type"){
|
||
fieldNameValueMap = {};
|
||
fieldNameValueMap[name] = value;
|
||
allQuestion.push(fieldNameValueMap);
|
||
}
|
||
}
|
||
|
||
|
||
//check if question obligatoire CHOIXMULTIPLES CHOIXUNIQUE
|
||
var newArray = allQuestion.filter(function (el){
|
||
return ((el.type == "CHOIXUNIQUE" || el.type == "CHOIXMULTIPLES") && el.obligatoire == "1");
|
||
});
|
||
|
||
|
||
for(var c=0; c < newArray.length; c++){
|
||
if(Object.keys(newArray[c]).length == 2){
|
||
obligatoire = false ;
|
||
break;
|
||
}
|
||
}
|
||
//check if question obligatoire CHOIXMULTIPLES CHOIXUNIQUE
|
||
|
||
|
||
|
||
//check if question obligatoire NOMBRE PICKLISTGROSSISTE PARAGRAPHE
|
||
var obligatoire2 = true ;
|
||
var newArray2 = allQuestion.filter(function (el){
|
||
return ((el.type == "NOMBRE" || el.type == "PICKLISTGROSSISTE" || el.type == "PARAGRAPHE") && el.obligatoire == "1");
|
||
});
|
||
|
||
newArray2.forEach(e => {delete e.type });//ELIMINER LE CHAMP type
|
||
newArray2.forEach(e => {delete e.obligatoire });
|
||
for(var s=0; s < newArray2.length; s++){
|
||
if(Object.values(newArray2[s]).join("").length == 0){
|
||
obligatoire2 = false ;
|
||
break;
|
||
}
|
||
}
|
||
//check if question obligatoire NOMBRE PICKLISTGROSSISTE
|
||
|
||
//check if question obligatoire POURCENTAGE et sum 100%
|
||
var obligatoire3 = true ;
|
||
var newArray3 = allQuestion.filter(function (el){
|
||
return ((el.type == "POURCENTAGE") && el.obligatoire == "1");
|
||
});
|
||
|
||
newArray3.forEach(e => {delete e.type });//ELIMINER LE CHAMP type
|
||
newArray3.forEach(e => {delete e.obligatoire });//obligatoire LE CHAMP type
|
||
for(var w=0; w < newArray3.length; w++){
|
||
numbers = Object.values(newArray3[w]).map(Number);
|
||
var sum = numbers.reduce(function(acc, val) { return acc + val; }, 0);
|
||
if( sum != 100 ){
|
||
obligatoire3 = false;
|
||
break;
|
||
}
|
||
}
|
||
//check if question obligatoire POURCENTAGE
|
||
|
||
|
||
|
||
//check if question non obligatoire type POURCENTAGE mais les sommes doit etre egal a 100%
|
||
var sommesOfPourcentage = true;
|
||
var newArray4 = allQuestion.filter(function (el){
|
||
return ((el.type == "POURCENTAGE") && el.obligatoire == "0");
|
||
});
|
||
|
||
newArray4.forEach(e => {delete e.type });//ELIMINER LE CHAMP type
|
||
newArray4.forEach(e => {delete e.obligatoire });//obligatoire LE CHAMP type
|
||
for(var nn=0; nn < newArray4.length; nn++){
|
||
numberstow = Object.values(newArray4[nn]).map(Number);
|
||
var summ = numberstow.reduce(function(acc, val) { return acc + val; }, 0);
|
||
console.log(summ);
|
||
if( summ == 0 ){ summ = 100;}
|
||
if( summ != 100 ){
|
||
sommesOfPourcentage = false ;
|
||
break;
|
||
}
|
||
}
|
||
//check if question non obligatoire est type = POURCENTAGE mais le % doit etre egal a 100%
|
||
|
||
|
||
|
||
|
||
if( obligatoire == true && obligatoire2 == true && obligatoire3 == true && sommesOfPourcentage == true){
|
||
jQuery('#messageBar').removeClass('hide');
|
||
jQuery("button[name='EnregistrerQuestionnaire']").attr("disabled","disabled");
|
||
$('#form').append('<input type="hidden" name="origin_id" value="'+origin_id+'" />');
|
||
|
||
$.ajax({
|
||
type: "POST",
|
||
url: "index.php?module=QuestionnaireSaveData&view=QuestionnaireSaveData",
|
||
data: $('#form').serialize(),
|
||
cache: true,
|
||
success: function (data) {
|
||
var dataResult = JSON.parse(data);
|
||
if(dataResult == 1){
|
||
//Close Bootstrap Modal
|
||
$('#myModal').modal('toggle');
|
||
|
||
$("button[name='EnregistrerQuestionnaire']").removeAttr("disabled");
|
||
jQuery('#messageBar').addClass('hide');
|
||
|
||
var param = {title:"success"};
|
||
Vtiger_Helper_Js.showPnotify(param);
|
||
}else{
|
||
$("button[name='EnregistrerQuestionnaire']").removeAttr("disabled");
|
||
|
||
jQuery('#messageBar').addClass('hide');
|
||
|
||
var param = {type:"error" ,title:"Error"};
|
||
Vtiger_Helper_Js.showPnotify(param);
|
||
}
|
||
|
||
} ,
|
||
error: function(){
|
||
$("button[name='EnregistrerQuestionnaire']").removeAttr("disabled");
|
||
jQuery('#messageBar').addClass('hide');
|
||
|
||
var param = {type:"error" ,title:"Aucune Connexion Internet"};
|
||
Vtiger_Helper_Js.showPnotify(param);
|
||
}
|
||
});
|
||
}else{
|
||
alert("1- La somme des pourcentages doit être égale à 100 %. \n2- vérifier les questions obligatoires.");
|
||
}
|
||
|
||
}
|
||
|
||
function getQuestionnaireListeResultats(){
|
||
|
||
jQuery('#messageBar').removeClass('hide');
|
||
jQuery('.tab-item').removeClass('active');
|
||
jQuery('#QuestionnaireListeAccount').addClass('active');
|
||
|
||
var params = new window.URLSearchParams(window.location.search);
|
||
var RecordId = params.get('record');
|
||
|
||
|
||
$.ajax({
|
||
type: "GET",
|
||
url: "index.php?module=QuestionnaireListeResultats&view=QuestionnaireListeResultats&RecordId="+RecordId,
|
||
contentType: "application/json; charset=utf-8",
|
||
success: function(result) {
|
||
jQuery('#messageBar').addClass('hide');
|
||
$(".details.row").html(result);
|
||
},
|
||
error: function(){
|
||
|
||
jQuery('#messageBar').addClass('hide');
|
||
var param = {type:"error" ,title:"Aucune Connexion Internet"};
|
||
Vtiger_Helper_Js.showPnotify(param);
|
||
}
|
||
});
|
||
}
|
||
|
||
function showEditQuestion(idQuestion , canEdit){
|
||
|
||
jQuery('#messageBar').removeClass('hide');
|
||
$.ajax({
|
||
type: "GET",
|
||
url: "index.php?module=QuestionnaireListeResultatsEdit&view=QuestionnaireListeResultatsEdit&IdResultatQuestion="+idQuestion+"&canEdit="+canEdit,
|
||
cache: false,
|
||
contentType: "application/json; charset=utf-8",
|
||
success: function(result) {
|
||
$("#ResultModalEditQuestion").html(result);
|
||
$("#ModalEditQuestion").modal("show");
|
||
jQuery('#messageBar').addClass('hide');
|
||
},
|
||
error: function(){
|
||
|
||
jQuery('#messageBar').addClass('hide');
|
||
var param = {type:"error" ,title:"Aucune Connexion Internet"};
|
||
Vtiger_Helper_Js.showPnotify(param);
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
function UpdateResultatQuestion(){
|
||
|
||
jQuery('#messageBar').removeClass('hide');
|
||
var data = $("#formEditResultatQuestion").serialize();
|
||
|
||
$.ajax({
|
||
type: "GET",
|
||
url: "QuestionnaireUpdateQuestion.php",
|
||
cache: false,
|
||
data: data,
|
||
success: function (data) {
|
||
|
||
$('#ModalEditQuestion').modal('toggle');
|
||
jQuery('#messageBar').addClass('hide');
|
||
getQuestionnaireListeResultats();
|
||
|
||
} ,
|
||
error: function(){
|
||
|
||
jQuery('#messageBar').addClass('hide');
|
||
var param = {type:"error" ,title:"Aucune Connexion Internet"};
|
||
Vtiger_Helper_Js.showPnotify(param);
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
function CallQuestionnaire(){
|
||
|
||
if(isFirstTime == false) return true;
|
||
|
||
if($("form")[0].checkValidity()) {
|
||
isFirstTime = false;
|
||
Questionnaire($("form").serializeArray());
|
||
|
||
}
|
||
|
||
return isFirstTime;
|
||
}
|
||
|
||
|
||
var remisesave = false;
|
||
function SetRemise(){
|
||
|
||
if(remisesave) {
|
||
remisesave = false;
|
||
return true;
|
||
}
|
||
|
||
var idPack = $("input[name='potential_id']").val();
|
||
if(idPack != "0"){
|
||
|
||
var netTotal = $("#netTotal").html();
|
||
$.ajax({
|
||
type: "GET",
|
||
url: "index.php?module=bonDeCommandeAjax&view=bonDeCommandeAjax&action=getremise&idPack="+idPack+"&netTotal="+netTotal,
|
||
success: function (data) {
|
||
$("input[data-discount-type='percentage']").prop('checked', true);
|
||
$("#discount_percentage_final").val(data);
|
||
|
||
jQuery('.btn.btn-success.popoverButton').click();
|
||
remisesave = true;
|
||
jQuery('.btn.btn-success.saveButton').click();
|
||
},
|
||
error: function(data){
|
||
console.log(data);
|
||
}
|
||
});
|
||
return false;
|
||
|
||
}
|
||
return true;
|
||
|
||
}
|