[Vtigercrm-developers] Multiple contacts connected to a single field
Uma S
uma.s at vtiger.com
Tue Oct 6 07:15:49 GMT 2020
Hi Mohan,
>From you explanation on this issue, I can notice that you are facing issue
with addNewContactToRelatedList() api in the below mentioned line
var selectContainer = jQuery(element.data('select2').container, form);
As you're looking for a data object on string, Please to convert 'element'
of string type to jQuery object before accessing contents.I mean you should
use jQuery(element).data('select2').
On Tue, Oct 6, 2020 at 2:42 AM Sukhdev Mohan <s.mohan at myti.it> wrote:
> Hi Uma,
>
> So I’ve managed to select, save, edit and view a single field. I’m now
> facing problem to add this functionality to other 4 fields. I’m sharing the
> Edit.js
> Since I wanted to avoid duplicating registerRelatedContactSpecificEvents I’ve
> tried to modularise by defining an array of elements and cycle on it (not
> the most elegant solution I recon) But as you can guess this doesn’t work:
> when the pop up opens it’s fine, when I select the the contacts it give me
> error "Uncaught TypeError: element.data(...) is undefined: Im guessing
> the loop isn’t working as I thought. Can you (*or anybody else) help me out
> editing this code to work for my use case?
>
> /*+***********************************************************************************
> * 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_Edit_Js("Processi_Edit_Js",{
>
> },{
>
> relatedContactElement : false,
>
> elementwithContacts: [
> 'mbs_contact',
> 'bsm_contact',
> 'bi_contact',
> 'altri_contact',
> 'comune_contact'
> ],
>
> getRelatedContactElement : function(form, element) {
> if(typeof form == "undefined") {
> form = this.getForm();
> }
> this.relatedContactElement = jQuery(`#${element}_display`, form);
> return this.relatedContactElement;
> },
>
> openPopUp : function(e){
> var thisInstance = this;
> var parentElem = thisInstance.getParentElement(jQuery(e.target));
>
> var params = this.getPopUpParams(parentElem);
> params.view = 'Popup';
>
> var isMultiple = false;
> if(params.multi_select) {
> isMultiple = true;
> }
>
> var sourceFieldElement = jQuery('input[class="sourceField"]',parentElem);
>
> var prePopupOpenEvent = jQuery.Event(Vtiger_Edit_Js.preReferencePopUpOpenEvent);
> sourceFieldElement.trigger(prePopupOpenEvent);
>
> if(prePopupOpenEvent.isDefaultPrevented()) {
> return ;
> }
> var popupInstance = Vtiger_Popup_Js.getInstance();
> popupInstance.showPopup(params,function(data){
> var responseData = JSON.parse(data);
> var dataList = new Array();
> for(var id in responseData){
> var data = {
> 'name' : responseData[id].name,
> 'id' : id
> }
> dataList.push(data);
> if(!isMultiple) {
> thisInstance.setReferenceFieldValue(parentElem, data);
> }
> }
>
> if(isMultiple) {
> sourceFieldElement.trigger(Vtiger_Edit_Js.refrenceMultiSelectionEvent,{'data':dataList});
> }
> sourceFieldElement.trigger(Vtiger_Edit_Js.postReferenceSelectionEvent,{'data':responseData});
> });
> },
>
> registerRelatedContactSpecificEvents : function(form) {
> console.log(form);
> this.elementwithContacts.forEach(element => {
> console.log(element);
> var thisInstance = this;
> if(typeof form == "undefined") {
> form = this.getForm();
> }
> form.find(`[name="${element}"]`).on(Vtiger_Edit_Js.preReferencePopUpOpenEvent,function(e){
> var parentIdElement = form.find(`[name="${element}"]`);
> var container = parentIdElement.closest('td');
> var popupReferenceModule = jQuery('input[name="popupReferenceModule"]',container).val();
> })
>
> this.getRelatedContactElement(form).select2({
> minimumInputLength: 3,
> ajax : {
> 'url' : 'index.php?module=Contacts&action=BasicAjax&search_module=Contacts',
> 'dataType' : 'json',
> 'data' : function(term,page){
> var data = {};
> data['search_value'] = term;
>
> return data;
> },
> 'results' : function(data){
> data.results = data.result;
> for(var index in data.results ) {
>
> var resultData = data.result[index];
> resultData.text = resultData.label;
> }
> return data
> },
> transport : function(params){
> return jQuery.ajax(params);
> }
> },
> multiple : true,
> //To Make the menu come up in the case of quick create
> dropdownCss : {'z-index' : '10001'}
> });
>
> //To add multiple selected contact from popup
> form.find(`[name="${element}"]`).on(Vtiger_Edit_Js.refrenceMultiSelectionEvent,function(e,result){
> thisInstance.addNewContactToRelatedList(result,form, element);
> });
>
> this.fillRelatedContacts(form, element);
> });
> },
> /**
> * Function to get reference search params
> */
> getReferenceSearchParams : function(element){
> var tdElement = jQuery(element).closest('td');
> var params = {};
> var previousTd = tdElement.prev();
> var multiModuleElement = jQuery('select.referenceModulesList', previousTd);
>
> var referenceModuleElement;
> if(multiModuleElement.length) {
> referenceModuleElement = multiModuleElement;
> } else {
> referenceModuleElement = jQuery('input[name="popupReferenceModule"]',tdElement).length ?
> jQuery('input[name="popupReferenceModule"]',tdElement) : jQuery('input.popupReferenceModule',tdElement);
> }
> var searchModule = referenceModuleElement.val();
> params.search_module = searchModule;
> return params;
> },
>
> initializeContactIdList : function(form, element) {
> var relatedContactElement = this.getRelatedContactElement(form, element);
> if(this.isEvents(form) && relatedContactElement.length) {
> jQuery(`<input type="hidden" name=${element}_contactidlist />`).appendTo(form).val(relatedContactElement.val().split(',').join(';'));
> form.find(`[name="${element}"]`).attr('name','');
> }
> },
>
> registerRecordPreSaveEvent : function(form) {
> var thisInstance = this;
> if(typeof form === "undefined") {
> form = this.getForm();
> }
> var InitialFormData = form.serialize();
> app.event.one(Vtiger_Edit_Js.recordPresaveEvent,function(e) {
> thisInstance.registerRecurringEditOptions(e,form,InitialFormData);
> thisInstance.addInviteesIds(form);
> thisInstance.resetRecurringDetailsIfDisabled(form);
> thisInstance.initializeContactIdList(form);
> });
> },
>
>
> /**
> * Function which will fill the already saved contacts on load
> */
> fillRelatedContacts : function(form, element) {
> if(typeof form == "undefined") {
> form = this.getForm();
> }
> var relatedContactValue = form.find(`[name="related_${element}_info"]`).data('value');
> for(var contactId in relatedContactValue) {
> var info = relatedContactValue[contactId];
> info.text = info.name;
> relatedContactValue[contactId] = info;
> }
> this.getRelatedContactElement(form, element).select2('data',relatedContactValue);
> },
>
>
> addNewContactToRelatedList : function(newContactInfo, form, element){
> if(form.length <= 0) {
> form = this.getForm();
> }
> var resultentData = new Array();
>
> var element = jQuery(`#${element}_display`, form);
> var selectContainer = jQuery(element.data('select2').container, form);
> var choices = selectContainer.find('.select2-search-choice');
> choices.each(function(index,element){
> resultentData.push(jQuery(element).data('select2-data'));
> });
> var select2FormatedResult = newContactInfo.data;
> for(var i=0 ; i < select2FormatedResult.length; i++) {
> var recordResult = select2FormatedResult[i];
> recordResult.text = recordResult.name;
> resultentData.push( recordResult );
> }
> element.select2('data',resultentData);
> if(form.find('.quickCreateContent').length > 0) {
> form.find(`[name="related_${element}_info"]`).data('value', resultentData);
> var relatedContactElement = this.getRelatedContactElement(form);
> if(relatedContactElement.length > 0) {
> jQuery(`<input type="hidden" name=${element}_contactidlist />`).appendTo(form).val(relatedContactElement.val().split(',').join(';'));
> form.find(`[name="${element}"]`).attr('name','');
> }
> }
> },
>
>
> registerBasicEvents : function(container) {
> this._super(container);
> this.registerRecordPreSaveEvent(container);
> this.registerRelatedContactSpecificEvents(container);
> }
> });
>
>
> Best Regards,
> *Sukhdev Mohan* | *Software Developer*
>
> _______________________________________________
> http://www.vtiger.com/
--
With
Best Regards
Uma.S
Vtiger Team
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.vtigercrm.com/pipermail/vtigercrm-developers/attachments/20201006/b5777792/attachment-0001.html>
More information about the vtigercrm-developers
mailing list