/** * Processes subscription by sequence * @param object $Item * @return bool */ public function payBySequence($Item) { self::$_subscription = $this; if (!$this->_getMethodInstance()->isValidForTransaction($Item)) { $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_FAILED)->save(); $this->log("sequence is skipped"); return false; } Mage::getSingleton('sarp/subscription')->setId($this->getId()); try { $Order = $this->_iterate(); } catch (SoapFault $e) { //is soap fault was generated $this->log("Payment message: #{$this->getId()}: {$e->getMessage()}"); $attemptsQty = $Item->getData('attempts_qty') + 1; $Item->setData('attempts_qty', $attemptsQty)->save(); $numberOfRetries = intval(Mage::getStoreConfig(AW_Sarp_Helper_Config::XML_PATH_ADVANCED_NUMBER_OF_RETRIES)); if ($attemptsQty < $numberOfRetries) { return true; } $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_FAILED)->save(); $this->log("sequence is skipped"); throw new AW_Sarp_Exception("Payment message: #{$this->getId()}: {$e->getMessage()}"); } if ($Order instanceof Mage_Sales_Model_Order) { switch ($Order->getState()) { case Mage_Sales_Model_Order::STATE_COMPLETE: $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_PAYED); break; case Mage_Sales_Model_Order::STATE_CANCELED: $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_FAILED); break; default: $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_PENDING_PAYMENT); } if (Mage::helper('sarp')->isOrderStatusValidForActivation($Order->getStatus())) { $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_PAYED); } else { $setStatusSuspended = 1; } $date = Mage::app()->getLocale()->date(new Zend_Date()); $this->log('Date ' . $date . ' for subscription #' . $this->getId() . ' successfully marked as payed'); $Item->setOrderId($Order->getId())->save(); } else { // Order creation failed $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_FAILED)->save(); } if (isset($setStatusSuspended) && $setStatusSuspended) { $this->setStatus(self::STATUS_SUSPENDED)->setFlagNoSequenceUpdate(1)->save()->setFlagNoSequenceUpdate(0); } return true; }
/** * Processes subscription by sequence * @param object $Item * @return bool */ public function payBySequence($Item) { self::$_subscription = $this; if (!$this->_getMethodInstance()->isValidForTransaction($Item)) { $this->log("sequence is skipped"); return false; } Mage::getSingleton('sarp/subscription')->setId($this->getId()); $Order = $this->_iterate(); if ($Order instanceof Mage_Sales_Model_Order) { switch ($Order->getStatus()) { case Mage_Sales_Model_Order::STATE_COMPLETE: $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_PAYED); break; case Mage_Sales_Model_Order::STATE_CANCELED: $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_FAILED); break; default: $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_PENDING_PAYMENT); } if (Mage::helper('sarp')->isOrderStatusValidForActivation($Order->getStatus())) { $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_PAYED); } else { $setStatusSuspended = 1; } $date = Mage::app()->getLocale()->date(new Zend_Date()); $this->log('Date ' . $date . ' for subscription #' . $this->getId() . ' successfully marked as payed'); $Item->setOrderId($Order->getId())->save(); } else { // Order creation failed $Item->setStatus(AW_Sarp_Model_Sequence::STATUS_FAILED)->save(); } if (isset($setStatusSuspended) && $setStatusSuspended) { $this->setStatus(self::STATUS_SUSPENDED)->setFlagNoSequenceUpdate(1)->save()->setFlagNoSequenceUpdate(0); } return true; }