Для будущего проекта нам было поручено создать простую концепцию (внутри Magento), которая должна была бы выполнять следующие действия:
У клиента есть возможность выбирать между различными способами доставки, одиниз них «Ship2Shop», который отправляет продукт в выбранный физический магазин, и клиент должен его забрать.Когда клиент выбирает этот способ доставки «ship2shop», определенный процент (например: 25%) от общей суммы должен быть оплачен онлайн (через заранее определенный способ оплаты), а оставшиеся 75% должны быть оплачены в физическомхранить, когда клиент идет и забрать товары, которые он заказал.
Как бы вы поступили об этом?
Идея, которая у нас была, состоит в том, чтобы изменить сеанс оформления заказа / заказа и изменитьсумма «итого» (сохранение оригинала в ходе сеанса).Когда клиент затем отправляется на внешний платежный процессор, «модифицированная общая сумма» отправляется вместе.После того, как клиент вернется на платформу magento, мы изменим заказ, восстановив исходную итоговую итоговую сумму в том виде, в каком она была, и обновив итоговую и оплаченную сумму.
У кого-нибудь есть другие идеи по этому поводу?
РЕДАКТИРОВАТЬ: После обратной связи от Антона S ниже мне удалось добавить "сумму авансового платежа".Однако, у меня все еще есть проблема. В config.xml я добавил следующее в тег:причина, magento не сделает этого ...
EDIT2: Метод сбора
public function collect(Mage_Sales_Model_Quote_Address $address)
{
parent::collect($address);
$quote = $address->getQuote();
$advancePaymentAmount = 0;
$baseAdvancePaymentAmount = 0;
$items = $address->getAllItems();
if (!count($items)) {
$address->setAdvancePaymentAmount($advancePaymentAmount);
$address->setBaseAdvancePaymentAmount($baseAdvancePaymentAmount);
return $this;
}
$address->setBaseAdvancePayment($address->getGrandTotal()*(0.25));
$address->setAdvancePayment($address->getGrandTotal()*(0.25));
$address->setAdvancePaymentAmount($address->getGrandTotal()*(0.25));
$address->setBaseAdvancePaymentAmount($address->getGrandTotal()*(0.25));
$address->setGrandTotal($address->getGrandTotal() - $address->getAdvancePaymentAmount());
$address->setBaseGrandTotal($address->getBaseGrandTotal()-$address->getBaseAdvancePaymentAmount());
return $this;
}