Множественные почтовые индексы в Magento Checkout - PullRequest
0 голосов
/ 14 апреля 2011

Я работаю в магазине Magento для клиента. Они используют дропшипперы, поэтому один почтовый индекс не сильно нам помогает. У нас он установлен для наиболее распространенного почтового индекса, из которого отправляется клиент, поэтому во многих случаях все в порядке.

Однако в некоторых случаях требуется использовать другой почтовый индекс. В более редких случаях у нас будет несколько почтовых индексов. Когда есть zip, который отличается от основного, мы сохраняем его в атрибуте, называемом origin zip (creative, а?)

Где мне искать изменения? Мы используем только метод доставки UPS, и перед тем, как рассчитать стоимость доставки, я собираюсь собрать в корзину любые исходные почтовые индексы (я думаю, у нас есть эта часть), но затем, в зависимости от результаты, мне может понадобиться перебрать расчет доставки и сложить значения вместе - т.е. в случае, если они заказывают один продукт с исходным почтовым индексом, а другой продукт без исходного почтового индекса, он должен будет рассчитать первый, затем второй, а затем сложите их вместе.

Если бы кто-то мог указать нам правильное направление, какие php-файлы или классы нам нужно изменить, я был бы очень признателен.

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

Класс usa/shipping_ups - это то, что обрабатывает эти запросы, а именно метод setRequest, кажется, имеет то, что вам нужно:

    if ($request->getOrigPostcode()) {
        $r->setOrigPostal($request->getOrigPostcode());
    } else {
        $r->setOrigPostal(Mage::getStoreConfig('shipping/origin/postcode', $this->getStore()));
    }  

Если вы можете добавить ориг-пост к запросу на доставку, UPS вернет расценки, основанные на этом источнике.

Один из подходов к этому - переопределить Mage_Shipping_Model_Rate_Request и добавить метод с именем getOrigPostcode. Благодаря тому, что он является реальным методом, он переопределяет стандартное поведение получения / установки Magento. Пусть этот метод запросит содержимое запроса, чтобы выяснить, какой почтовый индекс нужно использовать.

Надеюсь, это поможет!

Спасибо, Джо

1 голос
/ 14 апреля 2011

Прежде всего вам необходимо добавить свой пользовательский атрибут в список атрибутов, которые будут использоваться в корзине. Следуйте за этим ответом на stackoverflow: Как добавить пользовательские загруженные изображения в корзину в magento 1.4.1.1?

Затем вам нужно создать свой собственный способ доставки, возможно, расширенный от вашего. Он должен пройтись по пунктам, полученным из запроса на отправку, и проверить наличие другого почтового индекса, а затем рассчитать для них стоимость отдельно.

Я надеюсь, что для вас не составит труда создать модуль, который расширит функциональность существующего метода доставки.

ура!

UPDATE Для добавления вашего атрибута к товару, который загружен в корзину, используйте такую ​​конфигурацию:

<config>
     <global>
          <sales>
               <quote>
                    <item>
                        <product_attributes>
                             <origin_zip />
                        </product_attributes>
                    </item>
               </quote>
          </sales>
     </global>
</config>

Затем в модели способа доставки используйте что-то вроде этого (в качестве примера использовали USPS):

public function collectRates(Mage_Shipping_Model_Rate_Request $request)
{
    if (!$this->getConfigFlag('active')) {
        return false;
    }

    $defaultOriginZip = Mage::getStoreConfig('shipping/origin/postcode', $this->getStore());

    $requestDataByOriginZip = array();
    // Walking through quote items
    foreach ($request->getAllItems() as $quoteItem) {
        // If virtual or not shippable separately, it should be skipped
        if ($quoteItem->isVirtual() || $quoteItem->isDummy(true)) {
            continue;
        }
        // Retrieving origin zip code
        if ($quoteItem->getProduct()->getOriginZip()) {
            $zipCodeForCalculation = $quoteItem->getProduct()->getOriginZip();
        } else {
            $zipCodeForCalculation = $defaultOriginZip;
        }

        if (!isset($requestDataByOriginZip[$zipCodeForCalculation])) {
            // Default values initialization for this zip code
            $requestDataByOriginZip[$zipCodeForCalculation] = array(
                'orig_postcode' => $zipCodeForCalculation,
                'package_weight' => 0,
                'package_value' => 0,
                // etc...
            );
        }

        $requestDataByOriginZip[$zipCodeForCalculation]['package_weight'] += $quoteItem->getRowWeight();
        $requestDataByOriginZip[$zipCodeForCalculation]['package_value'] += $quoteItem->getBaseRowTotal();
        // Etc...
    }

    $results = array();
    foreach ($requestDataByOriginZip as $requestData) {
       $requestByZip = clone $request; // Cloning to prevent changing logic in other shipment methods.
       $requestByZip->addData($requestData);
       $this->setRequest($requestByZip);
       // Returns rate result for current request
       $results[] = $this->_getQuotes();
    }

    $yourMergedResult = Mage::getModel('shipping/rate_result');

    foreach ($results as $result) {
       // Logic for merging the rate prices....
    }

    return $yourMergedResult;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...