/************************************* * SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. * SPDX-License-Identifier: AGPL-3.0-only ************************************/ /* crmv@92272 crmv@102879 crmv@106857 crmv@115268 */ if (typeof(GroupConditions) == 'undefined') { GroupConditions = { groupLabel: false, groupGlue: true, //crmv@158293 /* * 0: fields of the related module are hidden and it is shown only the relation field in the primary module * 1: show fields of the related module but not the relation field in the primary module * 2: show both of them */ relatedFields: 1, //crmv@158293e subGroup: false, subGroupLabel: '', subGroupAddTitle: alert_arr.LBL_NEW_CONDITION_BUTTON_LABEL, subGroupOperation: true, subGroupGlue: true, subGroupRelatedFields: true, // if false in the sub group hide related fields otherParams: {}, init: function($, moduleName, container, context, conditions, params, initCallback){ var vtinst = new VtenextWebservices("webservice.php",undefined,undefined,true,true); //crmv@120039 crmv@140949 var fieldValidator; var desc = null; var me = this; if (typeof(params) == 'undefined') var params = {}; if (typeof(params['groupLabel']) != 'undefined') me.groupLabel = params['groupLabel']; if (typeof(params['groupGlue']) != 'undefined') me.groupGlue = params['groupGlue']; if (typeof(params['relatedFields']) != 'undefined') me.relatedFields = params['relatedFields']; if (typeof(params['subGroup']) != 'undefined') me.subGroup = params['subGroup']; if (typeof(params['subGroupLabel']) != 'undefined') me.subGroupLabel = params['subGroupLabel']; if (typeof(params['subGroupAddTitle']) != 'undefined') me.subGroupAddTitle = params['subGroupAddTitle']; if (typeof(params['subGroupOperation']) != 'undefined') me.subGroupOperation = params['subGroupOperation']; if (typeof(params['subGroupGlue']) != 'undefined') me.subGroupGlue = params['subGroupGlue']; if (typeof(params['subGroupRelatedFields']) != 'undefined') me.subGroupRelatedFields = params['subGroupRelatedFields']; if (typeof(params['otherParams']) != 'undefined') me.otherParams = params['otherParams']; function id(v){ return v; } function map(fn, list){ var out = []; $.each(list, function(i, v){ out[out.length]=fn(v); }); return out; } function field(name){ return function(object){ if(typeof(object) != 'undefined') { return object[name]; } }; } function zip(){ var out = []; var lengths = map(field('length'), arguments); var min = reduceR(function(a,b){return a'+e.label+'';}, opType['picklistValues']) ); value.replaceWith(''); } function forInteger(opType, condno){ var value = $(format("#save_condition_%s_value", condno),context); value.replaceWith(format('', condno)); } //crmv@36510 var functions = { string:function(opType, condno){ var value = $(format("#save_condition_%s_value", condno),context); value.replaceWith(format('', condno)); }, 'boolean': function(opType, condno){ var value = $("#save_condition_"+condno+"_value",context); value.replaceWith( ''); }, integer: forInteger, picklist:forPicklist, multipicklist:forPicklist, date: forInteger }; //crmv@36510 e var ret = functions[fieldType]; if(ret==null){ ret = functions['string']; } return ret; } var format = fn.format; function fillOptions(el,options,append){ el.empty(); if (typeof(append) != 'undefined') { el.append(append); } $.each(options, function(k, v){ el.append(''); }); } function resetFields(opType, condno){ if (opType == '' || opType == null) return; // crmv@119564 var ops = $("#save_condition_"+condno+"_operation",context); var selectedOperations = operations[opType.name]; var l = {}; var labels = { 'is':'EQUALS', 'equal to':'EQUALS', 'is not':'NOT_EQUALS_TO', 'does not equal':'NOT_EQUALS_TO', 'has changed':'HAS_CHANGED', //crmv@56962 'contains':'CONTAINS', 'does not contain':'DOES_NOT_CONTAINS', 'starts with':'STARTS_WITH', 'ends with':'ENDS_WITH', //crmv@56962 'less than':'LESS_THAN', 'greater than':'GREATER_THAN', 'less than or equal to':'LESS_OR_EQUALS', 'greater than or equal to':'GREATER_OR_EQUALS', 'has exactly': 'HAS_EXACTLY_ROWS', 'has less than': 'HAS_LESS_ROWS', 'has more than': 'HAS_MORE_ROWS' }; for(var i=0; i -1))}, parent['fields']); //crmv@131239 TODO skip reference of tables var moduleFieldTypes = {}; $.each(modules, function(k, v){ moduleFieldTypes[k] = dict(map(function(e){return [e['name'], e['type']];}, filteredFields(v['fields']))); }); function getFieldType(fullFieldName){ if (fullFieldName == '') return ''; if (fullFieldName.indexOf('sdk:') == 0) return {'name':'sdk'}; var group = fullFieldName.match(/(\w+) : \((\w+)\) (\w+)/); if(group==null){ var fieldModule = moduleName; var fieldName = fullFieldName; }else{ var fieldModule = group[2]; var fieldName = group[3]; } return moduleFieldTypes[fieldModule][fieldName]; } function fieldReferenceNames(referenceField){ var name = referenceField['name']; var label = referenceField['label']; function forModule(moduleName){ // If module is not accessible return no field information if(!contains(accessibleModules, moduleName)) return []; return map(function(field){ return [name+' : '+'('+moduleName+') '+field['name'], label+' : '+'('+moduleName+') '+field['label']];}, filteredFields(modules[moduleName]['fields']) ); } return reduceR(concat, map(forModule,referenceField['type']['refersTo']),[]); } if (me.relatedFields != 0) { //crmv@158293 var referenceFields = reduceR(concat, map(fieldReferenceNames, referenceFieldTypes), []); } else { var referenceFields = []; } var fieldLabels = dict(parentFields.concat(referenceFields)); function addSubGroup(calculate_newgroupno,autoaddcondition,parentgroupno,new_groupno) { if (calculate_newgroupno) { groupno++; var new_groupno = groupno; } $("#group_condition_"+parentgroupno,context).after( '
\
\ \
\
'+me.subGroupLabel+'
\
\ \
\
\ \
\
\
' ); if (autoaddcondition) addCondition(new_groupno,condno++); $("#save_conditions_add_"+new_groupno,context).unbind('click'); $("#save_conditions_add_"+new_groupno,context).bind("click", function(){ addCondition(new_groupno,condno++); }); $('#enable_subgroup_'+parentgroupno,context).val(new_groupno); } function addConditionGroup(calculate_newgroupno,autoaddcondition,new_groupno) { if (calculate_newgroupno) { groupno++; var new_groupno = groupno; } if (typeof(autoaddcondition) == 'undefined') var autoaddcondition = false; var labelHtml = '', subGroupHtml = ''; if (me.groupLabel) { labelHtml = ''+alert_arr.LBL_LABEL+'
'; } if (me.subGroup) { subGroupHtml = '
'; } $("#"+container,context).append( '
\
\
\ \ \ \
'+labelHtml+'highlight_remove
\
\ \
\ '+subGroupHtml+' \
\
\
\ \
' ); if (me.groupGlue) { var prevGroupGlue = $("#group_condition_"+new_groupno,context).parent().prev().find('.group_glue'); prevGroupGlue.show(); if (prevGroupGlue.val() == null || prevGroupGlue.val() == '') prevGroupGlue.val(prevGroupGlue.find("option:first").val()); } if (me.subGroup) { $('#enable_subgroup_'+new_groupno).change(function(){ if (this.checked) { addSubGroup(true,true,new_groupno); } else { removeConditionGroup(this.value); } }); } if (autoaddcondition) addCondition(new_groupno,condno++); $("#save_conditions_add_"+new_groupno,context).unbind('click'); $("#save_conditions_add_"+new_groupno,context).bind("click", function(){ addCondition(new_groupno,condno++); }); $('#group_condition_'+new_groupno+'_remove',context).unbind('click'); $('#group_condition_'+new_groupno+'_remove',context).bind("click", function(){ if (me.subGroup) { var subGroup = $('#enable_subgroup_'+new_groupno,context).val(); if (typeof(subGroup) != 'undefined') removeConditionGroup(subGroup); } removeConditionGroup(new_groupno); }); } function addCondition(groupno,condno){ if ($("#"+container+" #group_condition_"+groupno+" .parentgroup",context).length == 0) var isSubGroup = false; else var isSubGroup = true; if (isSubGroup && !me.subGroupOperation) var subGroupOperationStyle = 'display:none'; else var subGroupOperationStyle = ''; if (isSubGroup && !me.subGroupGlue) var subGroupGlueStyle = 'display:none'; else var subGroupGlueStyle = ''; $("#"+container+" #group_condition_"+groupno+" .save_conditions",context).append( '
\
\ \
\ \ \
\ \
\
\ \
\ \
\ \
\ delete \
' ); var fe = $("#save_condition_"+condno+"_fieldname",context); var i = 1; var fieldLabelsOpt = {}; if (isSubGroup && me.subGroupRelatedFields == false) { jQuery.each(fieldLabels, function(k,v){ fieldLabelsOpt[k] = v; }); jQuery.each(referenceFieldTypes, function(k,v){ delete fieldLabelsOpt[v.name]; }); } else { fieldLabelsOpt = fieldLabels; } fillOptions(fe, fieldLabelsOpt, $('#sdk_custom_functions').html()); var fullFieldName = fe.val(); resetFields(getFieldType(fullFieldName), condno); var prev_glue = $("#save_condition_"+condno+"_glue",context).parent().parent().prev().find('.glue'); prev_glue.show(); if (prev_glue.val() == null || prev_glue.val() == '') prev_glue.val(prev_glue.find("option:first").val()); var re = $("#save_condition_"+condno+"_remove",context); re.unbind('click'); re.bind("click", function(){ removeCondition(groupno,condno); }); fe.unbind('change'); fe.bind("change", function(){ var select = $(this); var condNo = select.attr("id").match(/save_condition_(\d+)_fieldname/)[1]; var fullFieldName = $(this).val(); if (fullFieldName.indexOf('::') > -1) resetTableFields(getFieldType(fullFieldName), condNo); else { $("#save_condition_"+condno+"_tabfieldopt",context).parent().hide(); resetFields(getFieldType(fullFieldName), condNo); } }); } var newTemplatePopup = NewTemplatePopup(); $("#new_template",context).click(function(){ newTemplatePopup.show(); }); var groupno=0; var condno=0; if(conditions){ $.each(conditions, function(j, group_condition){ if (typeof(group_condition["parentgroup"]) != 'undefined') { addSubGroup(false,false,group_condition["parentgroup"],groupno); $('#enable_subgroup_'+group_condition["parentgroup"],context).prop('checked',true); } else { addConditionGroup(false,false,groupno); } $(format("#group_condition_%s_glue", groupno),context).val(group_condition["glue"]); if (me.groupLabel) $(format("#group_condition_%s_label", groupno),context).val(group_condition["label"]); $.each(group_condition['conditions'], function(i, condition){ var fieldname = condition["fieldname"]; addCondition(groupno,condno); //crmv@120039 if ($("#"+format("save_condition_%s_fieldname", condno)+" option[value='"+fieldname+"']",context).length == 0) { removeCondition(groupno,condno); } else { $(format("#save_condition_%s_fieldname", condno),context).val(fieldname); if (fieldname.indexOf('::') > -1) { resetTableFields(getFieldType(fieldname), condno, condition); } else { resetFields(getFieldType(fieldname), condno); } $(format("#save_condition_%s_operation", condno),context).val(condition["operation"]); $('#dump',context).html(condition["value"]); var text = $('#dump',context).text(); $(format("#save_condition_%s_value", condno),context).val(text); $(format("#save_condition_%s_glue", condno),context).val(condition["glue"]); condno+=1; } //crmv@120039e }); groupno+=1; }); } $("#group_conditions_add",context).unbind('click'); $("#group_conditions_add",context).bind("click", function(){ addConditionGroup(true,true); }); $('#group_conditions_add',context).show(); pageLoadingPopup.close(); if (typeof(initCallback) == 'function') initCallback(); })); })); })); }); }, getJson: function($,container,context){ var me = this; var group_conditions = []; if (me.subGroup) var group_key_map = {}; $("#"+container+" .group_condition",context).each(function(j){ var group = $(this); if (me.subGroup) { var match = group.attr('id').match(/[0-9]+/); var groupKey = match[0]; group_key_map[groupKey] = j; } var conditions = []; group.find('.save_conditions').children().each(function(i){ var fieldname = $(this).find(".fieldname").val(); var operation = $(this).find(".operation").val(); var value = $(this).find(".value").val(); var condition = {fieldname:fieldname, operation:operation, value:value}; if (fieldname.indexOf('::') > -1) { condition['tabfieldopt'] = $(this).find(".tabfieldopt").val(); condition['tabfieldseq'] = $(this).find(".tabfieldseq").val(); } //if ($(this).children(".glue").is(':visible')) condition['glue'] = $(this).children(".glue").val(); if ($(this).find(".glue").css('display') != 'none') condition['glue'] = $(this).find(".glue").val(); conditions[i]=condition; }); group_conditions[j] = {conditions:conditions, glue:group.parent().next().find('.group_glue').val()}; if (me.groupLabel) { group_conditions[j]['label'] = group.find('.group_label').val(); } if (me.subGroup) { group_conditions[j]['parentgroup'] = group_key_map[group.find('.parentgroup').val()]; } }); if(group_conditions.length==0){ var out = ""; }else{ var out = JSON.stringify(group_conditions); } //$("#save_conditions_json",context).val(out); return out; } } }