Risolvere il problema dei coupon di Virtuemart in Joomla 1.5
A chi ha un sito di commercio elettronico fatto con Joomla e Virtuemart può capitare di regalare dei coupon, dei buoni sconto assoluti o in percentuale, magari per aderire a delle campagne promozionali offerte da grossi siti specializzati.
Il percorso fatto dal compratore è sempre lo stesso: una volta scelti i suoi acquisti va sul carrello inserisce il codice del coupon e prosegue alla cassa dove sceglie indirizzo metodo di spedizione metodo di pagamento e in caso di Paypal o carta di credito viene rediretto all’apposito sito dove gli viene chiesto di versare il totale.
Il problema è articolato in due parti, una delle quali può sfuggire ma la seconda certamente no.
All’inizio quando viene caricato il carrello appare in fondo il totale dell’IVA applicata agli oggetti, e solo un occhio attento si accorge che la cifra non è quella corretta.
Andando aventi col check out (link cassa) questa cifra è calcolata giustamente, per cui è difficile accorgersi dell’anomalia, anche perché se chi compra vede il totale esatto, non sta a preoccuparsi di calcolare l’IVA, che è già contenuta nel totale.
L’anomalia grave si ripresenta in seguito, quando si è dirottati sui siti di pagamento online (tipo Paypal o carta di credito), in quanto il totale che viene chiesto di saldare è leggermente inferiore a quello vero, che appare nel carrello del sito.
Visto che sta pagando di meno, il cliente può pure decidere di non segnalare la cosa, che interessa invece il venditore che si vede recapitare meno soldi. E visto che è il sistema a sbagliare, non ci sono alternative che accettare l’ulteriore sconto apportato al dovuto. Ulteriore perché ricordo che questo problema viene fuori esclusivamente quando si usano i coupon di buoni sconto.
Virtuemart può essere configurato in due modi, uno che calcoli lo sconto prime delle “tasse” e l’altro dopo. Se si prova ad attivare la funzione di calcolarlo dopo, si accorge che la cifra di IVA si corregge, mentre è il totale stavolta a essere completamente sbagliato, molto minore di quello effettivo da pagare!
Questi dipendono da un paio di errori fatti nel file che fornisce al template i dati dinamici che riempiranno il carrello. In un caso non viene tenuto conto del fatto che il calcolo della cifra dell’IVA vada fatto non sul totale bensì sul totale meno il valore del coupon, e nell’altro, mentre questo calcolo viene fatto bene, al totale viene sottratto di nuovo il valore del coupon, diminuendo la quota da pagare.
Intervenendo in due punti su quello script php si risolve il problema.
Rimane adesso da capire come mai anche se il carrello sembra fare bene i conti poi le cifre trasmesse a Paypal o carta di credito sono sbagliate.
Un rapido calcolo fa capire che è ancora in parte colpa del coupon: in pratica al totale globale viene sottratta prima la parte dell’IVA senza tenere conto del coupon, e dopo ci viene riaggiunta la cifra, stavolta tenendo conto del coupon, il che porta ad aggiungere una quantità minore di quanto si era tolto.
In realtà il problema sta che viene prima sottratta la cifra IVA sbagliata, maggiore del necessario, e dopo riaggiunta la cifra giusta.
Anche un occhio al database conferma la cosa: le cifre di subtotale inserite sono sbagliate, e per questo la trasmissione dei dati online è falsata.
Per correggere questo problema bisogna intervenire sul calcolo del subtotale e andare a riaggiungere a esso la quota sottratta per errore, corrispondente al valore IVA del coupon (che in ogni caso non andava citato).
Purtroppo parlare di certi argomenti senza poter mettere direttamente le mani sul codice è difficile, e forse lo è ancora di più capire cosa va fatto in concreto per rimediare, anche se si tratta di poche righe di codice da correggere e aggiungere.
Diciamo che ho voluto fare luce sulle cause di questo errore, se vi necessita altro lasciate un commento qui o scrivete all’indirizzo che trovate nei contatti sotto.
Lascia un commento