AnonSec Shell
Server IP : 85.193.89.191  /  Your IP : 3.149.214.245
Web Server : Apache
System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64
User : bitrix ( 600)
PHP Version : 8.1.27
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/bitrix/www/bitrix/js/conversion/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/bitrix/www/bitrix/js/conversion/profit_calc.js
var ProfitCalc = function(params)
	{

		this.wrapper = params.wrapper;
		this.topBlockWrapper = params.topBlockWrapper;
		this.cellParams = params.cellParams;
		this.topBlockParams = params.topBlockParams;
		this.titleText = params.calcTitleText;
		this.btnText = params.calcBtnText;
		this.valueNodeList = [];
		this.objList = [];
		this.cellOrderObjList = [];
		this.isEditableOn = false;
		this.toggleBtn = null;
		this.isError = false;
		this.errorClassName = 'adm-profit-error';

		this.init();

	};

ProfitCalc.prototype =
{

	init : function()
	{
		this.createObjList();
		this.createObjNodeList();
		this.createCalcNode();
		this.firstCounting();
		this.painting();
		this.setFixSize();
	},
	createObjNodeList : function()
	{
		this.budget_1 = {
			title : this.cellParams.budget.title,
			isEditable : true,
			node : null,
			getMainObj : BX.proxy(function(){return this.budget},this),
			field : null
		};

		this.clickPrice_2 = {
			title : this.cellParams.clickPrice.title,
			isEditable : true,
			node : null,
			getMainObj : BX.proxy(function(){return this.clickPrice},this),
			field : null
		};

		this.amountClicks_3 = {
			title : this.cellParams.amountClicks.title,
			addClass : 'adm-profit-calc-cel-yellow',
			node : null,
			getMainObj : BX.proxy(function(){return this.amountClicks},this)
		};
		this.amountClicks_4 = {
			title : this.cellParams.amountClicks.title,
			node : null,
			getMainObj : BX.proxy(function(){return this.amountClicks},this)
		};
		this.amountOrders_5 = {
			title : this.cellParams.amountOrders.title,
			node : null,
			getMainObj : BX.proxy(function(){return this.amountOrders},this)
		};
		this.conversion_6 = {
			title : this.cellParams.conversion.title,
			isEditable : true,
			addClass : 'adm-profit-calc-cel-yellow',
			node : null,
			getMainObj : BX.proxy(function(){return this.conversion}, this),
			field : null
		};

		this.grossProfit_7 = {
			title : this.cellParams.grossProfit.title,
			node : null,
			getMainObj : BX.proxy(function(){return this.grossProfit},this)
		};
		this.amountOrders_8 = {
			title : this.cellParams.amountOrders.title,
			node : null,
			getMainObj : BX.proxy(function(){return this.amountOrders},this)
		};
		this.averageBill_9 = {
			title : this.cellParams.averageBill.title,
			isEditable : true,
			addClass : 'adm-profit-calc-cel-red',
			node : null,
			getMainObj : BX.proxy(function(){return this.averageBill},this),
			field : null
		};

		this.budget_10 = {
			title : this.cellParams.budget.title,
			node : null,
			getMainObj : BX.proxy(function(){return this.budget},this)
		};
		this.amountOrders_11 = {
			title : this.cellParams.amountOrders.title,
			node : null,
			getMainObj : BX.proxy(function(){return this.amountOrders},this)
		};
		this.orderPrice_12 = {
			title : this.cellParams.orderPrice.title,
			addClass : 'adm-profit-calc-cel-red',
			node : null,
			getMainObj : BX.proxy(function(){return this.orderPrice},this)
		};
		this.budget_13 = {
			title : this.cellParams.budget.title,
			node : null,
			getMainObj :  BX.proxy(function(){return this.budget},this)
		};
		this.markup_14 = {
			title : this.cellParams.markup.title,
			isEditable : true,
			node : null,
			getMainObj : BX.proxy(function(){return this.markup},this),
			field : null
		};

		this.roi_15 = {
			title : this.cellParams.roi.title,
			addClass : 'adm-profit-calc-cel-violet',
			node : null,
			getMainObj : BX.proxy(function(){return this.roi},this)
		};
		this.other_16 = {
			title : this.cellParams.other.title,
			isEditable : true,
			node : null,
			getMainObj : BX.proxy(function(){return this.other},this),
			field : null
			//addClass: 'adm-profit-calc-footer'
		};

		this.cost_17 = {
			title : this.cellParams.cost.title,
			isEditable : true,
			node : null,
			getMainObj : BX.proxy(function(){return this.cost},this),
			field : null
		};

		this.cellOrderObjList = [
			this.budget_1,       this.clickPrice_2,    this.amountClicks_3,
			this.amountClicks_4, this.amountOrders_5,  this.conversion_6,
			this.grossProfit_7,  this.amountOrders_8,  this.averageBill_9,
			this.budget_10,      this.amountOrders_11, this.orderPrice_12,
			this.budget_13,      this.markup_14,       this.roi_15,
			this.other_16,       this.cost_17
		];

		this.topGrossProfit = {
			node : this.topBlockParams.topGrossProfit,
			getMainObj : BX.proxy(function(){return this.grossProfit},this)
		};
		this.topBudget = {
			node : this.topBlockParams.topBudget,
			getMainObj : BX.proxy(function(){return this.budget},this)
		};
		this.topOther = {
			node : this.topBlockParams.topOther,
			getMainObj: BX.proxy(function(){return this.other},this)
		};
		this.topTotal = {
			node : this.topBlockParams.topTotal,
			getMainObj : BX.proxy(function(){return this.total},this)
		};
		this.topConversion = {
			node : this.topBlockParams.topConversion,
			getMainObj : BX.proxy(function(){return this.conversion},this)
		};

		for(var i = this.cellOrderObjList.length-1; i>=0; i--)
		{
			this.valueNodeList.push(this.cellOrderObjList[i])
		}

		this.valueNodeList.push(this.topGrossProfit);
		this.valueNodeList.push(this.topBudget);
		this.valueNodeList.push(this.topOther);
		this.valueNodeList.push(this.topTotal);
		this.valueNodeList.push(this.topConversion);

	},
	createObjList : function()
	{
		this.budget = {
			firstValue : this.cellParams.budget.value,
			value : this.cellParams.budget.value,
			getValue : BX.proxy(function(){return this.budget_1.field.value},this),
			directDependence : BX.proxy(function(){return this.amountClicks},this),
			isEditable : false
		};
		this.objList.push(this.budget);

		this.clickPrice = {
			firstValue : this.cellParams.clickPrice.value,
			value : this.cellParams.clickPrice.value,
			getValue :  BX.proxy(function(){return this.clickPrice_2.field.value},this),
			directDependence : BX.proxy(function(){return this.amountClicks},this),
			isEditable : false
		};
		this.objList.push(this.clickPrice);

		this.amountClicks = {
			firstValue : null,
			value : null,
			round : function(num)
					{
						return Math.ceil(num);
					},
			formula : BX.proxy(function()
					{
						return this.clickPrice.value
							? this.budget.value / this.clickPrice.value
							: this.budget.value;
					},this),
			isEditable : false
		};
		this.objList.push(this.amountClicks);

		this.amountOrders = {
			firstValue : this.cellParams.amountOrders.value,
			value : this.cellParams.amountOrders.value,
			round : function(num)
					{
						return Math.ceil(num);
					},
			formula : BX.proxy(function()
					{
						return this.amountClicks.value
							? this.conversion.value * this.amountClicks.value / 100
							: this.amountClicks.value;
					},this),
			isEditable : false
		};
		this.objList.push(this.amountOrders);

		this.conversion = {
			firstValue : null,
			value : null,
			round : BX.proxy(function(num)
					{
						return this.round100(num);
					},this),
			formula : BX.proxy(function()
			{
						return this.amountClicks.value
							? this.amountOrders.value / this.amountClicks.value * 100
							: this.amountOrders.value;
					},this),
			getValue :  BX.proxy(function(){return this.conversion_6.field.value},this),
			directDependence : BX.proxy(function(){return this.amountOrders},this),
			isEditable : false
		};
		this.objList.push(this.conversion);

		this.grossProfit = {
			firstValue : this.cellParams.grossProfit.value,
			value : this.cellParams.grossProfit.value,
			round : function(num)
					{
						return Math.ceil(num);
					},
			formula : BX.proxy(function()
					{
						var profit;
						if(this.markup.isActive)
						{
							profit = this.cost.value + (this.cost.value/100 * this.markup.value);
							this.markup.isActive = false;
							this.averageBill.value =
									this.amountOrders.value
									? profit / this.amountOrders.value
									: profit;
							this.averageBill.isEditable = true;
						}
						else
						{
							profit = this.averageBill.value * this.amountOrders.value;
						}
						return profit;

					},this),
			isEditable : false
		};
		this.objList.push(this.grossProfit);

		this.averageBill = {
			firstValue : null,
			value : null,
			round : BX.proxy(function(num)
					{
						return this.round100(num);
					},this),
			formula : BX.proxy(function(){
						return this.amountOrders.value
							? this.grossProfit.value / this.amountOrders.value
							: this.grossProfit.value;
					},this),
			getValue :  BX.proxy(function(){return this.averageBill_9.field.value},this),
			directDependence : BX.proxy(function(){return this.grossProfit},this),
			isEditable : false
		};
		this.objList.push(this.averageBill);

		this.orderPrice = {
			firstValue : null,
			value : null,
			round : BX.proxy(function(num)
							{
								return this.round100(num);
							},this),
			formula : BX.proxy(function(){
						return this.amountOrders.value
							? this.budget.value / this.amountOrders.value
							: this.budget.value;
					},this),
			isEditable : false
		};
		this.objList.push(this.orderPrice);

		this.markup = {
			firstValue : this.cellParams.markup.value,
			value : this.cellParams.markup.value,
			prevValue : this.cellParams.markup.value,
			getValue :  BX.proxy(function(){return this.markup_14.field.value},this),
			directDependence : BX.proxy(function(){return this.grossProfit},this),
			isActive : false,
			isEditable : false
		};
		this.objList.push(this.markup);

		this.cost = {
			firstValue : null,
			value : null,
			round :function(num)
					{
						return Math.round(num);
					},
			formula : BX.proxy(function()
					{
						return this.grossProfit.value - (this.grossProfit.value/(100+this.markup.value)*this.markup.value)
					},this),
			getValue :  BX.proxy(function(){return this.cost_17.field.value},this),
			isEditable : false
		};
		this.objList.push(this.cost);

		this.roi = {
			firstValue : null,
			value : null,
			round : BX.proxy(function(num)
							{
								return this.round100(num);
							},this),
			formula : BX.proxy(function(){
						return this.budget.value || this.other.value
							? (this.grossProfit.value - this.cost.value) / (this.budget.value + this.other.value) * 100
							: this.grossProfit.value - this.cost.value;
					},this),
			isEditable : false
		};
		this.objList.push(this.roi);

		this.other = {
			firstValue : this.cellParams.other.value,
			value : this.cellParams.other.value,
			getValue :  BX.proxy(function(){return this.other_16.field.value},this),
			isEditable : false
		};
		this.objList.push(this.other);

		this.total = {
			firstValue : null,
			value : null,
			round : function(num)
					{
						return Math.ceil(num);
					},
			formula : BX.proxy(function(){
				return this.grossProfit.value - (this.budget.value + this.other.value);
			},this),
			isEditable : false
		};
		this.objList.push(this.total);
	},
	showFields : function()
	{
		for(var i=this.cellOrderObjList.length-1; i>=0; i--)
		{
			if(this.cellOrderObjList[i].isEditable)
			{
				this.cellOrderObjList[i].field.style.fontSize = BX.style(this.cellOrderObjList[i].node, 'font-size');
				this.cellOrderObjList[i].field.style.display = 'block';
				(function(field)
				{
					setTimeout(function()
					{
						field.style.opacity = 1;

					}, 100)
				})(this.cellOrderObjList[i].field)
			}
		}
	},
	hideFields : function()
	{
		for(var i=this.cellOrderObjList.length-1; i>=0; i--)
		{
			if(this.cellOrderObjList[i].isEditable)
			{
				this.cellOrderObjList[i].field.style.fontSize = BX.style(this.cellOrderObjList[i].node, 'font-size');
				this.cellOrderObjList[i].field.style.display = 'none';
				this.cellOrderObjList[i].field.style.opacity = 0;
			}
		}
	},
	editToggle : function()
	{
		if(!this.isEditableOn)
		{
			this.isEditableOn = true;
			BX.addClass(this.toggleBtn, 'adm-profit-calc-toggle-active');
			BX.addClass(this.wrapper, 'adm-profit-block-part-active');
			this.showFields();
		}
		else
		{
			this.isEditableOn = false;
			BX.removeClass(this.toggleBtn, 'adm-profit-calc-toggle-active');
			BX.removeClass(this.wrapper, 'adm-profit-block-part-active');
			this.hideFields();
			this.returnValue();
		}
	},
	toggleButton : function()
	{
		this.toggleBtn = BX.create('div',{props:{className:'adm-profit-calc-toggle'},
									children : [
											BX.create('span',{props:{className:'adm-profit-calc-toggle-text'},
																text : this.btnText
											}),
											BX.create('span',{props:{className:'adm-profit-calc-toggle-btn'}})
									]
		});

		BX.bind(this.toggleBtn, 'click', BX.proxy(this.editToggle, this));

		return this.toggleBtn;
	},
	createCalcNode : function()
	{
		var calcChildren = [];
		var counter = 1;
		var row;
		var title = BX.create('div',{props:{className:'adm-profit-title-wrap'},
									children : [
											BX.create('div',{props:{className:'adm-profit-title adm-profit-title-calc'},
															text:this.titleText
											}),
										this.toggleButton()
									]
				});


		for(var i =0; i<this.cellOrderObjList.length; i++)
		{
			if(counter == 1)
			{
				row = BX.create('div',{props:{className:'adm-profit-calc-row'}});
				calcChildren.push(row);
			}

			row.appendChild(this.createCell(this.cellOrderObjList[i]));

			counter = counter == 3 ? 1 : ++counter;
		}

		var calc = BX.create('div',{props:{className:'adm-profit-calc-block'},
									children : calcChildren
		});

		this.wrapper.appendChild(title);
		this.wrapper.appendChild(calc);

	},
	setFixSize : function()
	{
		var objList = [];
		for(var i= this.cellOrderObjList.length-1; i>=0; i--){
			objList.push({node : this.cellOrderObjList[i].node, maxFontSize : 23, smallestValue : true})
		}

		objList.push({node : this.topGrossProfit.node, maxFontSize : 45});
		objList.push({node : this.topBudget.node, maxFontSize : 29});
		objList.push({node : this.topOther.node, maxFontSize : 29});
		objList.push({node : this.topTotal.node, maxFontSize : 45});
		objList.push({node : this.topConversion.node, maxFontSize : 19});

		BX.FixFontSize.init({
				objList : objList,
				onresize : true
			});


	},
	createField : function()
	{
		var handler;

		if(!BX.browser.IsIE8())
		{
			handler = BX.debounce(this.reCounting, 500, this);
		}else {
			handler = BX.proxy(this.reCounting, this);
		}

		return BX.create('input',{props:{type : 'text', className : 'adm-profit-calc-inp'},
									events:{keyup  : handler}});
	},
	createCell : function(cellObj)
	{
		var inp,
			cellInner,
			cellInnerClassName,
			child,
			children = [];

		var className = cellObj.addClass ? 'adm-profit-calc-cel '+ cellObj.addClass : 'adm-profit-calc-cel';

		cellInnerClassName = cellObj.isEditable ? 'adm-profit-calc-cont adm-profit-calc-cont-inp' : 'adm-profit-calc-cont'

		var title = BX.create('div',{props:{className:'adm-profit-calc-cel-header'},
									text : cellObj.title
					});

		cellInner = BX.create('div',{props:{className : cellInnerClassName}});

		children.push(title);

		if(cellObj == this.other_16 || cellObj == this.cost_17)
			className = className + ' adm-profit-calc-footer';

		if(cellObj.isEditable)
		{
			inp = this.createField();
			children.push(cellInner, inp);
			cellObj.field = inp;
		}
		else
		{
			children.push(cellInner);
		}

		cellObj.node = cellInner;

		return BX.create('div', {
			props : {className : className},
			children : children
		})
	},
	round100 : function(num)
	{
		return (Math.ceil(num *100) / 100);
	},
	firstCounting : function()
	{
		for(var i = 0; i < this.objList.length; i++)
		{
			if(this.objList[i].firstValue === null)
			{
				this.objList[i].value = this.objList[i].firstValue =  this.objList[i].formula();
			}
		}

		this.conversion.formula = null;
		this.averageBill.formula = null;
	},
	reCounting : function(event)
	{
		event = event || window.event;
		var target = event.target || event.srcElement;

		var activeObj,
			fieldValue = this.validation(target.value);

		if(!fieldValue && fieldValue !== 0)
		{
			BX.addClass(target, this.errorClassName)
			return
		}
		else
		{
			BX.removeClass(target, this.errorClassName)
		}

		for(var i = this.cellOrderObjList.length-1; i>=0; i--)
		{
			if(this.cellOrderObjList[i].field == target)
			{
				activeObj = this.cellOrderObjList[i].getMainObj();
			}
		}

		activeObj.value = fieldValue;
		activeObj.isEditable = true;

		if(activeObj == this.markup)
			this.markup.isActive = true;

		if(activeObj.directDependence){
			activeObj.directDependence().value = activeObj.directDependence().formula();
			activeObj.directDependence().isEditable = true;
		}

		for(var b = 0; b < this.objList.length; b++)
		{
			if(this.objList[b].formula && !this.objList[b].isEditable)
			{
				this.objList[b].value = this.objList[b].formula()
			}
			else if(this.objList[b].isEditable){
				this.objList[b].isEditable = false;
			}
		}

		this.painting();
	},
	validation : function(value)
	{
		value = value.replace(',','.');

		return  parseFloat(value);
	},
	painting : function()
	{
		for(var i=this.valueNodeList.length-1; i>=0; i--)
		{
			var mainObj = this.valueNodeList[i].getMainObj();
			var value = mainObj.value;

			value = mainObj.round ? mainObj.round(value) : value;

			this.valueNodeList[i].node.innerHTML = this.addBit(value.toString());

			if(this.valueNodeList[i].field)
			{
				this.valueNodeList[i].field.value = value;

				if(this.valueNodeList[i] == this.averageBill_9 && this.grossProfit.value === 0)
				{
					this.valueNodeList[i].node.innerHTML = 0;
					this.valueNodeList[i].node.style.transition = 'none';
					this.valueNodeList[i].node.style.color = '#000';
					this.valueNodeList[i].field.style.opacity = 0;
				}
				else {
					this.valueNodeList[i].field.style.opacity = 1;
					this.valueNodeList[i].node.style.color = '';
					this.valueNodeList[i].node.style.transition = '';
				}
			}
		}
	},
	addBit :function(str)
	{
		var dotIndex = str.indexOf('.');
		var counter = 0;

		var i = dotIndex !=-1 ? dotIndex-1 : str.length-1;

		for(i; i>=0; i--)
		{
			counter++;

			if(counter == 3)
			{
				str = str.slice(0, i) + ' ' + str.slice(i);
				counter = 0;
			}
		}
		return str;
	},
	returnValue : function()
	{
		for(var i=this.valueNodeList.length-1; i>=0; i--)
		{
			var mainObj = this.valueNodeList[i].getMainObj();
			var value = mainObj.firstValue;

			value = mainObj.round ? mainObj.round(value) : value;

			if(this.valueNodeList[i].field)
			{
				this.valueNodeList[i].field.value = value;
				BX.removeClass(this.valueNodeList[i].field, this.errorClassName)
			}

			this.valueNodeList[i].node.innerHTML = this.addBit(value.toString());
		}

		for(var b = this.objList.length-1; b>=0; b--)
		{
			this.objList[b].value = this.objList[b].firstValue;
		}
	}
};

ProfitCalc.create = function(params)
	{
		return new ProfitCalc(params);
	};





Anon7 - 2022
AnonSec Team