Beispiel #1
0
 /**
  * Returns recipient name
  * @return string
  */
 public function getRecipientName(AW_Sarp_Model_Subscription $Subscription)
 {
     if ($this->getRecipient() == self::RECIPIENT_CUSTOMER) {
         return $Subscription->getCustomer()->getName();
     } else {
         return Mage::getStoreConfig('trans_email/ident_' . $this->getRecipient() . '/name');
     }
     return $this;
 }
Beispiel #2
0
 /**
  * Presets flat data from subscription
  * @param AW_Sarp_Model_Subscription $Subscription
  * @return AW_Sarp_Model_Subscription_Flat
  */
 public function setSubscription(AW_Sarp_Model_Subscription $Subscription)
 {
     Zend_Date::setOptions(array('extend_month' => true));
     // Fix Zend_Date::addMonth unexpected result
     if (!$Subscription->isInfinite()) {
         $expireDate = $Subscription->getDateExpire()->toString(AW_Sarp_Model_Subscription::DB_DATE_FORMAT);
     } else {
         $expireDate = null;
     }
     if ($Subscription->getIsNew()) {
         $lastOrderAmount = 0;
         $quote = clone $Subscription->getQuote();
         foreach ($quote->getItemsCollection() as $Item) {
             if (Mage::helper('sarp')->isSubscriptionType($Item)) {
                 $quote->removeItem($Item->getId());
             }
             $quote->getShippingAddress()->setCollectShippingRates(true)->collectTotals();
             $quote->collectTotals();
         }
         $lastOrderAmount = $Subscription->getQuote()->getGrandTotal();
         $virtual = $quote->getIsVirtual();
         unset($quote);
     } else {
         $lastOrderAmount = $Subscription->getLastOrder()->getGrandTotal();
         $virtual = $Subscription->getLastOrder()->getIsVirtual();
     }
     if ($Subscription->isActive()) {
         $paymentOffset = $Subscription->getPeriod()->getPaymentOffset();
         // Get next payment date
         if (!$Subscription->getLastPaidDate()) {
             $nextPaymentDate = $Subscription->getLastOrder()->getCreatedAtStoreDate();
             $nextPaymentDate = $Subscription->getNextSubscriptionEventDate($Subscription->getDateStart());
             $nextDeliveryDate = clone $Subscription->getDateStart();
             $nextDeliveryDate->addDayOfYear(0 + floatval($paymentOffset));
         } else {
             $nextPaymentDate = $Subscription->getNextSubscriptionEventDate();
         }
         if ($paymentOffset) {
             if (!$Subscription->getLastPaidDate()) {
                 // No payments made yet
                 $lastOrderDate = clone $Subscription->getDateStart();
                 $lastOrderDate->addDayOfYear(0 - floatval($paymentOffset));
             } else {
                 $lastOrderDate = $Subscription->getLastOrder()->getCreatedAtStoreDate();
             }
             $probablyDeliveryDate = clone $lastOrderDate;
             $probablyDeliveryDate = $probablyDeliveryDate->addDayOfYear(floatval($paymentOffset));
             if ($probablyDeliveryDate->compare(new Zend_Date(), Zend_Date::DATE_SHORT) > 0) {
                 $nextDeliveryDate = clone $lastOrderDate;
             }
             $nextPaymentDate->addDayOfYear(0 - floatval($paymentOffset));
         }
         if (!isset($nextDeliveryDate)) {
             $nextDeliveryDate = clone $nextPaymentDate;
         }
         $nextDeliveryDate = $nextDeliveryDate->addDayOfYear(floatval($paymentOffset))->toString(AW_Sarp_Model_Subscription::DB_DATE_FORMAT);
         $nextPaymentDate = $nextPaymentDate->toString(AW_Sarp_Model_Subscription::DB_DATE_FORMAT);
     } else {
         // Drop next payment date if subscription is suspended
         $nextDeliveryDate = $nextPaymentDate = null;
     }
     $this->setSubscriptionId($Subscription->getId())->setCustomerName($Subscription->getCustomer()->getName())->setCustomerEmail($Subscription->getCustomer()->getEmail())->setFlatLastOrderStatus($Subscription->getLastOrder()->getStatus())->setFlatLastOrderAmount($lastOrderAmount)->setFlatLastOrderCurrencyCode($Subscription->getLastOrder()->getOrderCurrencyCode())->setFlatDateExpire($expireDate)->setHasShipping(1 - $virtual)->setFlatNextPaymentDate($nextPaymentDate)->setFlatNextDeliveryDate($nextDeliveryDate)->setProductsText($this->_convertProductsText($Subscription))->setProductsSku($this->_convertProductsSku($Subscription));
     $Subscription->setCustomerName($Subscription->getCustomer()->getName())->setCustomerEmail($Subscription->getCustomer()->getEmail())->setFlatLastOrderStatus($Subscription->getLastOrder()->getStatus())->setFlatLastOrderAmount($lastOrderAmount)->setFlatLastOrderCurrencyCode($Subscription->getLastOrder()->getOrderCurrencyCode())->setFlatDateExpire($expireDate)->setHasShipping(1 - $virtual)->setFlatNextPaymentDate($nextPaymentDate)->setFlatNextDeliveryDate($nextDeliveryDate)->setProductsText($this->_convertProductsText($Subscription))->setProductsSku($this->_convertProductsSku($Subscription));
     return $this;
 }
 /**
  * Creates subscription at paypal
  * @param AW_Sarp_Model_Subscription $Subscription
  * @return
  */
 public function createSubscription(AW_Sarp_Model_Subscription $Subscription, $Order, $Quote)
 {
     $Payment = $Quote->getPayment();
     $ccNumber = Mage::getSingleton('customer/session')->getSarpCcNumber();
     $expirationDate = $Payment->getMethodInstance()->getInfoInstance()->getCcExpMonth() . $Payment->getMethodInstance()->getInfoInstance()->getCcExpYear();
     $ccCode = Mage::getSingleton('customer/session')->getSarpCcCid();
     $ccType = $this->_convertCCType($Payment->getMethodInstance()->getInfoInstance()->getCcType());
     $Date = $Subscription->getNextSubscriptionEventDate(new Zend_Date($Subscription->getDateStart()));
     $Date->addDayOfYear(0 - $Subscription->getPeriod()->getPaymentOffset());
     $date_start = date('c', $Date->getTimestamp());
     //$amount = floatval($Subscription->getLastOrder()->getGrandTotal());
     // Due to first price can be different than
     AW_Sarp_Model_Product_Price::$doNotApplyFirstPeriodPrice = true;
     $order = clone $Order;
     $order->setReordered(true);
     //Mage::getSingleton('adminhtml/session_quote')->setQuote(null);
     $no = Mage::getSingleton('sarp/order_create')->reset();
     $no->setRecollect(1);
     $no->getSession()->setUseOldShippingMethod(true);
     $no->setSendConfirmation(false);
     $no->setData('account', $Subscription->getCustomer()->getData());
     $arr = array();
     foreach ($Subscription->getItems() as $Item) {
         $arr[] = $Item->getPrimaryOrderItemId();
     }
     $no->setItemIdFilter($arr);
     /*$Q = $no->getQuote();
       foreach ($Q->getItemsCollection() as $QI) {
           $Q->removeItem($QI->getId());
       }*/
     $no->initFromOrder($order);
     //
     //        $Q = $no->getQuote();
     //        foreach ($Q->getAllAddresses() as $address) {
     //            $address->setCollectShippingRates(true);
     //        }
     //        $no->collectShippingRates();
     $amount = $no->getQuote()->setTotalsCollectedFlag(false)->collectTotals()->getGrandTotal();
     //$no->reset();
     /*$Q = $no->getQuote();
       foreach ($Q->getItemsCollection() as $QI) {
           $Q->removeItem($QI->getId());
       }*/
     //        echo $amount;
     //        global $Fi;
     //        if(!isset($Fi)) $Fi =1;
     //        else $Fi ++;
     //
     //        if($Fi >=2) die;
     //        else return;
     $this->getWebService()->getRequest()->reset()->setData(array('CREDITCARDTYPE' => $ccType, 'ACCT' => $ccNumber, 'CVV2' => $ccCode, 'EXPDATE' => $expirationDate, 'FIRSTNAME' => $Quote->getBillingAddress()->getFirstname(), 'LASTNAME' => $Quote->getBillingAddress()->getLastname(), 'CURRENCYCODE' => $Subscription->getLastOrder()->getOrderCurrencyCode(), 'PROFILESTARTDATE' => $date_start, 'AMT' => $amount, 'BILLINGPERIOD' => $this->_convertPeriod($Subscription->getPeriod()), 'BILLINGFREQUENCY' => $Subscription->getPeriod()->getPeriodValue(), 'DESC' => Mage::helper('sarp')->__("Subscription #%s", $Subscription->getId()), 'SUBSCRIBERNAME' => $Quote->getBillingAddress()->getFirstname() . " " . $Quote->getBillingAddress()->getLastname(), 'PROFILEREFERENCE' => $Order->getIncrementId() . "-{$Subscription->getId()}", 'EMAIL' => $Quote->getCustomerEmail(), 'STREET' => $Quote->getBillingAddress()->getStreet(0), 'CITY' => $Quote->getBillingAddress()->getCity(), 'STATE' => $Quote->getBillingAddress()->getRegion(), 'COUNTRYCODE' => $Quote->getBillingAddress()->getCountryId(), 'ZIP' => $Quote->getBillingAddress()->getPostcode()));
     if (!$Subscription->isInfinite()) {
         // Subscription has expire date
         $this->getWebService()->getRequest()->setData('TOTALBILLINGCYCLES', $this->_getTotalBillingCycles($Subscription));
     }
     $result = $this->getWebService()->runRequest('CreateRecurringPaymentsProfile');
     if (isset($result['PROFILEID'])) {
         // Profile created
         $profileId = $result['PROFILEID'];
         $Subscription->setRealId($profileId)->save();
     } else {
         throw new AW_Sarp_Exception("PayPal recurrent profile creation failed for subscription #{$Subscription->getId()} and order #{$Order->getId()}", print_r($result, 1));
     }
     $this->log(print_r($result, 1));
 }