Come funziona internamente il processo di checkout di PrestaShop: regole del carrello, voucher e logica di calcolo delle imposte.

Una persona incassa 10 dollari, ma ne vengono detratti 9.87. Nessuno è fuori strada. Il carrello funziona esattamente come è stato progettato. Il motivo si trova semplicemente sotto la superficie.

Come funziona il processo di checkout di PrestaShop? Le domande solitamente si riconducono tutte alla stessa domanda: cosa viene eseguito e qual è la sua priorità? Una volta chiarito questo aspetto, i totali che sembravano errati si rivelano prevedibili. Di seguito viene illustrato il flusso del processo di checkout di PrestaShop, dal carrello all'ordine, utilizzando il codice effettivamente distribuito anziché quello indicato nella schermata delle impostazioni.

1.0 Cosa succede internamente durante il processo di checkout di PrestaShop

Quando si chiede al carrello di calcolare il totale, PrestaShop affida il compito a una classe di calcolo. Non una singola formula. Tre passaggi separati, sempre nello stesso ordine, ognuno dei quali si basa sul precedente.

Cosa succede internamente durante il processo di checkout di PrestaShop?

Prima le file, poi le tariffe, poi gli sconti. Riordinarle non è possibile.

Prima vengono le righe. Ogni riga ha un prezzo a sé stante, con la propria quantità e la propria aliquota IVA, dettaglio che spiega gran parte di ciò che segue. In secondo luogo vengono le spese: spedizione e confezione regalo, calcolate e volutamente tenute separate dalla merce in modo che un buono sconto possa rimuovere una senza intaccare l'altra. Gli sconti vengono applicati per ultimi.

Quella terza posizione è importante. Risolve la maggior parte dei problemi di calcolo del carrello di PrestaShop , perché un buono sconto non modifica mai i prezzi originali. Si applica a come appaiono le righe in quel momento, inclusi i codici sconto applicati in precedenza.

2.0 Come calcola PrestaShop il totale del carrello?

Il totale non è un numero che il negozio tiene da qualche parte. Viene calcolato su richiesta e il cliente specifica quali articoli desidera: solo i prodotti, solo gli sconti, tutto o tutto tranne le spese di spedizione.

È importante saperlo, perché le parti non sempre corrispondono alle aspettative. Prendiamo ad esempio la soglia per la spedizione gratuita. Richiede il totale senza spese di spedizione, ma con gli sconti già applicati. Se si pone una domanda diversa, si otterrà una risposta diversa. Entrambe sono corrette.

Quindi, un dato visualizzato sullo schermo può differire da quello riportato in un report. Nessuno dei due è errato. Potrebbero semplicemente riferirsi a parti diverse dello stesso carrello, quindi è meglio verificare quale sia la richiesta corretta prima di presumere che ci sia un problema.

3.0 Come funzionano le regole del carrello in PrestaShop?

Le regole del carrello di PrestaShop comprendono sia il codice sconto inserito dal cliente, sia gli sconti automatici applicati senza codice. Nel back-end, entrambi rappresentano lo stesso oggetto. Per questo motivo condividono la stessa schermata nel back-office e lo stesso percorso all'interno del codice.

Le regole vengono applicate una alla volta, ordinate per priorità, dalla più bassa alla più alta. La priorità è un semplice numero che si assegna alla regola. Non si limita a ordinarle: quando due regole non possono essere combinate, la priorità decide quale prevale.

Ogni regola considera il carrello così come lo ha lasciato la regola precedente. Quindi, due buoni sconto del 10% su un carrello da 100 non ne scontano 20. Il primo ne sconta 10. Il secondo sconta il 10% dei restanti 90 e il cliente risparmia 19. Comportamento standard, non un artefatto di arrotondamento.

Le condizioni in sé sono quelle che la maggior parte dei commercianti già conosce: intervalli di date, importo minimo, limiti per cliente ed esclusioni per paese, gruppo, corriere o prodotto. La documentazione ufficiale di PrestaShop sulle regole del carrello fornisce dettagli su ciascun campo, quindi non ha senso ripeterle.

4.0 Come vengono applicati i buoni sconto in PrestaShop?

È qui che il sistema di voucher di PrestaShop diventa interessante. Ed è anche da qui che deriva quel 9.87. Gli sconti percentuali e gli sconti a importo fisso vengono gestiti in modo piuttosto diverso, e la differenza non è solo estetica.

Come vengono utilizzati i buoni sconto in PrestaShop?

Una percentuale è semplice. Ogni riga perde quella percentuale di se stessa, quindi un buono sconto del 10% sconta il 10% sia il libro che le cuffie. Ogni riga mantiene la propria aliquota fiscale senza che nessuno debba preoccuparsene.

Un importo fisso non può funzionare in questo modo, perché il carrello deve prima decidere da quali righe applicare lo sconto. PrestaShop lo distribuisce proporzionalmente: ogni riga riceve una quota di sconto corrispondente alla sua quota nel carrello.

Come vengono utilizzati i buoni sconto in PrestaShop?

Il punteggio di 10 viene suddiviso in base al contributo di ciascuna linea, non in parti uguali tra le linee.

Questo è il fulcro del calcolo degli sconti PrestaShop sui buoni sconto. Ha una conseguenza importante da tenere presente. Ogni riga mantiene la propria aliquota IVA, quindi l'IVA detratta dipende dai prodotti su cui viene applicato lo sconto. Spostando gli stessi 10 articoli in un carrello con un peso diverso, l'importo totale dell'IVA cambia, anche se il cliente ha risparmiato esattamente la stessa cifra.

Anche un secondo parametro è importante. L'importo del buono è comprensivo o escluso di tasse? Questa impostazione determina da quale cifra vengono calcolate le quote: in un caso lo sconto di 10 viene calcolato sul prezzo comprensivo di tasse, nell'altro caso viene calcolato prima delle tasse, e il risparmio effettivo percepito dal cliente sarà leggermente diverso.

Come vengono utilizzati i buoni sconto in PrestaShop?

5.0 Come calcola PrestaShop l'imposta al momento del pagamento?

Il calcolo delle imposte in PrestaShop avviene riga per riga, non sull'intero carrello. Ogni prodotto ha un gruppo di regole fiscali; tale gruppo corrisponde a un'aliquota per l'indirizzo di consegna e la riga viene tassata in base a tale aliquota.

Come vengono utilizzati i buoni sconto in PrestaShop?

Il costo di un ordine è quindi la somma di diverse piccole imposte. Nessun sistema calcola "l'imposta su quest'ordine" in un'unica soluzione. Ecco perché la ripartizione delle imposte in fattura può estendersi su diverse righe, anche per un ordine di piccole dimensioni, e perché raramente tali righe si dividono in parti uguali.

Anche le spese di spedizione vengono tassate separatamente. Il sistema applica la stessa regola fiscale del corriere, non dei prodotti, e questo può trarre in inganno chi acquista prodotti con aliquota zero, ma non la consegna.

6.0 Perché PrestaShop calcola un totale del carrello diverso?

Due totali differiscono di un centesimo? La causa più comune è l'arrotondamento, e PrestaShop ti offre tre modi per correggerlo.

Perché PrestaShop calcola un totale del carrello diverso?

Gli stessi tre elementi risultano in due totali diversi a seconda di una determinata impostazione.

I prezzi vengono memorizzati internamente con sei cifre decimali. Quindi l'unica vera domanda è dove avviene l'arrotondamento. Se si arrotonda ogni articolo, il prezzo unitario viene arrotondato prima di qualsiasi moltiplicazione. Se si arrotonda ogni riga, la precisione rimane invariata fino al calcolo del totale della riga. Se si arrotonda il totale, non viene effettuato alcun arrotondamento fino alla fine.

Nessuna delle tre opzioni è sbagliata. Semplicemente non concordano. L'arrotondamento per riga è il consiglio più comune per i negozi che necessitano di fatture con importi esatti, perché mantiene la coerenza interna di ogni riga consentendo al contempo una somma corretta. Le note di PrestaShop relative al calcolo dei prezzi spiegano il ragionamento in modo più approfondito.

Prima di attribuire la colpa agli arrotondamenti, escludiamo le spiegazioni più semplici. Un totale che cambia quando cambia l'indirizzo è dovuto alle tasse, non agli arrotondamenti. Un totale che cambia quando viene aggiunto un buono sconto è dovuto al normale funzionamento del calcolo dell'ordine di PrestaShop . Le differenze dovute agli arrotondamenti sono minime. Qualsiasi differenza maggiore ha un'altra causa.

7.0 Come calcola PrestaShop sconti e tasse insieme?

Mettendo insieme le due parti: gli sconti vengono applicati dopo che l'imposta è stata calcolata per ciascuna riga, e uno sconto riduce sia la riga che la relativa imposta in modo proporzionale.

È proprio questo ordinamento a rendere prevedibile la logica di checkout di PrestaShop . L'imposta non viene mai ricalcolata da zero dopo uno sconto. Ogni riga conosce già la sua aliquota, quindi rimuovendo una parte della riga viene rimossa anche la corrispondente parte dell'imposta.

Risponde anche a una domanda frequente: perché l'importo totale delle tasse su un ordine con buoni sconto non è semplicemente l'aliquota fiscale applicata all'importo scontato? Perché quest'ultima rappresenta la somma degli importi trattenuti dalle singole righe, e tali righe partivano inizialmente da percentuali diverse.

8.0 Creazione di un modulo che offre uno sconto

Prima o poi, qualcuno chiede uno sconto che PrestaShop non può offrire automaticamente. Ad esempio, spendere più di un certo importo e ricevere un prodotto gratis. Un programma fedeltà. Qualcosa legato a un valore che il negozio non tiene traccia. La tentazione è quella di calcolare il totale da soli e sottrarlo da qualche parte a proprio piacimento.

Resisti a questa tentazione. Uno sconto applicato al di fuori del sistema di regole del carrello è invisibile a tutto ciò che accede al carrello. Il riepilogo dell'ordine non ne sarà a conoscenza, la fattura non lo mostrerà e il calcolo delle imposte sarà errato, perché le imposte vengono calcolate riga per riga e la tua sottrazione non ha mai interessato le singole righe.

Crea invece una vera e propria CartRule. Il tuo modulo decide quando applicarla e qual è il suo valore, quindi passa lo sconto a PrestaShop come una regola appropriata. Tutto il resto funzionerà senza ulteriori modifiche: il riepilogo, la fattura, l'imposta per riga, l'ordine di priorità rispetto ad altri buoni sconto.

Il modulo deve ancora rispondere a una domanda a cui il core non può rispondere: questa regola deve ancora esistere? Una regola creata dal tuo modulo dovrebbe smettere di essere applicata nel momento in cui il modulo viene disattivato. PrestaShop non lo sa, perché, dal suo punto di vista, la regola è solo un'altra riga nella tabella.

9.0 Sovrascrivere il controllo di validità in modo sicuro

Il punto di aggancio per questa funzionalità è CartRule::checkValidity() . PrestaShop lo chiama quando viene aggiunto un buono sconto e di nuovo da autoRemoveFromCart() sui carrelli che contengono già delle regole. La seconda chiamata è quella utile: se restituisce un errore, la regola viene rimossa automaticamente dal carrello.

Quindi, l'override è breve. Controlla se la regola appartiene al tuo modulo, controlla se il tuo modulo è abilitato e, in caso contrario, segnalalo. Tutto il resto va direttamente al modulo padre.

Tre cose contano nel modo in cui lo scrivi.

Contatta il genitore per ogni altro caso. Una funzione di override che risponde autonomamente, anziché delegare, ignora silenziosamente ogni controllo effettuato da PrestaShop: date, limiti di quantità, importi minimi, restrizioni relative a paese e corriere. Questi dati sono facili da dimenticare e costosi da perdere.

Agisci solo in base alle tue regole. Identificale tramite un elemento univoco e duraturo, come un prefisso di codice di proprietà del tuo modulo o un record nella tua tabella. Un'eccezione che si applica a tutte le regole dell'intero sistema rappresenta un rischio per l'intero sistema, assunto per conto di un singolo modulo.

Rispetta il flag alreadyInCart. PrestaShop ignora deliberatamente i controlli di attivazione e data per le regole già applicate, in modo che un buono valido quando il cliente lo ha utilizzato non scompaia a metà del checkout. Il tuo controllo è diverso: un modulo disabilitato dovrebbe rimuovere la regola anche da un carrello che la possiede già, ed è esattamente a questo che serve il pass di rimozione automatica.

Anche la forma del valore di ritorno deve corrispondere. Il metodo restituisce false quando una regola è valida e un messaggio quando non lo è. Se si restituisce il valore errato, chi chiama il metodo interpreterà il rifiuto come un'approvazione.

10.0 Pulizia e avvertenza sulla sovrascrittura

Disabilitando il modulo si dovrebbe anche interrompere la creazione delle regole. La funzione di override gestisce i carrelli in volo; il modulo stesso dovrebbe smettere di generare nuove regole quando è disattivato e, in caso di disinstallazione, dovrebbe disattivare o eliminare quelle create, anziché lasciarle lì a disposizione di chi le utilizzerà in seguito.

Un'avvertenza che vale la pena di chiarire. Solo una sovrascrittura di una classe può essere attiva alla volta, quindi due moduli che sovrascrivono entrambi CartRule andranno in conflitto e il secondo modulo installato di solito avrà la precedenza. Se lo sconto può essere espresso tramite condizioni già supportate dal core, utilizzate quelle ed evitate del tutto la sovrascrittura. Ricorrete alla sovrascrittura solo quando la regola dipende da qualcosa che PrestaShop non può effettivamente rilevare.

11.0 Cosa è cambiato tra PrestaShop 1.7 e 9

È utile saperlo se state seguendo una guida datata o leggendo risposte di forum scritte anni fa. Alcune informazioni sono ancora valide, altre no.

La calcolatrice descritta sopra è stata introdotta nella versione 1.7 e l'ordine dei tre passaggi non è cambiato da allora. Confrontando direttamente il codice nelle versioni 8.2 e 9, la sequenza è identica. Le regole vengono ancora applicate in ordine di priorità. Gli sconti sugli importi vengono ancora distribuiti proporzionalmente. Le tre modalità di arrotondamento si comportano ancora come hanno sempre fatto.

Ciò che è cambiato è l'aspetto esteriore. PrestaShop 9 continua la migrazione delle pagine del back-office su Symfony, quindi le schermate sono state ricostruite e alcuni campi si trovano in posizioni diverse rispetto a prima. I percorsi del menu per gli sconti sono rimasti invariati. Tuttavia, uno screenshot di un tutorial della versione 1.7 non corrisponderà a ciò che vedi sul tuo schermo: i consigli sui calcoli sono ancora validi, ma quelli su dove cliccare potrebbero non esserlo più.

12.0 Capire perché un totale sembra errato

Ecco una breve procedura per verificare i dati. Ogni passaggio esclude quelli successivi, evitando così di dover cercare un'impostazione di arrotondamento quando la risposta è uno sconto automatico che nessuno ricordava.

Partiamo dalle regole del carrello relative all'ordine. Quali si applicano e in quale ordine di priorità? La risposta più comune a questa domanda è che qualcuno si è dimenticato che una regola fosse automatica.

Quindi, verifica se il buono è una percentuale o un importo fisso. Se è un importo fisso, controlla se include o esclude le tasse. Questa semplice informazione è spesso la causa di molte segnalazioni del tipo "lo sconto non è corretto".

Successivamente, esaminate le aliquote fiscali sui singoli prodotti anziché sul totale del carrello. È perfettamente normale che aliquote diverse siano presenti nello stesso carrello. Semplicemente, rendono i calcoli più complessi di quanto non siano in realtà.

Solo in tal caso valuta l'arrotondamento. E solo se la differenza è di uno o due centesimi, poiché una differenza maggiore indica che c'è qualcos'altro che non va. Verifica la modalità di arrotondamento nelle tue impostazioni e confrontala con il totale previsto della fattura.

13.0 La versione breve

Il processo di checkout di PrestaShop è più prevedibile di quanto sembri. I prezzi e le tasse vengono calcolati per primi. Le commissioni vengono applicate in un secondo momento, gli sconti per ultimi, e ogni sconto si applica al saldo residuo dello sconto precedente.

I buoni a importo fisso vengono ripartiti tra le righe in base al peso, quindi ogni riga mantiene la propria aliquota fiscale. Le percentuali sono più semplici e incidono direttamente su ogni riga. E quando due totali differiscono di un centesimo, di solito è dovuto all'impostazione di arrotondamento e non a un errore.

Grazie per la lettura.

Se hai domande o necessiti di assistenza per le prestazioni o la migrazione del tuo sito web, i nostri esperti sono a tua disposizione. Contatta oggi stesso il team di Knowband all'indirizzo [email protected] per plugin eCommerce affidabili e personalizzati in base alle tue esigenze.

Lascia un Commento