На странице оформления заказа мне нужно обновить итоги заказа и удалить НДС из общей суммы после проверки поля НДС (проверка выполняется в контроллере). Также цены должны быть сохранены при просмотре заказа в бэкэнде.
Я уже пытался сделать обновление с помощью пользовательского js, и он отлично работает в веб-интерфейсе, но не экономит на представлении заказа в бэкэнде
define([
'jquery',
'Magento_Checkout/js/model/quote',
'Magento_Checkout/js/model/resource-url-manager',
'mage/storage',
'Magento_Checkout/js/action/get-payment-information',
'Magento_Checkout/js/model/totals',
'Magento_Checkout/js/model/full-screen-loader',
'Magento_Checkout/js/action/get-totals',
'Magento_Checkout/js/model/cart/totals-processor/default'
], function ($, quote, urlManager,storage, getPaymentInformationAction, totals, fullscreenLoader,
getTotalsAction) {
'use strict';
return function (removeTax, tax) {
var payload = {
addressInformation: {
shipping_address: quote.shippingAddress(),
billing_address: quote.billingAddress(),
shipping_method_code: quote.shippingMethod().method_code,
shipping_carrier_code: quote.shippingMethod().carrier_code
}
};
fullscreenLoader.startLoader();
return storage.post(
urlManager.getUrlForSetShippingInformation(quote),
JSON.stringify(payload)
).done(function (response) {
if(removeTax) {
response.totals.total_segments[2].value = -tax;
response.totals.total_segments[4].value -= tax;
} else {
response.totals.total_segments[2].value = tax;
response.totals.total_segments[4].value += tax;
}
var deferred = $.Deferred();
totals.isLoading(true);
getTotalsAction([], deferred);
$.when(deferred).done(function () {
quote.setTotals(response.totals);
totals.isLoading(false);
fullscreenLoader.stopLoader();
});
}).fail(function (response) {
console.log('fail');
totals.isLoading(false);
fullScreenLoader.stopLoader();
});
};
});
С другой стороны, я также пытался изменить итоговые суммы заказа с помощью etc / sales.xml. Здесь мне удается выполнить обновление как в представлении внешнего интерфейса, так и в представлении администратора, но я не могу выполнить эти корректировки только после проверки поля НДС. Вот моя функция сбора модели:
public function collect(
\Magento\Quote\Model\Quote $quote,
\Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment,
\Magento\Quote\Model\Quote\Address\Total $total
) {
parent::collect($quote, $shippingAssignment, $total);
$currentTax = $total->getTaxAmount();
$total->setTaxAmount(-$currentTax);
$total->setBaseTaxAmount(-$currentTax);
$total->setGrandTotal($total->getGrandTotal() - $currentTax);
$total->setBaseGrandTotal($total->getBaseGrandTotal() - $currentTax);
return $this;
}
Поэтому я попытался установить сообщение сеанса следующим образом: $ this-> session-> setMySession ("Valid VAT"); в контроллере, где я делаю проверку для НДС, а затем в модели, чтобы внести изменения, только если:
if($this->session->getMySession() == "Valid VAT" ){
.........
}
но он не устанавливает сообщение сеанса, потому что Модель загружается один раз при первой загрузке страницы, и мне не удается перезагрузить его после проверки.
Может кто-нибудь помочь или подсказать, как я могу вносить изменения в цены только после проверки в контроллере?
Заранее спасибо