74 if (is_array($sHomeCountry)) {
75 $this->_sHomeCountry =
current($sHomeCountry);
77 $this->_sHomeCountry = $sHomeCountry;
95 protected function _getList($oUser = null, $sCountryId = null, $sDelSet = null)
98 if ($oUser === null) {
105 $sUserId = $oUser ? $oUser->getId() :
'';
110 $sCountryId = $oUser->getActiveCountry();
116 if (($sUserId . $sCountryId . $sDelSet) !== $this->_sUserId) {
119 $this->_sUserId = $sUserId . $sCountryId . $sDelSet;
140 $sTable = getViewName(
'oxdelivery');
141 $sQ =
"select $sTable.* from ( select distinct $sTable.* from $sTable left join oxdel2delset on oxdel2delset.oxdelid=$sTable.oxid ";
142 $sQ .=
"where " . $this->
getBaseObject()->getSqlActiveSnippet() .
" and oxdel2delset.oxdelsetid = " . $oDb->quote($sDelSet) .
" ";
152 $sUserId = $oUser->getId();
155 $aGroupIds = $oUser->getUserGroups();
159 if (
count($aGroupIds)) {
160 foreach ($aGroupIds as $oGroup) {
161 $aIds[] = $oGroup->getId();
165 $sUserTable = getViewName(
'oxuser');
166 $sGroupTable = getViewName(
'oxgroups');
167 $sCountryTable = getViewName(
'oxcountry');
169 $sCountrySql = $sCountryId ?
"EXISTS(select oxobject2delivery.oxid from oxobject2delivery where oxobject2delivery.oxdeliveryid=$sTable.OXID and oxobject2delivery.oxtype='oxcountry' and oxobject2delivery.OXOBJECTID=" . $oDb->quote($sCountryId) .
")" :
'0';
170 $sUserSql = $sUserId ?
"EXISTS(select oxobject2delivery.oxid from oxobject2delivery where oxobject2delivery.oxdeliveryid=$sTable.OXID and oxobject2delivery.oxtype='oxuser' and oxobject2delivery.OXOBJECTID=" . $oDb->quote($sUserId) .
")" :
'0';
171 $sGroupSql =
count($aIds) ?
"EXISTS(select oxobject2delivery.oxid from oxobject2delivery where oxobject2delivery.oxdeliveryid=$sTable.OXID and oxobject2delivery.oxtype='oxgroups' and oxobject2delivery.OXOBJECTID in (" . implode(
', ',
oxDb::getInstance()->quoteArray($aIds)) .
") )" :
'0';
173 $sQ .=
" order by $sTable.oxsort asc ) as $sTable where (
175 if(EXISTS(select 1 from oxobject2delivery, $sCountryTable where $sCountryTable.oxid=oxobject2delivery.oxobjectid and oxobject2delivery.oxdeliveryid=$sTable.OXID and oxobject2delivery.oxtype='oxcountry' LIMIT 1),
178 if(EXISTS(select 1 from oxobject2delivery, $sUserTable where $sUserTable.oxid=oxobject2delivery.oxobjectid and oxobject2delivery.oxdeliveryid=$sTable.OXID and oxobject2delivery.oxtype='oxuser' LIMIT 1),
181 if(EXISTS(select 1 from oxobject2delivery, $sGroupTable where $sGroupTable.oxid=oxobject2delivery.oxobjectid and oxobject2delivery.oxdeliveryid=$sTable.OXID and oxobject2delivery.oxtype='oxgroups' LIMIT 1),
186 $sQ .=
" order by $sTable.oxsort asc ";
222 public function getDeliveryList($oBasket, $oUser = null, $sDelCountry = null, $sDelSet = null)
225 $aSkipDeliveries = array();
226 $aDelSetList =
oxRegistry::get(
"oxDeliverySetList")->getDeliverySetList($oUser, $sDelCountry, $sDelSet);
229 foreach ($aDelSetList as $sDeliverySetId => $oDeliverySet) {
232 $aDeliveries = $this->
_getList($oUser, $sDelCountry, $sDeliverySetId);
235 foreach ($aDeliveries as $sDeliveryId => $oDelivery) {
238 if (in_array($sDeliveryId, $aSkipDeliveries)) {
242 $aSkipDeliveries[] = $sDeliveryId;
244 if ($oDelivery->isForBasket($oBasket)) {
247 $this->_aDeliveries[$sDeliveryId] = $aDeliveries[$sDeliveryId];
251 array_pop($aSkipDeliveries);
254 if ($oDelivery->oxdelivery__oxfinalize->value) {
262 if ($this->_blCollectFittingDeliveriesSets) {
264 $aFittingDelSets[$sDeliverySetId] = $oDeliverySet;
275 if ($this->_blCollectFittingDeliveriesSets &&
count($aFittingDelSets)) {
278 $this->_blCollectFittingDeliveriesSets =
false;
284 return $aFittingDelSets;
301 public function hasDeliveries($oBasket, $oUser, $sDelCountry, $sDeliverySetId)
306 $this->
_getList($oUser, $sDelCountry, $sDeliverySetId);
307 foreach ($this as $oDelivery) {
308 if ($oDelivery->isForBasket($oBasket)) {
326 if (!$this->_oUser) {
340 $this->_oUser = $oUser;
351 $this->_blCollectFittingDeliveriesSets = $blCollectFittingDeliveriesSets;
362 $dPrice = $oDb->quote($oProduct->getPrice()->getBruttoPrice());
363 $dSize = $oDb->quote($oProduct->getSize());
364 $dWeight = $oDb->quote($oProduct->getWeight());
366 $sTable = getViewName(
'oxdelivery');
368 $sQ =
"select $sTable.* from $sTable";
369 $sQ .=
" where " . $this->
getBaseObject()->getSqlActiveSnippet();
370 $sQ .=
" and ($sTable.oxdeltype != 'a' || ( $sTable.oxparam <= 1 && $sTable.oxparamend >= 1))";
372 $sQ .=
" and ($sTable.oxdeltype != 'p' || ( $sTable.oxparam <= $dPrice && $sTable.oxparamend >= $dPrice))";
375 $sQ .=
" and ($sTable.oxdeltype != 's' || ( $sTable.oxparam <= $dSize && $sTable.oxparamend >= $dSize))";
378 $sQ .=
" and ($sTable.oxdeltype != 'w' || ( $sTable.oxparam <= $dWeight && $sTable.oxparamend >= $dWeight))";