Su richiesta di un cliente ci siamo trovati ad analizzare un comportamente “anomalo” nel calcolo delle spese di spedizione, o meglio nell’applicazione della spedizione gratuita raggiunto un certo totale ordine, quando viene anche utilizzato un buono sconto da un cliente.
In caso noi impostiamo in Magento la spedizione gratuita per ordini con importo superiore a X questo valore viene calcolato prima che vengano applicati eventuali buoni sconto da parte dei nostri clienti.
Facciamo un esempio pratico:
Abbiamo impostato su Magento che la spedizione degli ordini è gratuita per importi uguali o superiori a 50€.Il nostro visitatore mette nel carrello merce per un importo di 50,10€ o superiore.
Il sistema correttamente gli riconosce la possibilità di avere la spedizione gratuita come da nostra impostazione.
A questo punto il nostro cliente applica un buono sconto che gli abbiamo inviato del 10% sul totale ordine, per cui l’importo che si trova a pagare è di 45€.
Magento continua a calcolare il diritto alla spedizione gratuita sul totale base del carrello del cliente e non tenendo conto del totale scontato, quindi anche con 45€ si troverà ad avere la spedizione gratuita. Stesso accadrebbe se l.importo fosse anche di 60€ e il cliente avesse un buono sconto del 20%.
Questo in alcuni settori con margini non proprio ampi può generare delle riduzioni considerevoli sul profitto se non proprio delle perdite.
Come possiamo risolvere questo “problema” ? Anche se non si può parlare di problema o errore ma solo di un metodo di ragionamento diverso su cui si sono basati per calcolare il diritto o meno alla spedizione gratis.
Per cambiare il metodo di calcolo dobbiamo andare a modificare il file /app/code/core/Mage/Shipping/Model/Carrier/Freeshipping.php , o altro modulo che utilizziamo per calcolare le spese gratuite.
Come sempre meglio NON MODIFICHIAMO MAI file nella cartella core, ma copiamo il file tenendo lo stesso percorso in local quindi /app/code/local/Mage/Shipping/Model/Carrier dove copieremo il nostro Freeshipping.php modificato.
la modifica è molto semplice, andiamo a sostituire verso la riga 71 (la riga può cambiare da versione a versione)
$request->getBaseSubtotalInclTax
con
$request->getPackageValueWithDiscount
In questo modo noi diremo a Magento di calcolare l’importo del carrello da confrontare con il minimo di spesa per la spedizione gratuita non tenendo conto del totale complessivo di tasse ma senza lo sconto, bensì solo il valore del totale compreso lo sconto.
Dovremo fare attenzione però a modificare l’importo richiesto per la spedizione grauita nel backend di Magento in Sistema -> Configurazione -> Vendite -> Metodi di spedizione -> Spedizione Gratuita per inserire il valore al netto dell’IVA.