wdrożenia PrestaShop

platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty

  • 12 Odpowiedzi
  • 4819 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline kuras

  • Tubylec
  • ****
  • 257
  • 1
Witam!

Mam mały problem z płatnościami polegający na tym że... kwota na stronie z wyborem płatności powinna być zaokrąglona a nie jest  :-\

O co chodzi...
Płatności przyjmują informację o kwocie w groszach, czyli kwota w presta jest w zł a do płatności wysyłana jest pomnożona przez 100.
A teraz konkretnie...
Doliczam do wszystkiego VAT (towar, kurier) plus mam ustawione zaokrąglenie.
czyli dla przykładu towar mam za 10 z VAT, kuriera za 12,3 bez VAT (a z VATem 15,006)
Suma w koszyku zaokrąglona jest do 25.

Ale wchodząc do płatności mam 25,006 i po przemnożeniu przez 100 mam 2500,6.
Moduł płatności nie przyjmuje kwoty po przecinku i wywala błąd nr 111 czyli "brak parametru amount"  :-[

Kod odpowiadający za wartość zamówienia w module platnosci_pl jest taki:
'amount' => $cart->getOrderTotal() * 100,

Jakie rozwiązanie?!?
1.
Albo zaznaczyć że do kwoty kuriera nie będzie doliczany VAT i wtedy wpisać kwotę z VATem czyli np 15zł. Po sumowaniu będzie bez przecinka, zakładając że towar też mamy w złotówkach.
Jedynie zaczyna się problem jak opuszczamy cenę w procentach np 25% mniej... wtedy dostajemy znów po przecinku kwotę która nie przejdzie przeze moduł płatności.pl  >:(

2.
Albo zaokrąglać w module platnosci.pl i się nie przejmować np może tak:
'amount' => number_format($cart->getOrderTotal(true), 0, '.', ''),
A na stronie z płatnościami napisać kwotę zaokrągloną i w złotówkach dla upewnienia klienta.
{convertPrice price=$cart->getOrderTotal(true)}

Nie jestem do końca pewnie tej zmiany w kodzie więc może ktoś z Panów informatyków by coś ciekawego na ten temat napisał.

Upewnijcie mnie że to będzie działać ;-)



*

Offline christo123

  • Stały użytkownik
  • ***
  • 65
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #1 dnia: Styczeń 27, 2009, 01:15:33 pm »
'amount' => floor($cart->getOrderTotal() * 100)

floor($float) - obetnie Ci to co masz po przecinku bez zaokrąglania (wyjątek stanowią liczby ujemne). przykład:
<?php
echo floor(4.3);   // 4
echo floor(9.999); // 9
echo floor(-3.14); // -4
?>

*

Offline kuras

  • Tubylec
  • ****
  • 257
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #2 dnia: Styczeń 27, 2009, 01:28:59 pm »
Ale chciałbym aby to zaokrąglało to tak jak presta robi.
Bo jeśli z tyłu mam 10,6 i presta zaokrągli mi do 11, to floor zaokrągli do 10.

W koszyku będzie 11 a w platnosci będzie 10
A tego nie chcemy ;-)

*

Offline christo123

  • Stały użytkownik
  • ***
  • 65
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #3 dnia: Styczeń 27, 2009, 01:39:34 pm »
ok,

skoro do płatności idzie w groszówkach to spokojnie możesz użyć:
'amount' => number_format($cart->getOrderTotal(true) * 100, 0, '', '')

*

Offline christo123

  • Stały użytkownik
  • ***
  • 65
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #4 dnia: Styczeń 27, 2009, 01:48:52 pm »
albo nawet:
'amount' => round($cart->getOrderTotal() * 100)

przykład:
<?php
echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.6, 0);      // 4
echo round(1.95583, 2);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06
?>

*

Offline kuras

  • Tubylec
  • ****
  • 257
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #5 dnia: Styczeń 27, 2009, 07:54:34 pm »
Spory wybór...  ;D

Pozostanę przy
'amount' => number_format($cart->getOrderTotal(true) * 100, 0, '', '')

Dziękuje!

*

Offline christo123

  • Stały użytkownik
  • ***
  • 65
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #6 dnia: Styczeń 28, 2009, 12:05:31 am »
number_format() to funkcja związana z obróbką stringów, round() i floor() to funkcje czysto matematyczne. Ponieważ to co Ty wysyłasz nie idzie do wyświetlenia tylko prawdopodobnie jako integer więc najlepszym rozwiązaniem będzie round().

Nie ma sprawy jak coś to w miarę możliwości służę pomocą ;)

Pozdrawiam

*

Offline kuras

  • Tubylec
  • ****
  • 257
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #7 dnia: Styczeń 28, 2009, 12:33:18 am »
Czyli podsumowanie!

W pliku platnoscipl.php
zmieniamy linijkę 255
która wygląda tak
'amount' => $cart->getOrderTotal() * 100,

na następujący kod:
'amount' => round($cart->getOrderTotal() * 100),

*

Offline kuras

  • Tubylec
  • ****
  • 257
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #8 dnia: Styczeń 28, 2009, 12:48:34 am »
STOP! STOP!  ;D

(Szkoda że nie można edytować już puszczonych wpisów)

Do rzeczy...

Musi być tak:
'amount' => round($cart->getOrderTotal())* 100 ,

Najpierw zaokrąglenie a potem pomnożenie przez 100.
Powyżej jest mnożenie a potem zaokrąglenie co przy cenie np 25,006 po mnożeniu wyjdzie 2500,6 a potem zostanie to zaokrąglone do 2501.
A powinno być 25,006... zaokrąglamy 25 i mnożymy... 2500 i to wysyłamy do płatności.pl

Poprawcie mnie jeśli się mylę.

*

Offline christo123

  • Stały użytkownik
  • ***
  • 65
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #9 dnia: Styczeń 28, 2009, 01:07:24 pm »
Potrzebujemy daną w groszach więc najpierw musimy *100 a później zaokrąglamy do całkowitych. Gdybyśmy to wcześniej zrobili pozbylibyśmy się groszy. Inna sprawa... gdy mamy tą naszą cenę 25.006 to presta też ją zaokrągla do groszy czyli wszędzie zobaczymy 25.01. Tak więc my musimy tak samo zaokrąglać aby nam gdzieś grosz nie uciekł. Ostatecznie:
'amount' => round($cart->getOrderTotal() * 100) ,

*

Offline kuras

  • Tubylec
  • ****
  • 257
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #10 dnia: Styczeń 28, 2009, 01:21:49 pm »
No coś w tym jest.
Ale gdy mam preste ustawioną że ma nie pokazywać po przecinku to wtedy presta wyświetla w koszyku przykładowe 25zł a do platności poleci info o 2501. czyli doliczony zostanie grosik :-)

Albo inna sytuacja gdy mamy 25zł, jest promocja 30% taniej... czyli 19,2307 to przypuszczam że presta zaokrągli do 19zł.
Przy zastosowaniu 'amount' => round($cart->getOrderTotal() * 100) ,
Będzie 19,2307*100= 1923,07 i zaokrąglenie czyli 1923

A przy zastosowaniu 'amount' => round($cart->getOrderTotal())* 100
Będzie 19,2307 zaokrąglone 19 * 100 = 1900
Czyli dokładnie tyle ile widzi klient w koszyku.

*

Offline christo123

  • Stały użytkownik
  • ***
  • 65
  • 1
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #11 dnia: Styczeń 28, 2009, 01:34:22 pm »
Wszystko zależy od tego jak liczysz i wyświetlasz to klientowi. Stąd dawałem przykłady abyś dostosował, bo nie wiem przecież jak to jest u Ciebie. Oczywiście z tym wyżej masz całkowitą rację (w Twoim przypadku i sklepie).

Pozdrawiam
Krzysiek

*

Offline precelik

  • Użytkownik
  • **
  • 34
  • 0
    • blogi i strony www
Odp: platnoscipl (błąd 11 - brak parametru amount) i zaokraglanie kwoty
« Odpowiedź #12 dnia: Maj 07, 2009, 02:56:11 pm »
Witam,

Podmieniłem na coś takiego:

   //'amount' => $cart->getOrderTotal() * 100,
'amount' => round($cart->getOrderTotal() * 100),

I teraz się zastanaiwam co może być przyczyną kłopotów z walidacją opisanych tutaj:
http://prestashopforum.pl/index.php?topic=609.msg2452#msg2452

Możliwe że to właśnie to?