from django.core.validators import MinValueValidator,MaxValueValidator from django.db.models import Avg, Max, Min, Count, Sum from django.db import models from django.contrib.auth.models import User from datetime import datetime, time import time # Create your models here. class Bitacora(models.Model): fecha_registro = models.DateField(auto_now_add=True) usuario = models.ForeignKey( User ) activo = models.BooleanField('Activo',default=True, help_text='Estatus del registro') class Meta: abstract = True class Catalogo(Bitacora): nombre = models.CharField(max_length=150, help_text='Nombre completo') def __unicode__(self): return u"%s" % self.nombre class Meta: ordering = ['nombre'] abstract = True class Pais(Catalogo): pass def __unicode__(self): return u"%s" % self.nombre class Meta: verbose_name_plural = 'paises' class Estado(Catalogo): pais = models.ForeignKey(Pais, default = 1) pass def __unicode__(self): return u"%s" % self.nombre class Municipio(Catalogo): estado = models.ForeignKey(Estado, default = 1) pass def __unicode__(self): return u"%s" % self.nombre# + ', ' + self.estado.nombre class Criterio(Catalogo): pass def __unicode__(self): return u"%s" % self.nombre class Estatus(Catalogo): pass def __unicode__(self): return u"%s" % self.nombre class Meta: verbose_name_plural = 'estatus' class Evento(Catalogo): fecha = models.DateField(null=True, blank=True) observaciones = models.TextField(max_length=4000, blank=True, help_text='Breve descripcion del evento') #estatus = models.ForeignKey(Estatus) def __unicode__(self): return u"%s" % self.nombre class PersonaBase(Bitacora): nombre = models.CharField(max_length=150, help_text='Nombre(s)') apellido_paterno = models.CharField(max_length=150, help_text='Apellido paterno') apellido_materno = models.CharField(max_length=150, help_text='Apellido materno') direccion = models.TextField(max_length=4000, blank=True, help_text='calle, num, colonia o fraccionamiento') telefono = models.CharField(max_length=15, blank=True, help_text='numero telefonico movil o fijo') correo= models.EmailField(blank=True, help_text='nombre@dominio.ext') fecha_de_nacimiento = models.DateField(blank=True, null=True) municipio = models.ForeignKey(Municipio) def __unicode__(self): return u"%s" % self.nombre + ' ' + self.apellido_paterno + ' ' + self.apellido_materno def nombre_completo(self): return u"%s" % self.nombre + ' ' + self.apellido_paterno + ' ' + self.apellido_materno class Meta: ordering = ['nombre'] abstract = True class Rol(Catalogo): pass def __unicode__(self): return u"%s" % self.nombre class Meta: verbose_name_plural = 'roles' class Juez(User): ocupacion = models.CharField(max_length=150, help_text='Ocupacion del juez') evento = models.ForeignKey(Evento, default = 1) rol = models.ForeignKey(Rol) fecha_registro = models.DateField(auto_now_add=True) usuario = models.ForeignKey( User , related_name='usuario') activo = models.BooleanField('Activo',default=True, help_text='Estatus del registro') direccion = models.TextField(max_length=4000, blank=True, help_text='calle, num, colonia o fraccionamiento') class Meta: verbose_name_plural = 'jueces' pass class Notario(PersonaBase): evento = models.ForeignKey(Evento, default = 1) pass class Persona(PersonaBase): pass class Imagen(models.Model): municipio = models.ForeignKey(Municipio, help_text = 'Municipio') titulo = models.CharField(max_length=150, help_text='Titulo de la imagen') fecha_registro = models.DateField(auto_now_add=True) imagen = models.ImageField(upload_to = 'Galerias', verbose_name = 'Ubicacion', help_text='Archivo de la imagen') def __unicode__(self): return u"%s" % self.imagen class Meta: verbose_name_plural = 'imagenes' ordering = ['municipio'] def admin_imagen(self): return '' % self.imagen admin_imagen.allow_tags = True admin_imagen.short_description = 'imagen' # class Participante(PersonaBase): # estatura = models.DecimalField(decimal_places=2, max_digits=5, help_text='mts') # peso = models.DecimalField(decimal_places=2, max_digits=5, help_text='kgs') # medidas = models.CharField(max_length=11, help_text='___ ___ ___') # pasatiempos = models.TextField(max_length=4000, blank=True, help_text='pasatiempos') # evento = models.ForeignKey(Evento, default = 1) # estatus = models.ForeignKey(Estatus, blank=True, null=True) # padre = models.ForeignKey(Persona, related_name = 'padre') # madre = models.ForeignKey(Persona, related_name= 'madre') # escolaridad = models.CharField(max_length=250) # edad = models.IntegerField(validators=[MaxValueValidator(50),MinValueValidator(15)]) # imagen = models.ForeignKey(Imagen) # pass # def admin_imagen(self): # return '' % self.imagen # admin_imagen.allow_tags = True # admin_imagen.short_description = 'imagen' # class Meta: # ordering = ['municipio'] class Tipo_ronda(Catalogo): calificacion_maxima_criterio= models.DecimalField(decimal_places=2, max_digits=5) pass def __unicode__(self): return u"%s" % self.nombre # class Ronda(Bitacora): # #ronda_padre = models.ForeignKey(Ronda) # descripcion = models.CharField(max_length=150, help_text='Descripcion de la ronda') # tipo_ronda = models.ForeignKey(Tipo_ronda, default = 1) # participantes_entrada= models.DecimalField(decimal_places=0, max_digits=4) # participantes_salida= models.DecimalField(decimal_places=0, max_digits=4) # def __unicode__(self): # return u"%s" % self.descripcion class Comentario(Bitacora): remitente = models.ForeignKey(User, related_name= 'remitente') destinatario = models.ForeignKey(User , related_name='destinatario') fecha = models.DateTimeField(auto_now_add=True) mensaje = models.TextField(max_length=4000, blank=True, help_text='Comentarios') def __unicode__(self): return u"%s" % self.id class Ronda(Bitacora): ronda_padre = models.ForeignKey('Ronda', null=True, blank=True) descripcion = models.CharField(max_length=150, help_text='Descripcion de la ronda') tipo_ronda = models.ForeignKey(Tipo_ronda, default = 1) participantes_entrada= models.DecimalField(decimal_places=0, max_digits=4) participantes_salida= models.DecimalField(decimal_places=0, max_digits=4) evento = models.ManyToManyField(Evento) criterio = models.ManyToManyField(Criterio) puntuacion_maxima = models.IntegerField(default = 10) def __unicode__(self): return u"%s" % self.descripcion class Participante(PersonaBase): estatura = models.DecimalField(decimal_places=2, max_digits=5, help_text='mts') peso = models.DecimalField(decimal_places=2, max_digits=5, help_text='kgs') medidas = models.CharField(max_length=11, help_text='___ ___ ___') pasatiempos = models.TextField(max_length=4000, blank=True, help_text='pasatiempos') ronda = models.ForeignKey(Ronda) estatus = models.ForeignKey(Estatus, blank=True, null=True) padre = models.ForeignKey(Persona, related_name = 'padre2') madre = models.ForeignKey(Persona, related_name= 'madre2') escolaridad = models.CharField(max_length=250) edad = models.IntegerField(validators=[MaxValueValidator(50),MinValueValidator(15)]) imagen = models.ForeignKey(Imagen) pass def admin_imagen(self): return '' % self.imagen admin_imagen.allow_tags = True admin_imagen.short_description = 'imagen' def nombre_completo(self): return u"%s" % self.nombre + ' ' + self.apellido_paterno + ' ' + self.apellido_materno def puntos(self): p = Calificacion.objects.filter(participante_id=self.id, ronda_id=self.ronda).values('participante').annotate(calif=Sum('calificacion')) if p.count() == 0: return 0 else: return p[0]['calif'] def __unicode__(self): return u"%s" % self.municipio class Meta: ordering = ['municipio'] # class Ronda_evento(Bitacora): # evento = models.ForeignKey(Evento, default = 1) # ronda = models.ForeignKey(Ronda) # ejecucion = models.DecimalField(decimal_places = 0, max_digits=4) # #estatus = models.ForeignKey(Estatus) # def __unicode__(self): # return u"%s" % self.id # class Meta: # verbose_name_plural = 'ronda por evento' # class ronda_eventos_participante(Bitacora): # evento = models.ForeignKey(Evento, default = 1) # ronda = models.ForeignKey(Ronda) # participante = models.ForeignKey(Participante) # decision = models.DecimalField(decimal_places = 0, max_digits=2) # estatus = models.ForeignKey(Estatus, default = 1) # municipio = models.ForeignKey(Municipio) # def __unicode__(self): # return u"%s" % self.id # class Meta: # ordering = ['municipio'] class Calificacion(Bitacora): evento = models.ForeignKey(Evento) participante = models.ForeignKey(Participante) juez = models.ForeignKey(Juez, related_name='juez') ronda = models.ForeignKey(Ronda) criterio = models.ForeignKey(Criterio) calificacion = models.IntegerField( default=1, validators=[ MaxValueValidator(10), MinValueValidator(1) ] ) def municipio(self): return self.participante.municipio.nombre def __unicode__(self): return u"%s" % self.id class Meta: verbose_name_plural = 'calificaciones' from django import forms class CalificacionForm(forms.Form): evento = forms.IntegerField() participante = forms.IntegerField() juez = forms.IntegerField() ronda = forms.IntegerField() criterio = forms.IntegerField() calificacion = forms.IntegerField() class votacionJueces(models.Model): total = models.IntegerField() evento = models.ForeignKey(Evento) ronda = models.ForeignKey(Ronda) class Meta: unique_together = ('evento', 'ronda')