Hallo zusammen,
in einem Shop unserer Kunden haben wir benutzerspezifische Preislisten implementiert. Die Daten dafür komme aus einem ERP-System. Jede Preisliste kann eine andere Währung haben (z.B. EUR, USD, CHF). Somit muss für jeden Kunden eine andere Währung geladen werden.
Denkbar währe auch, die Währung direkt für den Kunden zu hinterlegen. Wir haben das ganze aber datenhaltungsmäßig bei den Preislisten gelassen.
Vielleicht ist das ja für jemand anderen auch sinnvoll, die Währung automatisch wechseln zu lassen, je nach dem, welcher Benutzer angemeldet ist. Dazu haben wir die oxconfig mit einem kleinen Modul erweitert (oxconfig erweutern geht ja seit ich glaube CE Version 4.7) und die Funktion getShopCurrency wie folgt überschrieben.
public function getShopCurrency() {
$active_user_curency = null;
// set currency by oxusers pricelist
$oUser = $this->getUser();
if ($oUser && $oUser->get_user_currency()) {
$active_user_curency = 0;
$config_currency_array = proxid::$shop_config->getCurrencyArray();
foreach($config_currency_array as $shop_currency) {
if($shop_currency->name == $oUser->get_user_currency()) {
$active_user_curency = $shop_currency->id;
break;
}
}
}
// call parent function if no currency could be loaded for the current user
if($active_user_curency === null) {
return parent::getShopCurrency();
} else {
return $active_user_curency;
}
}
Wir hatten lange herumversucht die Währung mit oxconfig::setActShopCurrency() zu setzen, was aber nicht zum Erfolg führte und auch immer wieder mit den cur-GET-Parameter überschrieben wurde oder mit dem entsprechenden Session-Parameter. Die Funktion getShopCurrency() zu überschreiben scheint der richtige Weg zu sein.
Vielleicht hilfts ja jemandem oder eventuell hat jemand einen Hinweis, wie man es besser machen kann.
Grüße
Gregor