#encoding:utf-8 from django.core import validators from django.core.validators import RegexValidator from django.core.exceptions import ValidationError from django.db import models from datetime import * # Importar esta libreria en caso de usar campos de fecha import re from django.contrib.auth.models import User from datetime import date Grado = (('1','Primer Grado - Preescolar'), ('2','Segundo Grado - Preescolar'), ('3','Tercer Grado - Preescolar'), ('4','Primer Grado - Primaria'), ('5','Segundo Grado - Primaria'), ('6','Tercer Grado - Primaria'), ('7','Cuarto Grado - Primaria'), ('8','Quinto Grado - Primaria'), ('9','Sexto Grado - Primaria'), ('10',' Grado Especial'), ) Genero = (( 'H','Masculino'), ( 'M','Femenino')) Meses = (( 'Enero','Enero'), ( 'Febrero','Febrero'), ( 'Marzo','Marzo'), ( 'Abril','Abril'), ( 'Mayo','Mayo'), ( 'Junio','Junio'), ( 'Julio','Julio'), ( 'Agosto','Agosto'), ( 'Septiembre','Septiembre'), ( 'Octubre','Octubre'), ( 'Noviembre','Noviembre'), ( 'Diciembre','Diciembre')) Ano = (( '2014','2014'), ( '2015','2015'), ( '2016','2016'), ( '2017','2017'), ( '2018','2018') ,( '2019','2019') ,( '2020','2020') ,( '2021','2021') ,( '2022','2022') ,( '2023','2023') ,( '2024','2024')) def valida_curp(a_curp): longitudCurp = len(a_curp) if longitudCurp != 18: raise ValidationError(u'La CURP "%s" debe tener una longitud de 18 caracteres, tiene %s' % (a_curp, longitudCurp)) else: if re.match('[a-zA-Z]{4}[0-9]{6}[a-zA-Z]{6}[a-zA-Z0-9]{2}', a_curp) == None: raise ValidationError(u'la CURP "%s" no es correcto' % (a_curp)) def valida_t_curp(t_curp): longitudCurpt = len(t_curp) if longitudCurpt != 18: raise ValidationError(u'La CURP "%s" debe tener una longitud de 18 caracteres, tiene %s' % (t_curp, longitudCurpt)) else: if re.match('[a-zA-Z]{4}[0-9]{6}[a-zA-Z]{6}[a-zA-Z0-9]{2}', t_curp) == None: raise ValidationError(u'la CURP "%s" no es correcto' % (t_curp)) class Estado(models.Model): nombre = models.CharField('Estado', max_length=100) def __unicode__(self): return '%s' % ( self.nombre ) class Meta: ordering = ['nombre'] unique_together = ['nombre'] class Municipio(models.Model): nombre = models.CharField('Municipio', max_length=100) estado = models.ForeignKey(Estado, default=27, verbose_name="Estado") def __unicode__(self): return '%s' % ( self.nombre ) class Meta: ordering = ['nombre'] unique_together = ['nombre'] class Localidad(models.Model): municipio = models.ForeignKey(Municipio, verbose_name="Municipio") numero = models.CharField( max_length = 4 ) nombre = models.CharField('Localidad', max_length=100) def __unicode__(self): return '%s - %s' % (self.municipio.nombre, self.nombre ) class Meta: ordering = ['municipio','nombre'] unique_together = ['nombre', 'municipio'] verbose_name = 'localidades' verbose_name_plural = 'Localidades' class CatProyecto(models.Model): numeroProyecto = models.CharField('Numero de Proyecto', max_length = 6 ) descripcion = models.CharField( max_length = 100 ) municipio = models.ForeignKey( Municipio ) def __unicode__( self ): return ' %s - %s' % ( self.numeroProyecto, self.municipio.nombre) class Meta: ordering = ['numeroProyecto'] verbose_name = ' proyecto ' verbose_name_plural = ' Catalogo de Proyectos ' # Con esta linea se cambia el que django muestra por default a la tabla. unique_together = ['numeroProyecto'] class CatVehiculo(models.Model): #Esta clase crea la tabla de catalogo de vehiculos. modelo = models.CharField( max_length = 10 ) marca = models.CharField( max_length = 20 ) capacidad = models.DecimalField('Capacidad en toneladas', max_digits = 5, decimal_places = 2 ) numPlaca = models.CharField( max_length = 10) def __unicode__( self ): return '%s - %s - %s' % (self.modelo, self.marca, self.capacidad) def tonelaje(self): capacidad_vehiculo = (float(self.capacidad) * 1000) return capacidad_vehiculo class Meta: ordering = ['modelo'] verbose_name = ' el vehiculo ' verbose_name_plural = ' Catalogo de Vehiculos ' # Con esta linea se cambia el que django muestra por default a la tabla. unique_together = ['numPlaca'] class CatProveedor(models.Model): nombreProveedor = models.CharField('Nombre del Proveedor', max_length = 300 ) licitacion = models.CharField('Licitacion', max_length = 300,blank=True, null=True ) #noContrato = models.CharField('No. De Contrato', max_length= 20 ,blank=True, null=True ) status = models.BooleanField( default=True ) def __unicode__( self ): return u'%s' % self.nombreProveedor class Meta: ordering = ['nombreProveedor'] verbose_name = 'nombre del proveedor' verbose_name_plural = 'Catalogo de Proveedores' unique_together = ['nombreProveedor'] class CatPresentacionProducto( models.Model ): presentacion = models.CharField( max_length = 20 ) def __unicode__( self ): return u'%s' % self.presentacion class Meta: ordering = ['presentacion'] verbose_name = 'presentacion' verbose_name_plural = 'Catalogo de Presentaciones de los Productos' unique_together = ['presentacion'] class CatProductos( models.Model): nombre = models.CharField( max_length = 30 ) cantidad = models.IntegerField( null=True, blank=True) # peso = models.DecimalField( max_digits = 5, decimal_places = 3, null=True, blank=True ) # unidadMedida = models.ForeignKey( CatUnidadMedida ) presentacion = models.ForeignKey( CatPresentacionProducto, verbose_name='Presentación' ) marca = models.CharField( max_length = 20, blank=True, null=True ) descripcion = models.TextField('Descripción') status = models.BooleanField( default=True ) def __unicode__( self ): return u'%s' % self.nombre class Meta: ordering = ['nombre'] verbose_name = 'producto' verbose_name_plural = 'Catalogo de Productos' unique_together = ['nombre'] class TipoPaquete( models.Model ): clave = models.CharField( max_length = 2 ) nombre = models.CharField( max_length = 20 ) def __unicode__( self ): return u'%s - %s' % (self.pk,self.nombre) class Meta: ordering = ['nombre'] verbose_name = 'tipo de paquete' verbose_name_plural = 'Catalogo de Tipo de Paquete' unique_together = ['clave'] class CatPaquete( models.Model ): tipoPaquete = models.ForeignKey( TipoPaquete ) producto = models.ManyToManyField( CatProductos) peso = models.DecimalField( max_digits = 5, decimal_places = 3, null=True, blank=True ) proveedor = models.ForeignKey( CatProveedor ) precio = models.DecimalField( max_digits = 6, decimal_places = 2 ) status = models.BooleanField( default=True ) noContrato = models.CharField( max_length = 20 ) def __unicode__( self ): return u' %s - %s ' % (self.proveedor.nombreProveedor, self.tipoPaquete.nombre) def peso_paquete( self ): peso = 0 for p in self.producto.all(): peso = peso + (p.peso * p.cantidad) return peso class Meta: ordering = ['tipoPaquete'] verbose_name = 'paquete' verbose_name_plural = 'Catalogo Paquetes de Proveedores' class CatRuta(models.Model): nombre = models.IntegerField() Localidad = models.ManyToManyField( Localidad ) def __unicode__( self ): return u'%s' % self.nombre class Meta: ordering = ['nombre'] verbose_name = 'ruta' verbose_name_plural = 'Catalogo de Rutas' unique_together = ['nombre'] class CatObservaciones( models.Model): clave = models.CharField( max_length = 5 ) nombre = models.CharField( max_length = 250 ) def __unicode__( self ): return '%s' % self.nombre class Meta: ordering = ['clave','nombre'] unique_together = ['clave','nombre'] verbose_name = 'observacion' verbose_name_plural = 'Catalogo de Observaciones' class CatEscuela(models.Model): ruta = models.ForeignKey( CatRuta ) localidad = models.ForeignKey( Localidad ) clave = models.CharField( max_length = 10 ) nombre = models.CharField( max_length = 100 ) folio = models.CharField( max_length = 7 ) domicilio = models.CharField('Domicilio', max_length = 500 ) no_jn = models.CharField('No de JN.', max_length = 20 ) status = models.BooleanField( default = True) grado = models.CharField(max_length=10,default='ALTO') ambito =models.CharField(max_length=10,default='URBANA') def __unicode__( self ): return '%s - %s - %s' % (self.localidad.municipio.nombre, self.localidad.nombre, self.nombre ) class Meta: ordering = ['folio','localidad','nombre'] verbose_name = 'escuela' verbose_name_plural = 'Catalogo de Escuelas' unique_together = ['clave','folio'] class CatTipoPersona( models.Model ): clave = models.CharField( max_length = 5 ) nombre = models.CharField( max_length = 50 ) def __unicode__( self ): return u'%s' % self.nombre class Meta: ordering = ['nombre'] verbose_name = 'tipo de personal' verbose_name_plural = 'Catalogo de Tipo de Persona' unique_together = ['clave','nombre'] class CatPersona( models.Model ): nombre = models.CharField( max_length = 50 ) apellidoPaterno = models.CharField('Apellido Paterno', max_length = 50 ) apellidoMaterno = models.CharField('Apellido Materno', max_length = 50 ) municipio = models.ForeignKey( Municipio ) tipoPersona = models.ForeignKey( CatTipoPersona, verbose_name='Tipo de Persona') status = models.BooleanField( default= True ) usuario = models.ForeignKey( User, blank = True, null = True, ) def __unicode__( self ): return '%s %s %s' % (self.nombre, self.apellidoPaterno, self.apellidoMaterno) class Meta: ordering = ['nombre', 'apellidoPaterno'] verbose_name = 'persona' verbose_name_plural = 'Catalogo de Persona' class ProgramacionEntrega( models.Model ): fecha_reparto = models.DateField( default = datetime.now() ) mes = models.CharField('meses',choices = Meses, max_length = 20) ano = models.CharField('ano',choices = Ano, max_length = 20) municipio = models.ForeignKey( Municipio ) escuela = models.ManyToManyField( CatEscuela , through='ProgramacionEntregaEscuela') nombre_chofer = models.ForeignKey( CatPersona ) vehiculo = models.ForeignKey( CatVehiculo ) def __unicode__( self ): return u'%s' % self.municipio.nombre class Meta: ordering = ['nombre_chofer'] verbose_name = 'programacion de entrega' verbose_name_plural = 'Programacion de Entrega' class ProgramacionEntregaEscuela(models.Model): programacion=models.ForeignKey(ProgramacionEntrega) escuela = models.ForeignKey(CatEscuela) estatus= models.CharField(max_length=20) registro_abasto = models.IntegerField(default=0) class Comite( models.Model ): fecha = models.DateField( default = datetime.now() ) escuela = models.ForeignKey( CatEscuela ) promotor = models.ForeignKey( CatPersona ) DocumentoComite = models.FileField( upload_to = 'DocumentoComite/') def __unicode__( self ): return u'%s' % self.escuela.nombre class Meta: ordering = ['escuela'] verbose_name = 'comite' verbose_name_plural = 'Comite' def mes_actual(): d = date.today() mes = d.month if mes == 1: mes = "Enero" elif mes == 2: mes = "Febrero" elif mes == 3: mes = "Marzo" elif mes == 4: mes = "Abril" elif mes == 5: mes = "Mayo" elif mes == 6: mes = "Junio" elif mes == 7: mes = "Julio" elif mes == 8: mes = "Agosto" elif mes == 9: mes = "Septiembre" elif mes == 10: mes = "Octubre" elif mes == 11: mes = "Noviembre" elif mes == 12: mes = "Diciembre" return mes def ano_actual(): d = date.today() year = d.year if year == 2014: year = "2014" elif year == 2015: year = "2015" elif year == 2016: year = "2016" elif year == 2015: year = "2015" elif year == 2016: year = "2016" elif year == 2017: year = "2017" elif year == 2018: year = "2018" return year class RegistroAbasto( models.Model ): escuela = models.ForeignKey( CatEscuela ) anio = models.DateField( default = datetime.now() ) mes = models.CharField('meses',choices = Meses, max_length = 20, default=mes_actual) ano = models.CharField('año',choices = Ano, max_length = 20, default=ano_actual) ninas = models.IntegerField() ninos = models.IntegerField() totalNinos = models.IntegerField() totalNinosLeche = models.IntegerField() totalMadres = models.IntegerField() promotor = models.ForeignKey( CatPersona ) enviado = models.BooleanField() observacion = models.ForeignKey( CatObservaciones, blank = True, null = True ) def __unicode__( self ): return '%s - %s - %s- %s' % (self.escuela.localidad.nombre, self.escuela.nombre, self.mes, self.ano) def litros_leche( self ): if Dotacion.objects.filter(registro_abasto__pk=self.id).count()==0: if self.mes == "Abril" or self.mes=="Agosto" or self.mes=="Diciembre": resultado =self.totalNinosLeche * 2 else: resultado =self.totalNinosLeche * 4 else: dotacion = Dotacion.objects.get(registro_abasto__pk=self.pk) resultado = dotacion.leches return resultado # def litros_leche(self): # return (self.totalNinosLeche *4) def paquete_alimentario( self ): if Dotacion.objects.filter(registro_abasto__pk=self.id).count()==0: if self.totalNinos >= 5 and self.totalNinos < 10: resultado = 1 else: resultado = self.totalNinos % 10 if resultado == 0: resultado = self.totalNinos / 10 elif resultado > 5: resultado = ((self.totalNinos / 10) + 1) elif resultado <= 5: resultado = self.totalNinos / 10 else: dotacion = Dotacion.objects.get(registro_abasto__pk=self.pk) resultado = dotacion.paquetes return resultado class Meta: ordering = ['escuela'] verbose_name = 'abasto' verbose_name_plural = 'Registro de Abasto' permissions = (("ver_cuadro_abasto", "ver los cuadro de abastos"), ("validar_cuadro_abasto", "validar los cuadro de abastos"), ("ver_requerimiento", "ver los requerimientos por procucto"), ("vales_salida", "vales de salida"), ("programar_entrega", "programar entrega"), ("imprimir_programacion", "imprimir la programacion"), ("abasto", "abasto"),) class ValidarCuadroAbasto( models.Model ): Municipio = models.ForeignKey( Municipio ) mes = models.CharField( 'meses', choices = Meses, max_length = 20 ) ano = models.CharField('ano',choices = Ano, max_length = 20) status = models.BooleanField( default= True ) def __unicode__( self ): return '%s - %s - %s - %s' % (self.Municipio.nombre, self.mes, self.ano, self.status) class Meta: ordering = ['Municipio'] verbose_name = 'validacion' verbose_name_plural = 'Validacion de Cuadro de Abasto' class CatConceptosAD(models.Model): texto = models.CharField('Texto', max_length = 250 ) def __unicode__( self ): return '%s' % (self.texto) class Dotacion(models.Model): OPCION = (( 'Aumento','Aumento'), ( 'Disminucion','Disminucion')) registro_abasto = models.ForeignKey(RegistroAbasto) paquetes = models.IntegerField('Paquetes Alimentarios',blank = True, null = True) opcion = models.CharField('Opcion paquetes',choices = OPCION, max_length = 20, blank = True, null = True) concepto = models.ForeignKey(CatConceptosAD, blank = True, null = True) leches = models.IntegerField("Leches",blank = True, null = True) opcion_leches = models.CharField('Opcion Leches',choices = OPCION, max_length = 20,blank = True, null = True) concepto_leche=models.IntegerField("concepto_leche",blank = True, null = True) class Meta: unique_together = ("registro_abasto",) def __unicode__( self ): return '%s - %s - %s' % (self.registro_abasto,self.opcion , self.concepto) class Nivelacion(models.Model): programacionentrega = models.ForeignKey(ProgramacionEntrega) total_paquetes = models.IntegerField('Paquetes Alimentarios') total_leches = models.IntegerField('Paquetes de Leches') tonelaje = models.IntegerField('Tonelaje',default=0) ruta = models.ForeignKey(CatRuta, default=0) class ValidarProgramacion( models.Model ): Municipio = models.ForeignKey( Municipio ) mes = models.CharField( 'meses', choices = Meses, max_length = 20 ) ano = models.CharField('ano',choices = Ano, max_length = 20) status = models.BooleanField( default= True ) def __unicode__( self ): return '%s - %s - %s - %s' % (self.Municipio.nombre, self.mes, self.ano, self.status) class Meta: ordering = ['Municipio'] verbose_name = 'validacion_programacion' verbose_name_plural = 'Validacion de la Programacion' class PadronPersona(models.Model): escuela = models.ForeignKey(CatEscuela) a_nombre = models.CharField('Nombre del Alumno', max_length=50) a_materno = models.CharField('Apellido Materno', max_length=50) a_paterno = models.CharField('Apellido Paterno', max_length=50) genero = models.CharField('Genero', choices = Genero, max_length=50) grado_escolar = models.CharField('Grado Escolar', choices=Grado, max_length=50) a_fecha_nacimiento = models.DateField('Fecha de nacimiento') a_curp = models.CharField('CURP', max_length=50,validators=[valida_curp]) tutor_nombre = models.CharField('Nombre del Padre o Tutor', max_length=50) tutor_materno = models.CharField('Apellido Materno', max_length=50) tutor_paterno = models.CharField('Apellido Paterno', max_length=50) tutor_fecha_nacimiento = models.DateField('Fecha de nacimiento') tutor_genero = models.CharField('Genero', choices = Genero, max_length=50) t_curp = models.CharField('CURP', max_length=50, blank = True, null = True, validators=[valida_t_curp]) estado = models.ForeignKey(Estado, default=27) status = models.BooleanField(default=True) def __unicode__(self): return '%s %s %s' % (self.a_nombre, self.a_paterno, self.a_materno) class Meta: ordering = ['a_nombre', 'a_paterno'] verbose_name = 'Padron_personas' verbose_name_plural = 'Padron de Personas'