Newsgroup: it.comp.www.php
Titolo: Il concetto di "carrello degli acquisti"

Ho vinto l'appalto per la realizzazione di un gestionale per la 
logistica di una delle maggiori compagnie telefoniche. (Dopo 
l'esperienza dell'anno scorso con un progetto simile tremo un po', ma 
vado avanti lo stesso)...
Tra le tante cose che l'applicativo dovrï¿œ fare, c'ï¿œ anche la gestione 
del traffico di oggetti (non importa quali) in renting: in sostanza un 
fornitore esterno compone kit di N oggetti che invia alla sede X della 
compagnia; dopo tot giorni il kit torna al fornitore e il gioco ricomincia.
Una sorta di renting, se vogliamo, del tutto simile ad un noleggio auto, 
concettualmente.
Mi ï¿œ venuto in mente, dopo un intenso brainstorming a base di 
pappardelle al ragï¿œ di lepre e carne alla brace, che potrei configurare 
la cosa come una specie di e-commerce: il fornitore si apre la sua bella 
finestra sul magazzino degli oggetti disponibili, compone il suo bel kit 
prelevando N oggetti e mettendoli in un "carrello degli acquisti", e 
alla fine spedisce il tutto al destinatario.
Domanda: nella logica delle applicazioni di e-commerce, in previsione di 
un utilizzo in ambiente multiutente, come viene gestito il carrello 
degli acquisti?
Nel tempo che intercorre tra la selezione degli oggetti e la vera e 
propria transazione dell'ordine, gli oggetti sono in una sorta di limbo, 
perchï¿œ sono non ancora "acquistati" ma nemmeno sono piï¿œ disponibili per 
altri possibili "acquirenti", visto che li ho messi nel mio carrello in 
attesa di completare l'ordine.
Come gestisco questa cosa proceduralmente? Devo prevedere nel database 
una sorta di "area di transizione" nella quale spostare temporaneamente 
gli oggetti che vengono messi nel carrello, in attesa della conferma finale?
Questo da un lato preverrebbe un eventuale prenotazione del medesimo 
oggetto da parte di due utenti concorrenti, ma mi introdurrebbe il 
problema del destino dell'oggetto che viene incluso in un carrello e poi 
abbandonato cosï¿œ, senza il completamento della procedura di "acquisto". 
In tal caso, un bel timeout sulla sessione dovrebbe risolvere la cosa...
Oppure me ne frego completamente della cosa, perchï¿œ ï¿œ solo una mia pippa 
mentale?
Grazie per qualsiasi suggerimento! :-)
-- 
Falco Stellare
falco.ste...@gmail.com
www.deepvoid.it
(Togli il TAPPO per l'email corretta)

 Come gestisco questa cosa proceduralmente?
puoi fare un altro brainstorming fra un paio d'ore in un ristorantino 
che conosco io, nel frattempo potresti decidere su due strade:
-una ï¿œ fregarsene della "prenotazione" laddove il tuo fornitore sa' 
quanta roba ha e non fa minchiate con i suoi prodotti, questo perï¿œ porta 
il rischio che tu domani abbia casini
-la soluzione alternativa a mio avviso sarebbe quando un untente o il 
fornitore cominciano a creare il kit tu gli assegni una sessione, tale 
sessione sarï¿œ associata su una table del db ad un id degli oggetti ed il 
loro numeri facendo in modo che essi risultino prenotati (e quindi non 
contati nel totale magazzino ma solo a livello logico) ma non rimossi, 
bensï¿œ assegnati alla sessione, al completamento della sessione (quindi 
corrispondente al "acquista" provvederai effettivamente a scalare 
l'ammontare dal magazzino, in alternativa dopo il timeout della sessione 
ci sarï¿œ un check (magari direttamente nella logica del conteggio) che 
farï¿œ in modo da contare anche gli oggetti prenotati ma la cui sessione ï¿œ 
andata in timeout (e a rimuovere i dati di tale sessione)

 attesa di completare l'ordine.
La maggior parte degli e-commerce se ne fregano fino al checkout del 
carrello.
Tu segnali nel catalogo la disponibilita` (rosso=finito, giallo=<5pezzi, 
verde=>5pezzi, o simile). L'utente li mette nel carrello e, quando fa il 
checkout, lo informi se nel frattempo uno degli oggetti e` passato da 
giallo a rosso (e glielo marchi come non disponibile nel carrello) o se 
e` giallo (e gli dici implicitamente che se non clicca subito su 
"conferma" non ce l'avra`). Quando clicca su "conferma" e paga (o quello 
che e`) li togli fisicamente dalla disponibilita` a magazzino.
Bye.

 Grazie per qualsiasi suggerimento! :-)
In alcuni esempi che ho avuto l'occasione di studiare, e in un paio di
casi anche realizzato, si prevede la creazionde di una tabella
temporanea che raggruppi gli acquisti con tutti i dati necessari al
proseguimento e, come utente, salvare solo il suo IP o il cookie (un
tutti i casi un hash univoco) applicato al momento del primo acquisto.
Al momento del check-out il suo contenuto viene travasato nel vero e
proprio carrello acquisti definitivo e l'hash viene trasformato nell'ID
utente.
In caso di abbandono dell'operazione puoi scegliere se eliminare
automaticamente o no la tabella temporanea.
In questo modo hai una tabella "acquisti" sempre pulita, popolata solo
di acquisti effettivi.
Max
-- 
http://www.maxori.it
L'Arte � la capacit� di fare cose di nessun valore
e di riuscire a venderle
F. Zappa

Lato e-commerce solitamente fino al check-out l'utente potrebbe
vedersi il messaggio "Spiacenti, abbiamo appena venduto l'ultimo pezzo
dell'oggetto X".
L'oggetto viene poi segnato come 'venduto' alla creazione dell'ordine,
subito prima di passare al pagamento, e nel caso il pagamento non vada
a buon fine (o dopo un certo lasso di tempo) viene rimesso come
disponibile.
Altri invece segnano l'oggetto come "prenotato" per 5 minuti, dopo i
quali torna ad essere "libero" e viene rimosso dal carrello
dell'utente; non credo sia molto facile da realizzare, se hai 1000
visite nello stesso lasso di tempo e tutti quanti comprano più o meno
gli stessi oggetti la giacenza sarà sempre in rosso mentre in realtà
hai il magazzino pieno.. questo sistema se non ricordo male l'ho visto
fare a un sito che vendeva biglietti aerei low-cost.
Altrimenti potresti fare un ibrido (che onestamente non mi convince
molto però): per ogni oggetto mostri X oggetti in giacenza e Y in
prenotazione, dove X sono quelli che hai effettivamente, e Y quelli
che sono inseriti nei carrelli degli utenti: in questo modo l'utente
che vuole comprarlo a tutti i costi si sgaggia e lo 'frega' a quello
che è li che ci pensa da due ore :D
(mmhno lascia stare, pessima idea)

 carrello.
Quoto.
Con Amazon, ad esempio, quando passi al checkout e qualcosa � passato
a 'non disponibile', ti ripresenta il carrello con i prodotti non pi� 
disponibili
in una lista separata, per consentirti di scegliere un equivalente o di
tornare poi ad acquistarli.
-- 
ValeRyo
XT600 "Katoki Pajama" - 
http://www.slimmit.com/go.asp?7Y9
GamerTag: 
http://card.mygamercard.net/IT/nxe/ValeRyo76.png