Shopsystem ShopPilot

ShopPilot => SSP - Shop Server Pages => Thema gestartet von: dobra am November 01, 2008, 15:43:30

Titel: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: dobra am November 01, 2008, 15:43:30
Hallo,

ich habe mal wieder ein "verzwicktes" Problem  ;)

Die Aufgabe:
Monatsaktion -  bei Kauf von mindestens 5 (gleichen oder verschiedenen beliebigen) Artikeln eines Herstellers 10% Rabatt.
Der rabattierte Preis soll (in Form von "alter Preis / Aktionspreis") aber nicht nur im WK angezeigt und berechnet werden, sondern auch auf den Produktseiten.

Soweit funktioniert das auch alles schon :D
Da ich die Anzahl der bereits bestellten Artikel von Herstelle "X" aber nur im WK auslesen kann, habe ich das so gelöst, daß diese Anzahl in die Warenkorbdatei geschrieben wird und im  sub modify_db_price Callback abgefragt werden kann.
ABER hier liegt das Problem  ???

sub calc1 { # alle Artikel eines Herstellers minus x% ab x Stueck
my $p = $_[0];
my $artid = $_[1];
    my $pre = ssp::db_get_prefix();
    my $MERCH = $pre . "MERCH";
    ssp::readSQLData(qq|SELECT AKTIMARKE, ABSTUECK FROM $MERCH WHERE STANDARD=1|,  "AKTIMARKE", "ABSTUECK");

    my $pf = ssp::get_var_db('AKTIFAKTOR',0); # Preisfaktor vom benutdef.  Feld des Haendlers holen
    my $marke = ssp::get_var_db('AKTIMARKE',0);
    my $von = ssp::get_var_db('AKTIONVON',0);
    my $bis = ssp::get_var_db('AKTIONBIS',0);
    my $abstueck = ssp::get_var_db('ABSTUECK',0);
if (!length($abstueck)) {$abstueck = 0}
my $sum = ssp::cart_read_var('aktistueck');
    ($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
    $mon += 1; $year += 1900; # Y2K
    my $datum = sprintf("%04d%02d%02d",$year,$mon,$mday);
   
    my $ITEM = $pre . "ITEM";
    my $SITM = $pre . "SITM";
    ssp::readSQLData("SELECT FIRMA FROM $ITEM WHERE ITEMID='$artid' UNION SELECT FIRMAV FROM $SITM WHERE ITEMID='$artid'","FIRMA");
    my $artikel = ssp::get_var_db('FIRMA',0);
    if($artikel ne $ssp::undefined && $artikel ne "" && $sum >= $abstueck){
        if ($marke ne $artikel || ($datum <= $von && $datum >= $bis))  {
            $pf = 1;   
        }
        return ($p*$pf);
    }
    else
    {
        return $p;
    }
}


Obwohl der aktuelle Wert sofort in der Cart-Datei steht, wird er erst bei nochmaligem Laden des WK bei der Abfrage my $sum = ssp::cart_read_var('aktistueck'); berücksichtigt   :(

mt hatte mal ein ähnliches Problem mit sub invoice_addpos_final ....
ahe hat das dann irgendwie gelöst - vielleicht geht das auch für mein Problem und jemand verrät mir die Lösung?

Nachtrag (editiert):
Es hat offensichtlich garnichts mit cart_read_var zu tun ...
Wenn ich diesen Wert auslese, wird er sofort - also bei Artikel in WK legen oder Menge ändern - korrekt ausgegeben
<!--spmacro:module(show)
sub test {
my $sum = ssp::cart_read_var('aktistueck');
main::mprint $sum;
}
-->

Das Problem ist also scheinbar das Callbackscript, das erst nach dem Laden der Seite ausgeführt wird  :-\
<!--spmacro:module(Callback)            
sub modify_db_price {
...
(steht in stdall)

Wie kann ich das lösen?
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: dobra am November 04, 2008, 00:18:25
nach oben schieb - hat wirklich niemand einen Lösungsvorschlag?
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: mt am November 04, 2008, 10:47:27
Hallo dobra,

Zitatmt hatte mal ein ähnliches Problem mit sub invoice_addpos_final ....

wir hatten doch bei meinem Problem eine Brückenseite gebaut.

Heißt auf einer leeren Seite wird diese Funktion ausgeführt und
danach die Weiterleitung auf den Referer gemacht.

Hier nochmal Deine Antwort:
http://www.shoppilot.net/pf/ssp_shop_server_pages/invoiceaddposfinal-t1102.0.html;msg4119#msg4119

Hoffe dass Dir das weiterhilft.

Gruß
mt
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: dobra am November 04, 2008, 10:51:20
Hallo mt,

nein, in diesem Fall kann ich leider keine Brückenseite verwenden, da ich das Problem ja nicht nur bei Artikelanzahl im WK ändern habe, sondern auch wenn ein Artikel von einer beliebigen Detailseite aus in den WK gelegt wird.
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: ahe am November 04, 2008, 11:27:55
Hallo dobra,

habe mir das Problem mal angeschaut (in einem Demoshop) und kann folgendes festellen:

- beim Aufruf des Callbacks ist die Warenkorbdatei aktuell (heisst: beinhaltet neue Artikel)
- ssp::cart_read_var öffnet die Warenkorbdatei beim Funktionsaufruf (heisst: es werden die aktuellen Daten auch zurückgegeben)
- modify_db_price wird immer aufgerufen BEVOR irgendetwas ausgegeben wird (heisst: zum Zeitpunkt der Ausgabe wurde das Callback schon ausgeführt)

Folglich scheint irgendwo anders noch ein Fehler aufzutreten.
Ich würde empfehlen im Callback mal genaue Logausgaben (plog) einzubauen, sodass Sie nachvollziehen können,
wann welche Variablen welchen Inhalt haben und welcher Programmablauf dadurch erfolgt.

Bsp (natürlich noch zu komplettieren ;)):
my $artikel = ssp::get_var_db('FIRMA',0);
    main::plog("D, artikel=$artikel\n");
    if($artikel ne $ssp::undefined && $artikel ne "" && $sum >= $abstueck){
        main::plog("D, zweig1 (sum=$sum; datum=$datum)\n");
        if ($marke ne $artikel || ($datum <= $von && $datum >= $bis))  {
            $pf = 1;   
        }
        main::plog("D, returning -".($p*$pf)."-\n");
        return ($p*$pf);
    }
    else
    {
        main::plog("D, zweig2 (sum=$sum)\n");
        main::plog("D, returning -$p-\n");
        return $p;
    }
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: dobra am November 04, 2008, 11:49:25
Hallo ahe,

Danke für den Code - hab ihn eingebaut
(Ergebnis kommt per Mail - die Details sind hier vermutlich ausführlich  ;))
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: dobra am November 04, 2008, 21:32:49
EDIT - diesen Fehler gefunden   ;)

1) Callback begin_read_template  wird korrekt ausgeführt   :D
- aber
2) modifiy_db_price funktioniert noch immer nicht (erst nach neuladen der WK Seite)  :(
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: ahe am November 04, 2008, 23:45:54
Hallo dobra,

ich tippe immer noch darauf, dass irgendwo die Funktion begin_read_template schon definiert wurde,
und deshalb die 2. (neue) Funktion ignoriert wird.
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: dobra am November 04, 2008, 23:49:29
Hallo ahe,

hab DIESEN Fehler gefunden und Beitrag gerade editiert - hat sich überschnitten  ;)
Aber Punkt 2) funktioniert leider noch immer nicht  ???
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: ahe am November 05, 2008, 00:02:41
Ich schlage vor wir machen morgen per Mail weiter.
Ist doch ein *wenig* speziell Ihr Problem :D
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: dobra am November 05, 2008, 00:07:09
OK
gute Nacht
ich mach für heute auch Feieradend  ;)
Titel: Re: Problem mit sub modify_db_price "Nachtrag EDITIERT !!!"
Beitrag von: ahe am November 05, 2008, 00:27:13
Wünsche ich ebenfalls