/*+*********************************************************************************** * 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.Class("Vtiger_DashBoard_Js",{ gridster : false, //static property which will store the instance of dashboard currentInstance : false, dashboardTabsLimit : 10, addWidget : function(element, url) { var element = jQuery(element); var linkId = element.data('linkid'); var name = element.data('name'); // After adding widget, we should remove that widget from Add Widget drop down menu from active tab var activeTabId = Vtiger_DashBoard_Js.currentInstance.getActiveTabId(); jQuery('a[data-name="'+name+'"]',"#tab_"+activeTabId).parent().hide(); var widgetContainer = jQuery('
'); widgetContainer.data('url', url); var width = element.data('width'); var height = element.data('height'); Vtiger_DashBoard_Js.gridster.add_widget(widgetContainer, width, height); Vtiger_DashBoard_Js.currentInstance.loadWidget(widgetContainer); }, addMiniListWidget: function(element, url) { // 1. Show popup window for selection (module, filter, fields) // 2. Compute the dynamic mini-list widget url // 3. Add widget with URL to the page. element = jQuery(element); app.request.post({"url":"index.php?module=Home&view=MiniListWizard&step=step1"}).then(function(err,res){ var callback = function(data){ var wizardContainer = jQuery(data); var form = jQuery('form', wizardContainer); var moduleNameSelectDOM = jQuery('select[name="module"]', wizardContainer); var filteridSelectDOM = jQuery('select[name="filterid"]', wizardContainer); var fieldsSelectDOM = jQuery('select[name="fields"]', wizardContainer); var moduleNameSelect2 = vtUtils.showSelect2ElementView(moduleNameSelectDOM, { placeholder: app.vtranslate('JS_SELECT_MODULE') }); var filteridSelect2 = vtUtils.showSelect2ElementView(filteridSelectDOM,{ placeholder: app.vtranslate('JS_PLEASE_SELECT_ATLEAST_ONE_OPTION') }); var fieldsSelect2 = vtUtils.showSelect2ElementView(fieldsSelectDOM, { placeholder: app.vtranslate('JS_PLEASE_SELECT_ATLEAST_ONE_OPTION'), closeOnSelect: true, maximumSelectionSize: 5 }); var footer = jQuery('.modal-footer', wizardContainer); filteridSelectDOM.closest('tr').hide(); fieldsSelectDOM.closest('tr').hide(); footer.hide(); moduleNameSelect2.change(function(){ if (!moduleNameSelect2.val()) return; var moduleNameSelect2Params = { module: 'Home', view: 'MiniListWizard', step: 'step2', selectedModule: moduleNameSelect2.val() }; app.request.post({"data":moduleNameSelect2Params}).then(function(err,res) { filteridSelectDOM.empty().html(res).trigger('change'); filteridSelect2.closest('tr').show(); fieldsSelect2.closest('tr').hide(); footer.hide(); }) }); filteridSelect2.change(function(){ if (!filteridSelect2.val()) return; var selectedModule = moduleNameSelect2.val(); var filteridSelect2Params = { module: 'Home', view: 'MiniListWizard', step: 'step3', selectedModule: selectedModule, filterid: filteridSelect2.val() }; app.request.post({"data":filteridSelect2Params}).then(function(err,res){ fieldsSelectDOM.empty().html(res).trigger('change'); var translatedModuleNames = JSON.parse(jQuery("#minilistWizardContainer").find("#translatedModuleNames").val()); var fieldsLabelText = app.vtranslate('JS_EDIT_FIELDS', translatedModuleNames[selectedModule], translatedModuleNames[selectedModule]); fieldsSelect2.closest('tr').find('.fieldLabel label').text(fieldsLabelText); fieldsSelect2.closest('tr').show(); }); }); fieldsSelect2.change(function() { if (!fieldsSelect2.val()) { footer.hide(); } else { footer.show(); } }); form.submit(function(e){ e.preventDefault(); //To disable savebutton after one submit to prevent multiple submits jQuery("[name='saveButton']").attr('disabled','disabled'); var selectedModule = moduleNameSelect2.val(); var selectedFilterId= filteridSelect2.val(); var selectedFields = fieldsSelect2.val(); if (typeof selectedFields != 'object') selectedFields = [selectedFields]; // TODO mandatory field validation finializeAdd(selectedModule, selectedFilterId, selectedFields); }); } app.helper.showModal(res,{"cb":callback}); }); function finializeAdd(moduleName, filterid, fields) { var data = { module: moduleName } if (typeof fields != 'object') fields = [fields]; data['fields'] = fields; url += '&filterid='+filterid+'&data=' + JSON.stringify(data); var linkId = element.data('linkid'); var name = element.data('name'); var widgetContainer = jQuery(''); widgetContainer.data('url', url); var width = element.data('width'); var height = element.data('height'); Vtiger_DashBoard_Js.gridster.add_widget(widgetContainer, width, height); Vtiger_DashBoard_Js.currentInstance.loadWidget(widgetContainer); app.helper.hideModal(); } }, addNoteBookWidget : function(element, url) { // 1. Show popup window for selection (module, filter, fields) // 2. Compute the dynamic mini-list widget url // 3. Add widget with URL to the page. element = jQuery(element); app.request.get({"url":"index.php?module=Home&view=AddNotePad"}).then(function(err,res){ var callback = function(data){ var wizardContainer = jQuery(data); var form = jQuery('form', wizardContainer); var params = { submitHandler : function(form){ //To prevent multiple click on save var form = jQuery(form); jQuery("[name='saveButton']").attr('disabled','disabled'); var notePadName = form.find('[name="notePadName"]').val(); var notePadContent = form.find('[name="notePadContent"]').val(); var linkId = element.data('linkid'); var noteBookParams = { 'module' : app.getModuleName(), 'action' : 'NoteBook', 'mode' : 'NoteBookCreate', 'notePadName' : notePadName, 'notePadContent' : notePadContent, 'linkId' : linkId, 'tab' : jQuery(".tab-pane.active").data("tabid") } app.request.post({"data":noteBookParams}).then(function(err,data) { if(data){ var widgetId = data.widgetId; app.helper.hideModal(); url += '&widgetid='+widgetId; var name = element.data('name'); var widgetContainer = jQuery(''); widgetContainer.data('url', url); var width = element.data('width'); var height = element.data('height'); Vtiger_DashBoard_Js.gridster.add_widget(widgetContainer, width, height); Vtiger_DashBoard_Js.currentInstance.loadWidget(widgetContainer); } }); return false; } } form.vtValidate(params); } app.helper.showModal(res,{"cb":callback}); }); } },{ container : false, instancesCache : {}, init : function() { Vtiger_DashBoard_Js.currentInstance = this; this.addComponents(); }, addComponents : function (){ this.addComponent('Vtiger_Index_Js'); }, getDashboardContainer : function(){ return jQuery(".dashBoardContainer"); }, getContainer : function(tabid) { if(typeof tabid == 'undefined'){ tabid = this.getActiveTabId(); } return jQuery(".gridster_"+tabid).find('ul'); }, getWidgetInstance : function(widgetContainer) { var id = widgetContainer.attr('id'); if(!(id in this.instancesCache)) { var widgetName = widgetContainer.data('name'); if(widgetName === "ChartReportWidget"){ widgetName+= "_"+id; } this.instancesCache[id] = Vtiger_Widget_Js.getInstance(widgetContainer, widgetName); } else{ this.instancesCache[id].init(widgetContainer); } return this.instancesCache[id]; }, getActiveTabId : function(){ return jQuery(".tab-pane.active").data("tabid"); }, getActiveTabName : function(){ return jQuery(".tab-pane.active").data("tabname"); }, getgridColumns: function(){ var _device_width = $(window).innerWidth(); var gridWidth = _device_width; if (_device_width < 480) { gridWidth = 1; } else if (_device_width >= 480 && _device_width < 768) { gridWidth = 1; } else if (_device_width >= 768 && _device_width < 992) { gridWidth = 2; } else if (_device_width >= 992 && _device_width < 1440) { gridWidth = 3; } else { gridWidth = 4; } return gridWidth; }, saveWidgetSize: function (widget) { var dashboardTabId = widget.closest('.tab-pane.active').data('tabid'); var widgetSize = { 'sizex': widget.attr('data-sizex'), 'sizey': widget.attr('data-sizey') }; if (widgetSize.sizex && widgetSize.sizey) { var params = { 'module': 'Vtiger', 'action': 'SaveWidgetSize', 'id': widget.attr('id'), 'size': widgetSize, 'tabid': dashboardTabId }; app.request.post({"data": params}).then(function (err, data) { }); } }, getWaitingForResizeCompleteMsg: function () { return ''+app.vtranslate('JS_WIDGET_RESIZING_WAIT_MSG')+'