PDA

Zobacz pełną wersję : virtuemart + błędne przeliczanie waluty dla kosztów wysyłki



Kafel
09-10-2009, 18:22
Witam
J! 1.5.14 + virtuemart 1.1.3
domena: aromaniac.com
Sklep jest w wersji en i ceny są w dolarach (ale kilka elementów jest w języku pl - jeśli jest pl w http_user_agent albo wejście jest z polskiej domeny to również waluta ustawia się na pln). Jak zmienię walutę na polish złoty (dostosowany currency selector do potrzeb strony - działa identycznie jak oryginał) to wszystko ładnie działa - poza jednym przypadkiem - przy realizacji zamówienia jest ustawiony shipping $11,90 dla klientów z Europy - ponieważ jest polska waluta to widać kwotę około 30PLN - niby wszystko ok, ale jak się wybierze np płatność paypal to do zapłaty jest nie 30 a 90 zł (za shipping + oczywiście koszty towaru) - wygląda na to, że waluta jest przeliczana drugi raz, a jako podstawa jest brana wartość w pln tak jakby była w $. W zamówieniach J! oraz mailach potwierdzających też jest taka wartość. Przy kilku produktach kwoty są odpowiednio wyższe i np przy 2 shipping kosztuje już około 180zł... W bazie tak też właśnie jest ustawiane pole order_shipping w tabeli orders (w funkcji add w ps_checkout dodaje się nowy rekord do orders, ale nie znalazłem miejsca gdzie ta funkcja jest wywoływana w trakcie realizacji procesu zamówienia). Przeczesałem chyba wszystkie klasy, które mogą odpowiadać za ponowne przeliczanie waluty i niestety nic nie znalazłem.
Zauważyłem też że prawdopodobnie podstawa do wyliczenia opłaty może być brana ze zmiennej sesji: shipping_rate_id (przy włączonym debugowaniu widać ten sam ciąg znaków, np dla dwóch produktów: zone_shipping%7CZone+Shipping+Poland%7CPOL%7C68.60 6369946917%7C6), ale również nie znalazłem miejsca, w którym jest ustawiane i gdzie to zmienić.
Jednym z rozwiązań byłoby usunięcie pierwotnego przeliczania waluty - to znalazłem, że w shipping/zone_shipping.php można zrobić a w widoku dla klientów ustawić wartość na stałe, ale przecież to nie o to chodzi - przede wszystkim byłby problem przy każdej zmianie kursu walut.

Proszę więc o podpowiedź :) Pewnie rozwiązanie jest proste, ale jak się patrzy w kod zbyt długo to już nic nie widać :)

Musze jeszcze zaznaczyć, że przy $ nie ma tego problemu, więc wina leży na 100% po stronie ponownego przeliczania złotówek na złotówki na podstawie kursu dolara :)
Będe wdzięczny za każdą pomoc.

Kafel
10-10-2009, 00:24
Widzę, że dość rzadki problem, skoro nikt nie odpowiedział. W każdym razie udało mi się go naprawić. Dla potomnych:

w ps_checkout należy usunąć lub zakomentować linijkę 1598 (przynajmniej u mnie jest ten numer)- jest to ostatnia operacja w funkcji calc_order_shipping:

$d['shipping_total'] = $GLOBALS['CURRENCY']->convert( $d['shipping_total'] );

Ogólnie to wygląda na wbudowany błąd - przynajmniej ja nie rozumiem w jakim celu miałaby być wykonywana ta konwersja - chyba, że przy innych metodach wysyłki niż zone_shipping jest to konieczne. W wysyłkach strefowych jest bowiem przeprowadzona konwersja już wcześniej. Może ktoś mnie oświeci - potwierdzi albo wyprowadzi z błędu? :)