Jump to content

[RISOLTO] Gestione voucher 1.4


marcoberri

Recommended Posts

Salve a tutti,

ho notato che nella classe Cart.php il calcolo dei valori del Voucher viene eseguito nel seguente modo:
Lo sconto calcolato sul totale dei prodotti lordi. Questo sconto viene sottratto al totale dell'ordine compreso di tasse e spese di spedizione.

vi torna questa cosa?

..in realtà il voucher dovrebbe essere calcolato come sopra ma sottratto solo al netto dei prodotti.

...devo mettere mano a Cart.php nella parte di modifica degli sconti...

qualche suggerimento/commento?

grazie!

Link to comment
Share on other sites

sto risolvendo la cosa che non risulta banale, per ora sono riuscito a far funzionare il voucher nella casistica dello sconto percentuale, nei primi giorni a partire dal lunedì concluderò il tutto e vi posto il risultato (lo mando anche al team di prestahop). grazie e buon fine settimana.

Link to comment
Share on other sites

Vi allego la funzione contenuta nel file Cart.php modificata in modo da calcolare i voucher in base al totale dei prodotti senza iva escluse tutte le altre spese.

inoltre nel file Discount.php bisogna far sempre restituire lo sconto senza tasse applicate

modificando questo

       foreach ($products AS $product)
           if (count($categories) AND Product::idIsOnCategoryId($product['id_product'], $categories))
                   $totalAmount += $useTax ? $product['total_wt'] : $product['total'];



con

       foreach ($products AS $product)
           if (count($categories) AND Product::idIsOnCategoryId($product['id_product'], $categories))
               $totalAmount += $product['total'];
               //$totalAmount += $useTax ? $product['total_wt'] : $product['total'];



naturalmente bisogna anche modificare la stampa della fattura che sto ancora modificando... che fatica...

ciao a tutti e buona serata.
ciao a tutti!

voucher.txt

Link to comment
Share on other sites

ragazzi io invece ho un problema con voucher e prestashop 1.4.

in poche parole voglio regalare un prodotto ma l'utente mi deve solo pagare le spedizioni, così ho pensato di creare un voucher che sconta il 100% del prezzo del prodotto che ho messo singolarmente in una categoria nascosta, quindi quel voucher è attivo solo per quella categoria nascosta, però se nel carrello il cliente incrementa le quantità otterrà sempre lo sconto del 100% su anche 100000 quantità eheheh (così vado in fallimento), io voglio limitarla solo ad 1 quantità!

al massimo nn c'è un opzioni per definire la quantità massima acquistabile nelle opzioni del prodotto??

Link to comment
Share on other sites

  • 5 weeks later...

naturalmente bisogna anche modificare la stampa della fattura che sto ancora modificando... che fatica...

ciao a tutti e buona serata.
ciao a tutti!


Grazie della soluzione, comunque da quello che ho visto non è un vero e proprio bug ma una scelta dei creatori.
Infatti se andiamo in Clienti --> Gruppi --> Edita gruppo e selezioniamo la voce "Visualizza tasse escluse" il calcolo avviene sul prezzo netto.

Per il mercato italiano la trovo un pò assurda questa cosa (almeno per la mia esperienza), magari all'estero si adatta meglio.
Link to comment
Share on other sites

  • 2 weeks later...

Buonasera, io ho provato le modifiche, ma non sembrano funzionare, poi mi sembra che il metodo getOrderTotal() (presente nel file voucher.txt) sia molto diverso rispetto a quello originale.
Inoltre mi trovo daccordo con juanjump nel senseo che se si mostrano i prezzi iva inclusa, tutto sembra funzionare.

Quindi molto probabilmente non funziona solo quando vengono mostrati i prezzi iva esclusa, nel senso che sia l'IVA sia l'importo del buono vengono calcolate sul prezzo netto, a meno che nel caso di buoni bisogna fare così, questo lo chiederò al commercialista.


Per il mercato italiano la trovo un pò assurda questa cosa (almeno per la mia esperienza), magari all'estero si adatta meglio.


Credo che servi per chi vende a rivenditori e non utenti finali, quindi vuole far vedere i prezzi iva esclusa.
Link to comment
Share on other sites

In realtà lo sconto viene calcolato sul netto così come l'IVA, es.
Articolo A costo 100, IVA 20% totale = 120 €,
Ora applichiamo lo sconto del 10%, lo sconto viene calcolato su 100 (quindi il netto) e risulta essere 10 €, quindi ricapitolanto:
100 (netto) + 20 (VA) - 10 (sconto) = 110
mentre in realtà dovrebbe essere:
100 (netto) - 10 (sconto) = 90 ora va calcolata l'IVA su 90 che risulta essere 18,quindi totale = 108 €

Il mio dubbio è che forse mostrando i prezzi iva esclusa, il calcolo non è come ho supporto io, ma come fa il prestashop, anche se logicamente dovrebbe essere come suppongo io, nel senso che l'iva va calcolata sul costo al netto dello sconto.
Comunque chiederò al commercialista.

Ultima cosa che faccio notare, a me sembra che il problema ci sia solo con sconti in percentuale, nel caso di sconto fisso (es. 10€) funziona sia per i prezzi mostrati con iva sia per i prezzi mostrati senza iva. Confermate?

Link to comment
Share on other sites

Se i ragionamenti fatti sono giusti, credo di aver trovato il problema.
Nella classe Cart metodo getProducts(), ad un certo punto c'è questo if else

if ($this->_taxCalculationMethod == PS_TAX_EXC) {
               $row ['price'] = Product::getPriceStatic ( ( int ) $row ['id_product'], false, isset ( $row ['id_product_attribute'] ) ? ( int ) ($row ['id_product_attribute']) : NULL, 2, NULL, false, true, ( int ) ($row ['cart_quantity']), false, (( int ) ($this->id_customer) ? ( int ) ($this->id_customer) : NULL), ( int ) ($this->id), (( int ) ($this->{Configuration::get ( 'PS_TAX_ADDRESS_TYPE' )}) ? ( int ) ($this->{Configuration::get ( 'PS_TAX_ADDRESS_TYPE' )}) : NULL), $specificPriceOutput ); // Here taxes are computed only once the quantity has been applied to the product price
               $row ['price_wt'] = Product::getPriceStatic ( ( int ) $row ['id_product'], true, isset ( $row ['id_product_attribute'] ) ? ( int ) ($row ['id_product_attribute']) : NULL, 2, NULL, false, true, ( int ) ($row ['cart_quantity']), false, (( int ) ($this->id_customer) ? ( int ) ($this->id_customer) : NULL), ( int ) ($this->id), (( int ) ($this->{Configuration::get ( 'PS_TAX_ADDRESS_TYPE' )}) ? ( int ) ($this->{Configuration::get ( 'PS_TAX_ADDRESS_TYPE' )}) : NULL) );
               $tax_rate = Tax::getProductTaxRate(( int ) $id_product,( int ) ($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}));
               $row ['total_wt'] = Tools::ps_round ( $row ['price'] * ( float ) $row ['cart_quantity'] * (1 + ( float ) ($tax_rate) / 100), 2 );
               $row ['total'] = $row ['price'] * ( int ) ($row ['cart_quantity']);
           } else {
               $row ['price'] = Product::getPriceStatic ( ( int ) $row ['id_product'], false, ( int ) $row ['id_product_attribute'], 6, NULL, false, true, $row ['cart_quantity'], false, (( int ) ($this->id_customer) ? ( int ) ($this->id_customer) : NULL), ( int ) ($this->id), (( int ) ($this->{Configuration::get ( 'PS_TAX_ADDRESS_TYPE' )}) ? ( int ) ($this->{Configuration::get ( 'PS_TAX_ADDRESS_TYPE' )}) : NULL), $specificPriceOutput );
               $row ['price_wt'] = Product::getPriceStatic ( ( int ) $row ['id_product'], true, ( int ) $row ['id_product_attribute'], 2, NULL, false, true, $row ['cart_quantity'], false, (( int ) ($this->id_customer) ? ( int ) ($this->id_customer) : NULL), ( int ) ($this->id), (( int ) ($this->{Configuration::get ( 'PS_TAX_ADDRESS_TYPE' )}) ? ( int ) ($this->{Configuration::get ( 'PS_TAX_ADDRESS_TYPE' )}) : NULL) );

               /* In case when you use QuantityDiscount, getPriceStatic() can be return more of 2 decimals */
               $row ['price_wt'] = Tools::ps_round ( $row ['price_wt'], 2 );
               $row ['total_wt'] = $row ['price_wt'] * ( int ) ($row ['cart_quantity']);
               $row ['total'] = Tools::ps_round ( $row ['price'] * ( int ) ($row ['cart_quantity']), 2 );
           }


nell'if c'è questa istruzione:

$tax_rate = Tax::getProductTaxRate(( int ) $id_product,( int ) ($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}));


In pratica viene presa l'aliquota relativa al prodotto, ma quando non viene passato $id_product (parametro del metodo), l'aliquota risulta essere 0 (perchè la variabile è null), quindi sostituendo l'istruzione incriminata con la seguente:

$tax_rate = Tax::getProductTaxRate ( ( int ) ($id_product ? $id_product : $row ['id_product']), ( int ) ($this->{Configuration::get ( 'PS_TAX_ADDRESS_TYPE' )}) );


sembra funzionare, così facendo, se $id_product non è valorizzato, viene preso l'id dell'articolo dall'array $row.

Ovviamente bisogna ancora vedere cosa succede in fattura.

Aspetto riscontri.

Link to comment
Share on other sites

Buongiorno, ho esposto la questione al commercialista e mi ha detto che il calcolo non è proprio sbagliato, nel senso che funziona in entrambi i casi, quindi:
Articolo A costo 100, IVA 20% totale = 120 €

Caso 1)
sconto del 10%, su 100 (quindi il netto) = 10 €,
100 (netto) + 20 (VA) – 10 (sconto) = 110

Caso 2)
sconto del 10%, su 120 (quindi il lordo) = 12 €,
100 (netto) + 20 (VA) – 12 (sconto) = 108

L'IVA viene calcolata bene in entrmabi i casi, quindi funziona.

Nel primo caso l'utente paga 2 € di IVA in più, quindi ho apportato la modifica in modo che il calcolo viene eseguito com enel secondo caso in modo che l'utente risparmi i 2 € di IVA.

Link to comment
Share on other sites

  • 2 years later...

rispolvero questo post in quanto non trovo una soluzione riguardo all'ultima versione, anche provando i metodi descritti credo che i codici siamo cambiati.

grazie a chi mi volesse illuminare.

la fattura con il buono scorpora l'iva dal totale prodotto iva inclusa meno il buono, ossia

89.90 -

32.90 =

57.00 iva scorporata 9.89

ma in relta dovrebbe lasciare i conteggi come la fattura senza buoni e scalare il buono alla fine e poi fare il totale fattura.

è possibile trattare il buono come una spedizione?grazie

image-fattureerrore-2494_51DF95CC.jpg

Edited by universo (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...