#encoding:utf-8 from django.db import models from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm import re 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 TIPO_IDENTIFICACION = ( ('CE', 'Credencia de Elector'), ('P', 'Pasaporte'), ('CR','Carta de Residencia del Delegado'), ('CM','Cartilla Militar'), ('LC','Licenncia de Chofer')) TIPO_PERSONA = ( ('MM','MORAL'), ('FF','FISICA'), ('FE','FISICA ACTIVIDAD EMPRESARIAL')) SEXO = ( ('M','Masculino'), ('F','Femenino')) TIPO_SECTOR =( ('Comercio','Comercio'), ('Industria','Industria'), ('Servicio','Servicio')) SI =( ('S','SI'), ('N','NO')) TIPO_LOCAL =( ('PP','Propio'), ('RN','Rentado'), ('PR','Prestado'),) TURNO =( ('M','Matutino'), ('V','Vespertino')) TIPO =( ('Copia','copia'), ('Original','original')) TIPO_DANO =( ('FI','Fisico'), ('EC','Economico'), ('FE','Fisico y Economico')) TIPO_TIPO =( ('ES','Establecido'), ('SM','Semifijo'), ('CH','Casa Habitacion')) 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 self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre', 'estado'] 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 self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre', 'municipio'] class Domicilio(models.Model): localidad = models.ForeignKey(Localidad, verbose_name="Localidad") calle = models.CharField('Calle', max_length=100, null=True, blank=True, validators=[valida_cadenas]) 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]) 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 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 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 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 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 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, validators=[valida_cadenas]) 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 CatalogoTipoAsentamiento(models.Model): nombre = models.CharField('Catalogo', max_length=100, validators=[valida_cadenas]) def __unicode__(self): return '%s' % self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre'] class CatalogoTipoViabilidad(models.Model): nombre = models.CharField('Catalogo', max_length=100, validators=[valida_cadenas]) def __unicode__(self): return '%s' % self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre'] class CatalogoEmpresa(models.Model): nombre = models.CharField('Catalogo', max_length=100, validators=[valida_cadenas]) def __unicode__(self): return '%s' % self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre'] class CatalogoBanco(models.Model): nombre = models.CharField('Catalogo', max_length=100, validators=[valida_cadenas]) def __unicode__(self): return '%s' % self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre'] class Catalogo(models.Model): nombre = models.CharField('Catalogo', max_length=300, validators=[valida_cadenas]) def __unicode__(self): return '%s' % self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre'] class Giro(models.Model): catalogo = models.ForeignKey(Catalogo, verbose_name="Catalogo") nombre = models.CharField('Giro', max_length=300, validators=[valida_cadenas]) def __unicode__(self): return self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre', 'catalogo'] class ActividadEspecifica(models.Model): giro = models.ForeignKey(Giro, verbose_name="Giro") nombre = models.CharField('Actividad', max_length=300, validators=[valida_cadenas]) def __unicode__(self): return self.nombre class Meta: ordering = ['nombre'] unique_together = ['nombre', 'giro'] class DatosGenerales (models.Model): identificacion = models.BooleanField('Identificación') tipoIdentificacion = models.CharField('Tipo de Identificación', choices=TIPO_IDENTIFICACION, max_length=50) curP = models.BooleanField('CURP') rfC = models.BooleanField('RFC') comprobanteDomicilio = models.BooleanField('Comprobante de Domicilio del Negocio') folio = models.CharField(max_length=4, blank=True, null=True, help_text="folio") tipoPersona = models.CharField('Tipo de Persona', choices=TIPO_PERSONA, max_length=2, null=True) rfc = models.CharField('RFC',max_length=15, null=True) curp = models.CharField('CURP', max_length=18, null=True) nombreNegocio = models.CharField('Nombre del Negocio', max_length=200, null=True) ano = models.IntegerField('Año', null=True) meses = models.IntegerField(null=True) nombreEmpresario = models.CharField('Nombre del Empresario', max_length=100, null=True) apellidoPaterno = models.CharField('Apellido Paterno', max_length=20, null=True) apellidoMaterno = models.CharField('Apellido Materno', max_length=20, null=True) genero = models.CharField( choices=SEXO, max_length=1, null=True) telefono = models.CharField(max_length=15, null=True) celular = models.CharField(max_length=15, null=True, blank=True) correoElectronico = models.CharField('Correo Electrónico', max_length=100, null=True, blank=True) municipio = models.ForeignKey(Municipio, max_length=100, null=True) localidad = models.ForeignKey(Localidad, max_length=100, null=True) tipoVialidad = models.ForeignKey(CatalogoTipoViabilidad, verbose_name='Tipo de Viabilidad', null=True, related_name='tipoVialidad') nombreVialidad = models.CharField('Nombre de Vialidad', max_length=200, null=True) numeroExterior1 = models.CharField('Número Exterior 1', max_length=10, null=True) numeroExterior2 = models.CharField('Número Exterior 2', max_length=10, null=True) numeroInterior = models.CharField('Número Interior', max_length=10, null=True) tipo_AsentamientoHumano = models.ForeignKey(CatalogoTipoAsentamiento, verbose_name='Tipo de Asentamiento Humano', null=True) nombreAsentamientoHumano = models.CharField('Nombre de Asentamiento', max_length=200, null=True) codigoPostal = models.IntegerField('Codigo Postal', null=True, blank=True) tipoVialidad1 = models.ForeignKey(CatalogoTipoViabilidad, verbose_name='Tipo de Viabilidad 1', null=True, related_name='tipoVialidad1') nombreVialidad1 = models.CharField('Nombre de Vialidad 1', max_length=200, null=True) tipoVialidad2 = models.ForeignKey(CatalogoTipoViabilidad, verbose_name='Tipo de Viabilidad 2', null=True, related_name='tipoVialidad2') nombreVialidad2 = models.CharField('Nombre de Vialidad2', max_length=200, null=True) tipoVialidad3 = models.ForeignKey(CatalogoTipoViabilidad, verbose_name='Tipo de Viabilidad', null=True,related_name='tipoVialidad3') nombreVialidad3 = models.CharField('Nombre de Vialidad', max_length=200, null=True) descripcionUbicacion = models.CharField('Descripción de Ubicación', max_length=200, null=True, blank=True) tipoSector = models.CharField('Tipo de Sector', choices=TIPO_SECTOR, max_length=10) giro = models.ForeignKey(Giro, max_length=300) actividadEspecifica = models.ForeignKey(ActividadEspecifica, max_length=300) turismo = models.BooleanField() organizacionEmpresarial = models.ForeignKey(CatalogoEmpresa, verbose_name='Organización Empresarial',max_length=100, null=True) ventaAnual = models.DecimalField(max_digits=20, decimal_places=1, help_text="venta anual") # ventaAnual = models.CharField('Venta Anual', max_length=30) noEmpleadoHombre = models.IntegerField('No. de Empleado Hombres') noEmpleadoMujer = models.IntegerField('No. de Empleado Mujeres') totalEmpleado = models.IntegerField('Total de Empleados') tamanoEmpresa = models.CharField('Tamaño de la Empresa', max_length=50) tipoLocal = models.CharField('¿El local es?', choices=TIPO_LOCAL, max_length=100) infraestructurA = models.CharField('Infraestructura',max_length=600) maquinaEquipo = models.CharField('Maquinaria y Equipo',max_length=600) inventariO = models.CharField('Inventario',max_length=600) economico = models.CharField('Económico',max_length=600) infraestructura = models.CharField(max_length=24) maquinaria = models.CharField('Maquinaria y Equipo',max_length=24) inventario = models.CharField(max_length=24) danoEconomico = models.CharField('Daño Económico', max_length=24) subtotalFisicco = models.CharField('Subtotal Físico', max_length=24) totalMontoEstimado = models.CharField('Total de Monto Estimado de Daños', max_length=24) requiereApoyo = models.CharField('Requiere Apoyo Directo', choices=SI, max_length=2) RequiereCreditoEmpresa = models.BooleanField() banco = models.ForeignKey(CatalogoBanco,null=True) montoRequerido = models.IntegerField('Monto Requerido', null=True, blank=True) credito = models.BooleanField('Crédito A') def __unicode__(self): return u'%s - %s %s %s' % (self.folio, self.apellidoPaterno, self.apellidoMaterno, self.nombreEmpresario) class Meta: ordering = ['folio','apellidoPaterno', 'apellidoMaterno', 'nombreEmpresario'] verbose_name = 'DatosGeneral' verbose_name_plural = 'DatosGenerales' class validacionEmpresa (models.Model): validado=models.BooleanField(default=False) datosGenerales = models.ForeignKey(DatosGenerales) validacionApoyoDirecto = models.BooleanField('Validación para Apoyo Directo') fechaValidacion = models.DateField('Fecha Validación') validacionCredito = models.BooleanField('Validación para Credito') tipoDano = models.CharField('Tipo de Daño', choices=TIPO_DANO, max_length=15) observacion = models.CharField(max_length=300) nombreValidador = models.CharField('Nombre del Validador', max_length=200) montoVentas = models.CharField('Monto de Ventas en Promedio Mensual', max_length=30) montoCostos = models.CharField('Monto de Costos en Promedio Mensual', max_length=30) utilidad = models.CharField(max_length=30) nuevoMontoCredito = models.CharField('Nuevo Monto de Credito', max_length=20) enOperacion = models.CharField('En Operación', choices=SI, max_length=2) tipo = models.CharField(choices=TIPO_TIPO, max_length=15)