Witam
Mam problem z polem currency.
Dokładnie z przeliczaniem kwot w różnych walutach.
O ile jest jedna waluta - nie zauważyłem problemu.
Gorzej jak jest ich kilka, i każdy z nich ma inny znak części dziesiętnej. Tu obserwuję dziwne (niezrozumiałe przeze mnie) działania.
Problem: Potrzebuję określić z ceny wartość, czyli zrobić przykładowo
list($kwota,$cur_id) = Utils_RecordBrowserCommon::get_value('jakis_recordset',1,'cena'); - standardowe pole currency w rekordsecie. (tutaj przykładowo załóżmy, że $kwota = 88.24 z dokładnością do reprezentacji separatora dziesiętnego, który jest różnie zapisywany)
$ilosc = 1;
$wartosc=$kwota*$ilosc;
I teraz niuanse, które mnie dobijają:
Jeśli jest tylko kwota podstawowa w systemie, to przelicza ok, pomimo tego, że separatorem dziesiętnym dla tej kwoty jest przecinek. (w bazie automatem dla domyślnej waluty zapisywana jest kropka, wiec traktowane jest jako float nawet jeśli jest dopisek __1 w stringu currency)
print_r($wartosc) daje 88.24
Jeśli jest to inna waluta (np drua zdefiniowana w syetemie - przykładowo eu), która ma przecinek jako separator i nie jest domyślna to się zaczynają problemy.
W bazie zapisywana jest domyślnie jako string 88,24__2 (dlaczego nie jako 88.24__2???)
Jeśli teraz wykonamy powyższe, to oczywiście
$wartosc = 88
No bo tak być musi.
Nie było by tego problemu, gdyby baza zapisywała w polu currency tylko prawidłowy separator dziesiętny dla float. Ale tak nie robi, bo RB z jakiegoś powodu podaje przecinek (przy new record).
Nasuwa się pytanie - jak prawidłowo pracować z polem currency aby zawsze móc wykonać działanie $kwota*$ilosc i poprawnie zapisywało się w bazie dla innych walut niż domyślna (moim zdaniem separator dziesiętny powinien być zawsze tak samo zapisywany - czyli ".", a nie ze zmiennym znakiem separatora dziesiętnego)
Miotam się z tym tematem.
Mogę napisać funkcję, która poprawia przecinek na kropkę przy zapisie, ale wolałbym zrozumieć logikę przyjętą dla pola currency i sposobu wykonywania przeliczeń dla różnie zdefiniowanych walut, bo być może z założenia błędnie pracuję z tym polem.
Testuję to na epesi 1.5.5, ale nie widziałem w release notesach do 1.5.6 i 1.6.0 jakichś wzmianek o zmianach w działaniu pola currency.
Wyjaśnicie mi?
Może jakaś mała dokumentacja na WIKI do pola currency?
Pozdrawiam
Praski