vtenext/modules/Processes/DynaFormScript.js
2021-04-28 20:10:26 +02:00

295 lines
10 KiB
JavaScript

/*************************************
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
* SPDX-License-Identifier: AGPL-3.0-only
************************************/
/* crmv@99316 crmv@105937 crmv@106857 crmv@112297 crmv@198388 */
if (typeof(DynaFormScript) == 'undefined') {
DynaFormScript = {
fieldFocused: false,
fieldNameFocused: false,
// functions for reload the form in EditView in order to apply conditionals
initEditViewConditionals: function(record, json_fields, force_reload, callback) {
var me = this,
fields = JSON.parse(json_fields);
if (typeof(force_reload) == 'undefined') var force_reload = false;
jQuery.each(fields, function(k,field){
if (typeof(field['columns']) != 'undefined') {
var columns = JSON.parse(field['columns']);
jQuery.each(columns, function(k,column){
column['fieldname'] = field['fieldname']+'_'+column['fieldname'];
me.initFieldEditViewConditionals(record, json_fields, column, '^=');
});
} else {
me.initFieldEditViewConditionals(record, json_fields, field, '=');
}
});
if (force_reload) {
me.reloadForm(record, json_fields, callback);
}
},
initFieldEditViewConditionals: function(record, json_fields, field, selector) {
var me = this,
fields = JSON.parse(json_fields),
field_on_event = field['fieldname'],
event = 'change',
selector_string = '';
if (field['uitype'] == 10 || field['uitype'] == 53) {
field_on_event = field['fieldname']+'_display';
event = 'blur';
/*
} else if (field['type'] == 'picklist' || field['type'] == 'date' || field['type'] == 'reference' || field['type'] == 'boolean' || field['type'] == 'file') {
event = 'change';
*/
}
selector_string = '[name'+selector+'"'+field_on_event+'"]';
if (field['uitype'] == 10 && selector == '^=') selector_string = '[name^="'+field['fieldname']+'_"][name$="_display"]';
var obj = jQuery(selector_string);
obj.unbind(event);
if (event == 'blur' && (field['uitype'] == 10 || field['uitype'] == 53)) {
jQuery(obj).data("previous-value", jQuery(obj).val());
jQuery(obj)
.blur(function(e) {
var old_v = jQuery(this).data("previous-value");
var new_v = jQuery(this).val();
if (old_v == 'Cerca...') old_v = '';
if (new_v == 'Cerca...') new_v = '';
if (old_v != new_v) {
me.reloadForm(record, json_fields);
}
jQuery(this).data("previous-value", new_v);
});
if (field['uitype'] == 53) { /* TODO */ }
} else {
obj.bind(event, function(){
me.reloadForm(record, json_fields);
}).focus(function(){ // track new field on focus
me.fieldFocused = true;
me.fieldNameFocused = jQuery(this).attr('name');
});
}
},
disableKeyboard: function(objEvent){
objEvent.preventDefault();
},
reloadingForm: false,
reloadForm: function(record, json_fields, callback) {
var me = this,
fields = JSON.parse(json_fields),
formObj = jQuery('form[name="EditView"]'),
form = me.getForm(formObj, fields);
// prevent multiple calls
if (me.reloadingForm == true) return false;
me.reloadingForm = true;
var fieldFocused = false;
if (me.fieldFocused) fieldFocused = me.fieldFocused;
jQuery(document).on('keydown', DynaFormScript.disableKeyboard);
jQuery('#status').show();
VteJS_DialogBox.block();
var formData = new FormData();
jQuery.each(jQuery('form[name="EditView"]').find("input[type='file']"), function(i, tag) {
jQuery.each(jQuery(tag)[0].files, function(i, file) {
formData.append(tag.name, file);
});
jQuery.each(jQuery('form[name="EditView"]').serializeArray(), function(i, val){
formData.append(val.name, val.value);
});
});
formData.append('module', 'Processes');
formData.append('action', 'ProcessesAjax');
formData.append('file', 'DetailViewAjax');
formData.append('ajxaction', 'DYNAFORMCONDITIONALS');
formData.append('mode', 'edit');
formData.append('record', record);
formData.append('dynaform', JSON.stringify(form));
jQuery.ajax({
'url': 'index.php',
'type': 'POST',
'dataType': 'json',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function(data) {
fieldname = data['fieldname'];
fieldlabel = data['fieldlabel'];
fielddatatype = data['datatype'];
fielduitype = data['fielduitype'];
fieldwstype = data['fieldwstype'];
jQuery.each(data['html'], function(blockid,html){
jQuery('.blockrow_'+blockid).show();
if (jQuery('#displayfields_'+blockid).length > 0) {
//jQuery('#displayfields_'+blockid).html(html);
var textArea = document.createElement('textarea'); textArea.innerHTML = html;
jQuery('#displayfields_'+blockid).html(textArea.value);
}
});
jQuery.each(data['block_visibility'], function(blockid,value){
if (value == 0) jQuery('.blockrow_'+blockid).hide();
});
DynaFormScript.initEditViewConditionals(record, json_fields);
jQuery('#status').hide();
VteJS_DialogBox.unblock();
DynaFormScript.reloadingForm = false;
if (fieldFocused && me.fieldNameFocused != false) {
me.fieldFocused = false;
jQuery('[name="'+me.fieldNameFocused+'"]').focus();
}
jQuery(document).off('keydown', DynaFormScript.disableKeyboard);
if (typeof(callback) != 'undefined') callback();
}
});
},
getForm: function(formObj, fields, seq) {
var me = this,
form = {};
jQuery.each(fields, function(k,field){
var fieldname = field['fieldname'],
fieldname_input = fieldname;
if (typeof(seq) != 'undefined') fieldname_input += '_'+seq;
if (field['type'] == 'multipicklist') fieldname_input += '[]';
if (field['type'] == 'boolean') {
if (jQuery('[name="'+fieldname_input+'"]', formObj).prop('checked') == true)
form[fieldname] = 1;
else
form[fieldname] = 0;
} else if (field['type'] == 'table') {
var cont = jQuery('table[name='+fieldname+']'),
rows = cont.find('.tablefield_rows');
var table = {};
/*
var table = [];
jQuery.each(rows.find('tr'), function(i,row){
var name = jQuery(row).find('.tablefield_row_seq').attr('name'),
tmp = name.split('_'),
seq = tmp[tmp.length-1];
table.push(me.getForm(formObj, JSON.parse(field['columns']), seq));
});
form[fieldname] = table;
*/
table[fieldname] = jQuery('[name="'+fieldname+'"]').val();
table[fieldname+'_lastrowno'] = jQuery('[name="'+fieldname+'_lastrowno"]').val();
jQuery('table[name='+fieldname+'] :input').each(function(){
if (this.type == 'checkbox') {
if (this.checked) table[this.name] = 1;
else table[this.name] = 0;
} else if (this.type == 'select-multiple') {
table[this.name.replace('[]','')] = jQuery(this).val();
} else {
table[this.name] = jQuery(this).val();
}
});
form[fieldname] = table;
} else {
form[fieldname] = jQuery('[name="'+fieldname_input+'"]', formObj).val();
}
if (typeof(form[fieldname]) == 'undefined') form[fieldname] = ''; // crmv@195977
});
return form;
},
// end
// removed alertDisableAjaxSave
dtlViewAjaxSave: function(fieldLabel,module,uitype,tableName,fieldName,crmId) {
if (fieldName.indexOf('vcf_') >- 1) {
DynaFormScript.setFieldDataType(crmId, function(){
dtlViewAjaxSave(fieldLabel,module,uitype,tableName,fieldName,crmId);
});
} else {
dtlViewAjaxSave(fieldLabel,module,uitype,tableName,fieldName,crmId);
}
},
setFieldDataType: function(record, callback) {
var form = {};
var formObj = jQuery('form[name="DetailView"]');
jQuery.each(jQuery(formObj).serializeArray(), function(){
if (this.name.indexOf('vcf_') >- 1) {
form[this.name] = this.value;
}
});
jQuery.ajax({
'url': 'index.php?module=Processes&action=ProcessesAjax&file=DetailViewAjax&ajxaction=DYNAFORMCONDITIONALS&mode=detail&record='+record,
'type': 'POST',
'dataType': 'json',
// crmv@142262
'data': {
'dynaform':JSON.stringify(form)
},
// crmv@142262e
success: function(data) {
fielddatatype = data['datatype'];
if (typeof(callback) != 'undefined') callback();
}
});
},
reloadValidationData: function(record, callback) {
var form = {};
var formObj = jQuery('form[name="DetailView"]');
jQuery.each(jQuery(formObj).serializeArray(), function(){
if (this.name.indexOf('vcf_') >- 1) {
form[this.name] = this.value;
}
});
jQuery.ajax({
'url': 'index.php?module=Processes&action=ProcessesAjax&file=DetailViewAjax&ajxaction=VALIDATIONDATA&record='+record,
'type': 'POST',
'dataType': 'json',
success: function(data) {
eval('fieldname = new Array('+data['fieldname']+')');
eval('fieldlabel = new Array('+data['fieldlabel']+')');
eval('fielddatatype = new Array('+data['fielddatatype']+')');
eval('fielduitype = new Array('+data['fielduitype']+')');
eval('fieldwstype = new Array('+data['fieldwstype']+')');
if (typeof(callback) != 'undefined') callback();
}
});
},
loadDetailViewBlocks: function(record) {
// reload blocks and validation_data_field*
DynaFormScript.reloadValidationData(record, function(){
loadDetailViewBlocks('Processes',record,'','DetailViewBlocks',false,'',false,false,function(){
changeTab('Processes', record, getCurrentPanelid());
});
});
},
//crmv@93990
popup: function(record) {
openPopup('index.php?module=Processes&action=DetailViewAjax&ajxaction=DYNAFORMPOPUP&record='+record+'&hide_button_list=1&hide_menus=true&page_title=SINGLE_Processes&op_mode=dynaform_popup&skip_footer=true');
},
//crmv@93990e
// crmv@200816
reloadDetailView(module, record) {
var module = parent.document.forms['DetailView'].module.value,
record = parent.document.forms['DetailView'].record.value;
jQuery.ajax({
'url': 'index.php?module=Processes&action=ProcessesAjax&file=DetailViewAjax&ajxaction=CHECKRECORD',
'type': 'POST',
'dataType': 'json',
'data': {
'rel_module': parent.document.forms['DetailView'].module.value,
'rel_record': parent.document.forms['DetailView'].record.value // crmv@207091
},
success: function(data) {
if (data['record'] != record) {
top.location.href = 'index.php?module='+data['module']+'&action=DetailView&record='+data['record'];
} else {
top.location.reload();
}
}
});
}
// crmv@200816e
}
}