Пересчет корзины после добавления и удаления купона

Если вы столкнулись с такой же проблемой как и я, что при включенной опции BASKET_WITH_ORDER_INTEGRATION при вводе или удалении купона у товаров корзины не визуально добавляется скидка, то вам, возможно, подойдет мой способ:

В шаблоне компонента bitrix.sale.order.ajax в файле order_ajax.js в самом начале добавляем 

var changeFromCoupon = false

В функцию refreshOrder перед return true; добавляем 

document.changeFromCoupon = false;

if (this.changeCoupon) {
	this.changeCoupon = false;
	let first_basket_item_id = Object.values(this.result.GRID.ROWS)[0].id;
	document.changeFromCoupon = true;			
	document.querySelector('#basket-item-quantity-' + first_basket_item_id).dispatchEvent(new Event('change'));
}

В функцию sendRequest в case enterCoupon и case removeCoupon в самом начале добавляем

this.changeCoupon = true;

Далее в шаблоне корзины, в папке js ищем файл component.js и в функции setQuantity комментируем условие if (parseFloat(itemData.QUANTITY) !== parseFloat(quantity)) чтобы осталось только

this.animatePriceByQuantity(itemData, quantity);
					this.actionPool.changeQuantity(itemData.ID, quantity, currentQuantity);

Далее в файле action-pool.js в функции BX.Sale.BasketActionPool.prototype.checkItemPoolAfter заменяем if следующей конструкцией

if (Object.keys(this.pool[itemId]).length === 0)
{
	// CHANGED BY IVAN
	if (document.changeFromCoupon) {
		// document.changeFromCoupon = false;
	} else {
		delete this.pool[itemId];
	}
}