![]() |
![]() |
|
| Condividi questo contenuto nei Social Network: |
|
Tweet |
|
|
|
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito. |
||||
|
|||||||||
|
|
LinkBack | Strumenti di discussione |
|
|
#1 (permalink) |
|
Consiglio Direttivo
|
[Script] Calendario prenotazioni
Ciao bella gente.
Siccome è un po' che mi sbatto per creare una web-application che mi permetta di gestire le prenotazioni di una struttura alberghiera, ho pensato di pubblicare il calendario prenotazioni. I requisiti sono: - Modulo PHP 5 > - Un database MySQL - Conoscenza di PHP Ovviamente con il solo script c'è da farci poco davvero, bisognerà costruirgli attorno tutta una struttura di file e tabelle del Db per ottenere ciò che serve. Ma partiamo dall'idea... il mio punto di partenza è stato questo script di PaTer, che poi ho modificato per le mie esigenze, ma ha di certo rappresentato la scintilla per partire con il progetto che sto portando avanti. Volendo ottenere un planner mensile di tutte le stanze, e che in questo planner mi si visualizzino, in maniera ben evidente, le date in cui le stanze son occupate, quali sono i giorni in cui ho una partenza la mattina ed un arrivo il pomeriggio, magari per la stessa stanza, cosa molto importante è anche riconoscere a vista se le prenotazione inserita è già stata confermata o per il momento è solo una richiesta disponibilità a cui non è stato dato un seguito, quindi una stanza potenzialmente ancora libera per quel periodo, di lavoro da fare ce n'è molto e per prima cosa il calendario va sicuramente sviluppato in orizzontale, una riga per stanza. Siccome non mi basta... ( ) ...voglio pure che quando mi posiziono su un periodo prenotato mi si visualizzino almeno i dati salienti della prenotazione, chi è il cliente e quali sono le date di check-in e check-out, cliccando invece sulla prenotazione come minimo devo vedere tutti i dettagli della stessa. ![]() Di soluzioni per ottenere tutto questo ce ne saranno a bizzeffe ma mi sono posto il problema di appesantire il meno possibile il server...perché un planner che per caricare ci sta 10 secondi... non si può vedere... ![]() La soluzione che ho trovato è quella di, ovviamente, ridurre al minimo le query e limitare al massimo l'uso delle funzioni. Per fare tutto questo devo quindi incamerare i dati raccolti in maniera che poi li possa riutilizzare in maniera semplice e senza ricorrere ad ulteriori query o funzioni. E cosa meglio degli array? ![]() Con i giusti cicli e controlli sembrerebbe che la soluzione trovata funzioni. Query: Un primo ciclo serve a creare le righe, quindi le stanze, per ogni stanza poi recupero le prenotazioni che incidono nel mese visualizzato e per ogni prenotazione mi recupero l'anagrafica del cliente. Non ho bisogno di altri dati, questi già mi avanzano. ![]() Array: Per gli array, anche per un ulteriore utilizzo futuro, ho pensato di dare un indice numerico che sia uguale al timestamp del giorno, così da essere certamente univoco e utilizzabile per qualsivoglia altro sviluppo, la progressione degli indici quindi viene data dall'incremento in secondi di 1 giorno, ovvero 86400. Unico problema sorge nei mesi con il cambio ora legale/ora solare, problema che comunque si risolve con la giusta verifica sommando o sottraendo 3600 secondi (1 ora) dalla data recuperata dal Db, in quanto quella sarà già adeguata al cambio orario una volta inserita, mentre incrementando i valori indice di 86400 secondi per ogni giorno ovviamente ci si troverebbe ad avere degli indici sfalsati di 3600 secondi raggiunta la data del cambio orario. Il risultato di tutto questo sarà un planner mensile, che mi permette di muovermi tra i vari mesi, dove in verde ci saranno i giorni liberi, la distinzione tra stato "prenotato" e "confermato" che è data nel primo dal colore giallo ed il secondo dal colore rosso, e, cosa molto importante, le date di inizio e fine soggiorno saranno di un sfumatura più chiara per evidenziare l'inizio e fine dello stesso. Qualora in pari giornata si avesse un check-out ed un check-in questi giorni saranno marcati da un colore più forte (viola per i confermati e arancione per i prenotati). Posizionandosi sui periodi prenotati mi visualizzerà come title del link "Prenotazione Mario Rossi dal 01/01/2010 al 06/01/2010" e cliccando si accederà alla pagina prenotazione dove recuperato l'id della prenotazione si può ovviamente sviluppare un po' di tutto e di tutto un po'. ![]() Ma buttiamo giù un po' di codice, già parzialmente commentato: Codice PHP:
![]() Quì potrete valutare una demo (cercate il mese di Aprile 2010) e quì scaricare lo script completo come la demo. Per quanto concerne le tabelle è inutile che posti la struttura da me creata perché sarebbe inutilizzabile dato che fa parte di una applicazione più complessa. Sommariamente, per l'utilizzo di questo script, ci devono essere:
![]() Spero vi sia utile, attendo comunque Vs. eventuali appunti o suggerimenti. ![]() Ciao!! ![]() |
|
__________________
Qui, Quo, Qua Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO? Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!! Ultima modifica di Samyorn : 01-11-11 23:35. Motivo: Aggiunta nota. |
|
|
|
|
|
|
|
|
#2 (permalink) |
|
User
Data di registrazione: May 2010
Messaggi: 56
|
Script molto utile e interessante, ottimo come base di partenza per poi sviluppare applicazioni più complesse... L'unica cosa è che segnala una serie di "Notice: Undefined variable" per quanto riguarda le variabili $in e $out, ma nonostante ciò funziona bene...
|
|
__________________
www.agwebdesign.it |
|
|
|
|
|
|
#3 (permalink) |
|
Consiglio Direttivo
|
Ciao ale87440 e grazie del commento
![]() Sicuramente si trova degli indici vuoti e quindi esce fuori i Notice. Per eliminarli o diminuisci il livello di Notice o con un paio di modifiche fai in modo di valorizzare comunque ogni indice che verrà analizzato dallo script. ![]() ![]() |
|
__________________
Qui, Quo, Qua Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO? Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!! |
|
|
|
|
|
|
#4 (permalink) |
|
User Newbie
Data di registrazione: Jul 2010
Messaggi: 1
|
Ciao, sono da poco iscritto e volevo complimentarmi col lavoro che hai proposto.
L'ho provato subito ma riscontro dei problemi e non so se sono miei errori... Nel DB i campi "data_inizio_periodo" e "data_fine_periodo" di che tipo devono essere? Timestamp? Dichiarandoli entrambi come timestamp se metto come "data_inizio_periodo" la data odierna e come "data_fine_periodo" sempre la data odierna o anche un altro giorno seguente non mi visualizza nessuna prenotazione!! Puoi darmi qualche suggerimento? Grazie in anticipo e complimenti comunque! |
|
|
|
|
|
#5 (permalink) |
|
User
Data di registrazione: May 2010
Messaggi: 56
|
Io ho semplicemente messo INT(11) come campo delle date, così da non avere alcun problema...
Ciao... |
|
__________________
www.agwebdesign.it |
|
|
|
|
|
|
#6 (permalink) |
|
Consiglio Direttivo
|
Salve ragazzi e benvenuto a koqu nel Forum GT.
![]() Si, tutti i campi data sono gestiti in formato timestamp, esattamente come ale87440 utilizzo dei campi INT. Per il tuo caso ho appena testato e funziona, guarda la demo: stanza 9 mese Aprile. ![]() |
|
__________________
Qui, Quo, Qua Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO? Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!! |
|
|
|
|
|
|
#7 (permalink) |
|
User Newbie
Data di registrazione: Sep 2010
Messaggi: 2
|
Ciao, ottimo lavoro, ho un problemino quando l'inizio della prenotazione è l'ultimo giorno del mese viene visualizzato libero mentre gli altri giorni della prenotazione sono corretti, cosa mi sfugge?
Saluti. |
|
Ultima modifica di Samyorn : 30-09-10 21:13. Motivo: Maiuscole e punteggiatura. ;) |
|
|
|
|
|
|
#8 (permalink) |
|
Consiglio Direttivo
|
Ciao nerkyos e benvenuto nel Forum GT.
![]() Ho appena fatto dei test e a me non da problemi. Ti direi di verificare il valore del timestamp salvato come data inizio. Come puoi vedere anche nella demo ci sono vari casi di data inizio uguale all'ultimo giorno del mese e funzionano sia come prenotazione che come confermato. Facci sapere. ![]() |
|
__________________
Qui, Quo, Qua Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO? Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!! |
|
|
|
|
|
|
#10 (permalink) |
|
Consiglio Direttivo
|
Bene così, buon lavoro anche a te.
![]() |
|
__________________
Qui, Quo, Qua Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO? Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!! |
|
|
|
|
|
|
#11 (permalink) |
|
User Newbie
Data di registrazione: Jan 2011
Ubicazione: palermo
Messaggi: 1
|
Graz<ie
Ti ringrazio per l'ottimo lavoro....da diverso tempo stavo elaborando una soluzione per fare questo planning per il mio software e sembra calato apposta sulle mie tabelle.
Io ho fatto solo una modifica alla sql per gestire sia gli ospiti in casa che le prenotazioni facendo una union ed ho messo una funzione di modifca al campo in e out avendo messo d'appertutto nel mio db i campi come date e non timestamp. Ve la invio...chissa che non serva a qualcuno!!! SELECT * FROM ( ( SELECT `arrivi`.`id_ospiti` , `arrivi`.`id_prenotazioni` , `arrivi`.`id_arrivo` , `arrivi`.`stato` , `arrivi`.`tipo_camera0` , `arrivi`.`id_camera` , `arrivi`.`id_per_tipo_ospite` , `arrivi`.`tipo_ospite` , UNIX_TIMESTAMP( `arrivi`.`check_in` ) AS `check_in` , UNIX_TIMESTAMP( `arrivi`.`check_out` ) AS `check_out` , `arrivi`.`n_giorni` FROM `arrivi` WHERE `arrivi`.`id_camera` ='".$row_stanze['id_stanza']."' ) UNION ( SELECT `prenotazioni`.`id_ospiti` , `prenotazioni`.`id_prenotazioni` , `prenotazioni`.`id_arrivo` , `prenotazioni`.`stato` , `prenotazioni`.`tipo_camera0` , `prenotazioni`.`id_camera` , `prenotazioni`.`id_per_tipo_ospite` , `prenotazioni`.`tipo_ospite` , UNIX_TIMESTAMP( `prenotazioni`.`check_in` ) AS `check_in` , UNIX_TIMESTAMP( `prenotazioni`.`check_out` ) AS `check_out` , `prenotazioni`.`n_giorni` FROM `prenotazioni` WHERE `prenotazioni`.`id_camera` ='".$row_stanze['id_stanza']."' ) ) AS Tabella WHERE ((check_in < '$startmonth' AND check_out >= '$startmonth') OR (check_in >='$startmonth' AND check_out <= '$stopmonth') OR (check_in <= '$stopmonth' AND check_out > '$stopmonth')) GROUP BY Tabella.id_per_tipo_ospite"; |
|
|
|
|
|
#12 (permalink) |
|
Consiglio Direttivo
|
Grazie Aleami77.
![]() Sarà sicuramente utile. ![]() |
|
__________________
Qui, Quo, Qua Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO? Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!! |
|
|
|
|
|
|
#13 (permalink) |
|
User Newbie
Data di registrazione: Sep 2009
Messaggi: 1
|
mesi in italiano
$mesi["January"]="Gennaio";
$mesi["February"]="Febbraio"; $mesi["March"]="Marzo"; $mesi["April"]="Aprile"; $mesi["May"]="Maggio"; $mesi["June"]="Giugno"; $mesi["July"]="Luglio"; $mesi["August"]="Agosto"; $mesi["September"]="Settembre"; $mesi["October"]="Ottobre"; $mesi["November"]="Novembre"; $mesi["December"]="Dicembre"; $dati['mese_text'] = $mesi[date("F", $time)]; a qualcuno magari poteva servire avere i mesi in italiano. Chi sa dirmi perchè la prima data prenotata mi si evidenzia mentre l'ultima rimane uguale alle date di mezzo? Inoltre vorrei poter cliccare sul calendario direttamente per poter inserire la prenotazione. QUalche idea? grazie |
|
|
|
|
|
#15 (permalink) |
|
User Newbie
Data di registrazione: Apr 2011
Ubicazione: Firenze
Messaggi: 1
|
Calendario prenotazioni
buon dì,
sono contentissimo di aver trovato il tuo script , molto utile per il mo progetto, l'unico problema che riscontro è che non mi cambia i colori nelle celle quando inserisco le date datain/dataout. Campo mysql(tipo datatime), Es in 2011-08-20 out 2011-08-18, nel form delle prenotazioni le celle mi rimangono tutte verdi, è cone se non riconoscesse le date inserite sarei molto grato se mi potessi aiutare a risolverlo. ![]() complimenti per lo script |
|
|
|
| Tags: calendario, php, prenotazioni, script |
| Strumenti di discussione | |
|
|