/*+***********************************************************************************
* 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_Index_Js("Vtiger_TaskManagement_Js",{},{
overlayContainer : false,
getOverlayContainer : function(){
if(this.overlayContainer === false){
this.overlayContainer = jQuery('#taskManagementContainer');
}
return this.overlayContainer;
},
getModuleName : function(){
return "Calendar";
},
getColors : function(){
return jQuery('input[name="colors"]').val();
},
saveFieldValue : function(recordId, fieldNameValueMap){
var aDeferred = jQuery.Deferred();
var data = {};
if(typeof fieldNameValueMap != 'undefined'){
data = fieldNameValueMap;
}
data['record'] = recordId;
data['module'] = this.getModuleName();
data['calendarModule'] = this.getModuleName();
data['action'] = 'SaveAjax';
app.request.post({data:data}).then(
function(err, reponseData){
if(err === null){
app.helper.showSuccessNotification({"message":''});
aDeferred.resolve(reponseData);
} else {
app.helper.showErrorNotification({"message":err});
}
}
);
return aDeferred.promise();
},
registerStatusCheckboxEvent : function(){
var thisInstance = this;
var overlay = this.getOverlayContainer();
overlay.on('click','.statusCheckbox',function(e){
var element = overlay.find(e.currentTarget);
var task = element.closest('.task');
var taskSubjectEle = task.find('.taskSubject');
var recordId = task.data('recordid');
var fieldNameValueMap = {};
if (element.is(':checked')) {
element.disable();
fieldNameValueMap['value'] = 'Completed';
fieldNameValueMap['field'] = 'taskstatus';
app.helper.showProgress();
thisInstance.saveFieldValue(recordId,fieldNameValueMap).then(function(){
app.helper.hideProgress();
taskSubjectEle.addClass("textStrike");
thisInstance.clearExistingCustomScroll();
thisInstance.loadContents();
});
}
});
},
getAllContents : function(params){
var aDeferred = jQuery.Deferred();
this.filterRecords(params, "getAllContents").then(function(data){
aDeferred.resolve(data);
});
return aDeferred.promise();
},
getContentsOfPriority : function(params){
var aDeferred = jQuery.Deferred();
this.filterRecords(params, "getContentsOfPriority").then(function(data){
aDeferred.resolve(data);
});
return aDeferred.promise();
},
filterRecords : function(params,mode){
var aDeferred = jQuery.Deferred();
var filters = this.getAllFilterParams();
var dataParams = {
'module' : this.getModuleName(),
'filters': filters,
'view' : 'TaskManagement',
'mode' : mode
}
var dataParams = jQuery.extend(dataParams,params);
var colors = this.getColors();
if(typeof colors != "undefined"){
dataParams["colors"] = colors;
}
app.request.get({"data":dataParams}).then(function(err,data){
if(err === null){
aDeferred.resolve(data);
}
});
return aDeferred.promise();
},
clearExistingCustomScroll : function(){
var blocksList = jQuery(".contentsBlock");
blocksList.each(function(index,blockElement){
var blockElement = jQuery(blockElement);
var scrollableElement = blockElement.find('.scrollable');
scrollableElement.mCustomScrollbar('destroy');
});
},
registerDateFilters : function(){
var thisInstance = this;
var overlay = this.getOverlayContainer();
overlay.on("click",".dateFilters button",function(e){
var currentTarget = jQuery(e.currentTarget);
if(!currentTarget.hasClass('rangeDisplay')){
jQuery('#taskManagementContainer .dateFilters button').removeClass('active');
currentTarget.addClass('active');
thisInstance.clearExistingCustomScroll();
thisInstance.loadContents();
app.helper.hideProgress();
}
});
overlay.on('datepicker-change', 'button[data-calendar-type="range"]', function(e){
var element = jQuery(e.currentTarget);
jQuery('#taskManagementContainer .dateFilters button').removeClass('active');
element.addClass('active');
var parentContainer = element.closest('.dateFilters');
parentContainer.find('.selectedRange').html("("+element.val()+")").closest('button').removeClass('hide');
thisInstance.clearExistingCustomScroll();
thisInstance.loadContents();
});
overlay.on('click', '.clearRange', function(e){
var container = jQuery('.dateFilters');
container.find('[data-filtermode="all"]').trigger('click');
container.find('.rangeDisplay').addClass('hide');
});
},
registerTaskManagementSearch : function(){
var thisInstance = this;
var overlay = this.getOverlayContainer();
overlay.find('#taskManagementOtherFilters').find('.search').on('click',function(e){
thisInstance.clearExistingCustomScroll();
thisInstance.loadContents();
});
},
registerQuickEditTaskEvent : function(){
var thisInstance = this;
var overlay = this.getOverlayContainer();
jQuery('#taskManagementContainer').on('click', ".quickTask",function(e){
e.stopImmediatePropagation();
var target = jQuery(e.currentTarget);
var quickCreateNode = jQuery('#quickCreateModules').find('[data-name="Calendar"]');
if(quickCreateNode.length <= 0) {
app.helper.showErrorMessage(app.vtranslate('JS_NO_CREATE_OR_NOT_QUICK_CREATE_ENABLED'));
}
var priority = target.closest(".content").data("priority");
app.event.one("post.QuickCreateForm.show",function(event,form){
var basicInfo = target.closest(".task").data('basicinfo');
var recordId = target.closest(".task").data('recordid');
form.find('.modal-header h4').html(app.vtranslate('JS_CREATE_TASK'));
if(typeof basicInfo != "undefined"){
// we should set field values when we edit any record
form.append("");
thisInstance.fillPopoverFieldValues(form,basicInfo);
} else {
var taskSubject = jQuery(".taskSubject."+priority).val();
if(taskSubject.length > 0){
form.find('input[name="subject"]').val(taskSubject);
}
var taskStatus = form.find('select[name="taskstatus"]');
taskStatus.val('Not Started');
vtUtils.showSelect2ElementView(taskStatus);
}
var taskPriority = form.find('select[name="taskpriority"]');
if(taskPriority.length > 0){
taskPriority.val(priority);
vtUtils.showSelect2ElementView(taskPriority);
}
form.append("");
});
var QuickCreateParams = {};
QuickCreateParams['noCache'] = false;
quickCreateNode.trigger('click', QuickCreateParams);
});
},
registerPostQuickCreateSaveEvent : function() {
var thisInstance = this;
app.event.on('post.QuickCreateForm.save',function(event,data){
if(typeof data == 'object'){
priority = data['taskpriority']['value'];
}
var contentsBlock = jQuery("#taskManagementContainer").find(".contentsBlock ."+priority.toLowerCase()+"");
thisInstance.clearExistingCustomScroll();
thisInstance.loadContent(priority.toLowerCase());
});
},
fillPopoverFieldValues : function(form,data){
var formName = form.attr('name');
for (var key in data) {
var value = data[key];
if((key == 'parent_id') || (key == 'contact_id')){
var fieldElement = jQuery('form[name="'+formName+'"]').find('[name="'+key+'_display"]');
}else{
var fieldElement = jQuery('form[name="'+formName+'"]').find('[name="'+key+'"]');
}
if(fieldElement.length > 0){
var elementType = fieldElement.data("fieldtype");
if(elementType == "picklist" || elementType == "owner"){
fieldElement.select2("val", value);
} else if(elementType == "multipicklist"){
// for multipicklist name in field element will be key[]
fieldElement = jQuery('form[name="'+formName+'"]').find('[name="'+key+'[]"]');
if(value != null){
value = value.split(" |##| ");
}
fieldElement.select2("val", value);
}else if(elementType == "checkbox"){
if(value == 1){
fieldElement.attr("checked",true);
fieldElement.prop("checked",true);
} else {
fieldElement.attr("checked",false);
fieldElement.prop("checked",false);
}
} else if(elementType == "reference"){
var parent = fieldElement.closest('.input-group');
if((value != null) && (value["id"] != null)){
parent.find(".sourceField").attr("value",value["id"]);
fieldElement.val(value["display_value"]);
fieldElement.attr("disabled","disabled");
parent.find('.clearReferenceSelection').removeClass('hide');
parent.find('input[name="popupReferenceModule"]').val(value["module"]);
var referenceModuleList = parent.find(".referenceModulesList");
if(referenceModuleList.length > 0){
referenceModuleList.select2("val",value["module"]);
}
}else {
parent.find('.clearReferenceSelection').trigger('click');
}
}else {
fieldElement.val(value);
}
}
}
},
/**
* Function to get parameters for related module popup
* @param {type} container
* @returns {TaskManagementAnonym$1.getPopUpParams.params|TaskManagementAnonym$1.getPopUpParams@call;_super}
*/
getPopUpParams : function(container) {
var params = this._super(container);
var sourceFieldElement = jQuery('input[class="sourceField"]',container);
if(sourceFieldElement.attr('name') == 'contact_id') {
var form = container.closest('form');
var parentIdElement = form.find('[name="parent_id"]');
var closestContainer = parentIdElement.closest('.referencefield-wrapper');
var referenceModule = closestContainer.find('[name="popupReferenceModule"]');
if(parentIdElement.length > 0 && parentIdElement.val().length > 0 && referenceModule.length >0) {
params['related_parent_id'] = parentIdElement.val();
params['related_parent_module'] = referenceModule.val();
}
}
return params;
},
saveNewTask : function(fieldValues){
var aDeferred = jQuery.Deferred();
var params = {
'module' : this.getModuleName(),
'action' : 'TaskManagement',
'mode' : 'addTask',
'calendarModule':this.getModuleName()
}
var postParams = jQuery.extend(params,fieldValues);
app.request.post({"data":postParams}).then(function(err,data){
if(err === null){
aDeferred.resolve(data);
}
});
return aDeferred.promise();
},
registerSubjectFieldEnterEvent : function(){
var thisInstance = this;
var overlay = this.getOverlayContainer();
overlay.on("keypress",".taskSubject",function(e){
var currentTarget = jQuery(e.currentTarget);
var keycode = (e.keyCode ? e.keyCode : e.which);
if(keycode == '13'){
jQuery(this).blur();
var subject = currentTarget.val();
var priority = currentTarget.closest('.content').data("priority");
if(subject.trim() == ""){
app.helper.showErrorNotification({'message': app.vtranslate('JS_SUBJECT_VALUE_CANT_BE_EMPTY')})
return false;
}
var form = jQuery(".editTaskContent").find("#editTask").clone().removeClass('hide');
vtUtils.applyFieldElementsView(form);
var formValues = form.serializeArray();
var count = formValues.length;
var fieldNameValueMap = {};
for(var i=0 ; i 0){
taskStatus.find('[value="Not Started"]').attr('selected', "selected");
taskStatus.find('[value="In Progress"]').attr('selected', "selected");
taskStatus.find('[value="Pending Input"]').attr('selected', "selected");
taskStatus.find('[value="Planned"]').attr('selected', "selected");
vtUtils.showSelect2ElementView(taskStatus);
this.loadContents();
}
},
registerQuickPreviewForTask : function(){
var self = this;
var container = this.getOverlayContainer();
container.on('click', '.quickPreview', function(e){
e.preventDefault();
var element = jQuery(e.currentTarget);
var recordId = element.data('id');
var href = element.attr("href");
var module = self.getModuleName();
if(typeof href != 'undefined'){
var data = app.convertUrlToDataParams(href);
module = data.module;
}
var vtigerInstance = Vtiger_Index_Js.getInstance();
vtigerInstance.showQuickPreviewForId(recordId, module);
});
},
registerEvents : function(){
var thisInstance = this;
// this.loadContents();
this.registerMoreButtonClickEvent();
this.registerStatusCheckboxEvent();
this.registerDateFilters();
this.registerTaskManagementSearch();
this.registerEditedTaskCancelEvent();
this.registerSubjectFieldEnterEvent();
this.registerParentModuleChangeEvent();
this.registerTaskDropEvent();
this.registerDeleteTaskEvent();
this.registerQuickEditTaskEvent();
this.registerPostQuickCreateSaveEvent();
this.initializeTaskStatus();
this.registerQuickPreviewForTask();
vtUtils.registerEventForDateFields(jQuery('#taskManagementContainer'));
app.event.on("post.filter.load",function(e){
var params = {
setHeight: '400px',
autoHideScrollbar: false
};
app.helper.showVerticalScroll(jQuery('.scrollable'),params);
thisInstance.registerTaskDragEvent();
app.helper.hideProgress();
});
}
});