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')