Jump to content

Disponibilità prodotto tenendo conto anche delle quantità nei carrelli.


franco1706

Recommended Posts

Le modifiche sono state testate su Prestashop 1.6.0.11

Ho notato che Prestahop visualizza la quantità disponibile senza tener conto di eventuali prodotti messi nel proprio e/o nel carrello di altri utenti.

 

Ipotizziamo di aver 10 pezzi in magazzino di un prodotto denominato “PALLA” .

Se il cliente TIZIO mette nel proprio carrello nr 7 PALLA ed il cliente CAIO mette nel proprio carrello nr 6 PALLA il nostro Prestashop lo consente intervenendo solo al momento del pagamento negando l'operazione a colui che provvederà all'acquisto per secondo avvertendolo che un prodotto non è più disponibile.

 

Ho provato a verificare se esistesse una modalità di configurazione in admin che cambiasse il modo di calcolare la disponibilità del prodotto ma non l'ho trovata. (Se ci fosse sarei grato a chi me la indicasse).

 

Ho provato allora a scrivere due righe di codice per modificare le cose e siccome mi sembra funzionino bene le metto a disposizione di tutti.

 

1) creare in root una cartella denominata “arriba” ed inserire il file Arriba.php (vedi script alla fine)

2) con un editor aprire il file in classes/stock/StockAvaible.php

circa in riga 363

modificare la riga

Cache::store($key, (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);

in

Cache::store($key, (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query)

-Arriba::qta_product_cart($id_product));

 

3)nel file classes/Product.php

circa in riga 3074

modificare la riga

return ($qty <= StockAvailable::getQuantityAvailableByProduct($this->id, $id_product_attribute));

in

return ($qty <= StockAvailable::getQuantityAvailableByProduct($this->id, $id_product_attribute)+Arriba::qta_product_order($this->id));

 

4) Nel file controller/FrontController.php

inserire in riga 2 in pratica sotto <?php

include_once("arriba/Arriba.php");

e circa a riga 268

modificare la riga

else 

       $this->context->cart = $cart;

in

else {

$this->context->cart = $cart;

define("ARRIBA_CART",$cart->id);

}

 

Dopo queste modifiche verrà visualizzato come disponibilità del prodotto la quantità in magazzino meno la quantità nei carrelli prima di essere venduti e quando l'utente inserirà il prodotto nel carrello si terrà conto delle quantità presenti nei vari carrelli.

Ricordiamo che ogni volta che aggiorneremo la versione di Prestashop oppure modiche che alterano i file

da noi rettificati dovremo verificare se esistono ancora le nostre modifiche ed eventualmente inserirle nuovamente.

 

 

 

Una cosa da tenere presente sono i CARRELLI ABBANDONATI che potrebbero alterare la disponibilità effettiva.

E' opportuno nella parte admin-Clienti verificare se nei Carrello della spesa  ci siano carrelli abbandonati da molto tempo ed eventualmente eliminarli.

Spero che il mio lavoro sia utile ad altri.

 

Qua sotto il file Arriba.php da inserire nella cartella arriba

***Inizio file Arriba.php ***(utilizzato sul sito www.arribaarriba.it)***

 

<?php

class Arriba

{

 

public function qta_product_cart($idprod)

{

$query="select id_cart from "._DB_PREFIX_."cart where id_carrier!='0'";

$rows = Db::getInstance()->executeS("$query");

$notin='';

foreach ($rows as $r)

{

$notin.="'$r[id_cart]',";

}

$not=substr($notin,0,-1);

if($not!=''){$not=" and "._DB_PREFIX_."cart_product.id_cart not in($not)";}

$newquery="select sum("._DB_PREFIX_."cart_product.quantity) as qty

from "._DB_PREFIX_."cart_product

where "._DB_PREFIX_."cart_product.id_product='$idprod' $not";

 

return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($newquery);

}

 

public function qta_product_order($idprod)

{

$id_cart=ARRIBA_CART;

$newquery="select "._DB_PREFIX_."cart_product.quantity as qty

from "._DB_PREFIX_."cart_product

where "._DB_PREFIX_."cart_product.id_product='$idprod' and "._DB_PREFIX_."cart_product.id_cart='$id_cart'";

 

return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($newquery);

 

}

}

 

?>

 

*** fine file Arriba.php

 

 

Link to comment
Share on other sites

Grazie Luigi per l'avvertimento, siccome ne sono consapevole, l'avevo già segnalato indicando che i "carrelli abbandonati" devono essere periodicamente controllati e cancellati.

Tutt'altra cosa invece per i carrelli che rimangano sul database in quanto la transazione si è  conclusa con la vendita, questi carrelli non entrano nel conteggio per la disponibilità.

In realtà ho già scritto anche il codice per eliminare automaticamente i carrelli abbandonati dopo X giorni (a mia scelta) però siccome non l'ho ancora testato non ho ritenuto proporlo.

Ciao e grazie!!!

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