Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-05-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
fechas en reservas

Tengo un problemilla de diseño a ver si me iluminais un poquito dado que teneis mucha mas experiencia. Estoy haciendo una aplicacion para un hotel y una de las partes es de reservas de habitaciones segun fechas pero tengo el problema que no se como se puede manejar esto de manera eficiente, nose si se habria que usar la fecha de reserva de entrada y la de salida de la habitacion y compararlas una a una con el resto de reservas y con las habitaciones a fin de displayar las habitaciones libres en esas fechas, pero nos e si esto es asi o habria otra forma.

gracias
Responder Con Cita
  #2  
Antiguo 15-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola anubis
Siempre hay muchas maneras de hacer las cosas, todo depende de que tan complicado se quiera o el tiempo que se quiera invertir en el asunto.
Para mi, la fecha de reserva debe ser solo un dato, las que valen son la entrada y salida, que es cuando la habitación no se puede usar o rentar de nuevo.
Yo haría una especie de mapa, tipo calendario y con las habitaciones incluidas, cambiaría el color de la habitación si esta ocupada o no, asi visualmente me enteraría del estado general del hotel.
Saludos
Responder Con Cita
  #3  
Antiguo 15-05-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
No se si debe a que llevo tiempo frente la PC... pero me está costando entender el sentido de la pregunta:

anubis, ¿Te refieres a la parte lógica, como llevar a cabo la distinción de entre libre/ocupado? ¿O por el ontrario... te refieres al aspecto visual?
Es decir: ¿Diseño lógico o diseño de interfaz?

Si te refieres a la lógica:
¿Como está diseñada tu tabla?
Que estás guardando?

Yo lo veo así: Mantener en una tabla, tal vez llamada reservas. Otra tabla habitación. Entre ellas veo una relación 1-M: una habitación tiene muchas reservas.
Bueno, en la tabla reserva tendría un campo FechaReserva, FechaEntrada y un campo CantidadNoches.
Este último campo es un entero... y lo que guardará es la cantidad de noches que estará reservada.

La fecha de salida se obtiene haciendo simplemente sumando la cantidad de noches a la fecha de entrada. No tiene sentido (a mi modo de ver) guardar un dato que puede ser calculado (al menos que desees llevar un historial)


Tendrías que lanzar ahora una simple consulta que busque aquellas habitaciones que no tenga asociado alguna reserva en en rango de días entre la fecha de reserva y la cantidad de dias...

No se si se entiende la idea...
Y si estoy equivocado me avisan por favor.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 15-05-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama
Hola anubis

Me imagino que el sistema que estas haciendo es para un hotel digamos pequeño ya que lo que los hoteles "grandes" generan reservas por tipo de habitación y no por ujna habitación específica.

Imagino también que estas usando un "rack" de habitaciones para que visualmente se vea el status de la habitación, yo recomedaría que tu rack tenga colores para identificar ese estado por habitación/dia.

Aquí te muestro una imagen de un sistema que hice y tal vez te de una idea.

Por otro lado, te recomiendo que uses los componente TMS Planner, que es con lo que estoy migrando este sistema y me está dando muy buenos resultados.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 16-05-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias, lo del rack si esta hecho.Tengo la pantalla principal que contiene tantos botones como habitaciones. Cuando la habitacion esta desocupada no se puede clickar, si viene un cliente, se le da de alta y se muestra en pantalla las habitaciones disponibles, se clika en un de ellas y aparece en la habitacion, el nombre del cliente en curso, la fecha actual(porque se esta dando de alta) la fecha de salida y los dias, debajo figuran las fechas tantas como dias va a estar el cliente.
Tal y como lo tiene egostar esta bien con el planning, asi puedes ver visualmente lo que hay libre, pero yo preguntaba otro metodo.
La idea era que si un cliente quiere reservar una habitacion, el sistema diria para esas fechas que habitaciones estan libres, tal y como va en internet cuando haces una reserva. Lo que nose es si seria normal rastrear para esas fechas de reserva, cada habitacion por si esta libre en esas fechas o no. Me lo veo complicado no?.

mis tablas son, a grandes rasgos, porque todavia no estan acabadas:

clientes
codcliente,nombre, apellidos, domicilio....
habitacion
codhabitacion,codcliente,fecha entrada, fecha salida,estado(ocupada o no ocupada)
reservas
codreserva,codhabitacion,codcliente,fecha entrada, fecha salida


mas que nada para que el sistema muestre las habitaciones que, para esos dias, van quedando.

gracias por vuestra paciencia
Responder Con Cita
  #6  
Antiguo 16-05-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Lo que nose es si seria normal rastrear para esas fechas de reserva, cada habitacion por si esta libre en esas fechas o no. Me lo veo complicado no?.

ummmm... un poco.

Yo lo estaba pesando en algo como una consulta SQL al estilo:

Código SQL [-]
selcciona info_habitacion
desde tabla_habitacion
que NO tenga relacion con tabla_reserva
Lo que me está costando es traducir la parte "NO tenga relacion"

Ahora con respecto a tus tablas debo decirte que debes hacerle una limpieza ya que hay información duplicada. La tabla Habitación no tiene porqué tener registrado las fechas... ya que esta información está disponible en la tabla Reservas. Además, en la tabla reserva debes colocar la fecha de reserva.
Y como dije en el post anterior, no veo sentido guardar la fecha de salida si esta puede calcularse mediante la suma de los dias a la fecha de entrada.

Por ahora, esto es donde creo que puedo darte alguna idea...

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 16-05-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias delphius.
La cuestion de almacenar tambien la fecha de entrada y la de salida o bien la fecha de entrada y los dias de estancia en la habitacion me sirve para tener registro de todas las habitaciones, la tabla reserva esta relacionada con las futuras reservas, pero como dices quiza parezca complicado, pero creo que se necesitan esas fechas no?
Responder Con Cita
  #8  
Antiguo 16-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por Delphius
Lo que me está costando es traducir la parte "NO tenga relacion"
Una consulta (aunque no muy eficiente por aquello del IN) sería:

Código SQL [-]
select codhabitacion 
from habitacion
where codhabitacion not in 
   ( select codhabitacion from reservas
     where fechaentrada between :fini and :ffin)
   and estado = 'libre'
Dado un periodo de fechas, mostraría las habitaciones libres y sin reservas previas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 16-05-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Muchas gracias Lepe por refrezcarme la memoria. Me había olvidado de la sentencia IN. De que se necesitaba dos select eso lo tenía claro.

Tengo que reconocer que no sabía que la sentencia IN sea ineficiente. Pero si es que no son muchos los registros con que maneja anubis, no creo que sea tan afectado.

Ahora, tengo una duda. ¿No debería compararse también con la fecha de reserva? Porque por lo que tengo entendido, cuando uno solicita una reserva es cuando se debe determinar cuales están libres:

Código SQL [-]
select codhabitacion 
from habitacion
where codhabitacion not in 
   ( select codhabitacion from reservas
     where (fechaentrada between :fini and :ffin) 
   and fechareserva <= :ahora)
   and estado = 'libre'

El :ahora se trataría de la fecha actual (pasada como parámetro). Lo que yo ando considerando es que no sólo se restrinja a un rango sino que no haya una reserva previa a las fechas.
No se.. en una de esas estoy confundido.
Y el tema me está interesando... y me dejó "picando".

Al igual que anubis, voy a ver cuales son las opciones... creo y considero que yo también necesito aprender.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 16-05-2007 a las 20:48:40.
Responder Con Cita
  #10  
Antiguo 17-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
para la fecha actual, que mejor que pedirla al servidor con "Getdate()" (según he visto para MySql y con CURRENT_DATE para Firebird.

Código SQL [-]
select getdate() from una_tabla_cualquiera

o bien
Código SQL [-]
 where fecha between GetDate() -1 and GetDate()
Eso si habría que probarlo, intuyo que se le puede restar un día por la cara.... pero no lo puedo afirmar.

Por supuesto la sql que puse era una "prueba" y quizás tenga más restricciones, cuantas más mejor, porque así quedará menos registros para incluir con el operador IN

Otros compañeros han demostrado que la cláusula IN se puede evitar creando la consulta de otra forma... personalmente reconozco que es más intuitivo el operador IN y siempre se me viene a la mente. Si alguien sabe evitarlo, bienvenida sea la respuesta.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 17-05-2007
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
os lo agradezco, voy a intentar probar esos inventos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calendario Reservas fmatias Varios 3 02-01-2007 12:21:30
Fechas en SQL KAYO SQL 1 01-11-2006 21:16:06
Una de fechas ...? kia Firebird e Interbase 7 11-10-2006 21:05:10
Las horribles fechas, control de fechas Huer OOP 6 18-10-2005 19:11:49
Fechas jmlifi Varios 2 11-04-2005 16:40:22


La franja horaria es GMT +2. Ahora son las 05:07:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi