Авансовый платеж Magento - PullRequest
       5

Авансовый платеж Magento

0 голосов
/ 16 сентября 2011

Для будущего проекта нам было поручено создать простую концепцию (внутри 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;
    }

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

см. Эту ветку, где объясняется добавление общего количества объектов Magento: добавление пошлин / налогов к цитате во время проверки

Как правило, вы должны добавить свой собственный общий объект на основе выбранного вами способа доставки, тогда он также будет отображаться в итоговых значениях в виде отдельной строки, и вы можете показать это в каждом электронном письме или месте, где выставлены итоговые данные

public function collect(Mage_Sales_Model_Quote_Address $address)
{

    //this is for the loop that you are in when totals are collected 
    parent::collect($address);

    $quote = $address->getQuote();

    //variables for your own object context
    $advancePaymentAmount = 0;
    $baseAdvancePaymentAmount = 0;

    $items = $address->getAllItems();
    if (!count($items)) {
        $address->setAdvancePaymentAmount($advancePaymentAmount);
        $address->setBaseAdvancePaymentAmount($baseAdvancePaymentAmount);
        return $this;
    }

    //calculated based on other total object and don't edit other totals inside your own as your calculations would be always false and so would be next total object in the cycle and so on
    $baseAdvancePaymentAmount = $address->getBaseGrandTotal()*(0.25);
    $advancePaymentAmount = $address->getQuote()->getStore()->convertPrice($baseAdvancePaymentAmount, false);

    //this is just for your own object context
    $address->setBaseAdvancePaymentAmount($baseAdvancePaymentAmount);
    $address->setAdvancePaymentAmount($advancePaymentAmount);

    /* 
     * this is for the loop that you are in when totals are collected and 
     * those are set to 0 for each totals collecting cycle 
     */

    $this->_setBaseAmount($baseAdvancePaymentAmount);
    $this->_setAmount($advancePaymentAmount);

    return $this;
}
0 голосов
/ 16 сентября 2011

Другой вариант - изменить grand_total в вашем платёжном модуле, чтобы сеансы не изменялись.

...