Ansatz: Laden von benutzerspezifischen Währungen

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

Hallo Gregor,

danke erstmal für den Lösungsansatz.
Ich bin mir allerdings nicht sicher, ob das kaufmännisch zu 100% korrekt ist: Da die aktuellen Umrechnungskurse ja gar nicht elektrisch gezogen werden, kann die Umrechnung in eine Fremdwährung doch maximal zu Informationszwecken dienen. Da sieht also jemand automatisiert die Währung seiner Wahl entsprechend seines Accounts und bekommt dann eine Rechnung in EUR, die u.U. vom eigentlichen Einkaufswert abweicht. Soll das so sein?

Gruß

Es geht nicht darum den Preis durch den Shop umrechnen zu lassen. Tatsächlich ist es so wie Du sagst - es soll im Prinzip lediglich das Währungszeichen geändert werden. Das ist in unserem Fall deshalb sinnvoll, weil die Preise ja bereits richtig in den Preislisten stehen.

Das Problem bei der Umrechnung der Preis ist ja eh grundsätzlich, dass die Preise dann nicht mehr schön aussehen. Deshalb werden die Preise in den verschiedenen Währungen eben direkt in den Shop übertragen. Dann steht da dann halt 99.99 $ und nicht 97.34 $ oder so was.

Zugegeben, das ganze ist ne ziemlich spezielle Anforderung. Und es ist damit es so funktioniert wie beschrieben auch nötig, dass man entweder das Config-Array für die verfügbaren Währungen manipuliert oder aber das Config-Array selbst aushebelt.