Jump to content

errori di calcolo nel carrello


geko2010
 Share

Recommended Posts

Ciao a tutti,

ho sfogliato i vari post ma ma non ho trovato soluzioni a riguardo, spero che qualcuno possa aiutarmi.

 

Ho riscontrato degli errori di calcolo nel carrello, anche banali, per il calcolo dell'importo iva.

Non si tratta solo di arrotondamenti ma anche di calcoli matematici semplici.

 

Ad esempio:

qui di seguito potete ben vedere che l'iva al 22% sull'imponibile di € 36.50 dovrebbe essere:

 

36.50 x 22/100 = 8.03 (calcolo semplice senza alcun arrotondamento)

 

Invece lo calcola 8.02

0rdw.jpg

 

 

Qui invece si tratta di un arrotondamento mancante, infatti l'iva su € 153.57 è di € 33.7854 che arrotondata con modalità classica da € 33.79

 

il sitema invece "sega" le cifre millesimali senza arrotondarle e diventa € 33.78

om12.jpg

 

 

Questi errori però non sono sistematici, difatti qui di seguito il calcolo è esatto:

dbg3.jpg

 

Ho ricreato una nuovo voce iva al 22% ed ho aggiornato le regole tasse degli stati.

 

Ho provato a cambiare i l metodo di arrotondamento ma non va bene.

 

 

Che posso fare??? :huh:

 

 

Share this post


Link to post
Share on other sites

niente, è il tipo di arrotondamento che applica PS che non funziona come deve.

Soluzione ? andare a rivedere tutto il sistema di arrotondamento e sistemarlo

 

saluti

Share this post


Link to post
Share on other sites

ironico ? e perchè dovrei esserlo ?

 

hai presentato un problema e ti è stata data risposta, dove leggi l'ironia nella risposta ?

Share this post


Link to post
Share on other sites

ironico ? e perchè dovrei esserlo ?

 

hai presentato un problema e ti è stata data risposta, dove leggi l'ironia nella risposta ?

 

Scusa, ho interpretato male il tuo: "andare a rivedere TUTTO il sistema di arrotondamento e sistemarlo".

 

Mi sembrava una frase del tipo: "Sto' sito è tutto da rifare!" :P

 

beh... non ci far caso... mie fantasie...

 

Comunque dimmi.

Dove lo trovo il sistema di arrotondamento?? :blink:

Share this post


Link to post
Share on other sites

Ciao geko2010, credo purtroppo che solved abbia ragione.

Anche io in alcuni casi ho riscontrato problemi con il sistema di arrotondamento di prestashop.

 

Ho notato che questi errori si verificano quando si importano prodotti da un listino ma non quando si generano da b.o.

Prova a verificare questa cosa creando un prodotto di pari importo a quello dove riscontri l'anomalia e mettilo nel carrello per vedere come lo arrotonda.

Share this post


Link to post
Share on other sites

Ciao geko2010, credo purtroppo che solved abbia ragione.

Anche io in alcuni casi ho riscontrato problemi con il sistema di arrotondamento di prestashop.

 

Ho notato che questi errori si verificano quando si importano prodotti da un listino ma non quando si generano da b.o.

Prova a verificare questa cosa creando un prodotto di pari importo a quello dove riscontri l'anomalia e mettilo nel carrello per vedere come lo arrotonda.

Grazie Eugenata.

Purtroppo i casi in cui riscontro il problema sono sui totali delle somme di più prodotti.

 

Nel primo caso però, se notate bene, non si tratta di arrotondamento ma proprio di una moltiplicazione errata!

 

36.50 x 22/100 = 8.03    non c'è nessun arrotondamento che possa darmi 8.02 !!!

Share this post


Link to post
Share on other sites

si è sempre un errore di arrotondamento, nel senso che ci sono scenari di calcolo che PS non prevede e quindi applica una regola di arrotondamento sballata e questo causa appunto errori come dici.

 

l'errore è sempre causato dalla funzione di arrotondamento di PS la quale non prevede tutti gli scenari possibili

Share this post


Link to post
Share on other sites

l'avevo già guardato e l'unica voce che parla di calcolo delle tasse mi sembra questa:

 

if ($this->_taxCalculationMethod == PS_TAX_EXC)
            {
                $row['price'] = Product::getPriceStatic((int)$row['id_product'], false, isset($row['id_product_attribute']) ? (int)($row['id_product_attribute']) : NULL, 2, NULL, false, true, (int)($row['cart_quantity']), false, ((int)($this->id_customer) ? (int)($this->id_customer) : NULL), (int)($this->id), ((int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) ? (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) : NULL), $specificPriceOutput); // Here taxes are computed only once the quantity has been applied to the product price
                $row['price_wt'] = Product::getPriceStatic((int)$row['id_product'], true, isset($row['id_product_attribute']) ? (int)($row['id_product_attribute']) : NULL, 2, NULL, false, true, (int)($row['cart_quantity']), false, ((int)($this->id_customer) ? (int)($this->id_customer) : NULL), (int)($this->id), ((int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) ? (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) : NULL));
                $tax_rate = Tax::getProductTaxRate((int)$row['id_product'], (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}));

                $row['total_wt'] = Tools::ps_round($row['price'] * (float)$row['cart_quantity'] * (1 + (float)($tax_rate) / 100), 2);
                $row['total'] = $row['price'] * (int)($row['cart_quantity']);
            }
            else
            {
                $row['price'] = Product::getPriceStatic((int)$row['id_product'], false, (int)$row['id_product_attribute'], 6, NULL, false, true, $row['cart_quantity'], false, ((int)($this->id_customer) ? (int)($this->id_customer) : NULL), (int)($this->id), ((int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) ? (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) : NULL), $specificPriceOutput);
                $row['price_wt'] = Product::getPriceStatic((int)$row['id_product'], true, (int)$row['id_product_attribute'], 2, NULL, false, true, $row['cart_quantity'], false, ((int)($this->id_customer) ? (int)($this->id_customer) : NULL), (int)($this->id), ((int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) ? (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) : NULL));

                /* In case when you use QuantityDiscount, getPriceStatic() can be return more of 2 decimals */
                $row['price_wt'] = Tools::ps_round($row['price_wt'], 2);
                $row['total_wt'] = $row['price_wt'] * (int)($row['cart_quantity']);
                $row['total'] = Tools::ps_round($row['price'] * (int)($row['cart_quantity']), 2);
            }

 

non trovo l'opzione degli arrotondamenti, a parte quella dei decimali.

Edited by geko2010 (see edit history)

Share this post


Link to post
Share on other sites

non trovo l'opzione degli arrotondamenti, a parte quella dei decimali.

 

[geko2010]

 

se fosse così semplice intervenire su PS sarebbe alla portata di tutti non credi ?

 

io ti ho detto parti da li e poi ti vai a cercare tutte le funzioni in altri file che gestiscono il carrello, fino a trovare la funzione che si occupa degli arrotondamenti

Share this post


Link to post
Share on other sites

  • 1 month later...
  • 7 months later...
  • 1 month later...

Buongiorno a tutti, anch'io, purtroppo ho lo stesso problema.

Non ho ancora trovato una soluzione ma credo di essere riuscito a isolare il problema: è che l'arrotondamento viene fatto al momento sbagliato.

 

Mi spiego meglio:

il mio prodotto X ha prezzo di vendita ( al netto di IVA ) di 28,69 €  a cui bisogna aggiungere l' IVA a 22%

un cliente effettua un ordine di 10 pezzi del prodotto X

Sulla fattura generata da PS si legge imponibile 286,90 € IVA 63,10 €

Il che è sbagliato perchè il 22% di 286,90 è 63,118 che arrotondato fa 63,12 € ( abbiamo perso 2 centesimi )

 

Per quale motivo le tasse generate da PS sono 63,10 invece di 63,12?

Perchè PS genera l'IVA su ogni singolo prodotto, poi la arrotonda e poi la moltiplica per il numero di prodotti. In questo caso:

l'iva sul singolo prodotto che costa 28,69 è 6,3118...che arrotondato fa 6,31 €...visto che ne ha acquistati 10 sarà 6,31*10 = 63,10 €

 

La soluzione sarebbe moltiplicare prima l'IVA del singolo per il numero di prodotti e poi arrotondare alla fine.

 

Perchè non capita sempre?

Perchè se l'IVA calcolata sul prezzo del prodotto genera un numero con solo 2 cifre decimali il problema non si verifica perchè non c'è arrotondamento.

Se invece l'iva calcolata supera le 2 cifre decimali si verifica l'errore. Infatti rifacendo il calcolo appena mostrato con un prodotto il cui prezzo di vendita ( al netto di iva ) è di 14,50 € ... tutti i calcoli generati sono giusti. ( infatti l'IVA su ogni singolo prodotto sarà di 3,19 € con solo 2 cifre decimali  )

 

Qualcuno è daccordo?

Come si risolve?

  • Like 1

Share this post


Link to post
Share on other sites

 

Buongiorno a tutti, anch'io, purtroppo ho lo stesso problema.

Non ho ancora trovato una soluzione ma credo di essere riuscito a isolare il problema: è che l'arrotondamento viene fatto al momento sbagliato.

 

Mi spiego meglio:

il mio prodotto X ha prezzo di vendita ( al netto di IVA ) di 28,69 €  a cui bisogna aggiungere l' IVA a 22%

un cliente effettua un ordine di 10 pezzi del prodotto X

Sulla fattura generata da PS si legge imponibile 286,90 € IVA 63,10 €

Il che è sbagliato perchè il 22% di 286,90 è 63,118 che arrotondato fa 63,12 € ( abbiamo perso 2 centesimi )

 

Per quale motivo le tasse generate da PS sono 63,10 invece di 63,12?

Perchè PS genera l'IVA su ogni singolo prodotto, poi la arrotonda e poi la moltiplica per il numero di prodotti. In questo caso:

l'iva sul singolo prodotto che costa 28,69 è 6,3118...che arrotondato fa 6,31 €...visto che ne ha acquistati 10 sarà 6,31*10 = 63,10 €

 

La soluzione sarebbe moltiplicare prima l'IVA del singolo per il numero di prodotti e poi arrotondare alla fine.

 

Perchè non capita sempre?

Perchè se l'IVA calcolata sul prezzo del prodotto genera un numero con solo 2 cifre decimali il problema non si verifica perchè non c'è arrotondamento.

Se invece l'iva calcolata supera le 2 cifre decimali si verifica l'errore. Infatti rifacendo il calcolo appena mostrato con un prodotto il cui prezzo di vendita ( al netto di iva ) è di 14,50 € ... tutti i calcoli generati sono giusti. ( infatti l'IVA su ogni singolo prodotto sarà di 3,19 € con solo 2 cifre decimali  )

 

Qualcuno è daccordo?

Come si risolve?

La nuova versione 1.6.0.10, come annunciato nel post dedicato, affronta proprio questo problema, che era stato molto discusso ed oggetto di polemiche nei forum internazionali. Il problema, credo, è come dice dsmowow: PS effettua il calcolo dell'IVA nel singolo prodotto, ed eventualmente ne arrotonda il valore tagliando troppi decimali.Questo comporta piccole differenze che si sommano e si moltiplicano, creando degli errori anche importanti.

La soluzione è che andrebbero fatti degli arrotondamenti nella visualizzazione, conservando in memoria un numero elevato di decimali per i futuri calcoli (come fanno i fogli elettronici quando si formattano per mostrare es. 2 cifre decimali)

Share this post


Link to post
Share on other sites

Spero che la versione 1.6.0.10 venga rilasciata presto e che funzioni tutto correttamente....perchè nel frattempo non so cosa dire ai miei cienti.

ASSISASSI tu hai trovato qualche stratagemma per poter fare qualche miglioria in attesa della nuova versione?

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Salve ragazzi, volevo dirvi che al momento ho trovato una soluzione temporanea al problema:

ho creato un override della classe Tools dove è presente la funzione ps_round

Questa funzione accetta 2 parametri: il numero reale "$value" e la cifra di cifre decimali "$precision".

Non ho fatto altro che forzare il parametro $precision a un minimo di 3 cifre decimali. 

Il file che ho creato bisogna posizionarlo qui override/classes/Tools.php

 

Il file contiene il seguente codice:

class Tools extends ToolsCore{

	public static function ps_round($value, $precision = 0)
	{
		if($precision<3){ $precision=3; }
		return parent::ps_round($value, $precision);
		
	}
	
} 

Dopo aver creato questo file bisogna cancellare il fil cache/class_index.php . Dopo averlo cancellato, prestashop lo rigenera in modo corretto.

 

ps. Non so se la modifica può comportare problemi di altro genere....pertanto non l'ho testata a fondo, però risolve il problema della fattura.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More