2012-02-22 2 views
4

특정 제품에 대한 전역 주문 제한을 구현하고 싶습니다. 요점은 특정 제품에 백 오더를 사용할 수있게하고 주문할 수있는 개별 제품의 수에 제한이있는 여러 기간을 정의하고자합니다. 그들은 이러한 이벤트에 $product->setMyModel(...)로로드 할 때Magento - 맞춤 기준에 따라 주문 제한 구현

는 현재 내 사용자 정의 모델은 제품 모델에 선택한 날짜 기간 동안 관련 정보와 함께로드 부착 :

  • catalog_product_load_after
  • catalog_product_collection_load_after
  • sales_quote_item_collection_products_after_load

특정 제품의 데이터로 내 모델에 액세스하는 것은 simp 르 전화로 $product->getMyModel(), 따라서 나는 간단하게 내 모델로 참조됩니다. 제품이 장바구니/견적에 추가하거나 순서로 배치 될 때마다

1., 나는이 (의사) 같은 것을하고 싶지 :

는 내가하고 싶은 것입니다 :

1.1. 여기 Mage_CatalogInventory_Item::checkQuoteItemQty()을 오버라이드하여 $requestedQty을 캡처해야한다고 생각합니다.

2. 업데이트 $myModel::ordered_qty 주문이 취소되거나 환불되는 경우.

나는이 코드를 어디에서 실행해야 할 것인가? 그리고 그러한 주문 제한을 구현하고 수량보다 많은 것을 추적하는 데 더 많은 것이 있습니까?

제게 이것은 상당히 복잡한 작업처럼 보입니다. 그래서 저는 경험이 풍부한 Magento 개발자의 도움이 필요합니다!

참고 : 나는 번호 목록 및 코드 블록을 혼합하는 방법을 알아낼을 couldnt하지만 나는 그것의 읽을 희망 충분히

+0

sales_quote_save_before에 대한 옵저버를 개발하고 세션의 addError 메시지를 통해 개발하려고하면 자동으로 역으로 역할을 수행합니다. – ShaunOReilly

+0

필자가 해본 테스트는'Mage_CatalogInventory_Item :: checkQty()'를 무시하여 수량을 확인하는 것이 잘 작동 함을 보여줍니다. 나는 무엇인가 내려다보고 있을지도 모른다.어쨌든, 나는 언제나 그리고 어떻게 내 모델'ordered_items'에서 덧셈/뺄셈을하는 것이 적절한 지 모른다 - 관리자가 수량을 업데이트 할 때와 같이 특정 조건에서만 이것을하고 싶다는 것을주의하라. 게시물) – Vitamin

답변

8

당신은 당신의 목표를 달성하기 위해 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 이벤트 도 checkQty()를 호출 cataloginventory 모듈에 의해 사용되는, 그래서 당신은 또한 기능이 가능한 것이 무엇인지에 대한 추가 가능성을 Mage_CatalogInventory_Model_Observer::checkQuoteItemQty()을 검사 할 수 있습니다.

+0

답해 주셔서 감사합니다. 번호 또는 주문한 제품을 어떻게 추적하고 있다고 가정합니까? 나는 환불/신용 메모를 고려할 필요가 있다고 생각하며, 주문이 재주문 될 때 백엔드에서 수량이 변경 되었습니까? – Vitamin

+0

'$ myModel :: ordered_qty'는 제품의 재고 수량과 관련이 없다고 가정합니다. 단지 각 제품에 대한 추가 카운터입니까? – Vinai

+0

각 제품 별 카운터입니다. 고객이'$ myModel :: order_limit'을 초과하는 항목을 주문하려고하면 오류가 발생해야합니다. '($ myModel-> getOrderedItems() + $ requestedQty)> $ myModel-> getOrderLimit()) {/ * 오류! * /}' – Vitamin