#encoding:utf-8 from django.db import models from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm import re # Create your models here. def es_numero(dato): """ validador numerico """ # en un bloque aislamos la conversion a entero # y regresamos en un boleano si se lo gra o no se logra try: int(dato) return True except ValueError: return False def asigna_icono(extension): r = None if extension != '': r = extension if r == 'BMP' or r == 'GIF': r = '%s icol-image-1' % (extension) elif r == 'JPG' or r == 'JPEG' : r = '%s icol-images' % (extension) elif r == 'PDF': r = '%s icol-doc-pdf' % (extension) elif r == 'XLS' or r == 'DOC' or r == 'XLSX' or r == 'DOCX' : r = '%s icol-doc-offlice' % (extension) elif r == 'ZIP' or r == 'RAR' : r = '%s icol-compress' % (extension) elif r == 'TXT': r = '%s icol-doc-text-image' % (extension) else: r = '%s icol-stop' % (extension) return r SEXO = ( ('M', 'MASCULINO'), ('F', 'FEMENINO'),) PRESENTADO = ( ('V', 'VIVO'), ('M', 'MUERTO'),) PRIORIDAD = ( ('A', 'Alta'), ('M', 'Medio'), ('B', 'Baja'),) ESCOLARIDAD = ( ('MA', 'Maternal'), ('PR', 'Preescolar'), ('PM', 'Primaria'), ('SE', 'Secundaria'), ('MS', 'Media Superior'),) TIPO = ( ('Original', 'Original'), ('Copia', 'Copia'),) TURNO = ( ('M', 'Matutino'), ('V', 'Vespertino'),) def valida_numeros(dato): if not es_numero(dato): raise ValidationError(u'"%s" no es un numero.' % dato) def valida_cadenas(dato): if re.match('[a-zA-ZáéíóúÁÉÍÓÚ]+',dato) == None: raise ValidationError(u'"%s" no es una cadena.' % dato) # Create your models here. class Estado(models.Model): nombre = models.CharField('Estado', max_length=100, validators=[valida_cadenas]) def __unicode__(self): return '%s' % self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre'] class Municipio(models.Model): estado = models.ForeignKey(Estado, verbose_name="Estado") nombre = models.CharField('Municipio', max_length=100, validators=[valida_cadenas]) def __unicode__(self): return '%s' % self.nombre class Meta: ordering = ['nombre'] class Localidad(models.Model): municipio = models.ForeignKey(Municipio, verbose_name="Municipio") nombre = models.CharField('Localidad', max_length=100, validators=[valida_cadenas]) def __unicode__(self): return '%s ' % self.nombre class Meta: ordering = ['nombre'] class Domicilio(models.Model): localidad = models.ForeignKey(Localidad, verbose_name="Localidad",null=True,blank=True) calle = models.CharField('Calle', max_length=100, null=True, blank=True) numero = models.IntegerField('Numero', max_length=10, null=True, blank=True, validators=[valida_numeros]) codigo_postal = models.IntegerField('Codigo Postal', max_length=5, null=True, blank=True, validators=[valida_numeros]) colonia = models.CharField('Colonia', max_length=500, validators=[valida_cadenas],null=True,blank=True) longitud = models.IntegerField('Longitud', max_length=10, null=True, blank=True) latitud = models.IntegerField('Latitud', max_length=10, null=True, blank=True) def __unicode__(self): return '%s' % self.calle class CatalogoTipoMovimiento(models.Model): """docstring for CatalogoTipoMovimiento""" clave=models.CharField('Clave',max_length=2) tipo=models.CharField('Tipo', max_length=20) descripcion=models.CharField('Descripcion',max_length=20) def __unicode__(self): return u'%s' % self.descripcion class Estatus(models.Model): """docstring for Estatus""" nombre=models.CharField('Descripcion',max_length=30) def __unicode__(self): return u'%s' % self.nombre class Meta: ordering = ['nombre'] verbose_name = 'estatus' verbose_name_plural = 'estatus' unique_together = ['nombre'] class Organismo(models.Model): nombre=models.CharField('Nombre',max_length=100) clave=models.CharField('Clave', max_length=3) estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return u'%s' % self.nombre class Area(models.Model): """docstring for Area""" nombre=models.CharField('Nombre', max_length=60) organismo=models.ForeignKey(Organismo, verbose_name='Organismo') estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return u'%s' % self.nombre class Parentesco(models.Model): descripcion=models.CharField('Descripcion',max_length=20)#Puede dejatr de existir def __unicode__(self): return u'%s' % self.descripcion class Meta: unique_together = ['descripcion'] class Empleado(models.Model): nombre=models.CharField('Nombre',max_length=50) apellido_paterno=models.CharField('Apellido Paterno',max_length=30) apellido_materno=models.CharField('Apellido Materno',max_length=30) turno=models.CharField(choices=TURNO,max_length=1) cedula=models.CharField('Cedula Profesional',max_length=20,null=True, blank=True) fecha=models.DateTimeField(null=False,auto_now_add=True) organismo = models.ForeignKey(Organismo) area=models.ForeignKey(Area, verbose_name='Area') estatus=models.ForeignKey(Estatus, verbose_name='Estatus') user= models.OneToOneField(User, unique=True, related_name='usuario') def __unicode__(self): return u'%s %s, %s' % (self.apellido_paterno, self.apellido_materno, self.nombre ) class Meta: ordering = ['apellido_paterno', 'apellido_materno', 'nombre'] verbose_name = 'Empleado' verbose_name_plural = 'Empleados' class Menor(models.Model): nombre=models.CharField('Nombre',max_length=50) apellido_paterno=models.CharField('Apellido Paterno',max_length=30) apellido_materno=models.CharField('Apellido Materno',max_length=30) curp=models.CharField('CURP',max_length=18, blank=True, null= True) fecha_nacimiento=models.DateField(null=True) edad=models.DecimalField('Edad', decimal_places=2, max_digits=3, blank=True, null= True) sexo= models.CharField( choices=SEXO, max_length=1, help_text= 'Seleccione el género al que pertenece') lugar_nacimiento=models.TextField('Lugar de Nacimiento', max_length=100) def __unicode__(self): return u'%s %s %s' % (self.nombre, self.apellido_paterno, self.apellido_materno) class Meta: ordering = ['apellido_paterno', 'apellido_materno', 'nombre'] verbose_name = 'Menor' verbose_name_plural = 'Menores' class Documento(models.Model): descripcion=models.CharField('Descripcion',max_length=30) fecha=models.DateTimeField(null=False, auto_now_add=True) tipo=models.CharField(choices=TIPO,max_length=10) estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return u'%s- %s' % (self.descripcion,self.tipo) class Familiar(models.Model): menor=models.ForeignKey(Menor, verbose_name='Menor') nombre=models.CharField('Nombre',max_length=50) apellido_paterno=models.CharField('Apellido Paterno',max_length=30) apellido_materno=models.CharField('Apellido Materno',max_length=30) ocupacion=models.CharField('Ocupacion',max_length=50) edad=models.IntegerField('Edad', max_length=2) sexo= models.CharField( choices=SEXO, max_length=1, help_text= 'Seleccione el género al que pertenece') tutor=models.BooleanField( default = False ) # presentado= models.CharField( choices=PRESENTADO, max_length=1,null=True, help_text= 'Indique como es presentado el familiar') observaciones= models.TextField('Observaciones', max_length=400, help_text = 'Escriba las observaciones pertinentes' ,null=True) parentesco=models.ForeignKey(Parentesco, verbose_name='Parentesco') def __unicode__(self): return u'%s %s, %s' % (self.apellido_paterno, self.apellido_materno, self.nombre ) class Meta: ordering = ['apellido_paterno', 'apellido_materno', 'nombre'] verbose_name = 'Familiar' verbose_name_plural = 'Familiares' class DireccionFamiliares(models.Model): familiar=models.ForeignKey(Familiar, verbose_name='Familiar') menor=models.ForeignKey(Menor, verbose_name='Menor') domicilio= models.ForeignKey(Domicilio,verbose_name='Domicilio',related_name ='domicilio') telefono=models.CharField('Teléfono', max_length=13, blank = True, null = True ) domicilio_laboral=models.ForeignKey(Domicilio,verbose_name='Domicilio Laboral',related_name ='domicilio_laboral') def __unicode__(self): return u'%s' % self.domicilio class DocumentoFamiliar(models.Model): menor=models.ForeignKey(Menor, verbose_name='Menor') familiar=models.ForeignKey(Familiar, verbose_name='Familiar') documento=models.ManyToManyField(Documento, verbose_name='Documento') observaciones=models.TextField('Observaciones', max_length=400, help_text = 'Escriba las observaciones pertinentes' ,null=True) fecha=models.DateField(null=False,auto_now_add=True) def __unicode__(self): return (self.documento.descripcion) class Expediente(models.Model): numero=models.CharField('Numero de Expediente', max_length=10) menor=models.ForeignKey(Menor, verbose_name='Menor') fecha=models.DateField(null=False,auto_now_add=True) estatus=models.ForeignKey(Estatus, verbose_name='Estatus') foto=models.ImageField('Foto', upload_to='Foto' , blank = True, null = True, help_text = 'Agregue la foto del menor') def __unicode__(self): return (self.numero) class Meta: ordering = ['id'] unique_together = ['numero'] class DocumentoMenor(models.Model): menor=models.ForeignKey(Menor, verbose_name='Menor') expediente=models.ForeignKey(Expediente, verbose_name='Expediente') documento=models.ManyToManyField(Documento, verbose_name='Documento') observaciones=models.TextField('Observaciones', max_length=400, help_text = 'Escriba las observaciones pertinentes',null=True ) fecha=models.DateField(null=False,auto_now_add=True) def __unicode__(self): return (self.observaciones) class MovimientoMenor(models.Model): expediente=models.ForeignKey(Expediente, verbose_name='Expediente') menor=models.ForeignKey(Menor, verbose_name='Menor') tipo_movimiento=models.ForeignKey(CatalogoTipoMovimiento, verbose_name='Tipo de Movimiento') empleado=models.ForeignKey(Empleado, verbose_name='Empleado') organismo=models.ForeignKey(Organismo, verbose_name='Organismo') fecha=models.DateField(null=False,auto_now_add=True) hora=models.TimeField(null=False,auto_now_add=True) motivo=models.TextField('Motivo', max_length=300, help_text = 'Motivo por el cual se da el movimiento' ) numero_averiguacion=models.CharField('Averiguacion Previa', max_length=30, null=True,blank=True) numero_acta=models.CharField('Acta', max_length=10 ) domicilio= models.ForeignKey(Domicilio,verbose_name='Domicilio',null=True,blank=True) responsable=models.CharField('Responsable',max_length=60) observaciones=models.TextField('Observaciones', max_length=400, help_text = 'Escriba las observaciones pertinentes' ) def __unicode__(self): return (self.expediente.numero) class Canaliza(models.Model): """docstring for Canaliza""" expediente=models.ForeignKey(Expediente, verbose_name='Expediente') menor=models.ForeignKey(Menor, verbose_name='Menor') fecha=models.DateField(null=False, auto_now_add=True) prioridad=models.CharField( choices=PRIORIDAD, max_length=1, help_text= 'Seleccione la prioridad con la que se atendera al menor') #observaciones=models.ForeignKey(Observaciones, verbose_name='Observaciones', help_text = 'Escriba las observaciones pertinentes' ) empleado=models.ForeignKey(Empleado, verbose_name='Empleado') area=models.ForeignKey(Area, verbose_name='Area', help_text = 'Area donde se ubicará el menor' ) estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return u'%s' % (self.id) class Informe(models.Model): informe= models.FileField('Informe', upload_to='informes' , help_text = 'Documento con informe completo') fecha= fecha=models.DateField(null=False,auto_now_add=True) def archivo_tipo(self): r = None if self.informe != '': r = u'%s' % (self.informe) r = r.split('.')[1].upper() r = asigna_icono(r) return u'%s' % (r) class Medico(models.Model): canaliza=models.ForeignKey(Canaliza, verbose_name='Canaliza') expediente=models.ForeignKey(Expediente, verbose_name='Expediente') menor=models.ForeignKey(Menor, verbose_name='Menor') antecedentes=models.TextField('Antecedentes', max_length=400, help_text = 'Antecedentes del menor' ) padecimento=models.TextField('Padecimiento', max_length=100,null=True) exploracion=models.TextField('Exploracion Fisica', max_length=100,null=True ) peso=models.DecimalField('Peso' ,decimal_places=2, max_digits=5) talla=models.IntegerField('Talla', max_length=3, help_text='Talla en centimetros') fc=models.CharField('Frecuencia Cardiaca',max_length=10,null=True) fr=models.CharField('Frecuencia Respiratoria',max_length=10,null=True) temperatura=models.DecimalField('Temperatura',decimal_places=2, max_digits=5) habitos=models.CharField('Habitos',max_length=100,null=True) neurologico=models.TextField('Neurologia', max_length=100,null=True) piel=models.TextField('Piel', max_length=100,null=True) cabeza=models.TextField('Cabeza', max_length=100,null=True) cuello=models.TextField('Cuello', max_length=100,null=True) torax=models.TextField('torax', max_length=100,null=True) abdomen=models.TextField('Abdomen', max_length=100,null=True) genitales=models.TextField('Genitales', max_length=100,null=True) extremidades=models.TextField('Extremidades', max_length=100 ,null=True) diagnostico=models.TextField('Diagnostico', max_length=200) tratamiento=models.TextField('Tratamiento', max_length=200 ) observaciones=models.TextField('Observaciones', max_length=400, help_text = 'Escriba las observaciones pertinentes',null=True) fecha=models.DateField(null=False) informe= models.ManyToManyField(Informe,null=True) empleado=models.ForeignKey(Empleado, verbose_name='Empleado') estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return (self.expediente.numero) class Nutricion(models.Model): canaliza=models.ForeignKey(Canaliza, verbose_name='Canaliza') expediente=models.ForeignKey(Expediente, verbose_name='Expediente') menor=models.ForeignKey(Menor, verbose_name='Menor') caracteristicas=models.TextField('Caracteristicas', max_length=200, help_text = 'Caracteristicas del menor' ) alergico=models.BooleanField('Alergico', default=False , help_text = 'Marque si el menor es alergico') alergia=models.CharField('Alergias',max_length=100,null=True,blank = True) peso=models.DecimalField('Peso',decimal_places=2, max_digits=5) talla=models.IntegerField('Talla', max_length=3, help_text='Talla en centimetros') observaciones=models.TextField('Observaciones', max_length=400, help_text = 'Escriba las observaciones pertinentes',null=True) fecha=models.DateField(null=False) informe= models.ManyToManyField(Informe,null=True) empleado=models.ForeignKey(Empleado, verbose_name='Empleado') estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return (self.expediente.numero) class Pedagogia(models.Model): canaliza=models.ForeignKey(Canaliza, verbose_name='Canaliza') expediente=models.ForeignKey(Expediente, verbose_name='Expediente') menor=models.ForeignKey(Menor, verbose_name='Menor') escolaridad=models.CharField( choices=ESCOLARIDAD, max_length=2) escuela=models.TextField('Escuela de Procedencia', max_length=100,null=True) grado=models.CharField('Grado',max_length=10, help_text='Ultimo grado de estudios',null=True) grupo=models.CharField('Grupo',max_length=10, help_text='Grupo en que estudia el menor',null=True) observaciones=models.TextField('Observaciones', max_length=400, help_text = 'Escriba las observaciones pertinentes') informe= models.ManyToManyField(Informe,null=True) fecha=models.DateField(null=False) empleado=empleado=models.ForeignKey(Empleado, verbose_name='Empleado') estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return (self.expediente.numero) class Psicologia(models.Model): canaliza=models.ForeignKey(Canaliza, verbose_name='Canaliza') expediente=models.ForeignKey(Expediente, verbose_name='Expediente') menor=models.ForeignKey(Menor, verbose_name='Menor') fecha=models.DateField(null=False) motivo=models.TextField('Motivo', max_length=100, help_text = 'Motivo por el cual se realizara la valoracion' ) fisica=models.TextField('Descripcion Fisica', max_length=200, help_text = 'Descripcion Fisica del menor' ) observaciones=models.TextField('Observaciones', max_length=400, help_text ='Escriba las observaciones pertinentes') sugerencia=models.TextField('Sugerencias', max_length=400, help_text = 'Escriba las sugerencias pertinentes',null=True) informe= models.ManyToManyField(Informe,null=True) empleado=empleado=models.ForeignKey(Empleado, verbose_name='Empleado') estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return (self.expediente.numero) class Juridico(models.Model): canaliza=models.ForeignKey(Canaliza, verbose_name='Canaliza') expediente=models.ForeignKey(Expediente, verbose_name='Expediente') menor=models.ForeignKey(Menor, verbose_name='Menor') fecha=models.DateField(null=False) observaciones=models.TextField('Observaciones', max_length=400, help_text ='Escriba las observaciones pertinentes') medidas=models.TextField('Medidas Correctivas', max_length=300, help_text ='Sugerencia de medidas correctivas ') situacion=models.CharField('Situacion Actual',max_length=10) agresor=models.TextField('Agresor', max_length=60, help_text ='Parentesco y nombre del agresor') representante=models.TextField('Representante Legal', max_length=60) informe= models.ManyToManyField(Informe,null=True) empleado=empleado=models.ForeignKey(Empleado, verbose_name='Empleado') estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return (self.expediente.numero) class Social(models.Model): canaliza=models.ForeignKey(Canaliza, verbose_name='Canaliza') expediente=models.ForeignKey(Expediente, verbose_name='Expediente') menor=models.ForeignKey(Menor, verbose_name='Menor') observaciones=models.TextField('Observaciones', max_length=400, help_text ='Escriba las observaciones pertinentes') informe= models.ManyToManyField(Informe,null=True) asunto=models.TextField('Asunto', max_length=100, help_text ='Causas del trabajo de investigacion') familiar=models.ForeignKey(Familiar, verbose_name='Familiar',blank=True, null = True) fecha_realiza=models.DateField(null=False, help_text ='Fecha en que se realizó el trabajo de investigación') fecha_entrega=models.DateField(null=False, help_text ='Fecha en que se entrega el trabajo de investigación') empleado=empleado=models.ForeignKey(Empleado, verbose_name='Empleado') estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return (self.expediente.numero) class FamiliarAusente(models.Model): """docstring for ClassName""" menor=models.ForeignKey(Menor, verbose_name='Menor') tiene=models.BooleanField( 'Tiene') def __unicode__(self): return (self.tiene) class Observaciones(models.Model): """docstring for ClassName""" canaliza= models.ForeignKey(Canaliza, verbose_name="Estado") observaciones=models.TextField( 'Observaciones',max_length=400,help_text ='Escriba las observaciones de la Canalización') def __unicode__(self): return (self.observaciones) class Evasion(models.Model): expediente=models.ForeignKey(Expediente, verbose_name='Expediente') menor=models.ForeignKey(Menor, verbose_name='Menor') tipo_movimiento=models.ForeignKey(CatalogoTipoMovimiento, verbose_name='Tipo de Movimiento') numero_acta=models.CharField('Acta', max_length=10 ) fecha=models.DateField(null=False, help_text ='Fecha de la evasion del menor') empleado=models.ForeignKey(Empleado, verbose_name='Empleado') observaciones=models.TextField('Observaciones', max_length=400, help_text = 'Escriba las observaciones pertinentes' ) estatus=models.ForeignKey(Estatus, verbose_name='Estatus') def __unicode__(self): return (self.expediente.numero)