Magento - реализация лимитов заказов на основе пользовательских критериев - PullRequest
4 голосов
/ 22 февраля 2012

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

В настоящее время моя пользовательская модель загружена с соответствующимиинформация за выбранный период даты и прикрепленная к моделям продуктов, когда они загружены как $product->setMyModel(...) в следующих событиях:

  • catalog_product_load_after
  • catalog_product_collection_load_after
  • sales_quote_item_collection_products_after_load

Доступ к моей модели с данными для конкретного продукта так же прост, как и вызов $product->getMyModel(), который я, следовательно, буду называть просто моя модель .

Вот что я хочу сделать:

1. Всякий раз, когда товар добавляется в корзину / предложение или размещается в заказе, яхочу сделать что-то вроде этого (псевдокод):

// Somehow get $product and $requestedQty (most likely from an event)
$myModel = $product->getMyModel();
if($myModel->applyOrderLimit()) {
    // ($orderedQty + $requestedQty) <= $orderLimit
    if($myModel->isRequestedQtyAvailable($requestedQty)) {
        // Issue an error and prevent the item from being ordered
        return;
    }
    // $orderedQty += $requestedQty
    $myModel->addToQtyOrdered($requestedQty);
}
// Continue Magentos default behaviour

1.1. Я подозреваю, что Mage_CatalogInventory_Item::checkQuoteItemQty() должен быть переопределен, чтобы захватить $requestedQty здесь.

2. Обновление $myModel::ordered_qty всякий раз, когда заказ отменяется, возвращается или тому подобное.

Полагаю, реальный вопрос в том, где я запускаю этот код, и есть ли что-нибудь еще для реализации такого предела порядка и отслеживания количества, чем я понял?

Мне кажется, этокак довольно сложная задача.Вот почему мне нужна помощь более опытных разработчиков Magento!

Примечание: я не мог понять, как смешивать нумерованные списки и блоки кода, но я надеюсь, что он достаточно читабелен

1 Ответ

8 голосов
/ 29 февраля 2012

Вам не нужно прибегать к переписыванию метода Mage_CatalogInventory_Model_Stock_Item:.checkQty(), чтобы достичь своей цели.

Если вы добавите наблюдателя события в событие sales_quote_item_qty_set_after, ваш наблюдатель будет запущен в дополнение к проверке инвентаризации каталога.

public function salesQuoteItemQtySetAfter(Varien_Event_Observer $observer)
{
    $quoteItem = $observer->getItem();
    $qty = $quoteItem->getQty();
    $myModel = $quoteItem->getProduct()->getMyModel()

    // Your Logic

    // If not salable set error for the quote item
    $quoteItem->addErrorInfo(
        'mymodule', // origin code
        'currently_not_salable', // error code
        'The Error Message'
    );
}

Событие sales_quote_item_qty_set_after также используется модулем cataloginventory для вызова checkQty(), поэтому вы также можете проверить Mage_CatalogInventory_Model_Observer::checkQuoteItemQty() на дополнительные возможности доступных функций.

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