Hallo,
ich habe da ein ganz spezielles Problem.
Da es im skandinavischen Raum als kleinste Münze nur die 50 Öre Münze
und in der Schweiz nur die 5 Rappen-Münze gibt, möchte ich gern das beim Umschalten
der Währung die Preise automatisch auf diese Besonderheiten angepasst werden.
Das ich die Preise Global manipulieren kann ist mir klar, da ich die Callback-Funktion
'modify_db_price' schon benutze. (für Händlerpreisfaktoren etc.).
Kann ich diese oder eine Ähnlich Funktion bei der Währungsumschaltung nutzen?
Gruß
mt
Hallo mt,
guck mal hier:
http://www.shoppilot.net/pf/ssp_bibliothek/rechnungssumme_auf_5_bzw_0_rappen_runden_rappenrundung_fuer_die_schweiz-t1018.0.html;msg3803#msg3803 (http://www.shoppilot.net/pf/ssp_bibliothek/rechnungssumme_auf_5_bzw_0_rappen_runden_rappenrundung_fuer_die_schweiz-t1018.0.html;msg3803#msg3803)
Hallo dobra,
Danke für die schnelle Antwort! :)
Leider meinte ich etwas anderes. Ich möchte gern das die Artikel-Preise im Shop sich auch
dementsprechend verändern (eben wie bei 'modify_db_price'). Die Berechnung an sich
ist mir schon bekannt gewesen.
Ich persönlich würde nur ein wenig irretiert sein, wenn der Preis im Warenkorb ein anderer ist als
die Gesamtsumme der Artikelpreise, daher würde ich mir halt eine 'bessere' Lösung wünschen.
Gruß
mt
Hallo mt,
also wenn's nur um die Preisanzeige und nicht um die Berechnung geht, versuch mal das:
<!--spmacro:module(test)
sub rpreis {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $preis = ssp::get_var_article('preis',$index);
main::mprint( &main::fp(sprintf("%.1f",$preis) )) ;
}
return 0;
}
-->
__preis__ mit __test::rpreis__ ersetzen
habe es allerdings jetzt mal nur auf Detailseiten getestet
sorry - habe gerade gemerkt, daß das so nicht geht
damit wird nur auf .10, .20 usw auf/ab gerundet - Du brauchst ja .00 bzw. .05
Und wieder danke für Deine Mühen :)
Bei mir muss aber beides in Kombination stimmen (Anzeige und Berechnung).
Ich manipuliere den Preis ja schon über 'modify_db_price' und kann daher
leider keinen eigenen Platzhalter für die Preisanzeige nehmen.
Außerdem sollte der Preis ja nicht dauerhaft manipuliert sein, sondern sich nach der
Währungsumschaltung richten. Die dauerhafte Manipulierung kann ich ja über
'modify_db_price' lösen. Das heißt z.B. ich komme als schwedischer User in einen
englischsprachigen Shop und kann mit dem EUR nix anfangen, schalte daher mit dem
Währungsumschalter von SPilot die Währung in SEK um. Nun sollen die Preise an
auf 50 Öre oder auch auf die ganze Krone gerundet dargestellt und berechnet werden.
Ich weiß, ist alles sehr speziell aber da wir viele Händler mit unterschiedlichen Preisen und Sprachen
haben ist das alles bei uns nicht so einfach.
Trotzdem nochmal DANKE!
Gruß
mt
naja - da kann ich wohl dann leider nicht helfen :(
....soweit reicht mein "Können" (noch) nicht - muß noch sehr viel lernen.........
P.S.:
falls doch mal jemand die auf .05 bzw .00 gerundete Preisanzeige braucht:
so geht's:
<!--spmacro:module(test)
sub rpreis {
my $index = $_[0];
my $anzahl = $_[1];
if ($index <= $anzahl) {
my $preis = ssp::get_var_article('preis',$index);
$preis = ($preis*20);
my $preis2 = int($preis) ;
main::mprint( &main::fp(($preis2)/20));
}
return 0;
}
-->
Hallo mt,
wenn Sie sowieso schon das Callback "modify_db_price" benutzen, können Sie dort ja auch direkt die Rundung vornehmen.
Hallo ahe,
ja, ich weiß nur nicht wie ich feststelle welche Währung der User ausgewählt hat.
Habe in der Hilfe zum Thema Währung nur den Platzhalter zum Umschalten gefunden.
Gibt es da eine SSP-Variable die ich auswerten kann?
Gruß
mt
Wenn Sie __xchgcurrencyN__ verwenden, wird die ID der gewählten Währung im Warenkorb gespeichert.
--> ssp::cart_read_var("curc");
Danke, werde es ausprobieren.
Ist denn 'ssp::cart_read_var("curc")' auch außerhalb vom Warenkorb (Artikleseiten oder Detailseiten) vorhanden?
Hallo mt,
ja - ssp::cart_read_var ist auf allen Seiten abrufbar!
Das weiß ich, da ich diese Funktion schon seit langem verwende ;)
Danke, hat funktioniert :D ABER :(
Bei der Auswahl der Währung wird der EUR-Preis zugrunde gelegt.
Das hat zur folge, das der EUR-Wert durch 'modify_db_price' verändert wird.
und sich erst danach in SEK (Kronen) umrechnet.
Das heist:
37,90 EUR -> 'modify_db_price' -> 38,00 EUR -> 359,76 SEK
Ich brauche aber die Kronen als glatten Wert.
Ideal wäre also:
37,90 EUR -> 358,81 SEK -> 'modify_db_price' -> 359,00 SEK
Bin da echt ratlos. ???
Gruß
mt
Hier mal ein kleines Beispiel wie Sie die Rundung hinkriegen sollten.
$pf muss den Preisfaktor enthalten, der auch im Shop für die Fremdwährung eingetragen ist.
<!--spmacro:module(Callback)
sub modify_db_price {
my ($price, $itemid) = @_;
## Hier erst die alten Berechnungen
my $pf = 1.23456;
my $price_new = $pf * $price;
$price_new = runden($price_new*20)/20;
return $price_new / $pf;
}
## kaufm. runden
sub runden {
my $val = shift || 0;
my $r = ( $val < 0 ) ? -1 : 1;
$r *= 0.5;
return int($val + $r);
}
-->
Hallo,
meinen Sie mit dem $pf den Umrechnungskurs?
Der wird doch dynamisch im Shop hinterlegt und bei jedem Update aktualisiert.
Wenn ich diesen fest in das Script schreibe, muss ich ja täglich diesen Wert korrigieren.
Kann ich nicht den Umrechnungskurs aus dem Shop auslesen?
Und was passiert eigentlich mit der Umrechenautomatik vom Shop selber,
die ist doch durch das Script nicht ausgeschalten, oder doch?
'modify_db_price' beeinflusst doch nur den Preis VOR der Umrechnung.
Irgendwie habe ich noch mehr Fragen als vorher. ???
Gruß
mt
Die Berechnung sollte schon funktionieren.
Das ganze ist ein wenig Dreisatz, der dazu führt, dass die später errechnete Fremdwährung gerundet ist.
Zum Zugriff auf die im Workcenter eingetragenen Umrechnungsfaktoren gibt es noch keine Schnittstellenfunktion.
Ich schicken Ihnen eine "unsaubere" (aber funktionierende ;)) Methode gleich per PM.
DANKE für die 'unsaubere Lösung' aber leider
funktioniert das Script nicht ganz korrekt :(.
1. Es rechnet falsch um ca. 4-5 Kronen zuviel
2. Die Beträge sind immer noch krumm:
37,90 -> 363,55 SEK (falsch)
Wäre so richtig:
37,90 -> 359.24 -> mit Rundung dann 359,- SEK (Rundung auf die Ganzzahl reicht im schwedischen)
Hier nochmal mein Script (Auszug):
my $waehrung = ssp::cart_read_var("curc");
if(($waehrung == 3) || ($waehrung == 4) || ($waehrung == 5)){
my $price_new = $waehrung_pf * $endergebnis;
$price_new = runden($price_new*20)/20;
return $price_new / $waehrung_pf;
}
else {
#...
}
Gruß
mt
UUUPS! :-[
Berechnung ist richtig, hatte nen falschen Ausgangswert.
Aber der 2. Punkt ist leider immernoch
sorry wenn ich wieder einmische, aber versuch's mal so:
my $price_new = ($waehrung_pf * $endergebnis) + 0.5;
$price_new = int($price_new);
Für SEK kann natürlich nicht die Funktion zur Rappenrundung verwendet werden ;)
Zitat von: ahe am Juli 15, 2008, 16:52:51
Für SEK kann natürlich nicht die Funktion zur Rappenrundung verwendet werden ;)
Ja schon klar, das hätte ich noch angepasst (wobei ich es auch für die Schweiz brauche).
trotzdem kommen Werte wie 358,88 SEK raus, heißt er ignoriert das runden. Nach
Rappenrundung müsste ja 358,85 stehen.
@dobra:
Kann leider gerade nicht testen, da ich gerade nicht in der Firma bin.
Gruß
mt
Hmmm, in meinem Testshop hat es funktioniert (Rundung auf 0,05 €) :-\
Werde mir das morgen nochmal anschauen.
Guten Morgen Zusammen,
habe jetzt noch ein paar mal an der Funktion gebastelt.
Fazit, das Skript ignoriert sämtliche Rundungen. Habe auch 'sprintf' versucht.
Ich vermute das es daran liegt, dass die Umrechnung nach 'modify_db_price'
geschieht, wir können da Dreisätze bilden und Runden wie wir wollen, der Shop
rechnet eben erst danach um und somit ist die Rundung futsch. Es gibt meiner
Meinung nach derzeit keine Möglichkeit den Preis NACH der Umrechnung zu beeinflussen.
Aber vielleicht irre ich mich ja.
Gruß
mt
Guten Morgen,
der Dreisatz sollte ja eigentlich genau das lösen.
Erst berechnet das Script die Fremdwährung wie das später auch ShopPilot macht.
Dann wird der Betrag gerundet und zurückgegeben wird der gerundete Betrag / Umrechnungsfaktor.
Wenn dieser zurückgegebene Wert später mit demselben Umrechnungsfaktor multipliziert wird,
sollt natürlich wieder der gerundete Wert heraus kommen.
$gerundeter_wert / $faktor * $faktor = $gerundeter_wert
Schicken Sie mir doch bitte mal Ihr Script per Mail an ahe [at] shoppilot.de
Hallo ahe,
das Script ist unterwegs.
Ich danke Ihnen schonmal für Ihre Mühe.
Gruß
mt