Jump to content

Peso massimo corriere


freuxbang

Recommended Posts

Salve, ho voluto provare oggi la funzione del peso massimo che può gestire il corriere e purtroppo non penso funzioni corrette.

Ho impostato il peso massimo che può gestire il corriere a 2kg e ho inserito un peso di 0.1kg ad un prodotto.

Se provo ad inserire al carrello 100 prodotti con il peso di 0.1kg (100 x 0.1kg = 10kg), quindi un peso totale di 10kg al carrello, è possibile selezionare il corriere e procedere al pagamento, cosa che purtroppo non dovrebbe fare. 


Ho fatto la prova ad impostare il peso del prodotto a 3kg e in questo modo aggiungendo anche un prodotto al carrello il corriere non viene visualizzato.

Praticamente prestashop non tiene conto della quantità del prodotto e qualsiasi quantità si inserisce il carrello pesa 0.1 kg.

Posso anche mettere una quantità di 1000 prodotti al carrello, secondo prestashop ho un carrello che pesa 0.1kg, perchè quel prodotto pesa 0.1kg.

La versione che utilizzo è Prestashop 1.5.6.2 

Spero di ricevere un aiuto.

Grazie.

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

Ciao,

c'è un solo range di peso 0-2kg oppure tanti? Se sono tanti, i limiti devono coincidere (0-1;1-2) altrimenti il calcolo non funziona correttamente.
Vedi se questa discussione può esserti utile: https://www.prestashop.com/forums/topic/229394-weight-based-shipping-not-disabling-carrier-when-adding-items-goes-over-carrier-limit/

Buona giornata,
Federica

Link to comment
Share on other sites

Ti ringrazio per la risposta Federica, ma è possibile che non sia stato chiaro.
Questo corriere può spedire un pacco massimo di 2kg , quindi ho impostato un limite di peso utilizzando solo un range, da 0 a 2kg e impostando che il corriere viene visualizzato solo se il peso complessivo del carrello  è inferiore o uguale a 2kg.

Se inserisco un prodotto che pesa 3kg, il controllo funziona bene, il corriere non spunta e viene visualizzato il messaggio, che non c'è nessun corriere disponibile.
Mentre se inserisco un prodotto inferiore a 2kg il corriere viene visualizzato correttamente.
Fino a qui funziona tutto correttamente, infatti il problema nasce quando inserisco più unità dello stesso prodotto di 0,1kg, come se nella funziona non venisse applicata la quantità al peso: 0,1kg x 100 = 10kg. Il carrello in teoria dovrebbe pesare più di 2kg e quindi il corriere non dovrebbe spuntare, invece purtroppo viene visualizzato.
Questo perchè per prestashop il carrello pesa sempre 0,1 kg nonostante ci siano 100 unità di quel prodotto.

Pensavo di intervenire nella funzione del calcolo del peso se non esiste un impostazione da selezionare dal backoffice.
 

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

Ciao,

ti consiglio di dare un'occhiata alla funzione getTotalWeight nella classe Cart (dovrebbe essere così anche in PS 1.5) che è quella che fa il calcolo del peso totale degli articoli nel carrello. Al limite prova a farti stampare il peso totale del carrello nel riassunto dell'ordine prima di fare delle modifiche (questo thread può darti una mano: https://www.prestashop.com/forums/topic/45353-solved-how-to-show-weight-of-the-order-in-shopping-cart/).

Non ricordo se in PS 1.5 si possono fare gli override delle classi, se si possono fare te lo consiglio vivamente al posto di modificare direttamente il file della classe.

Buona giornata,
Federica

Link to comment
Share on other sites

  • 2 weeks later...

Dopo essermi accertato che fosse un bug di prestashop e non avendo trovato nessuno che ne parlasse ho dovuto lavorare direttamente sul codice.
I file interessati sono:  carrier.php e cart.php

In cart.php ho modificato la funzione getPackageList, aggiungendo la variabile quantità di prodotti presenti  sul carrello.  $product['cart_quantity']

riga 1715 classes/cart.php

$product['carrier_list'] = array_merge($product['carrier_list'], Carrier::getAvailableCarrierList(new Product($product['id_product']), $id_war, $product['id_address_delivery'], null, $this,$product['cart_quantity']));


Mentre su carrier.php ho richiamato la variabile quantità e l'ho inserita nel controllo del peso massimo che si trova all'interno della funzione  getAvailableCarrierList() .
Da cosi:

foreach ($carrier_list as $key => $id_carrier)
			{
				$carrier = new Carrier($id_carrier);
				if (($carrier->max_width > 0 && $carrier->max_width < $product->width)
					|| ($carrier->max_height > 0 && $carrier->max_height < $product->height)
					|| ($carrier->max_depth > 0 && $carrier->max_depth < $product->depth)
					|| ($carrier->max_weight > 0 && $carrier->max_weight < $product->weight ))
					unset($carrier_list[$key]);
			}

a cosi:
 

foreach ($carrier_list as $key => $id_carrier)
			{
				$carrier = new Carrier($id_carrier);
				if (($carrier->max_width > 0 && $carrier->max_width < $product->width)
					|| ($carrier->max_height > 0 && $carrier->max_height < $product->height)
					|| ($carrier->max_depth > 0 && $carrier->max_depth < $product->depth)
					|| ($carrier->max_weight > 0 && $carrier->max_weight < ($product->weight * $product_quantity) ))
					unset($carrier_list[$key]);
			}


Come puoi notare il $product->weight non veniva moltiplicato per la quantità.
Adesso funziona correttamente

Grazie Federica

Link to comment
Share on other sites

Ho notato che il peso aggiuntivo che viene inserito negli attributi viene ignorato durante il controllo. 
Quindi se io inserisco un prodotto di 1kg al carrello con un attributo che aumenta il peso di un altro kg e il peso massimo che il corriere può trasportare è di 2, quando viene effettuato il controllo non calcola cosi (peso prodotto + peso attributo) * quantità ma calcola sempre(peso prodotto * quantità).

 

 

Link to comment
Share on other sites

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...