Jump to content
marcoberri

[RISOLTO] Gestione voucher 1.4

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!

Share this post


Link to post
Share on other sites

Ciao,
piuttosto che modificarlo, apri un bug a prestashop se ritieni ci sia un problema così tutta la comunity gioverà della risoluzione del problema.

Share this post


Link to post
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.

Share this post


Link to post
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

Share this post


Link to post
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??

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Credo che servi per chi vende a rivenditori e non utenti finali, quindi vuole far vedere i prezzi iva esclusa.


Si si, fino a qui ci sono.
Le mie perplessità sono sul fatto che lo sconto è calcolato sul lordo.

Share this post


Link to post
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?

Share this post


Link to post
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.

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites

ricapitolando? non c'ho capito una mazza... :-D
il codice è corretto o è sbagliato?? =D
ahahahahahah

Share this post


Link to post
Share on other sites

Da come mi ha detto il mio commercialista è corretto in entrambi i modi, quindi sta a te decidere come fare.

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More