Newsgroup: it.comp.www.php
Titolo: Magazzino - Calcolo  Disponibilità.

Salve,
sto realizzando un programma per un magazzino premetto che deve essere una 
cosa banale non proprio un magazzino
online altrimenti dovevo gestire anche il discorso carichi ,scarichi etc.
volevo dare agli utente la possibilità di sapere se i prodotti da loro 
scelti erano o no presenti in magazzino.
Mi si presenta un problema, vi mostro un tipico scenario.
dunque l'utente gira nel catalogo selziona il prodotto imposta una quantità
 e lo mette nel carrello
a questo punto il sistema dovrebbe farli sapere se il  prodotto è 
disponibile o no.
ecco pensavo a come implementare questo meccanismo, il problema principale e 
che essendo un app. web
il contensto è altamente concorrente.
Quindi mi chiedo come gestirlo ?
io ho pensato una cosa del tipo:
Durante l'analisi dei prodotti nel carrello il sistema confronta la quantità 
richiesta con quella presente nel magazzino
(un campo nella basedati relativo all'articolo in questione) se quella 
richiesta è minore tutto ok se maggiore avvisa
il navigatore.
il problema si presenta perchè durante tutto i periodo in cui l'utente 
naviga e seleziona i vari prodotti il sistema potrebbe mostrarli
che sono in magazzzino ma se nel fra tempo un altro utente compra 100000 e 
conferma (solo allora la quantità viene scalata)
gli articoli protrebbero non essere più disponibili (immediatamente) e 
l'utente se ne accorgerebbe solo all'arrivo nella sua casella di
della mail di riepilogo dell'ordine.
avete qualche idea?
p.s
ho pensato una soluzione a questo problema mettendo un flag (Un check) della 
pagina del carrello, con scritto una cosa del genere
"Se sono presenti articoli non presenti in magazzino non completare 
l'ordine."
Che ne pensate  ?

Che ne pensate  ?
CHe nel momento in cui si conferma l'ordine se le q.tà varano segnali
la cosa in quel momento indicando se un articolo non c'è proprio, c'è
in q.tà minore o è disponibile nella q.tà richiesta. A questo punto il
clinete deciderà cosa fare secondo le opzioni che gli fornira
(conferma, annulla).
La cosa non risolve comuqnue se nel mentre un altro cliente è nella
medesima situazione e conferma prima del primo cliente.
-- 
Stefano Aglietti - StallonIt on IRCnet - ICQ#: 2078431
Email: 
ste...@people.it
 - 
ste...@despammed.com
BlogPage: 
http://www.40annibuttati.it/
PGP keys available on keyservers  (cripted & signed PGP mail welcome)



Devi fare una scelta...io farei così: ad ogni aggiunta di un articolo nel
carrello, viene ricontrollato ogni singolo articolo. Accanto alla
quantità selezionata dall'utente metterei un "quantità disponibile",
magari colorandola in rosso se è < della quantità scelta dall'utente. In
tal modo almeno sai al momento se ti hanno fregato sul tempo oppure no.
Inoltre metterei un avviso "quantità in esaurimento - sbrigati" (magari
non proprio in questi termini) sugli articoli in esaurimento, e alla fine
la possibilità di scindere l'ordine in 2 parti: articoli disponibili al
momento e articoli non disponibili, in modo che si può creare l'ordine
solo degli articoli disponibili e lasciare gli altri in sospeso...


www.danilobottone.com
 (.it)
I computer sono inutili. Ti sanno dare solo risposte. (Picasso) 

 riaggiungerla se non vine completato l'ordine. Ciao
E se uno (come faccio io :-) ) mette tutti gli articoli che gli
interessano nel carrello e poi alla fine li toglie quasi tutti lasciando
solo quelli che effettivamente compra? Potresti perdere dei potenziali
clienti...secondo me è meglio che uno rimanga fregato piuttosto che non
si venda un articolo no? :-)


www.danilobottone.com
 (.it)
Anche se sei abile, mostrati inabile; anche se sei capace mostrati
incapace. (Sun Tzu) 

 Ciao
credo anche io...d'altronde come ho scritto su, è una questione di
scelta...se stai vendendo un articolo che costa 300 euro, non ti conviene
perdere l'acquirente...se costa 5 euro, magari puoi permetterti di
perderlo a favore i una navigazione più confortevole per l'utente...anche
se in caso di articoli poco costosi non credo ci sia il problema del
riapprovvigionamento


www.danilobottone.com
 (.it)
Solo due cose sono infinite, l'universo e la stupidità umana, e non
sono sicuro della prima. (Einstein) 



Cioè? cosa intendi per real time?


qui il problema e chr se chiude il browser viene chiuso,
non ho modo di ripristinare i valori....
---

 avete qualche idea?
L'unica cosa certa è che non devi considerare la merce sui carrelli, se
non vuoi far imbestialire il titolare per le mancate vendite.
Per il resto, il calcolo della disponibilità dipende da come funziona
quella attività. Se gli ordini vengono evasi fifo appena la merce è
disponibile (situazione più semplice) il calcolo si fa con una semplice
sottrazione, esistenza - quantità impegnata negli ordini in essere.
Se invece gli ordini vengono evasi secondo una data di consegna
stabilita dall'utente (tipico del B2B, immagina un cantiere che ordina
dei pavimenti e te li chiede con consegna fra due mesi, se glie li
consegni domattina te li tirano dietro) il calcolo si complica e mica di
poco.  Entrano in gioco tutta una serie di variabili come gli ordini
fornitore, il lead time del fornitore, gli acquisti su commessa, etc...
insomma, un'analisi non da poco.
Il consiglio che ti do è di non cercare di essere più realista del re e
di non essere troppo pessimista nei calcoli, perchè va bene dare una
disponibilità attendibile all'utente, ma ricorda che non devi far
perdere le vendite al negozio! :-)

 
Puoi risolvere i tuoi problemi con delle transazioni (TRANSACTIONS) in
MySql: al momento della conferma dell'ordine, la transazione fa i vari
aggiornamenti e controlla che il campo contenente la quantità
dell'articolo sia maggiore o uguale a 0 dopo la transazione. Se questo
succede, dai il COMMIT e la transazione va a buon fine, altrimenti dai
il ROLLBACK e informi l'utente di quel che succede.
-- 
Stéphane Bisinger
Webmas... well...

 solo degli articoli disponibili e lasciare gli altri in sospeso...
Io per adesso ho fatto la scelta di mettere nel carrello anche la 
disponibilità attuale. (Reale)
---


www.danilobottone.com
 (.it)


 
Il quoting, please!!
Le transazioni non ti bastano? Che cosa ti manca?


 IMHO.
MySQL ti protegge tranquillamente da situazione in cui due clienti
passano un ordine contemporaneamente.
E' quel "quasi" che ti frega.


www.danilobottone.com
 (.it)
Tu fai qualcosa e poi arriva qualcun altro e lo fa meglio. (Picasso) 

 sono stato impreciso.
A me risulta che le transazioni esistano in MySql dalla versione
3.23.17, ma puň darsi che mi sbagli...
http://dev.mysql.com/doc/refman/4.1/en/commit.html


 Quindi mi chiedo come gestirlo ?
potresti usare una tabella di transito delle quantità accumulate dagli 
ordini via web del tipo:
id_prodotto | quantità | timestamp
quando l'utente sceglie di mettere nel carrello 5 articoli con id=100, 
oltre a controllare se esistono i 5 articoli in magazzino, inserisci in 
questa tabella-transito:
100 | 5 | ora_corrente
quando un altro utente vuole inserire lo stesso articolo, dalla quantità 
disponibile nella tabella degli articoli sottrai le quantità già 
"prenotate" dai carrelli degli altri utenti.
Ovviamente se un cliente chiude il browser senza confermare il carrello 
o eseguire il logout, devi prevedere un timeout (10/15 minuti) per 
eliminare le righe "vecchie" di questa tabella di transito, o in 
alternativa quando devi controllarle selezioni solo le più recenti (<15 
minuti dall'ora corrente)
Se usi motori del tipo innoDB con lock a livello di riga diventa tutto 
transition-safe e sei a posto
E' solo una idea
ciao
Alesi_27

 ha scritto nel messaggio 
news:4359086c$0$13354$4faf...@reader2.news.tin.it...

in effetti soluzione ne stanno nascendo tante per adesso ho optato per la 
più semplice
(il prodotto non come dire di grandi livelli)
Comunque ci sarà anche un test quindi nel qual caso tornero indietro sui 
miei passi.
grazie ciao


www.danilobottone.com
 (.it)
Solo due cose sono infinite, l'universo e la stupiditą umana, e non


 Cmq mea culpa ... per il real time va bene anche mysql. Ciao
Solo con InnoDB, e spesso gli host provider non lo supportano...