Your IP : 13.58.158.198


Current Path : /var/www/axolotl/data/www/axolotl.ru/www/bitrix/js/crm/entity-editor/js/
Upload File :
Current File : /var/www/axolotl/data/www/axolotl.ru/www/bitrix/js/crm/entity-editor/js/editor-controller.js

BX.namespace("BX.Crm");

//region CONTROLLERS
if(typeof BX.Crm.EditorFieldSingleEditController === "undefined")
{
	/**
	 * @deprecated
	 */
	BX.Crm.EditorFieldSingleEditController = BX.UI.EditorFieldSingleEditController;
}

if(typeof BX.Crm.EditorFieldViewController === "undefined")
{
	/**
	 * @deprecated
	 */
	BX.Crm.EditorFieldViewController = BX.UI.EditorFieldViewController;
}

if(typeof BX.Crm.EntityEditorController === "undefined")
{
	/**
	 * @deprecated
	 */
	BX.Crm.EntityEditorController = BX.UI.EntityEditorController;
}

if(typeof BX.Crm.EntityEditorProductRowProxy === "undefined")
{
	BX.Crm.EntityEditorProductRowProxy = function()
	{
		BX.Crm.EntityEditorProductRowProxy.superclass.constructor.apply(this);
		this._externalEditor = null;
		this._editorCreateHandler = null;
		this._sumTotalChangeHandler = null;
		this._productAddHandler = null;
		this._productChangeHandler = null;
		this._productRemoveHandler = null;
		this._editorModeChangeHandler = BX.delegate(this.onEditorModeChange, this);
		this._editorControlChangeHandler = BX.delegate(this.onEditorControlChange, this);

		this._currencyId = "";
		this._isManualOpportunity = null;
		this._prevProductCount = 0;
		this._curProductCount = 0;
	};
	BX.extend(BX.Crm.EntityEditorProductRowProxy, BX.UI.EntityEditorController);
	BX.Crm.EntityEditorProductRowProxy.prototype.doInitialize = function()
	{
		BX.Crm.EntityEditorProductRowProxy.superclass.doInitialize.apply(this);

		this._sumTotalChangeHandler = BX.delegate(this.onSumTotalChange, this);
		this._productAddHandler = BX.delegate(this.onProductAdd, this);
		this._productChangeHandler = BX.delegate(this.onProductChange, this);
		this._productRemoveHandler = BX.delegate(this.onProductRemove, this);

		var externalEditor = typeof BX.CrmProductEditor !== "undefined"
			? BX.CrmProductEditor.get(this.getExternalEditorId()) : null;
		if(externalEditor)
		{
			this.setExternalEditor(externalEditor);
		}
		else
		{
			this._editorCreateHandler = BX.delegate(this.onEditorCreate, this);
			BX.addCustomEvent(window, "ProductRowEditorCreated", this._editorCreateHandler);
		}

		this._editor.addModeChangeListener(this._editorModeChangeHandler);

		BX.addCustomEvent(window, "onEntityDetailsTabShow", BX.delegate(this.onTabShow, this));

		setTimeout(BX.delegate(function()
		{
			var opportunityControl = this.getOpportunityControl();
			if (opportunityControl)
			{
				opportunityControl.addChangeAmountEditModeListener(this.onchangeAmountEditMode.bind(this));
			}
		}, this), 0);
		this._isManualOpportunity = this._model.getField('IS_MANUAL_OPPORTUNITY');
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.getOpportunityControl = function()
	{
		var opportunityControl = this._editor.getControlByIdRecursive('OPPORTUNITY_WITH_CURRENCY');
		if (opportunityControl instanceof BX.Crm.EntityEditorMoney)
		{
			return opportunityControl;
		}
		return null;
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onTabShow = function(tab)
	{
		if(tab.getId() !== "tab_products")
		{
			return;
		}

		if(this._externalEditor && !this._externalEditor.hasLayout())
		{
			this._externalEditor.layout();
		}
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.getExternalEditorId = function()
	{
		return this.getConfigStringParam("editorId", "");
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.setExternalEditor = function(editor)
	{
		if(this._externalEditor === editor)
		{
			return;
		}

		if(this._externalEditor)
		{
			this._externalEditor.setForm(null);
			BX.removeCustomEvent(this._externalEditor, "sumTotalChange", this._sumTotalChangeHandler);
			BX.removeCustomEvent(this._externalEditor, "productAdd", this._productAddHandler);
			BX.removeCustomEvent(this._externalEditor, "productChange", this._productChangeHandler);
			BX.removeCustomEvent(this._externalEditor, "productRemove", this._productRemoveHandler);
		}

		this._externalEditor = editor;

		this._prevProductCount = 0;
		this._curProductCount = 0;
		if(this._externalEditor)
		{
			this._externalEditor.setForm(this._editor.getFormElement());
			BX.addCustomEvent(this._externalEditor, "sumTotalChange", this._sumTotalChangeHandler);
			BX.addCustomEvent(this._externalEditor, "productAdd", this._productAddHandler);
			BX.addCustomEvent(this._externalEditor, "productChange", this._productChangeHandler);
			BX.addCustomEvent(this._externalEditor, "productRemove", this._productRemoveHandler);
			this._prevProductCount = this._curProductCount = this._externalEditor.getProductCount();

			this.adjustLocks();
		}
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.isManualOpportunity = function()
	{
		return (this._model.getField('IS_MANUAL_OPPORTUNITY') =='Y');
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.adjustLocks = function()
	{
		if (!this.isManualOpportunity())
		{
			this.doAdjustLocks();
		}
	}
	BX.Crm.EntityEditorProductRowProxy.prototype.doAdjustLocks = function()
	{
		if(!this._externalEditor)
		{
			return;
		}

		if(this._externalEditor.getProductCount() > 0)
		{
			this._model.lockField("OPPORTUNITY");
		}
		else
		{
			this._model.unlockField("OPPORTUNITY");
		}
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.adjustTotals = function(totals, needMarkAsChanged)
	{
		var opportunityControl = this.getOpportunityControl();
		if (
			opportunityControl &&
			opportunityControl.getManualOpportunityValue() === 'Y' &&
			this._curProductCount === 0 &&
			this._externalEditor.getProductCount() > 0 // only when product was added first time
		)
		{
			var popup = BX.UI.EditorAuxiliaryDialog.getById("manual_opportunity_mode_selector");
			if (popup)
			{
				popup.close();
			}

			BX.UI.EditorAuxiliaryDialog.create(
				"manual_opportunity_mode_selector",
				{
					title: BX.Crm.EntityEditorProductRowProxy.messages.manualOpportunityChangeModeTitle,
					content: BX.Crm.EntityEditorProductRowProxy.messages.manualOpportunityChangeModeText,
					zIndex: 100,
					overlay: true,
					buttons:
						[
							{
								id: "yes",
								type: BX.Crm.DialogButtonType.accept,
								text: BX.Crm.EntityEditorProductRowProxy.messages.manualOpportunityChangeModeYes,
								callback: BX.delegate(function(event)
								{
									event.getDialog().close();
									this.setManualOpportunity(false);
									this.doAdjustTotals(totals);
									if (needMarkAsChanged)
									{
										this.markAsChanged();
									}
								}, this)
							},
							{
								id: "no",
								type: BX.Crm.DialogButtonType.cancel,
								text: BX.Crm.EntityEditorProductRowProxy.messages.manualOpportunityChangeModeNo,
								callback: BX.delegate(function(event)
								{
									event.getDialog().close();
									this.setManualOpportunity(true);
									this.doAdjustTotals(totals);
									if (needMarkAsChanged)
									{
										this.markAsChanged();
									}
								}, this)
							}
						]
				}
			).open();
		}
		else
		{
			this.doAdjustTotals(totals);
			if (needMarkAsChanged)
			{
				this.markAsChanged();
			}
		}
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.doAdjustTotals = function(totals)
	{
		if (this.isManualOpportunity())
		{
			return;
		}
		this._model.setField(
			"FORMATTED_OPPORTUNITY",
			totals["FORMATTED_SUM"],
			{ enableNotification: false }
		);

		this._model.setField(
			"FORMATTED_OPPORTUNITY_WITH_CURRENCY",
			totals["FORMATTED_SUM_WITH_CURRENCY"],
			{ enableNotification: false }
		);

		this._model.setField(
			"OPPORTUNITY",
			totals["SUM"],
			{ enableNotification: true }
		);
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.setManualOpportunity = function(isManual)
	{
		if(isManual)
		{
			this._model.unlockField("OPPORTUNITY");
		}
		else
		{
			this.doAdjustLocks();
		}
		this._model.setField(
			"IS_MANUAL_OPPORTUNITY",
			isManual ? 'Y' : 'N',
			{ enableNotification: true }
		);
		this.markAsChanged();
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.notifyOpportunityControl = function()
	{
		var opportunityControl = this.getOpportunityControl();
		if (opportunityControl)
		{
			opportunityControl.setHasRelatedProducts(this._externalEditor ? this._externalEditor.getProductCount() > 0 : false);
		}
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onEditorCreate = function(sender)
	{
		if(sender.getId() !== this.getExternalEditorId())
		{
			return;
		}

		BX.removeCustomEvent(window, "ProductRowEditorCreated", this._editorCreateHandler);
		delete(this._editorCreateHandler);
		this.setExternalEditor(sender);
		this.notifyOpportunityControl();
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onEditorModeChange = function(sender)
	{
		if(this._editor.getMode() === BX.UI.EntityEditorMode.edit)
		{
			this._editor.addControlChangeListener(this._editorControlChangeHandler);
		}
		else
		{
			this._editor.removeControlChangeListener(this._editorControlChangeHandler);
		}
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onEditorControlChange = function(sender, params)
	{
		if(!this._externalEditor)
		{
			return;
		}

		var name = BX.prop.getString(params, "fieldName", "");
		if(name !== "CURRENCY_ID")
		{
			return;
		}

		var currencyId = BX.prop.getString(params, "fieldValue", "");
		if(currencyId !== "")
		{
			this._currencyId = currencyId;
			this._externalEditor.setCurrencyId(this._currencyId);
			this.markAsChanged();
		}
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onProductAdd = function(product)
	{
		this.adjustLocks();
		this.markAsChanged();
		this.notifyOpportunityControl();
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onProductChange = function(product)
	{
		this.adjustLocks();
		this.markAsChanged();
		this.notifyOpportunityControl();
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onProductRemove = function(product)
	{
		this.adjustLocks();
		this.markAsChanged();
		this.notifyOpportunityControl();
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onSumTotalChange = function(totalSum, allTotals, needMarkAsChanged)
	{
		this.adjustTotals(
			{
				"FORMATTED_SUM_WITH_CURRENCY": allTotals["TOTAL_SUM_FORMATTED"],
				"FORMATTED_SUM": allTotals["TOTAL_SUM_FORMATTED_SHORT"],
				"SUM": allTotals["TOTAL_SUM"]
			},
			needMarkAsChanged
		);
		this._prevProductCount = this._curProductCount;
		this._curProductCount = this._externalEditor ? this._externalEditor.getProductCount() : 0;
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onAfterSave = function()
	{
		BX.Crm.EntityEditorProductRowProxy.superclass.onAfterSave.apply(this);
		this._isManualOpportunity = this._model.getField("IS_MANUAL_OPPORTUNITY", null);
		if (this._manualOpportunityHiddenInput)
		{
			BX.Dom.remove(this._manualOpportunityHiddenInput);
			this._manualOpportunityHiddenInput = null;
		}
		if(this._externalEditor)
		{
			this._externalEditor.removeFormFields();
		}
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.rollback = function()
	{
		var currencyId = this._model.getField("CURRENCY_ID", "");
		if(this._currencyId !== currencyId)
		{
			this._currencyId = currencyId;
			if(this._externalEditor)
			{
				this._externalEditor.setCurrencyId(this._currencyId);
			}
		}
		if (this._isManualOpportunity)
		{
			this.setManualOpportunity(this._isManualOpportunity === 'Y');
		}
		this.adjustLocks();
		this._isChanged = false;
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onBeforeSubmit = function()
	{
		if(this._externalEditor && (this.isChanged() || this._editor.isNew()))
		{
			this._externalEditor.handleFormSubmit();
		}

		var form = this._editor.getFormElement();
		var isManualOpportunity = this._model.getField("IS_MANUAL_OPPORTUNITY", null);
		if (isManualOpportunity !== null)
		{
			if (!BX.findChild(
				form,
				{tagName: "input", attr: {name: 'IS_MANUAL_OPPORTUNITY'}},
				true,
				false
			))
			{
				this._manualOpportunityHiddenInput = BX.create("input",
					{
						attrs:
							{
								name: 'IS_MANUAL_OPPORTUNITY',
								type: "hidden",
								value: isManualOpportunity
							}
					}
				);
				form.appendChild(this._manualOpportunityHiddenInput);
			}
		}
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onBeforesSaveControl = function(data)
	{
		if(this._externalEditor  && (this.isChanged() || this._editor.isNew()))
		{
			data = this._externalEditor.handleControlSave(data);
		}
		return data;
	};
	BX.Crm.EntityEditorProductRowProxy.prototype.onchangeAmountEditMode = function(field, isManual)
	{
		if (isManual)
		{
			if (!BX.UI.EditorAuxiliaryDialog.isItemOpened("enable_manual_opportunity_confirmation"))
			{

				BX.UI.EditorAuxiliaryDialog.create(
					"enable_manual_opportunity_confirmation",
					{
						title: BX.Crm.EntityEditorProductRowProxy.messages.manualOpportunityConfirmationTitle,
						content: BX.Crm.EntityEditorProductRowProxy.messages.manualOpportunityConfirmationText,
						zIndex: 100,
						overlay: true,
						buttons:
							[
								{
									id: "yes",
									type: BX.Crm.DialogButtonType.accept,
									text: BX.Crm.EntityEditorProductRowProxy.messages.manualOpportunityConfirmationYes,
									callback: BX.delegate(function(event)
									{
										event.getDialog().close();
										this.setManualOpportunity(true);
									}, this)
								},
								{
									id: "no",
									type: BX.Crm.DialogButtonType.cancel,
									text: BX.Crm.EntityEditorProductRowProxy.messages.manualOpportunityConfirmationNo,
									callback: function(event)
									{
										event.getDialog().close();
									}
								}
							]
					}
				).open();
			}
		}
		else
		{
			this._model.setField("OPPORTUNITY","");
			this.setManualOpportunity(false);
			if (this._externalEditor)
			{
				this._externalEditor.calculateTotals();
			}
		}
	};
	BX.Crm.EntityEditorProductRowProxy.create = function(id, settings)
	{
		var self = new BX.Crm.EntityEditorProductRowProxy();
		self.initialize(id, settings);
		return self;
	}
}

//endregion