In Your config.xml

<global>
    <events>
        <sales_order_place_after><!-- observe the event after order place -->
            <observers>
                <namespace_module_order_place_after>
                    <class>Namespace_Module_Model_Observer</class>
                    <method>sales_order_afterPlace</method>
                </namespace_module_order_place_after>
            </observers>
        </sales_order_place_after>
        <sales_quote_item_save_before><!-- observe the event before add item to cart -->
            <observers>
                <namespace_module_before_cart_add>
                    <class>Namespace_Module_Model_Observer</class>
                    <method>before_cart_add</method>
                </namespace_module_before_cart_add>
            </observers>
        </sales_quote_item_save_before>
    </events>
</global>

In your observer file
app\code\local\Namespace\Module\Model\Observer.php

<?php

class Namespace_Module_Model_Observer {
    
    public function before_cart_add(Varien_Event_Observer $observer) {
        
        $item = $observer->getEvent()->getItem();
        Mage::log("Product Object ".json_encode($item->getData()), null, 'mylog.log');
        $serial_codes_qty_available = Mage::getModel('serialcodes/serialcodes')->getCollection()
                                    ->addFieldToFilter('status', '1')
                                    ->addFieldToFilter('product_sku', $item->getSku());
        if($item->getQty()>count($serial_codes_qty_available)){
            Mage::throwException(Mage::helper('serialcodes')->__('Requested license quantity for \'%s\' is not available.',$item->getName()));
            $request = Mage::app()->getRequest();
            $action = $request->getActionName();
            Mage::app()->getFrontController()->getAction()->setFlag($action, Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
            
        }
        //    Mage::log("Product Object ".json_encode($item->getData())." ".count($serial_codes_qty_available), null, 'mylog.log');
    }
    
    public function sales_order_afterPlace($observer) {
        $order = $observer->getEvent()->getOrder();
        if($order->getIncrementId()){
            $_order_licence_codes = array();
            foreach( $order->getAllVisibleItems() as $item ) {
                $itemSku = $item->getSku();
                $itemQty = $item->getQtyOrdered();
                $collection_by_sku = Mage::getModel('serialcodes/serialcodes')->getCollection()
                                        ->addFieldToFilter('status', '1')
                                        ->addFieldToFilter('product_sku', $itemSku)
                                        ->setPageSize($itemQty);
                if(count($collection_by_sku) > 0){
                    foreach($collection_by_sku as $modelrow){
                        $model = Mage::getModel('serialcodes/serialcodes')->load($modelrow->getId());
                        $model->setStatus(3);
                        $model->setCustomerId($order->getCustomerId());
                        $model->setOrderId($order->getIncrementId());
                        $model->setPurchasedAt($order->getCreatedAt());
                        if($model->save()){
                            $_order_licence_codes[] = $model->getSerialCode();
                        }
                    }
                }
            }
            // save sticker number in order table
            try {
                $order->setLicenceCode(implode(" , ",$_order_licence_codes));
                $order->save();
            }
            catch (\Exception $e) {
                error_log($e->getMessage());
            }
        }
    } 
}

Categories: Magento

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *