public static function generateCoupons($deal, $couponsQty)
 {
     $couponsCount = Mage::getModel('collpur/coupon')->getCollection()->addFieldToFilter('deal_id', $deal->getId())->getSize();
     for ($i = $couponsCount; $i < $couponsQty + $couponsCount; $i++) {
         $coupon = new self();
         $coupon->generateCoupon($deal, $i);
     }
     if ($deal->getIsSuccess() && $deal->getIsSuccessedFlag()) {
         AW_Collpur_Model_Cron::_processSuccessedDeals();
     }
 }
 public function processOrderItem($orderItem, $errors = true)
 {
     if ($errors) {
         if (!$this->isAvailable()) {
             throw new Mage_Core_Exception(Mage::helper('collpur')->__('Deal #%s is not available more', $this->getId()));
         }
     }
     $order = $orderItem->getOrder();
     $purchase = Mage::getModel('collpur/dealpurchases')->loadByOrderItemId($orderItem->getId());
     $qtyToAdd = $orderItem->getData('qty_invoiced') - $orderItem->getData('qty_refunded');
     $afterPurchaseQty = $this->getPurchasesCount() - $purchase->getData('qty_purchased') + $qtyToAdd;
     if ($errors) {
         $this->validateRequestedQty($afterPurchaseQty);
     }
     /* Process specific new purchase actions */
     if (!$purchase->getId()) {
         $purchase->setPurchaseDateTime(Mage::getModel('core/date')->gmtDate());
         if (!Mage::getStoreConfig(AW_Collpur_Helper_Notifications::NOTIFICATIONS_ON, $order->getStoreId())) {
             $purchase->setIsSuccessedFlag(2);
         }
         /* Calculate shipping amount separetaly for order item */
         $purchase->setData('shipping_amount', $this->calculateShippingAmount($orderItem));
         $purchase->setData('qty_ordered', $orderItem->getQtyOrdered());
     }
     $purchase->setData('qty_purchased', $qtyToAdd)->setData('order_id', $order->getId())->setData('order_item_id', $orderItem->getId())->setData('deal_id', $this->getId())->setData('customer_name', $order->getCustomerName())->setData('customer_id', $order->getCustomerId())->save();
     $purchase->connectWithFreeCoupons();
     $this->checkPurchasesCount()->checkSuccess()->checkAutoClose()->save();
     /* If ->checkAutoClose(), set this flag to process downloadable links */
     if ($this->getData('process_additional_states')) {
         $this->additionalProductProcessing();
     }
     /* Send email notifications right away if deal already successed and processed by cron */
     if ($this->getIsSuccess() && $this->getIsSuccessedFlag()) {
         AW_Collpur_Model_Cron::_processSuccessedDeals();
     }
 }