/*+***********************************************************************************
* 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.
*************************************************************************************/
Reports_Edit_Js("Reports_Edit1_Js",{},{
relatedModulesMapping : false,
step1Container : false,
secondaryModulesContainer : false,
init : function() {
this.initialize();
},
/**
* Function to get the container which holds all the reports step1 elements
* @return jQuery object
*/
getContainer : function() {
return this.step1Container;
},
/**
* Function to set the reports step1 container
* @params : element - which represents the reports step1 container
* @return : current instance
*/
setContainer : function(element) {
this.step1Container = element;
return this;
},
/*
* Function to get the secondary module container
*/
getSecondaryModuleContainer : function(){
if(this.secondaryModulesContainer == false){
this.secondaryModulesContainer = jQuery('#secondary_module');
}
return this.secondaryModulesContainer;
},
/**
* Function to intialize the reports step1
*/
initialize : function(container) {
if(typeof container == 'undefined') {
container = jQuery('#report_step1');
}
if(container.is('#report_step1')) {
this.setContainer(container);
}else{
this.setContainer(jQuery('#report_step1'));
}
this.intializeOperationMappingDetails();
},
/**
* Function which will save the related modules mapping
*/
intializeOperationMappingDetails : function() {
this.relatedModulesMapping = jQuery('#relatedModules').data('value');
},
/**
* Function which will return set of condition for the given field type
* @return array of conditions
*/
getRelatedModulesFromPrimaryModule : function(primaryModule){
return this.relatedModulesMapping[primaryModule];
},
loadRelatedModules : function(primaryModule){
var relatedModulesMapping = this.getRelatedModulesFromPrimaryModule(primaryModule);
var options = '';
for(var key in relatedModulesMapping) {
//IE Browser consider the prototype properties also, it should consider has own properties only.
if(relatedModulesMapping.hasOwnProperty(key)) {
options += '';
}
}
var secondaryModulesContainer = this.getSecondaryModuleContainer();
secondaryModulesContainer.html(options).trigger("change");
},
registerPrimaryModuleChangeEvent : function(){
var thisInstance = this;
jQuery('#primary_module').on('change',function(e){
var primaryModule = jQuery(e.currentTarget).val();
thisInstance.loadRelatedModules(primaryModule);
});
},
/*
* Function to check Duplication of report Name
* returns boolean true or false
*/
checkDuplicateName : function(details) {
var aDeferred = jQuery.Deferred();
var moduleName = app.getModuleName();
var params = {
'module' : moduleName,
'action' : "CheckDuplicate",
'reportname' : details.reportName,
'record' : details.reportId,
'isDuplicate' : details.isDuplicate
}
AppConnector.request(params).then(
function(data) {
var response = data['result'];
var result = response['success'];
if(result == true) {
aDeferred.reject(response);
} else {
aDeferred.resolve(response);
}
},
function(error,err){
aDeferred.reject();
}
);
return aDeferred.promise();
},
submit : function(){
var thisInstance = this;
var aDeferred = jQuery.Deferred();
var form = this.getContainer();
var formData = form.serializeFormData();
var params = {};
var reportName = jQuery.trim(formData.reportname);
var reportId = formData.record;
var progressIndicatorElement = jQuery.progressIndicator({
'position' : 'html',
'blockInfo' : {
'enabled' : true
}
});
thisInstance.checkDuplicateName({
'reportName' : reportName,
'reportId' : reportId,
'isDuplicate' : formData.isDuplicate
}).then(
function(data){
AppConnector.request(formData).then(
function(data) {
form.hide();
progressIndicatorElement.progressIndicator({
'mode' : 'hide'
})
aDeferred.resolve(data);
},
function(error,err){
}
);
},
function(data, err){
progressIndicatorElement.progressIndicator({
'mode' : 'hide'
});
params = {
title: app.vtranslate('JS_DUPLICATE_RECORD'),
text: data['message']
};
Vtiger_Helper_Js.showPnotify(params);
aDeferred.reject();
}
);
return aDeferred.promise();
},
/**
* Function which will register the select2 elements for secondary modules selection
*/
registerSelect2ElementForSecondaryModulesSelection : function() {
var secondaryModulesContainer = this.getSecondaryModuleContainer();
app.changeSelectElementView(secondaryModulesContainer, 'select2', {maximumSelectionSize: 2});
},
/**
* Function to register event for scheduled reports UI
*/
registerEventForScheduledReprots : function() {
var thisInstance = this;
jQuery('input[name="enable_schedule"]').on('click', function(e) {
var element = jQuery(e.currentTarget);
var scheduleBoxContainer = jQuery('#scheduleBox');
if(element.is(':checked')) {
element.val(element.is(':checked'));
scheduleBoxContainer.removeClass('hide');
} else {
element.val(element.is(':checked'));
scheduleBoxContainer.addClass('hide');
}
});
app.registerEventForTimeFields('#schtime', true);
app.registerEventForDatePickerFields('#scheduleByDate', true);
jQuery('#annualDates').chosen();
jQuery('#schdayoftheweek').chosen();
jQuery('#schdayofthemonth').chosen();
jQuery('#recipients').chosen();
var currentYear = new Date().getFullYear();
jQuery('#annualDatePicker').datepick({autoSize: true, multiSelect:100,monthsToShow: [1,2],
minDate: '01/01/'+currentYear, maxDate: '12/31/'+currentYear,
yearRange: currentYear+':'+currentYear,
onShow : function() {
//Hack to remove the year
thisInstance.removeYearInAnnualReport();
},
onSelect : function(dates) {
var datesInfo = [];
var values = [];
var html='';
// reset the annual dates
var annualDatesEle = jQuery('#annualDates');
thisInstance.updateAnnualDates(annualDatesEle);
for(index in dates) {
var date = dates[index];
datesInfo.push({
id:thisInstance.DateToYMD(date),
text:thisInstance.DateToYMD(date)
});
values.push(thisInstance.DateToYMD(date));
html += '';
}
annualDatesEle.append(html);
annualDatesEle.trigger("liszt:updated");
}
});
var annualDatesEle = jQuery('#annualDates');
thisInstance.updateAnnualDates(annualDatesEle);
annualDatesEle.trigger("liszt:updated");
},
removeYearInAnnualReport : function() {
setTimeout(function() {
var year = jQuery('.datepick-month.first').find('.datepick-month-year').get(1);
jQuery(year).hide();
var monthHeaders = jQuery('.datepick-month-header');
jQuery.each(monthHeaders, function( key, ele ) {
var header = jQuery(ele);
var str = header.html().replace(/[\d]+/, '');
header.html(str);
});
},100);
},
updateAnnualDates : function(annualDatesEle) {
annualDatesEle.html('');
var annualDatesJSON = jQuery('#hiddenAnnualDates').val();
if(annualDatesJSON) {
var hiddenDates = '';
var annualDates = JSON.parse(annualDatesJSON);
for(i in annualDates) {
hiddenDates += '';
}
annualDatesEle.html(hiddenDates);
}
},
DateToYMD : function (date) {
var year, month, day;
year = String(date.getFullYear());
month = String(date.getMonth() + 1);
if (month.length == 1) {
month = "0" + month;
}
day = String(date.getDate());
if (day.length == 1) {
day = "0" + day;
}
return year + "-" + month + "-" + day;
},
registerEventForChangeInScheduledType : function() {
var thisInstance = this;
jQuery('#schtypeid').on('change', function(e){
var element = jQuery(e.currentTarget);
var value = element.val();
thisInstance.showScheduledTime();
thisInstance.hideScheduledWeekList();
thisInstance.hideScheduledMonthByDateList();
thisInstance.hideScheduledAnually();
thisInstance.hideScheduledSpecificDate();
if(value == '2') { //weekly
thisInstance.showScheduledWeekList();
} else if(value == '3') { //monthly by day
thisInstance.showScheduledMonthByDateList();
} else if(value == '4') { //Anually
thisInstance.showScheduledAnually();
} else if(value == '5') { //specific date
thisInstance.showScheduledSpecificDate();
}
});
},
//Remove annual dates element
registerEventForRemoveAnnualDates : function() {
var thisInstance = this;
jQuery("#annualDates").chosen().change(function(e){
jQuery('#hiddenAnnualDates').val(JSON.stringify(jQuery(e.target).val()));
var element = jQuery(e.currentTarget);
thisInstance.updateAnnualDates(element);
element.trigger("liszt:updated");
});
},
hideScheduledTime : function() {
jQuery('#scheduledTime').addClass('hide');
},
showScheduledTime : function() {
jQuery('#scheduledTime').removeClass('hide');
},
hideScheduledWeekList : function() {
jQuery('#scheduledWeekDay').addClass('hide');
},
showScheduledWeekList : function() {
jQuery('#scheduledWeekDay').removeClass('hide');
},
hideScheduledMonthByDateList : function() {
jQuery('#scheduleMonthByDates').addClass('hide');
},
showScheduledMonthByDateList : function() {
jQuery('#scheduleMonthByDates').removeClass('hide');
},
hideScheduledSpecificDate : function() {
jQuery('#scheduleByDate').addClass('hide');
},
showScheduledSpecificDate : function() {
jQuery('#scheduleByDate').removeClass('hide');
},
hideScheduledAnually : function() {
jQuery('#scheduleAnually').addClass('hide');
},
showScheduledAnually : function() {
jQuery('#scheduleAnually').removeClass('hide');
},
registerEvents : function(){
this.registerPrimaryModuleChangeEvent();
this.registerSelect2ElementForSecondaryModulesSelection();
var container = this.getContainer();
var opts = app.validationEngineOptions;
// to prevent the page reload after the validation has completed
opts['onValidationComplete'] = function(form,valid) {
//returns the valid status
return valid;
};
opts['promptPosition'] = "bottomRight";
container.validationEngine(opts);
//schedule reports
this.registerEventForScheduledReprots();
this.registerEventForChangeInScheduledType();
this.registerEventForRemoveAnnualDates();
}
});