/**
  * Returns oxDeliveryList instance
  *
  * @return oxDeliveryList
  */
 static function getInstance()
 {
     if (defined('OXID_PHP_UNIT')) {
         if (($oClassMod = modInstances::getMod(__CLASS__)) && is_object($oClassMod)) {
             return $oClassMod;
         } else {
             $inst = oxNew('oxDeliveryList');
             modInstances::addMod(__CLASS__, $inst);
             return $inst;
         }
     }
     if (!isset(self::$_instance)) {
         // allow modules
         self::$_instance = oxNew('oxDeliveryList');
     }
     return self::$_instance;
 }
 /**
  * Iterates through basket items and calculates its delivery costs
  *
  * @return oxPrice
  */
 protected function _calcDeliveryCost()
 {
     if ($this->_oDeliveryPrice !== null) {
         return $this->_oDeliveryPrice;
     }
     $myConfig = $this->getConfig();
     $oDeliveryPrice = oxNew('oxprice');
     $oDeliveryPrice->setBruttoPriceMode();
     // don't calculate if not logged in
     $oUser = $this->getBasketUser();
     if (!$oUser && !$myConfig->getConfigParam('blCalculateDelCostIfNotLoggedIn')) {
         return $oDeliveryPrice;
     }
     // VAT for delivery ?
     $fDelVATPercent = 0;
     if ($myConfig->getConfigParam('blCalcVATForDelivery')) {
         $fDelVATPercent = $this->getMostUsedVatPercent();
         $oDeliveryPrice->setVat($fDelVATPercent);
     }
     // list of active delivery costs
     if ($myConfig->getConfigParam('bl_perfLoadDelivery')) {
         $aDeliveryList = oxDeliveryList::getInstance()->getDeliveryList($this, $oUser, $this->_findDelivCountry(), $this->getShippingId());
         if (count($aDeliveryList) > 0) {
             foreach ($aDeliveryList as $oDelivery) {
                 //debug trace
                 if ($myConfig->getConfigParam('iDebug') == 5) {
                     echo "DelCost : " . $oDelivery->oxdelivery__oxtitle->value . "<br>";
                 }
                 $oDeliveryPrice->addPrice($oDelivery->getDeliveryPrice($fDelVATPercent));
             }
         }
     }
     return $oDeliveryPrice;
 }
 /**
  * Loads deliveryset data, checks if it has payments assigned. If active delivery set id
  * is passed - checks if it can be used, if not - takes first ship set id from list which
  * fits. For active ship set collects payment list info. Retuns array containing:
  *   1. all ship sets that has payment (array)
  *   2. active ship set id (string)
  *   3. payment list for active ship set (array)
  *
  * @param string $sShipSet current ship set id (can be null if not set yet)
  * @param oxuser $oUser    active user
  * @param double $oBasket  basket object
  *
  * @return array
  */
 public function getDeliverySetData($sShipSet, $oUser, $oBasket)
 {
     $sActShipSet = null;
     $aActSets = array();
     $aActPaymentList = array();
     if (!$oUser) {
         return;
     }
     $this->_getList($oUser, $oUser->getActiveCountry());
     // if there are no shipsets we dont need to load payments
     if ($this->count()) {
         // one selected ?
         if ($sShipSet && !isset($this->_aArray[$sShipSet])) {
             $sShipSet = null;
         }
         $oPayList = oxPaymentList::getInstance();
         $oDelList = oxDeliveryList::getInstance();
         $oCur = $this->getConfig()->getActShopCurrencyObject();
         $dBasketPrice = $oBasket->getPriceForPayment() / $oCur->rate;
         // checking if these ship sets available (number of possible payment methods > 0)
         foreach ($this as $sShipSetId => $oShipSet) {
             $aPaymentList = $oPayList->getPaymentList($sShipSetId, $dBasketPrice, $oUser);
             if (count($aPaymentList)) {
                 // now checking for deliveries
                 if ($oDelList->hasDeliveries($oBasket, $oUser, $oUser->getActiveCountry(), $sShipSetId)) {
                     $aActSets[$sShipSetId] = $oShipSet;
                     if (!$sShipSet || $sShipSetId == $sShipSet) {
                         $sActShipSet = $sShipSet = $sShipSetId;
                         $aActPaymentList = $aPaymentList;
                         $oShipSet->blSelected = true;
                     }
                 }
             }
         }
     }
     return array($aActSets, $sActShipSet, $aActPaymentList);
 }