Wenn Lieferzeit "download" bleibt der Warenkorb weiß

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.680
343
Scheinbar gibt es hier einen Fehler in der Funktion "getDeliveryTime", als dass mit einer Lieferangabe die keine Numerischen Werte enthält nicht kalkuliert werden kann. Ergo schießt der Warenkorb mit Weiß ins Aus.
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.680
343
AW: Wenn Lieferzeit "download" bleibt der Warenkorb weiß

Warum ist die Banane krumm? Weil es Betreiber gibt die das eben so angeben :) Lieferstatus (so wie es im Warenkorb angegeben wird) ist nunmal auch nicht als Zeitangabe zu verstehen sondern auch als Begrifflichkeit und da passt vom Wording und Verständnis nunmal auch "Download". Der Punkt ist, wenn es die Möglichkeit gibt da geliebiges einzutragen, muss eben auch beliebiges berücksichtigt werden.
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.680
343
AW: Wenn Lieferzeit "download" bleibt der Warenkorb weiß

Fatal error: Call to a member function getDeliveryTime() on a non-object in .../classes/class.JTL-Shop.Warenkorb.php on line 1087

Code:
$oPosition->cEstimatedDelivery = $oPosition->Artikel->getDeliveryTime($_SESSION["cLieferlandISO"], $oPosition->nAnzahl);
 

boaa-group

Sehr aktives Mitglied
28. Dezember 2007
4.932
9
Thailand, Bangkok
AW: Wenn Lieferzeit "download" bleibt der Warenkorb weiß

Der Error sagt nicht, dass er die Funktion nicht kennt, sondern das er eine Objekt erwartet...

Such doch Mal nach "function getDeliveryTime(" in den Shopdateien und sieh dir an was die Funktion den genau macht.
Der oben zietierte Code ist original oder von dir geschrieben?
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.680
343
AW: Wenn Lieferzeit "download" bleibt der Warenkorb weiß

Das ist die Original Zeile die den Fehler wirft. Natürlich hab ich mir die Funktion schon angeschaut, daher ja auch die Vermutung dass er mit dem hinterlegten Wert des Lieferstatus nix anfangen kann. Betroffene Funktion befindet sich in der class.JTL- Shop.Artikel.php

Code:
public function getDeliveryTime($countryCode, $purchaseQuantity = null, $stockLevel = null, $languageISO = null)
    {
        if(!isset($languageISO))
        {
            //Language-Fallback fuer Exportformate - #6663. ToDo: Abfrage der aktuellen Sprache in Session-Class oder System-Class auslagern
            if (!isset($_SESSION['cISOSprache'])) {
                $oSprache = gibStandardsprache(true);
                $_SESSION['cISOSprache'] = $oSprache->cISO;
            }
            $languageISO = $_SESSION['cISOSprache'];
        }
        
        if (isset($purchaseQuantity)) {
            $purchaseQuantity = (float) $purchaseQuantity;
        } else {
            $purchaseQuantity = $this->fAbnahmeintervall > 0 ? $this->fAbnahmeintervall : 1; // + $this->getPurchaseQuantityFromCart();
        }
        
        if (!is_numeric($purchaseQuantity) || $purchaseQuantity <= 0) {
            $purchaseQuantity = 1;
        }
        
        if (isset($stockLevel) && is_numeric($stockLevel)) {
            $stockLevel = (float) $stockLevel;
        } else {
            $stockLevel = $this->fLagerbestand;
        }
        
        $favShipping = $this->getFavourableShipping($countryCode);

        if ($favShipping === null || $this->inWarenkorbLegbar <= 0) {
            return '';
        }
        //set default values
        $estimatedDelivery = ''; //$favShipping->oVersandartSprache_arr[$languageISO]->cLieferdauer;
        $processingTime = 0;
        $minDeliveryDays = (strlen(trim($favShipping->nMinLiefertage)) > 0) ? intval($favShipping->nMinLiefertage) : 2;
        $maxDeliveryDays = (strlen(trim($favShipping->nMaxLiefertage)) > 0) ? intval($favShipping->nMaxLiefertage) : 3;
        
        if ($this->FunktionsAttribute['processingtime'] > 0) {
            $processingTime = intval($this->FunktionsAttribute['processingtime']);
            $minDeliveryDays += $processingTime;
            $maxDeliveryDays += $processingTime;
        }
        
        // product available in the future?
        if ($this->nErscheinendesProdukt && strtotime($this->dErscheinungsdatum) > time()) {
            $minDeliveryDays += calculateDaysBetween($this->dErscheinungsdatum, date('Y-m-d', time()));
            $maxDeliveryDays += calculateDaysBetween($this->dErscheinungsdatum, date('Y-m-d', time()));
        }
        else 
        if ($this->cLagerBeachten == "Y" && ($stockLevel <= 0 || ($stockLevel - $purchaseQuantity < 0))) {
            if ($this->FunktionsAttribute['deliverytime_outofstock'] > 0) { //prio on attribute "deliverytime_outofstock" for simple deliverytimes
                $deliverytime_outofstock = intval($this->FunktionsAttribute['deliverytime_outofstock']);
                $minDeliveryDays = $deliverytime_outofstock; //overrides parcel and processingtime!
                $maxDeliveryDays = $deliverytime_outofstock; //overrides parcel and processingtime!
            } else if ($this->FunktionsAttribute['supplytime'] > 0) { //attribute "supplytime" for merchants who do not use JTL-Wawis purchase-system
                $supplyTime = intval($this->FunktionsAttribute['supplytime']);
                $minDeliveryDays += $supplyTime;
                $maxDeliveryDays += $supplyTime;
            } else if ($this->fZulauf > 0 && strtotime($this->dZulaufDatum) >= time()) { // supplierOrder incoming?
                $minDeliveryDays += calculateDaysBetween($this->dZulaufDatum, date('Y-m-d', time()));
                $maxDeliveryDays += calculateDaysBetween($this->dZulaufDatum, date('Y-m-d', time()));
            } else if ($this->fLieferzeit > 0 && !$this->nErscheinendesProdukt) { //product 
                $minDeliveryDays += intval($this->fLieferzeit);
                $maxDeliveryDays += intval($this->fLieferzeit);
            }
        }
        
        //set estimatedDeliverytime text
        $estimatedDelivery = getDeliverytimeEstimationText($minDeliveryDays, $maxDeliveryDays);

        $this->nMinDeliveryDays = $minDeliveryDays;
        $this->nMaxDeliveryDays = $maxDeliveryDays;
        return $estimatedDelivery;
    }
 

boaa-group

Sehr aktives Mitglied
28. Dezember 2007
4.932
9
Thailand, Bangkok
AW: Wenn Lieferzeit "download" bleibt der Warenkorb weiß

In der Funktion sehe ich nirgends den Aufruf des "Lieferstatus".

Tritt der Fehler bei JTL-Shop3 ohne Anpassungen unter Verwendung des Tiny Templates ebenfalls auf (alle Plugins deaktivieren)?
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.680
343
AW: Wenn Lieferzeit "download" bleibt der Warenkorb weiß

Eigentlich hatte ich sämtliche Szenarien schon getestet, aber lokal funktioniert es mit der Darstellung, selbe Shopversion, daher schließe ich einen Bug im System an sich aus. Muss also irgendwo im Template oder beim Update was verwurstet worden sein. Ich prüfe das und melde mich dann nochmal.
 

frijk

Gut bekanntes Mitglied
16. Juni 2009
218
7
AW: Wenn Lieferzeit "download" bleibt der Warenkorb weiß

Hallo,

habe bei Produkten mit Konfigurator die gleiche Fehlermeldung. Bist du dem ganzen schon näher auf die Spur gekommen?

Danke vorab,
Michael

Edith ergänzt: Auch mit komplett deaktivierten Plugins sowie Tiny mit deaktivierten _custom.tpl - Fehler ist trotzdem vorhanden. Hosting bei JTL
 

tafechner

Offizieller Servicepartner
SPBanner
31. Juli 2010
809
121
Berlin
AW: Wenn Lieferzeit "download" bleibt der Warenkorb weiß

Hallo an alle, wir hatten dieses Problem nun genauer untersucht und folgende Lösung gefunden.

Anpassen der class.JTL- Shop.Warenkorb.php -> Bitte ACHTUNG ist nicht update fähig, nur Notlösung

PHP:
/* angepasst com-ins-netz.de */
//if($oPosition->nPosTyp == C_WARENKORBPOS_TYP_ARTIKEL) {
if($oPosition->nPosTyp == C_WARENKORBPOS_TYP_ARTIKEL && is_object($oPosition->Artikel)) {
/* /angepasst */

Das Problem tritt bei Konfigurationsartikel auf die keinem Artikel zugeordnet sind, dort ist ja keine Lieferzeit hinterlegt.

Gruss aus Berlin
Torsten