2016-10-18 3 views
0

제품의 제조업체 특성을 사용하여 주문을 분할하려고합니다. 2 개의 리 (제조업체) 제품과 1 개의 Levis (제조업체) 제품으로 3 개의 제품이있는 경우처럼. 주문할 때 그것은 2 발 1 리를 생성해야하고 다른 하나는 리를 생성해야합니다.Magento Split 주문 제품의 속성을 통해 주문

그래서 몇 가지 도움으로 나는 (전체 문제는 있지만 괜찮습니다.)하지만 5 제품 5 주문과 같은 제품 별 주문을 생성하고 있습니다. 여기

내가 현재

class PMTECH_Splitorder_Model_Checkout_Type_Onepage extends Mage_Checkout_Model_Type_Onepage 
{ 
    /** 
     * Create order based on checkout type. Create customer if necessary. 
     * 
     * @return Mage_Checkout_Model_Type_Onepage 
    */ 
    public function saveOrder() 
    { 
     $this->validate(); 
     $isNewCustomer = false; 
     switch ($this->getCheckoutMethod()) { 
      case self::METHOD_GUEST: 
      $this->_prepareGuestQuote(); 
      break; 
      case self::METHOD_REGISTER: 
      $this->_prepareNewCustomerQuote(); 
      $isNewCustomer = true; 
      break; 
      default: 
      $this->_prepareCustomerQuote(); 
      break; 
     } 

     $cart = $this->getQuote(); 

     $key=0; 
     foreach ($cart->getAllItems() as $item) 
     { 

      $key= $key+1; 
      $temparray[$key]['product_id']= $item->getProduct()->getId(); 

      $temparray[$key]['qty']= $item->getQty(); 
      $cart->removeItem($item->getId()); 
      $cart->setSubtotal(0); 
      $cart->setBaseSubtotal(0); 

      $cart->setSubtotalWithDiscount(0); 
      $cart->setBaseSubtotalWithDiscount(0); 

      $cart->setGrandTotal(0); 
      $cart->setBaseGrandTotal(0); 

      $cart->setTotalsCollectedFlag(false); 
      $cart->collectTotals(); 
     } 
     $cart->save(); 

     foreach ($temparray as $key => $item) 
     { 
      $customer_id = Mage::getSingleton('customer/session')->getId(); 

      $store_id = Mage::app()->getStore()->getId(); 
      $customerObj = Mage::getModel('customer/customer')->load($customer_id); 
      $quoteObj = $cart; 
      $storeObj = $quoteObj->getStore()->load($store_id); 
      $quoteObj->setStore($storeObj); 
      $productModel = Mage::getModel('catalog/product'); 
      $productObj = $productModel->load($item['product_id']); 
      $quoteItem = Mage::getModel('sales/quote_item')->setProduct($productObj); 
      $quoteItem->setBasePrice($productObj->getFinalPrice()); 
      $quoteItem->setPriceInclTax($productObj->getFinalPrice()); 
      $quoteItem->setData('original_price', $productObj->getPrice()); 
      $quoteItem->setData('price', $productObj->getPrice()); 
      $quoteItem->setRowTotal($productObj->getFinalPrice()); 
      $quoteItem->setQuote($quoteObj); 
      $quoteItem->setQty($item['qty']); 
      $quoteItem->setStoreId($store_id); 
      $quoteObj->addItem($quoteItem); 

      $quoteObj->setBaseSubtotal($productObj->getFinalPrice()); 
      $quoteObj->setSubtotal($productObj->getFinalPrice()); 
      $quoteObj->setBaseGrandTotal($productObj->getFinalPrice()); 
      $quoteObj->setGrandTotal($productObj->getFinalPrice()); 

      $quoteObj->setStoreId($store_id); 
      $quoteObj->collectTotals(); 
      $quoteObj->save(); 
      $this->_quote=$quoteObj; 

      $service = Mage::getModel('sales/service_quote', $quoteObj); 
      $service->submitAll(); 

      if ($isNewCustomer) { 
       try { 
        $this->_involveNewCustomer(); 
        } catch (Exception $e) { 
        Mage::logException($e); 
       } 
      } 

      $this->_checkoutSession->setLastQuoteId($quoteObj->getId()) 
      ->setLastSuccessQuoteId($quoteObj->getId()) 
      ->clearHelperData(); 

      $order = $service->getOrder(); 
      if ($order) { 
       Mage::dispatchEvent('checkout_type_onepage_save_order_after', 
       array('order'=>$order, 'quote'=>$quoteObj)); 
       $quoteObj->removeAllItems(); 
       $quoteObj->setTotalsCollectedFlag(false); 
       $quoteObj->collectTotals(); 


      } 

      /** 
       * a flag to set that there will be redirect to third party after confirmation 
       * eg: paypal standard ipn 
      */ 
      $redirectUrl = $this->getQuote()->getPayment()->getOrderPlaceRedirectUrl(); 
      /** 
       * we only want to send to customer about new order when there is no redirect to third party 
      */ 
      if (!$redirectUrl && $order->getCanSendNewEmailFlag()) { 
       try { 
        $order->sendNewOrderEmail(); 
        } catch (Exception $e) { 
        Mage::logException($e); 
       } 
      } 

      // add order information to the session 
      $this->_checkoutSession->setLastOrderId($order->getId()) 
      ->setRedirectUrl($redirectUrl) 
      ->setLastRealOrderId($order->getIncrementId()); 

      // as well a billing agreement can be created 
      $agreement = $order->getPayment()->getBillingAgreement(); 
      if ($agreement) { 
       $this->_checkoutSession->setLastBillingAgreementId($agreement->getId()); 
      } 
     } 

     // add recurring profiles information to the session 
     $profiles = $service->getRecurringPaymentProfiles(); 
     if ($profiles) { 
      $ids = array(); 
      foreach ($profiles as $profile) { 
       $ids[] = $profile->getId(); 
      } 
      $this->_checkoutSession->setLastRecurringProfileIds($ids); 
      // TODO: send recurring profile emails 
     } 

     Mage::dispatchEvent(
     'checkout_submit_all_after', 
     array('order' => $order, 'quote' => $this->getQuote(), 'recurring_profiles' => $profiles) 
     ); 

     return $this; 
    } 

} 

을 사용하고 분할하기 위해에 대한 코드입니다 그리고 난 그렇게 난에 삽입 된 제품의 제조 업체 ID로이 테이블에서 해당 필드를 flat order quote item에 데이터를 삽입하는 것이 도움이 될 것이라고 생각 그것

어떤 도움을 위해 미리 감사드립니다.

답변

1

개인적으로 해결책을 찾았습니다. 답변을 게시 할 때 도움이 될 수 있습니다.

내가 코드를 변경 한 내용을 게시하고 있습니다.

foreach ($cart->getAllItems() as $item) 
     { 

      $key= $key+1; 
      $product = Mage::getModel('catalog/product')->load($item->getProduct()->getId()); 

      $temparray[$product->getManufacturer()][] = array('product_id'=>$item->getProduct()->getId(),'qty'=>$item->getQty()); 
      //added this above line for grouping products by brands 
      $cart->removeItem($item->getId()); 
      $cart->setSubtotal(0); 
      $cart->setBaseSubtotal(0); 

      $cart->setSubtotalWithDiscount(0); 
      $cart->setBaseSubtotalWithDiscount(0); 

      $cart->setGrandTotal(0); 
      $cart->setBaseGrandTotal(0); 

      $cart->setTotalsCollectedFlag(false); 
      $cart->collectTotals(); 
     } 
     $cart->save(); 

     foreach ($temparray as $key => $items) 
     { // this ends as it is in my question code 
      foreach($items as $item){ //added this foreach 
       $customer_id = Mage::getSingleton('customer/session')->getId(); 

       $store_id = Mage::app()->getStore()->getId(); 
       $customerObj = Mage::getModel('customer/customer')->load($customer_id); 
       $quoteObj = $cart; 
       $storeObj = $quoteObj->getStore()->load($store_id); 
       $quoteObj->setStore($storeObj); 
       $productModel = Mage::getModel('catalog/product'); 
       $productObj = $productModel->load($item['product_id']); 
       $quoteItem = Mage::getModel('sales/quote_item')->setProduct($productObj); 
       $quoteItem->setBasePrice($productObj->getFinalPrice()); 
       $quoteItem->setPriceInclTax($productObj->getFinalPrice()); 
       $quoteItem->setData('original_price', $productObj->getPrice()); 
       $quoteItem->setData('price', $productObj->getPrice()); 
       $quoteItem->setRowTotal($productObj->getFinalPrice() * $item['qty']); 
       $quoteItem->setQuote($quoteObj); 
       $quoteItem->setQty($item['qty']); 
       $quoteItem->setManufacturerName($key);//not sure about this that i need to add this or not 
       $quoteItem->setStoreId($store_id); 
       $quoteObj->addItem($quoteItem); 

       $quoteObj->setBaseSubtotal($productObj->getFinalPrice()); 
       $quoteObj->setSubtotal($productObj->getFinalPrice()); 
       $quoteObj->setBaseGrandTotal($productObj->getFinalPrice()); 
       $quoteObj->setGrandTotal($productObj->getFinalPrice()); 

       $quoteObj->setStoreId($store_id); 
       $quoteObj->collectTotals(); 
       $quoteObj->save(); 
       $this->_quote=$quoteObj; 
      } 

좋아, 이제 내가 원하는대로 브랜드별로 주문을 분할 할 수 있습니다.