%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/system.field.edit/templates/crm/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/system.field.edit/templates/crm/script.js |
BX.CrmEntitySelector = (function ()
{
var CrmEntitySelector = function (parameters)
{
this.randomString = parameters.randomString;
this.jsObject = parameters.jsObject;
this.fieldUid = parameters.fieldUid;
this.fieldName = parameters.fieldName;
this.usePrefix = parameters.usePrefix;
this.listPrefix = parameters.listPrefix;
this.multiple = parameters.multiple;
this.listElement = parameters.listElement;
this.listEntityType = parameters.listEntityType;
this.pluralCreation = Boolean(parameters.pluralCreation);
this.listEntityCreateUrl = parameters.listEntityCreateUrl;
this.currentEntityType = parameters.currentEntityType;
this.context = parameters.context;
this.initialize();
};
CrmEntitySelector.prototype.initialize = function()
{
this.popupObject = null;
this.popupId = 'crm-'+this.randomString+'-popup';
this.popupBindElement = null;
this.popupContent = '';
this.externalRequestData = null;
this.externalEventHandler = null;
BX.addCustomEvent('onCrmSelectedItem', BX.proxy(this.setSelectedElement, this));
BX.addCustomEvent('onCrmUnSelectedItem', BX.proxy(this.unsetSelectedElement, this));
};
CrmEntitySelector.prototype.createNewEntity = function(event)
{
if(this.pluralCreation)
{
event = event || window.event;
this.popupBindElement = event.currentTarget;
this.createPopup();
}
else
{
this.performExternalRequest();
}
};
CrmEntitySelector.prototype.performExternalRequest = function(entityType)
{
if(this.popupObject)
{
this.popupObject.popupWindow.close();
}
if(entityType)
{
this.setCurrentEntityType(entityType);
}
var url = BX.util.add_url_param(this.getCreateUrl(), {
external_context: this.context
});
if(!this.externalRequestData)
{
this.externalRequestData = {};
}
this.externalRequestData[this.context] = {context: this.context, wnd: window.open(url)};
if(!this.externalEventHandler)
{
this.externalEventHandler = BX.delegate(this.onExternalEvent, this);
BX.addCustomEvent(window, 'onLocalStorageSet', this.externalEventHandler);
}
};
CrmEntitySelector.prototype.onExternalEvent = function(params)
{
var key = BX.type.isNotEmptyString(params['key']) ? params['key'] : '';
var value = BX.type.isPlainObject(params['value']) ? params['value'] : {};
var typeName = BX.type.isNotEmptyString(value['entityTypeName']) ? value['entityTypeName'] : '';
var context = BX.type.isNotEmptyString(value['context']) ? value['context'] : '';
if(key === 'onCrmEntityCreate' && typeName === this.currentEntityType.toUpperCase()
&& this.externalRequestData && BX.type.isPlainObject(this.externalRequestData[context]))
{
var isCanceled = BX.type.isBoolean(value['isCanceled']) ? value['isCanceled'] : false;
if(!isCanceled && BX.type.isPlainObject(value['entityInfo']))
{
if(this.multiple != 'Y')
{
for(var k = 0; k < this.listElement.length; k++)
{
this.listElement[k]['selected'] = 'N';
}
}
value["entityInfo"]['selected'] = 'Y';
var entityInfo = value["entityInfo"];
if(this.usePrefix == 'Y')
{
var entityType = entityInfo['type'].toUpperCase();
entityInfo['id'] = this.listPrefix[entityType]+'_'+entityInfo['id'];
}
this.listElement.push(entityInfo);
BX[''+this.jsObject+''].initWidgetEntitySelection();
}
if(this.externalRequestData[context]['wnd'])
{
this.externalRequestData[context]['wnd'].close();
}
delete this.externalRequestData[context];
}
};
CrmEntitySelector.prototype.createPopup = function()
{
var popupItems = [];
for(var k = 0; k < this.listEntityType.length; k++)
{
popupItems.push({
text : BX.message('CRM_CES_CREATE_'+this.listEntityType[k].toUpperCase()),
onclick : 'BX["'+this.jsObject+'"].performExternalRequest("'+this.listEntityType[k]+'");'
});
}
if(!BX.PopupMenu.getMenuById(this.popupId))
{
var buttonRect = this.popupBindElement.getBoundingClientRect();
this.popupObject = BX.PopupMenu.create(
this.popupId,
this.popupBindElement,
popupItems,
{
closeByEsc : true,
angle: true,
offsetLeft: buttonRect.width/2
}
);
}
if(this.popupObject)
{
this.popupObject.popupWindow.show();
}
};
CrmEntitySelector.prototype.setCurrentEntityType = function(currentEntityType)
{
this.currentEntityType = currentEntityType;
};
CrmEntitySelector.prototype.getCreateUrl = function()
{
if(this.listEntityCreateUrl.hasOwnProperty(this.currentEntityType))
{
return this.listEntityCreateUrl[this.currentEntityType];
}
else
{
return '';
}
};
CrmEntitySelector.prototype.setSelectedElement = function(itemInfo)
{
for (var k in this.listElement)
{
if (itemInfo.id === this.listElement[k].id)
{
this.listElement[k].selected = 'Y';
}
}
};
CrmEntitySelector.prototype.unsetSelectedElement = function(itemInfo)
{
for (var k in this.listElement)
{
if (itemInfo.id === this.listElement[k].id)
{
this.listElement[k].selected = 'N';
}
}
};
CrmEntitySelector.prototype.initWidgetEntitySelection = function()
{
BX.loadCSS('/bitrix/js/crm/css/crm.css');
if(typeof(CRM) == 'undefined')
{
BX.loadScript('/bitrix/js/crm/crm.js', BX[''+this.jsObject+''].initWidgetEntitySelection());
return;
}
CRM.Set(
BX('crm-'+this.fieldUid+'-open'),
this.fieldName,
'',
this.listElement,
(this.usePrefix === 'Y'),
(this.multiple === 'Y'),
this.listEntityType,
{
'lead': BX.message('CRM_FF_LEAD'),
'contact': BX.message('CRM_FF_CONTACT'),
'company': BX.message('CRM_FF_COMPANY'),
'deal': BX.message('CRM_FF_DEAL'),
'quote': BX.message('CRM_FF_QUOTE'),
'order': BX.message('CRM_FF_ORDER'),
'ok': BX.message('CRM_FF_OK'),
'cancel': BX.message('CRM_FF_CANCEL'),
'close': BX.message('CRM_FF_CLOSE'),
'wait': BX.message('CRM_FF_SEARCH'),
'noresult': BX.message('CRM_FF_NO_RESULT'),
'add': BX.message('CRM_FF_CHOISE'),
'edit': BX.message('CRM_FF_CHANGE'),
'search': BX.message('CRM_FF_SEARCH'),
'last': BX.message('CRM_FF_LAST')
}
);
};
return CrmEntitySelector;
})();