Pagina 1 di 2

errato di calcolo dei prezzi ivati

Inviato: 27/05/2004, 11:23
da HI-Lab
ho notato questo errore, e non ne sto uscendo più, perchè credo che bisogni modificare metà del sistema di oscommerce. Cosa che sto cercando di fare, ma sta risultando troppo arduo:
il calcolo dei prezzi finiti di iva è errato:
infatti se ho , ad esempio , un articolo che costa, al netto di iva, 3,71 euro , l'articolo ha una aliquota iva del 10%. Oscommerce , giustamente mi dice che il prezzo del singolo articolo , finito di iva è 4,08. Ok fin qui tutto ok.
Mettiamo caso che si vogliano ordinare 15 pezzi di questo articolo:
oscommerce effettua il seguente calcolo: 4,08 (valore ivato) * quantità , ed il risultato è 61,20. ERRATO il calcolo da effettuare deve essere (3,71 * 15) + (((3,71 * 15)/100) * 10 ) cioè (valore unitario * quantità) + (((valore unitario * quantità)/100)* aliquota iva) . A questo punto il prezzo finale sarà 61.215, arrotondato a 61,22.
Così facendo molti importi risultano sbagliati....... So che non è facile rispondere, ma se qualcuno ne è in grado, per favore mi faccia sapere. o eventualmente mi telefoni..... 338-9713997. Ho sistemato le fatture in modo che i risultati possano essere corretti, tuttavia poi i totali ordini risultano diversi dai totali fattura. Ho provato a modificare anche gli ordini, ma è più complicato. Insomma è un casino......

Inviato: 27/05/2004, 19:50
da marcus
La formula di calcolo di Osc è corretta.

Probabilmente è un problema di precisione, configura osc per lavorare con più decimali.

Se non sbaglio c'è il parametro Tax Decimals Places in configuration.

Marzullus

Sei sicuro?

Inviato: 28/05/2004, 9:51
da HI-Lab
Scusa.... non voglio sembrarti ostinato e presuntuoso, tuttavia ho settato Tax Decimals Places in più occasioni a diverse cifre .... E il risultato è lo stesso. Posso chiederti una grazia? Mi puoi provare l'esempio di cui sopra? Cioè 15 articoli, al 10% di iva, che al netto costano 3,71, quanto ti vengono calcolati? Credo che anche da te il prezzo sarà 61,20 .. . .... ..
Attendo tue notizie.......

Re: Sei sicuro?

Inviato: 29/05/2004, 3:46
da marcus
HI-Lab ha scritto:Scusa.... non voglio sembrarti ostinato e presuntuoso,
....
Attendo tue notizie.......
Si hai ragione c'è una anomalia.

Risultato del test su i dati di esempio da te proposti ecco cosa mi da nella pagina di conferma ordine:

CASO DISPLAY PRICES WITH TAX settato a FALSE
Sub-Totale: € 55,65
Aliquota IVA (10%): € 5,57
Totale: € 61,22

CASO DISPLAY PRICES WITH TAX settato a TRUE
Sub-Totale: € 61,20
Aliquota IVA (10%): € 5,56
Totale: € 61,20

Do una occhiata al codice e eventualmente posto qui, naturalmente se qualcuno trova la soluzione è invitato a fare altrettanto.

Marzullus

Inviato: 29/05/2004, 5:02
da marcus
Ti comunico che non è necessario rifare Osc !
...probabilmente basta modificare UNA SOLA RIGA DI CODICE! 8)

Come sospettavo dovrebbe trattarsi di un banale problema di precisione nel calcolo dell'iva per cui se utilizzi due decimali per la valuta, non va bene per il calcolo dell'iva, ne devi utilizzare tre!

Vai nel file includes -> functions, ecco il codice della funzione responsabile dell calcolo della Tax:

Codice: Seleziona tutto

// Calculates Tax rounding the result
  function tep_calculate_tax($price, $tax) {
    global $currencies;

    //return tep_round($price * $tax / 100, $currencies->currencies[DEFAULT_CURRENCY]['decimal_places']); RIGA ORIGINALE COMMENTATA
 
    return tep_round($price * $tax / 100, 3);  //RIGA MODIFICATA FORZA A TRE LA PRECISIONE
  
}

Come vedi forzo a tre la precisione nel calcolo della TAX. Da notare che se usi tre decimali nel calcolo valuta cioè $currencies->currencies[DEFAULT_CURRENCY]['decimal_places'] = 3 (settabile via pannello di controllo) il problema da te segnalato non si ha, ovviamente però si hanno tutti i prezzi con tre decimali che non va bene!

Ho rifatto il test con due cifre x la valuta e forzatura a tre x la TAX, et voilà, ecco i risultati:

Display Prices with Tax FALSE

Sub-Totale: € 55,65
Aliquota IVA (10%): € 5,57
Totale: € 61,22

Display Prices with Tax TRUE

Sub-Totale: € 61,22
Aliquota IVA (10%): € 5,57
Totale: € 61,22

Per la fattura le cose DOVREBBERO funzionare automaticamente infatti viene compilata sulla base di questi dati.

Naturalmente si tratta di una soluzione che ho scovato in 10 minuti e non ti garantisco niente ... in perfetta etica open source.

Ti ringrazio comunque di aver portato all'attenzione il bug, c'è bisogno di gente attenta come te fra i tester di osc.

Buon lavoro
Marzullus

Inviato: 31/05/2004, 3:39
da marcus
Ho proposto una soluzione a questo bug nel forum Problemi Risolti:

http://www.oscommerceitalia.com/modules ... =4951#4951

Marcus Marzullus

Non credo sia così semplice

Inviato: 31/05/2004, 12:06
da HI-Lab
Caro Marcus, innanzitutto sono felice che tu mi abbia preso in considerazione...... Grazie.......
Ho creato una nuova installazione di OSCommerce, nouvo Db, Funzioni originali, ecc. Ho settato le variabili di sistema, ho modificato i decimali nel db a 2 cifre decimali, altrimenti sballavano i totali degli importi unitari, ed infine ho effettuato la modifica che mi hai suggerito tu in tep_calculate_tax. Stavo già esultando, quando, tuttavia ho notato che il totale era sempre 61.20 . Sono ritornato, allora sui miei passi, ho ripreso in considerazione la mia teoria, e te la illustro: in quasi tutte le parti di OSCommerce, quindi invoices, orders, shopping_cart.php, ecc.ecc. i totali vengono calcolati con questo criterio: (esempio estrapolato da invoices.php)
$currencies->format(tep_add_tax($order->products[$i]['final_price'], $order->products[$i]['tax']) * $order->products[$i]['qty']
Nota bene: qui sta calcolando le tasse su di un singolo articolo, che poi moltiplicherà per la quantità. quindi 4,08 * quantità=61,20.
Errato: il calcolo che io propongo è il seguente:
$currencies->format(tep_add_tax($order->products[$i]['final_price'] * $order->products[$i]['qty'], $order->products[$i]['tax'])
cioè moltiplica il valore unitario di un singolo pezzo per la quantità eppoi ne calcola le tasse sul totale.
Spero che ci sia una altra via , per evitare di sconvolgere tutto il codice............. ma ne dubito..........

Inviato: 31/05/2004, 21:40
da marcus
Non hai compreso bene il problema.

L'errore NON sta nelle formule di calcolo che sono corrette, ma nella funzione calculate TAX. E' quindi un lavoro doppiamente inutile rifarle, vuoi perchè potrebbe non risolvere il bug (vedi sotto proprio il caso da te proposto), vuoi perchè sono già correttamente implementate.

Prendiamo l'espressione da te citata:

tep_add_tax($order->products[$i]['final_price'], $order->products[$i]['tax']) * $order->products[$i]['qty']

e la tua modifica:

tep_add_tax($order->products[$i]['final_price'] * $order->products[$i]['qty'], $order->products[$i]['tax'])

Sostituiamo i valori del tuo esempio (NOTA BENE il numero delle cifre decimali per la valuta si suppone=2).

Nel caso di funzione calculate Tax corretta si hanno i seguenti valori:

(espressione originale osc)
tep_calculate_tax(3.71, 10) = 0.371
(tua modifica)
tep_calculate_tax(3.71*15, 10) = 5.565

Facendo il conto si ottiene rispettivamente:

(espressione originale osc)
tep_add_tax(3.71, 10) *15=(0.371+ 3.71) *15=61.215 round -> 61.22

(tua modifica)
tep_add_tax(3.71*15,10) = 55.65 + 5.565 =61.215 round -> 61.22

Guarda un pò è uguale ...

Per esercizio prova a fare il conto con la calculate Tax originale...
Ti anticipo che torna 61.20 nel caso dell'espressione originale osc e 61.21 nel caso della tua modifica (che quindi non è risolutiva).

Auguri
Marzullus

Inviato: 03/06/2004, 18:46
da marcus
Ho corretto alcune omissioni.

http://www.oscommerceitalia.com/modules ... =4951#4951

Marzullus

ma che stai a ddì????

Inviato: 04/06/2004, 11:06
da HI-Lab
Aooooooooo mò basta.......
1) modifica da te suggerita....... ho modificato Tep_calculate_Tax ed ho inserito la seguente riga:return tep_round($price * $tax / 100, 3);
Non mi funziona, il risultato è lo stesso errato.
2) Ho ancora modificato la funzione come dal tuo link http://www.oscommerceitalia.com/modules ... =4951#4951
ma mi risultano più errori, sembra che il codice non sia corretto.
3) infine mi dai una soluzione al problema, ma il link è sempre lo stesso.....
http://www.oscommerceitalia.com/modules ... =4951#4951

A marcus....... Nun ce pensà troppo, forse un pò de vacanza ce vorrebbe........Aooooooooo mò basta.......
1) modifica da te suggerita....... ho modificato Tep_calculate_Tax ed ho inserito la seguente riga:return tep_round($price * $tax / 100, 3);
Non mi funziona, il risultato è lo stesso errato.
2) Ho ancora modificato la funzione come dal tuo link http://www.oscommerceitalia.com/modules ... =4951#4951
ma mi risultano più errori, sembra che il codice non sia corretto.
3) infine mi dai una soluzione al problema, ma il link è sempre lo stesso.....
http://www.oscommerceitalia.com/modules ... =4951#4951

A marcus....... Nun ce pensà troppo, forse un pò de vacanza ce vorrebbe........

Re: ma che stai a ddì????

Inviato: 05/06/2004, 19:43
da marcus
Ma almeno le quattro operazioni le sai fare?

Ti ho dimostrato sopra che sei sulla strada sbagliata ma sembra che tu non sappia nemmeno contare ... ti avevo decisamente sopravalutato :lol:

Inoltre con quest'ultimo post oltre che presuntuoso e mediocre ti stai qualificando anche come un discreto cafone.

Siamo su un forum pubblico e non hai considerato che potrebbero esserci anche altre persone interessate al problema, io sto solo cercando di dare un contributo costruttivo alla risoluzione di un bug.

Attendiamo con ansia la tua nuova versione di OSC - quella rifatta :D :D - facci sapere dove la metti così evitiamo di scaricarla ! :lol:

Auguri di buon proseguimento...
Marcus Marzullus

ok chiedo venia......

Inviato: 07/06/2004, 15:27
da HI-Lab
Scusa, sicuramente non era mia intenzione offenderti..... Anche se non vedo perchè avresti dovuto farlo, non ti ho mica scritto niente di offensivo..... Non sto rifacendo osc daccapo, ma sicuramente certe parti isolate, tra cui fatture, ordini, e calcoli. Non è per essere presuntuoso, nè per mancanza di fiducia, forse per incompetenza, ma nonostante avere installato un osc vergine , adottando la tua soluzione (i 4 punti di cui sopra), non ottengo i risultati. Comunque se credi che il problema sia stato risolto, allora chiudo qua questa discussione, evidentemente sono io a sbagliare..... Ciao ed alla prossima......

i files che abbiamo modificato.....

Inviato: 08/06/2004, 12:46
da HI-Lab
Questi sono i files che abbiamo modificato perchè corrispondessero i totali degli ordini e delle fatture, sia dalla parte degli utenti, sia dalla parte degli amministratori; inoltre è stata apportata una implementazione di non poco conto, in fattura viene riportato uno specchio riepilogativo per le diverse aliquote iva presenti fra gli articoli venduti:

www.tonin.altervista.org/oscommerce.zip :x

buon lavoro........

Inviato: 09/06/2004, 11:35
da ioivi
Ho provato la contrib nel mio negozio (versione "total" by phobos) ma mi da errori sia lato admin che cliente ...

Inviato: 09/06/2004, 16:26
da Tonin
Che errori ti da di preciso?