/**
  * Sets delivery sets parameters to PayPal callback
  *
  * @param oePayPalService   $oPayPalService   PayPal service.
  * @param oxDeliverySetList $aDeliverySetList Delivery list.
  * @param oxUser            $oUser            User object.
  * @param oxBasket          $oBasket          Basket object.
  *
  * @return int Total amount of deliveries
  */
 protected function _setDeliverySetListForCallbackResponse($oPayPalService, $aDeliverySetList, $oUser, $oBasket)
 {
     $dMaxDeliveryAmount = $this->getPayPalConfig()->getMaxPayPalDeliveryAmount();
     $oCur = $this->getConfig()->getActShopCurrencyObject();
     $dBasketPrice = $oBasket->getPriceForPayment() / $oCur->rate;
     $sActShipSet = $oBasket->getShippingId();
     $blHasActShipSet = false;
     $iCnt = 0;
     // VAT for delivery will be calculated always
     $fDelVATPercent = $oBasket->getAdditionalServicesVatPercent();
     foreach ($aDeliverySetList as $sDelSetId => $sDelSetName) {
         // checking if PayPal is valid payment for selected delivery set
         if (!$this->_isPayPalInDeliverySet($sDelSetId, $dBasketPrice, $oUser)) {
             continue;
         }
         $oDeliveryList = oxNew('oxDeliveryList');
         $aDeliveryList = array();
         // list of active delivery costs
         if ($oDeliveryList->hasDeliveries($oBasket, $oUser, $this->_getUserShippingCountryId($oUser), $sDelSetId)) {
             $aDeliveryList = $oDeliveryList->getDeliveryList($oBasket, $oUser, $this->_getUserShippingCountryId($oUser), $sDelSetId);
         }
         if (count($aDeliveryList) > 0) {
             $dPrice = 0;
             if ($this->getConfig()->getConfigParam('bl_perfLoadDelivery')) {
                 foreach ($aDeliveryList as $oDelivery) {
                     $dPrice += $oDelivery->getDeliveryPrice($fDelVATPercent)->getBruttoPrice();
                 }
             }
             if ($dPrice <= $dMaxDeliveryAmount) {
                 $oPayPalService->setParameter("L_SHIPPINGOPTIONNAME{$iCnt}", getStr()->html_entity_decode($sDelSetName));
                 $oPayPalService->setParameter("L_SHIPPINGOPTIONLABEL{$iCnt}", oxRegistry::getLang()->translateString("OEPAYPAL_PRICE"));
                 $oPayPalService->setParameter("L_SHIPPINGOPTIONAMOUNT{$iCnt}", $this->_formatFloat($dPrice));
                 //setting active delivery set
                 if ($sDelSetId == $sActShipSet) {
                     $blHasActShipSet = true;
                     $oPayPalService->setParameter("L_SHIPPINGOPTIONISDEFAULT{$iCnt}", "true");
                 } else {
                     $oPayPalService->setParameter("L_SHIPPINGOPTIONISDEFAULT{$iCnt}", "false");
                 }
                 if ($oBasket->isCalculationModeNetto()) {
                     $oPayPalService->setParameter("L_TAXAMT{$iCnt}", $this->_formatFloat($oBasket->getPayPalBasketVatValue()));
                 } else {
                     $oPayPalService->setParameter("L_TAXAMT{$iCnt}", $this->_formatFloat(0));
                 }
             }
             $iCnt++;
         }
     }
     //checking if active delivery set was set - if not, setting first in the list
     if ($iCnt > 0 && !$blHasActShipSet) {
         $oPayPalService->setParameter("L_SHIPPINGOPTIONISDEFAULT0", "true");
     }
     return $iCnt;
 }
Пример #2
0
 /**
  * Gathers and assigns to new oxOrder object customer data, payment, delivery
  * and shipping info, customer order remark, currency, voucher, language data.
  * Additionally stores general discount and wrapping. Sets order status to "error"
  * and creates oxOrderArticle objects and assigns to them basket articles.
  *
  * @param oxBasket $oBasket Shopping basket object
  */
 protected function _loadFromBasket(oxBasket $oBasket)
 {
     $myConfig = $this->getConfig();
     // store IP Address - default must be FALSE as it is illegal to store
     if ($myConfig->getConfigParam('blStoreIPs') && $this->oxorder__oxip->value === null) {
         $this->oxorder__oxip = new oxField(oxRegistry::get("oxUtilsServer")->getRemoteAddress(), oxField::T_RAW);
     }
     //setting view mode
     $this->oxorder__oxisnettomode = new oxField($oBasket->isCalculationModeNetto());
     // copying main price info
     $this->oxorder__oxtotalnetsum = new oxField($oBasket->getNettoSum());
     $this->oxorder__oxtotalbrutsum = new oxField($oBasket->getBruttoSum());
     $this->oxorder__oxtotalordersum = new oxField($oBasket->getPrice()->getBruttoPrice(), oxField::T_RAW);
     // copying discounted VAT info
     $this->_resetVats();
     $iVatIndex = 1;
     foreach ($oBasket->getProductVats(false) as $iVat => $dPrice) {
         $this->{"oxorder__oxartvat{$iVatIndex}"} = new oxField($this->_convertVat($iVat), oxField::T_RAW);
         $this->{"oxorder__oxartvatprice{$iVatIndex}"} = new oxField($dPrice, oxField::T_RAW);
         $iVatIndex++;
     }
     // payment costs if available
     if ($oPaymentCost = $oBasket->getCosts('oxpayment')) {
         $this->oxorder__oxpaycost = new oxField($oPaymentCost->getBruttoPrice(), oxField::T_RAW);
         $this->oxorder__oxpayvat = new oxField($oPaymentCost->getVAT(), oxField::T_RAW);
     }
     // delivery info
     if ($oDeliveryCost = $oBasket->getCosts('oxdelivery')) {
         $this->oxorder__oxdelcost = new oxField($oDeliveryCost->getBruttoPrice(), oxField::T_RAW);
         //V #M382: Save VAT, not VAT value for delivery costs
         $this->oxorder__oxdelvat = new oxField($oDeliveryCost->getVAT(), oxField::T_RAW);
         //V #M382
         $this->oxorder__oxdeltype = new oxField($oBasket->getShippingId(), oxField::T_RAW);
     }
     // user remark
     if (!isset($this->oxorder__oxremark) || $this->oxorder__oxremark->value === null) {
         $this->oxorder__oxremark = new oxField(oxRegistry::getSession()->getVariable('ordrem'), oxField::T_RAW);
     }
     // currency
     $oCur = $myConfig->getActShopCurrencyObject();
     $this->oxorder__oxcurrency = new oxField($oCur->name);
     $this->oxorder__oxcurrate = new oxField($oCur->rate, oxField::T_RAW);
     // store voucher discount
     if ($oVoucherDiscount = $oBasket->getVoucherDiscount()) {
         $this->oxorder__oxvoucherdiscount = new oxField($oVoucherDiscount->getBruttoPrice(), oxField::T_RAW);
     }
     // general discount
     if ($this->_blReloadDiscount) {
         $dDiscount = 0;
         $aDiscounts = $oBasket->getDiscounts();
         if (count($aDiscounts) > 0) {
             foreach ($aDiscounts as $oDiscount) {
                 $dDiscount += $oDiscount->dDiscount;
             }
         }
         $this->oxorder__oxdiscount = new oxField($dDiscount, oxField::T_RAW);
     }
     //order language
     $this->oxorder__oxlang = new oxField($this->getOrderLanguage());
     // initial status - 'ERROR'
     $this->oxorder__oxtransstatus = new oxField('ERROR', oxField::T_RAW);
     // copies basket product info ...
     $this->_setOrderArticles($oBasket->getContents());
     // copies wrapping info
     $this->_setWrapping($oBasket);
     // copies TS protection info
     $this->_setTsProtection($oBasket);
 }