models.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from django.db import models
  2. from reymotausers.models import ReyMotaUser
  3. from django.utils import timezone
  4. class Evento(models.Model):
  5. nombre = models.CharField(max_length=100)
  6. descripcion = models.TextField()
  7. fecha = models.DateField()
  8. hora = models.TimeField(default=timezone.now) # Nuevo campo para la hora
  9. plazas_disponibles = models.PositiveIntegerField()
  10. publicado = models.BooleanField(default=False) # Nuevo campo para la publicación
  11. url_imagen = models.TextField(blank=True, null=True) # Campo para la URL de la imagen
  12. para_parejas = models.BooleanField(default=False) # 🔹 nuevo campo para parejas
  13. lugar = models.ForeignKey('Lugar', on_delete=models.CASCADE, null=True, blank=True)
  14. # lugar = models.ForeignKey('Lugar', on_delete=models.CASCADE)
  15. precio = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)
  16. def __str__(self):
  17. return self.nombre
  18. def plazas_restantes(self):
  19. return self.plazas_disponibles - self.reservas.count()
  20. class Reserva(models.Model):
  21. evento = models.ForeignKey(
  22. Evento, related_name="reservas", on_delete=models.CASCADE)
  23. usuario = models.ForeignKey(ReyMotaUser, on_delete=models.CASCADE)
  24. acompanante = models.ForeignKey(
  25. ReyMotaUser,
  26. on_delete=models.SET_NULL,
  27. null=True,
  28. blank=True,
  29. related_name='reservas_como_acompanante'
  30. )
  31. fecha_reserva = models.DateTimeField(auto_now_add=True)
  32. iniciador = models.BooleanField(default=True) # 🔹 nuevo campo para parejas
  33. # añadir un campo para indicar quién inició la reserva. De este modo luego en detalle_evento mostraremos solo una vez a cada pareja.
  34. def __str__(self):
  35. if self.acompanante:
  36. return f"{self.usuario.nombre} (con {self.acompanante.nombre}) - {self.evento.nombre} - reserva realizada a las {self.fecha_reserva}"
  37. return f'{self.usuario.nombre} - {self.evento.nombre} - reserva realizada a las {self.fecha_reserva}'
  38. class ListaEspera(models.Model):
  39. evento = models.ForeignKey(Evento, on_delete=models.CASCADE, related_name="lista_espera")
  40. usuario = models.ForeignKey(ReyMotaUser, on_delete=models.CASCADE)
  41. acompanante = models.ForeignKey(
  42. ReyMotaUser,
  43. on_delete=models.SET_NULL,
  44. null=True,
  45. blank=True,
  46. related_name='lista_espera_como_acompanante'
  47. )
  48. fecha_apuntado = models.DateTimeField(auto_now_add=True)
  49. def __str__(self):
  50. return f'{self.usuario.nombre} en lista de espera para {self.evento.nombre}. Solicitada plaza el: {self.fecha_apuntado}'
  51. class Noticia(models.Model):
  52. titulo = models.CharField(max_length=200)
  53. contenido = models.TextField()
  54. fecha_publicacion = models.DateTimeField(auto_now_add=True)
  55. autor = models.ForeignKey(ReyMotaUser, on_delete=models.SET_NULL, null=True)
  56. publicado = models.BooleanField(default=False)
  57. class Meta:
  58. ordering = ['-fecha_publicacion'] # Ordena por fecha de publicación, de la más reciente a la más antigua
  59. def __str__(self):
  60. return self.titulo
  61. class Lugar(models.Model):
  62. nombre = models.CharField(max_length=200)
  63. url_ubicacion = models.URLField()
  64. def __str__(self):
  65. return self.nombre