/*+******************************************************************************** * 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. ********************************************************************************/ function VTCreateEntityTask($, fieldvaluemapping){ var vtinst = new VtigerWebservices("webservice.php"); var desc = null; var format = fn.format; function errorDialog(message){ alert(message); } function handleError(fn){ return function(status, result){ if(status){ fn(result); }else{ errorDialog('Failure:'+result); } }; } function implode(sep, arr){ var out = ""; $.each(arr, function(i, v){ out+=v; if(i'+v+''); }); } function removeFieldValueMapping(mappingno){ $(format("#save_fieldvalues_%s", mappingno)).remove(); } function map(fn, list){ var out = []; $.each(list, function(i, v){ out[out.length]=fn(v); }); return out; } function reduceR(fn, list, start){ var acc = start; $.each(list, function(i, v){ acc = fn(acc, v); }); return acc; } function dict(list){ var out = {}; $.each(list, function(i, v){ out[v[0]] = v[1]; }); return out; } function filter(pred, list){ var out = []; $.each(list, function(i, v){ if(pred(v)){ out[out.length]=v; } }); return out; } function contains(list, value){ var ans = false; $.each(list, function(i, v){ if(v==value){ ans = true; return false; } }); return ans; } function diff(reflist, list) { var out = []; $.each(list, function(i, v) { if(contains(reflist, v)) { out.push(v); } }); return out; } function concat(lista,listb){ return lista.concat(listb); } //Get an array containing the the description of a module and all modules //refered to by it. This is passed to callback. function getDescribeObjects(accessibleModules, moduleName, callback){ vtinst.describeObject(moduleName, handleError(function(result){ var parent = result; var fields = parent['fields']; var referenceFields = filter(function(e){ return e['type']['name']=='reference';}, fields); var referenceFieldModules = map( function(e){ return e['type']['refersTo']; }, referenceFields ); function union(a, b){ var newfields = filter(function(e){return !contains(a, e);}, b); return a.concat(newfields); } var relatedModules = reduceR(union, referenceFieldModules, [parent['name']]); // Remove modules that is no longer accessible relatedModules = diff(accessibleModules, relatedModules); function executer(parameters){ var failures = filter(function(e){return e[0]==false;}, parameters); if(failures.length!=0){ var firstFailure = failures[0]; callback(false, firstFailure[1]); }else{ var moduleDescriptions = map(function(e){ return e[1];}, parameters); var modules = dict(map(function(e){ return [e['name'], e];}, moduleDescriptions)); callback(true, modules); } } var p = parallelExecuter(executer, relatedModules.length); $.each(relatedModules, function(i, v){ p(function(callback){vtinst.describeObject(v, callback);}); }); })); } function editFieldExpression(fieldValueNode, fieldType) { editpopupobj.edit(fieldValueNode.attr('id'), fieldValueNode.attr('value'), fieldType); } function resetFields(opType, fieldName, mappingno) { defaultValue(opType.name)(opType, mappingno); var fv = $("#save_fieldvalues_"+mappingno+"_value"); fv.attr("name", fieldName); var fieldLabel = jQuery("#save_fieldvalues_"+mappingno+"_fieldname option:selected").html(); validator.validateFieldData[fieldName] = {type: opType.name, label: fieldLabel}; } function defaultValue(fieldType){ function forPicklist(opType, mappingno){ var value = $("#save_fieldvalues_"+mappingno+"_value"); var options = implode('', map(function (e){return '';}, opType['picklistValues']) ); value.replaceWith(''); $("#save_fieldvalues_"+mappingno+"_value_type").attr("value", "rawtext"); $("#save_fieldvalues_"+mappingno+"_modulename").attr("value", $('#entity_type').attr("value")); $("#save_fieldvalues_"+mappingno+"_modulename").attr("disabled", "true"); } var functions = { string:function(opType, mappingno){ var value = $(format("#save_fieldvalues_%s_value", mappingno)); value.replaceWith(format('', mappingno)); $("#save_fieldvalues_"+mappingno+"_modulename").attr("disabled", ""); var fv = $(format("#save_fieldvalues_%s_value", mappingno)); fv.bind("focus", function() { editpopupobj.setModule($(format("#save_fieldvalues_%s_modulename", mappingno)).attr('value')); editFieldExpression($(this), opType); }); fv.bind("click", function() { editpopupobj.setModule($(format("#save_fieldvalues_%s_modulename", mappingno)).attr('value')); editFieldExpression($(this), opType); }); fv.bind("keypress", function() { editpopupobj.setModule($(format("#save_fieldvalues_%s_modulename", mappingno)).attr('value')); editFieldExpression($(this), opType); }); }, picklist:forPicklist, multipicklist:forPicklist }; var ret = functions[fieldType]; if(ret==null){ ret = functions['string']; } return ret; } var validateDuplicateFields = { init: function(){ }, validator: function(){ jQuery('#duplicate_fields_selected_message').css('display', 'none'); var result; var successResult = [true]; var failureResult = [false, 'duplicate_fields_selected_message', []]; var selectedFieldNames = $(".fieldname"); result = successResult; $.each(selectedFieldNames, function(i, ele) { var fieldName = $(ele).attr("value"); var fields = $("[name="+fieldName+"]"); if(fields.length > 1) { result = failureResult; } }); return result; } }; function loadModuleFields(entityName, fieldvaluemapping) { $("#save_fieldvaluemapping").html(''); $("#save_fieldvaluemapping_add_wrapper").html(''); validator.mandatoryFields = ['summary', 'entity_type']; validator.validateFieldData = {}; if(entityName == '') return; $('#save_fieldvaluemapping_add-busyicon').show(); var entityLabel = $('#entity_type option:selected').html(); vtinst.describeObject(entityName, handleError(function(result){ var fields = result['fields']; function filteredFields(fields){ var filteredfields = filter( function(e){return !contains(['autogenerated', 'reference', 'password'], e.type.name);}, fields ); // Added to filter non-editable fields for update return filter( function(e){return contains(['1'], e.editable);}, filteredfields ); }; function filterMandatoryFields(fields){ var filteredfields = filter( function(e){return !contains(['autogenerated', 'reference', 'password'], e.type.name);}, fields ); // Added to filter non-editable fields as well as non-mandatory fields return filter( function(e){return contains(['1'], e.editable) && contains(['1'], e.mandatory);}, filteredfields ); }; var entityFields = map(function(e){ fieldname = e['name']; fieldlabel = e['label']; if(contains(['1'], e.mandatory)) fieldlabel = fieldlabel + ' *'; return [fieldname,fieldlabel]; }, filteredFields(fields)); var entityFieldTypes = dict(map(function(e){return[e['name'],e['type']];}, filteredFields(fields))); var mandatoryFields = map(function(e){return e['name'];}, filterMandatoryFields(fields)); var fieldLabels = dict(entityFields); function addFieldValueMapping(mappingno){ $("#save_fieldvaluemapping").append( '
\ \ \ \ \ \ \
' ); var fe = $("#save_fieldvalues_"+mappingno+"_fieldname"); var i = 1; fillOptions(fe, fieldLabels); var me = $("#save_fieldvalues_"+mappingno+"_modulename"); me.html(''); me.append(format('', moduleName, moduleLabel)); me.append(format('', entityName, entityLabel)); var fullFieldName = fe.attr("value"); resetFields(entityFieldTypes[fullFieldName], fullFieldName, mappingno); var re = $("#save_fieldvalues_"+mappingno+"_remove"); re.bind("click", function(){ removeFieldValueMapping(mappingno); }); fe.bind("change", function(){ var select = $(this); var mappingno = select.attr("id").match(/save_fieldvalues_(\d+)_fieldname/)[1]; var fullFieldName = $(this).attr('value'); resetFields(entityFieldTypes[fullFieldName], fullFieldName, mappingno); }); } var mappingno=0; if(fieldvaluemapping){ $.each(fieldvaluemapping, function(i, fieldvaluemap){ var fieldname = fieldvaluemap["fieldname"]; addFieldValueMapping(mappingno); $(format("#save_fieldvalues_%s_fieldname", mappingno)).attr("value", fieldname); $(format("#save_fieldvalues_%s_modulename", mappingno)).attr("value", fieldvaluemap['modulename']); resetFields(entityFieldTypes[fieldname], fieldname, mappingno); $(format("#save_fieldvalues_%s_value_type", mappingno)).attr("value", fieldvaluemap['valuetype']); $('#dump').html(fieldvaluemap["value"]); var text = $('#dump').text(); $(format("#save_fieldvalues_%s_value", mappingno)).attr("value", text); mappingno+=1; }); } $.each(mandatoryFields, function(i, fieldname) { validator.mandatoryFields.push(fieldname); var mandatoryFieldElement = $('[name='+fieldname+']'); if(mandatoryFieldElement.length == 0) { addFieldValueMapping(mappingno); $(format("#save_fieldvalues_%s_fieldname", mappingno)).attr("value", fieldname); resetFields(entityFieldTypes[fieldname], fieldname, mappingno); mappingno+=1; } }); $("#save_fieldvaluemapping_add_wrapper").html(createEntityHeaderTemplate); $("#save_fieldvaluemapping_add").bind("click", function() { addFieldValueMapping(mappingno); mappingno+=1; }); $('#save_fieldvaluemapping_add-busyicon').hide(); })); } $(document).ready(function(){ Drag.init(document.getElementById('editpopup_draghandle'), document.getElementById('editpopup')); editpopupobj = fieldExpressionPopup(moduleName, $); editpopupobj.setModule(moduleName); editpopupobj.close(); validator.addValidator('validateDuplicateFields', validateDuplicateFields); validator.mandatoryFields = ['summary', 'entity_type']; vtinst.extendSession(handleError(function(result){ $.get('index.php', { module:'com_vtiger_workflow', action:'com_vtiger_workflowAjax', file:'WorkflowComponents', ajax:'true', modulename:moduleName, mode:'getdependentfields'}, function(result){ result = JSON.parse(result); var entitytypes = $('#entity_type'); var count = result['count']; var entities = result['entities']; if(count > 0) { $.each(entities, function(entityname, fielddetails){ entitytypes.append(format('', entityname, fielddetails['modulelabel'])); }); $('#entity_type').bind('change', function(){ if(this.value != '') { $('#reference_field').attr('value', entities[this.value]['fieldname']); } loadModuleFields(this.value, null); }); if(selectedEntityType != "") { $('#entity_type').attr('value', selectedEntityType); } loadModuleFields($('#entity_type').attr('value'), fieldvaluemapping); } $('#entity_type-busyicon').hide(); $('#entity_type').show(); } ); $("#save").bind("click", function(){ var validateFieldValues = new Array(); var fieldvaluemapping = []; $("#save_fieldvaluemapping").children().each(function(i){ var fieldname = $(this).children(".fieldname").attr("value"); var modulename = $(this).children(".modulename").attr("value"); var type = $(this).children(".type").attr("value"); var value = $(this).children(".expressionvalue").attr("value"); var fieldvaluemap = {fieldname:fieldname, modulename:modulename, valuetype:type, value:value}; fieldvaluemapping[i]=fieldvaluemap; if(type == "" || type == "rawtext") { validateFieldValues.push(fieldname); } }); if(fieldvaluemapping.length==0){ var out = ""; }else{ var out = JSON.stringify(fieldvaluemapping); } $("#save_fieldvaluemapping_json").attr("value", out); for(var fieldName in validator.validateFieldData) { if(validateFieldValues.indexOf(fieldName) < 0) { delete validator.validateFieldData[fieldName]; } } }); })); }); } VTCreateEntityTask(jQuery, fieldvaluemapping);