errato di calcolo dei prezzi ivati
Moderatore: mod Generali
errato di calcolo dei prezzi ivati
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......
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......
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
Probabilmente è un problema di precisione, configura osc per lavorare con più decimali.
Se non sbaglio c'è il parametro Tax Decimals Places in configuration.
Marzullus
Nuovo pacchetto osCommercePRO (osCPRO) + Modulo Interfacciamento Gestionale Danea.
Visita la demo: http://oscpro.oscommercedev.com/index.php
Visita la demo: http://oscpro.oscommercedev.com/index.php
Sei sicuro?
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.......
Attendo tue notizie.......
Re: Sei sicuro?
Si hai ragione c'è una anomalia.HI-Lab ha scritto:Scusa.... non voglio sembrarti ostinato e presuntuoso,
....
Attendo tue notizie.......
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
Nuovo pacchetto osCommercePRO (osCPRO) + Modulo Interfacciamento Gestionale Danea.
Visita la demo: http://oscpro.oscommercedev.com/index.php
Visita la demo: http://oscpro.oscommercedev.com/index.php
Ti comunico che non è necessario rifare Osc !
...probabilmente basta modificare UNA SOLA RIGA DI CODICE!
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:
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
...probabilmente basta modificare UNA SOLA RIGA DI CODICE!
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
}
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
Nuovo pacchetto osCommercePRO (osCPRO) + Modulo Interfacciamento Gestionale Danea.
Visita la demo: http://oscpro.oscommercedev.com/index.php
Visita la demo: http://oscpro.oscommercedev.com/index.php
Ho proposto una soluzione a questo bug nel forum Problemi Risolti:
http://www.oscommerceitalia.com/modules ... =4951#4951
Marcus Marzullus
http://www.oscommerceitalia.com/modules ... =4951#4951
Marcus Marzullus
Nuovo pacchetto osCommercePRO (osCPRO) + Modulo Interfacciamento Gestionale Danea.
Visita la demo: http://oscpro.oscommercedev.com/index.php
Visita la demo: http://oscpro.oscommercedev.com/index.php
Non credo sia così semplice
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..........
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..........
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
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
Nuovo pacchetto osCommercePRO (osCPRO) + Modulo Interfacciamento Gestionale Danea.
Visita la demo: http://oscpro.oscommercedev.com/index.php
Visita la demo: http://oscpro.oscommercedev.com/index.php
Nuovo pacchetto osCommercePRO (osCPRO) + Modulo Interfacciamento Gestionale Danea.
Visita la demo: http://oscpro.oscommercedev.com/index.php
Visita la demo: http://oscpro.oscommercedev.com/index.php
ma che stai a ddì????
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........
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ì????
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
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 - facci sapere dove la metti così evitiamo di scaricarla !
Auguri di buon proseguimento...
Marcus Marzullus
Ti ho dimostrato sopra che sei sulla strada sbagliata ma sembra che tu non sappia nemmeno contare ... ti avevo decisamente sopravalutato
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 - facci sapere dove la metti così evitiamo di scaricarla !
Auguri di buon proseguimento...
Marcus Marzullus
Nuovo pacchetto osCommercePRO (osCPRO) + Modulo Interfacciamento Gestionale Danea.
Visita la demo: http://oscpro.oscommercedev.com/index.php
Visita la demo: http://oscpro.oscommercedev.com/index.php
ok chiedo venia......
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.....
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
buon lavoro........
www.tonin.altervista.org/oscommerce.zip
buon lavoro........