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