2011-10-04 17 views
5

से मूल्य नियम प्राप्त करें क्या कोई जानता है कि कोई कैटलॉग कैसे प्राप्त कर सकता है- और कार्ट मूल्य नियमों को आदेश से कैसे प्राप्त किया जा सकता है?Magento - आदेश

मुझे पता है कि मैं विधि getDiscountPercent() विधि के माध्यम से ऑर्डर आइटम से छूट प्रतिशत प्राप्त कर सकता हूं, लेकिन पूरे नियम पर लागू किए गए सभी नियमों को मैं कैसे प्राप्त कर सकता हूं?

उदाहरण के लिए, मेरे पास एक नियम है "ग्राहक समूह एक्स स्टोर में सभी वस्तुओं से 20% छूट देता है"।

अब मैं यह निर्धारित करना चाहता हूं कि उपयोगकर्ता द्वारा ऑर्डर सबमिट किए जाने पर वास्तव में कौन से नियम लागू किए गए थे। मुझे ऑर्डर निर्यात इंटरफ़ेस के लिए इसकी आवश्यकता है जहां मुझे उपयोगकर्ता द्वारा प्राप्त सभी छूट की आपूर्ति करनी होगी।

अग्रिम धन्यवाद!

+2

आप ऑर्डर पर कैटलॉग कीमतों को लागू नहीं कर सकते हैं। ये नियम मूल्य सूचकांक द्वारा कैटलॉग पर लागू होते हैं। उद्धरण इस अनुक्रमित मूल्य को उत्पाद मूल्य के रूप में प्राप्त करता है। – Zyava

उत्तर

4

sales_flat_order_item तालिका में एक नज़र डालें। applied_rule_ids नामक एक फ़ील्ड है जो आपको उस आइटम पर लागू नियम की आईडी देगा। इसके अलावा आप इस तालिका में पता लगा सकते हैं कि कितनी छूट लागू की गई थी और प्रतिशत।

उदाहरण

//The order I want to check 
    $order_id = 859; 

    //Get the list of items for your order 
    $items = Mage::getModel('sales/order_item') 
    ->getCollection() 
    ->addFilter('order_id',array('eq'=>$order_id)); 

    //loop through each item 
    foreach($items as $item){ 

     //if the item has not had a rule applied to it skip it 
     if($item->getAppliedRuleIds() == '')continue; 

     /* 
     * I cant remember in the database they might be comma separated or space if multiple rules were applied 
     * the getAppliedRuleIds() function is the one you want 
     */ 
     foreach(explode(",",$item->getAppliedRuleIds()) as $ruleID){   

      //Load the rule object 
      $rule = Mage::getModel('catalogrule/rule')->load($ruleID); 

      // Throw out some information like the rule name what product it was applied to 

      echo "<p>".$item->getSku()." had rule ".$rule->getName()."(".$item->getAppliedRuleIds().") applied </p>"; 
     } 

    } 
+4

धन्यवाद, यह काम करता है, लेकिन getAppliedRuleIds() के साथ मुझे केवल कार्ट नियम आईडी (उदाहरण के लिए एक कूपन कोड नियम) मिलता है, लेकिन कैटलॉग नियम नहीं? – Alex

+0

'getAppliedRuleIds() 'आपको शॉपिंग कार्ट मूल्य नियमों की अल्पविराम से अलग सूची प्राप्त करेगा, ताकि इसका नाम प्राप्त करने के लिए आपको' salesrule/rule' मॉडल लोड करना चाहिए। इस तरह: '$ नियम = मैगे :: getModel ('salesrule/rule') -> लोड ($ ruleID);' –

4
/* Example of getting catalog rules applied for specific product */ 

$productId = 6; 

$user = Mage::getSingleton('customer/session')->getCustomer(); 
$product = Mage::getModel('catalog/product')->load($productId); 

$storeId = $product->getStoreId(); 
$websiteId = Mage::app()->getStore($storeId)->getWebsiteId(); 
$dateTs  = Mage::app()->getLocale()->storeTimeStamp($storeId); 
$customerGroupId = $user->getGroupId(); 

$resource = Mage::getResourceModel('catalogrule/rule'); 

$rules = $resource->getRulesFromProduct($dateTs, $websiteId, $customerGroupId, $productId); 
+0

यह प्रश्न का उत्तर नहीं देता है। – Karl

2

हाँ, यह एक दर्द है कि Magento आदेश रिकॉर्ड में आसपास किसी भी इतिहास को नहीं छोड़ता है जब आप कैसे है कि आधार मूल्य की गणना की गई थी के संबंध में बिक्री मूल्य का उपयोग कर की तरह है।

सौभाग्य से यह खुला स्रोत है, इसलिए यदि आप चाहें तो इसे पैच कर सकते हैं।

मैंने हाल ही में एक पर्यवेक्षक लिखा है जो ऑर्डर रिकॉर्ड लोड होने पर आग लगती है, इस मुद्दे को हल करने के लिए। यह उत्पाद की वर्तमान पूर्ण-खुदरा कीमत के साथ base_price लाइन को पार-संदर्भित करता है। यदि कोई मेल नहीं खाता है, तो यह जानकारी को किसी भी बाहरी स्क्रिप्ट पर सुनाने में मदद के लिए ऑर्डर आइटम में कुछ फ़ील्ड जोड़ता है (हमारे मामले में, एक कस्टम ऑर्डर पूर्ति स्क्रिप्ट जो Magento के SOAP API का उपयोग करके एसएपी को ऑर्डर देती है)।

यहाँ मूल विचार है - app/code/local/YourCo/SalePricing

में एक मॉड्यूल बनाने के लिए और जब Magento बताने के लिए अपने पर्यवेक्षक को चलाने के लिए app/code/local/YourCo/SalePricing/Model/Promo/Observer.php

<?php 
class YourCo_SalePricing_Model_Promo_Observer 
{ 
    public function __construct() 
    { 
    } 

    // tag order items that have a sale-price 
    // with original retail price and total sale discount for this line 
    public function report_sale_pricing($observer) 
    { 
    $event = $observer->getEvent(); 
    $order = $event->getOrder(); 

    $items = $order->getAllItems(); 
    foreach ($items as $item) { 
     // heads up, you may want to do this for other types as well... 
     if ($item->getProductType() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) { 
     $regular_price = $this->_lookupFullRetail($item,$order->getStoreId()); 
     $sale_price = $item->getBasePrice(); 

     if ($regular_price - $sale_price > 0.005) { 
      $qty = $item->getQtyOrdered(); 
      $total_sale_discount = ($regular_price * $qty) - ($sale_price * $qty); 

      $item->setFullRetailPrice((string)$regular_price); 
      $item->setSaleDiscount((string)$total_sale_discount); 
     } 
     } 
    } 
    } 

    private function _lookupFullRetail(&$item,$store_id) 
    { 
    $mpid = $item->getProductId(); 
    $p = Mage::getModel('catalog/product')->setStoreId($store_id)->load($mpid); 
    return $p->getPrice(); 
    } 

} 

आपका मॉड्यूल के etc/config.xml जरूरतों में एक पर्यवेक्षक वर्ग की स्थापना:

<?xml version="1.0"?> 
<config> 
    <global> 
     <models> 
      <yourco_salepricing> 
      <class>YourCo_SalePricing_Model</class> 
      </yourco_salepricing> 
     </models> 
     <events> 
      <sales_order_load_after> 
      <observers> 
       <yourco_salepricing> 
       <type>singleton</type> 
       <class>YourCo_SalePricing_Model_Promo_Observer</class> 
       <method>report_sale_pricing</method> 
       </yourco_salepricing> 
      </observers> 
      </sales_order_load_after> 
     </events> 
    </global> 
</config> 

app/etc/modules/... में अपना नया मॉड्यूल सक्रिय करना सुनिश्चित करें और कॉन्फ़िगर कैच साफ़ करें ई।

अब, जब आप ऑर्डर लोड करते हैं, तो आप प्रत्येक आइटम पर लूप कर सकते हैं और $item->getFullRetailPrice() -- की जांच कर सकते हैं, अगर आपको पता है कि आइटम बिक्री पर था (ठीक है, या तो ऑर्डर देने के बाद या कीमत बढ़ गई है) । आपको अभी भी पता नहीं क्यों, यानी कौन सा बिक्री मूल्य नियम लागू था, लेकिन हमारे आवेदन के लिए हमने वास्तव में परवाह नहीं की थी, और उस जानकारी को आदेश के साथ सहेजने के लिए एक बहुत कठिन मोड होगा।

1

हालांकि आप क्या मदद कर सकता है:

$order = Mage::getModel('sales/order')->load(20569); 
echo Mage::helper('sales')->__('Discount (%s)', $order->getDiscountDescription()); 

यह बाहर प्रिंट सभी छूट नियमों नाम जो आदेश पर लागू किया गया है।