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()); } } } }
0 Comments