models.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. class Meta:
  50. verbose_name_plural = "Listas de espera"
  51. def __str__(self):
  52. return f'{self.usuario.nombre} en lista de espera para {self.evento.nombre}. Solicitada plaza el: {self.fecha_apuntado}'
  53. class Noticia(models.Model):
  54. titulo = models.CharField(max_length=200)
  55. contenido = models.TextField()
  56. fecha_publicacion = models.DateTimeField(auto_now_add=True)
  57. autor = models.ForeignKey(ReyMotaUser, on_delete=models.SET_NULL, null=True)
  58. publicado = models.BooleanField(default=False)
  59. class Meta:
  60. ordering = ['-fecha_publicacion'] # Ordena por fecha de publicación, de la más reciente a la más antigua
  61. def __str__(self):
  62. return self.titulo
  63. class Lugar(models.Model):
  64. nombre = models.CharField(max_length=200)
  65. url_ubicacion = models.URLField()
  66. notas = models.TextField(blank=True, null=True)
  67. class Meta:
  68. verbose_name_plural = "Lugares"
  69. def __str__(self):
  70. return self.nombre