Enzo Yair

Finalización de logica admin

@@ -15,6 +15,7 @@ class EventoForms(forms.ModelForm): @@ -15,6 +15,7 @@ class EventoForms(forms.ModelForm):
15 'categoria', 15 'categoria',
16 'fecha_inicio', 16 'fecha_inicio',
17 'hora_inicio', 17 'hora_inicio',
  18 + 'fecha_final',
18 'hora_fin', 19 'hora_fin',
19 'fechas', 20 'fechas',
20 'descripcion', 21 'descripcion',
@@ -38,5 +39,34 @@ class EventoForms(forms.ModelForm): @@ -38,5 +39,34 @@ class EventoForms(forms.ModelForm):
38 raise ValidationError( 39 raise ValidationError(
39 _('La dirección no es un enlace válido de Google Maps.') 40 _('La dirección no es un enlace válido de Google Maps.')
40 ) 41 )
41 -  
42 return direccion 42 return direccion
  43 +
  44 + def clean_fecha_final(self):
  45 + fecha_inicio = self.cleaned_data.get('fecha_inicio')
  46 + fecha_final = self.cleaned_data.get('fecha_final')
  47 +
  48 + if fecha_inicio and fecha_final:
  49 + if fecha_final < fecha_inicio:
  50 + raise ValidationError(
  51 + _('La fecha final no puede ser anterior a la fecha de inicio.'
  52 + )
  53 + )
  54 +
  55 + return fecha_final
  56 +
  57 + def clean_hora_fin(self):
  58 + clean = super().clean()
  59 +
  60 + fecha_inicio = clean.get('fecha_inicio')
  61 + hora_inicio = clean.get('hora_inicio')
  62 + fecha_final = clean.get('fecha_final')
  63 + hora_fin = clean.get('hora_fin')
  64 +
  65 + if fecha_inicio and fecha_final and fecha_final == fecha_inicio:
  66 + if hora_inicio and hora_fin and hora_fin <= hora_inicio:
  67 + raise ValidationError(
  68 + _('La hora de finalización debe ser posterior a la hora de inicio.'
  69 + )
  70 + )
  71 +
  72 + return hora_fin
1 -# Generated by Django 4.2.9 on 2024-10-01 15:20 1 +# Generated by Django 4.2.9 on 2024-10-01 21:42
2 2
3 import django.core.validators 3 import django.core.validators
4 from django.db import migrations, models 4 from django.db import migrations, models
@@ -29,16 +29,17 @@ class Migration(migrations.Migration): @@ -29,16 +29,17 @@ class Migration(migrations.Migration):
29 fields=[ 29 fields=[
30 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 30 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
31 ('fecha_inicio', models.DateField(verbose_name='Fecha de inicio del evento')), 31 ('fecha_inicio', models.DateField(verbose_name='Fecha de inicio del evento')),
32 - ('hora_inicio', models.TimeField(blank=True, verbose_name='Hora de apertura')),  
33 - ('hora_fin', models.TimeField(blank=True, verbose_name='Hora de cierre')), 32 + ('hora_inicio', models.TimeField(verbose_name='Hora de apertura')),
  33 + ('fecha_final', models.DateField(verbose_name='Fecha de cierre del evento')),
  34 + ('hora_fin', models.TimeField(verbose_name='Hora de cierre')),
34 ('titulo', models.CharField(max_length=350)), 35 ('titulo', models.CharField(max_length=350)),
35 ('categoria', models.SlugField(max_length=150)), 36 ('categoria', models.SlugField(max_length=150)),
36 - ('direccion', models.URLField(max_length=150, verbose_name='ubicación')), 37 + ('direccion', models.URLField(help_text='Ingrese la url obtenida por google maps', max_length=150, verbose_name='Ubicación del evento')),
37 ('descripcion', models.TextField(verbose_name='Descripción')), 38 ('descripcion', models.TextField(verbose_name='Descripción')),
38 ('url', models.URLField(blank=True, max_length=300, verbose_name='Dirección Web')), 39 ('url', models.URLField(blank=True, max_length=300, verbose_name='Dirección Web')),
39 ('imagen', models.ImageField(blank=True, upload_to='static/eventos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['jpg', 'png'])], verbose_name='Banner promocional')), 40 ('imagen', models.ImageField(blank=True, upload_to='static/eventos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['jpg', 'png'])], verbose_name='Banner promocional')),
40 ('dependencia', models.ManyToManyField(blank=True, related_name='evento_dependencia', to='organismo.dependencia')), 41 ('dependencia', models.ManyToManyField(blank=True, related_name='evento_dependencia', to='organismo.dependencia')),
41 - ('fechas', models.ManyToManyField(related_name='evento_fechas', to='evento.fechaevento', verbose_name='Días disponibles')), 42 + ('fechas', models.ManyToManyField(blank=True, related_name='evento_fechas', to='evento.fechaevento', verbose_name='Días disponibles')),
42 ('organismo', models.ManyToManyField(blank=True, related_name='evento_organismo', to='organismo.organismo')), 43 ('organismo', models.ManyToManyField(blank=True, related_name='evento_organismo', to='organismo.organismo')),
43 ], 44 ],
44 options={ 45 options={
@@ -24,17 +24,22 @@ class Evento(models.Model): @@ -24,17 +24,22 @@ class Evento(models.Model):
24 blank=True 24 blank=True
25 ) 25 )
26 fecha_inicio = models.DateField(verbose_name='Fecha de inicio del evento') 26 fecha_inicio = models.DateField(verbose_name='Fecha de inicio del evento')
27 - hora_inicio = models.TimeField(blank=True, verbose_name='Hora de apertura')  
28 - hora_fin = models.TimeField(blank=True, verbose_name='Hora de cierre') 27 + hora_inicio = models.TimeField(blank=False, verbose_name='Hora de apertura')
  28 + fecha_final = models.DateField(verbose_name='Fecha de cierre del evento')
  29 + hora_fin = models.TimeField(blank=False, verbose_name='Hora de cierre')
29 fechas = models.ManyToManyField( 30 fechas = models.ManyToManyField(
30 'FechaEvento', 31 'FechaEvento',
31 related_name='evento_fechas', 32 related_name='evento_fechas',
32 - blank=False, 33 + blank=True,
33 verbose_name='Días disponibles', 34 verbose_name='Días disponibles',
34 ) 35 )
35 titulo = models.CharField(max_length=350, null=False) 36 titulo = models.CharField(max_length=350, null=False)
36 categoria = models.SlugField(max_length=150, null=False) 37 categoria = models.SlugField(max_length=150, null=False)
37 - direccion = models.URLField(max_length=150, verbose_name='ubicación') 38 + direccion = models.URLField(
  39 + max_length=150,
  40 + verbose_name='Ubicación del evento',
  41 + help_text='Ingrese la url obtenida por google maps'
  42 + )
38 descripcion = models.TextField(null=False, verbose_name='Descripción') 43 descripcion = models.TextField(null=False, verbose_name='Descripción')
39 url = models.URLField( 44 url = models.URLField(
40 max_length=300, 45 max_length=300,