#encoding:utf-8 from django.db import models from django.contrib.auth.models import User from datetime import * # Create your models here. class Dependencia(models.Model): clave = models.CharField('Clave', max_length = 50, help_text = 'Ingrese la clave de la Dependencia') nombre = models.CharField('Nombre', max_length = 150, help_text = 'Ingrese el nombre de la Dependencia') def __unicode__(self): return self.nombre + ' - ' + self.clave class Meta: ordering = ['nombre', 'clave'] verbose_name_plural = 'Dependencia' unique_together = ['nombre'] def save(self, *args, **kwargs): for field_name in ['clave']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['nombre']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) super(Dependencia, self).save(*args, **kwargs) class Direccion(models.Model): dependencia = models.ForeignKey( Dependencia ) clave = models.CharField('Clave', max_length = 50, help_text = 'Ingrese la clave de la Dirección') nombre = models.CharField('Nombre', max_length = 100, help_text = 'Ingrese el nombre de la Dirección') # usuario = models.ManyToManyField( User ) def __unicode__(self): return u'%s' % (self.nombre) def usuarios(self): return '\n'.join([s.username for s in self.usuario.all()]) class Meta: ordering = ['dependencia', 'nombre', 'clave'] verbose_name_plural = 'Direccion' unique_together = ['nombre', 'clave'] def save(self, *args, **kwargs): for field_name in ['clave']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['nombre']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) super(Direccion, self).save(*args, **kwargs) class TipoDocumento(models.Model): nombre = models.CharField('Nombre', max_length = 50, help_text = 'Ingrese el tipo de documento') def __unicode__(self): return self.nombre class Meta: ordering = ['nombre'] verbose_name_plural = 'Tipo de Documento' class Puestos(models.Model): nombre = models.CharField('Puesto', max_length = 100, help_text = 'Ingrese el nombre del puesto') def __unicode__(self): return self.nombre class Meta: ordering = ['nombre'] verbose_name = 'Puesto' verbose_name_plural = 'Puestos' unique_together = ['nombre'] def save(self, *args, **kwargs): for field_name in ['']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['nombre']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) super(Puestos, self).save(*args, **kwargs) class Estatus(models.Model): clave = models.CharField('Clave', max_length = 50, help_text = 'Ingrese la clave del estatus') nombre = models.CharField('Nombre', max_length = 50, help_text = 'Ingrese el nombre del estatus') color = models.CharField('color', max_length = 17, help_text = 'color de identificacion') activo = models.BooleanField( default = True) tipo_documento = models.ForeignKey( TipoDocumento, help_text = '' ) def __unicode__(self): return self.nombre class Meta: ordering = ['nombre', 'clave'] verbose_name_plural = 'Estatus' unique_together = ['clave', 'tipo_documento'] def save(self, *args, **kwargs): for field_name in ['clave']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['nombre']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) super(Estatus, self).save(*args, **kwargs) class Titulos(models.Model): monograma = models.CharField('monograma', max_length = 50, help_text = 'Ingrese siglas de identificacion del titulo') nombre = models.CharField('Nombre', max_length = 50, help_text = 'Ingrese el titulo') def __unicode__(self): return self.nombre class Meta: ordering = ['nombre', 'monograma'] verbose_name = 'Titulo' verbose_name_plural = 'Titulos' def save(self, *args, **kwargs): for field_name in ['']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['monograma', 'nombre']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) super(Titulos, self).save(*args, **kwargs) class NoDependencias (models.Model): nombre = models.CharField('Nombre', max_length = 50, help_text = 'Ingrese nombre del lugar donde viene') def __unicode__(self): return self.nombre class Meta: ordering = ['nombre'] verbose_name = 'Procedencia' verbose_name_plural = 'Procedencia' unique_together = ['nombre'] def save(self, *args, **kwargs): for field_name in ['']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['nombre']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) super(NoDependencias, self).save(*args, **kwargs) class Personas(models.Model): nombre = models.CharField('Nombre', max_length = 50, help_text = 'Ingrese su nombre') apellidopaterno = models.CharField('Apellido Paterno', max_length = 50, help_text = 'Ingrese su apellido paterno') apellidomaterno = models.CharField('Apellido Materno', max_length = 50, help_text = 'Ingrese su apellido materno') puesto = models.ForeignKey(Puestos, blank = True, null = True) titulo = models.ForeignKey(Titulos, blank = True, null = True) direccion = models.ForeignKey( Direccion, blank = True, null = True) # O dependencia = models.ForeignKey( Dependencia, blank = True, null = True , related_name = 'dependencia_persona')# O empresa = models.ForeignKey( NoDependencias, blank = True, null = True) def __unicode__(self): if self.titulo == None: mg = '' else: mg = ' - ' + self.titulo.monograma return u'%s %s, %s %s' % (self.apellidopaterno, self.apellidomaterno, self.nombre, mg) class Meta: ordering = ['apellidopaterno', 'apellidomaterno', 'nombre'] verbose_name_plural = 'Personas' unique_together = ['nombre', 'apellidopaterno', 'apellidomaterno', 'puesto', 'titulo', 'direccion'] def save(self, *args, **kwargs): for field_name in ['']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['nombre', 'apellidopaterno','apellidomaterno']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) super(Personas, self).save(*args, **kwargs) class tipo_usuario(models.Model): clave = models.CharField('Clave', max_length = 50, help_text = 'Ingrese la clave del usuario') nombre = models.CharField('Nombre', max_length = 50, help_text = 'Ingrese su nombre') def __unicode__(self): return self.nombre def save(self, *args, **kwargs): for field_name in ['']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['nombre']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) super(tipo_usuario, self).save(*args, **kwargs) class Perfil(models.Model): tipo = models.ForeignKey( tipo_usuario ) usuario = models.ForeignKey ( User ) direccion = models.ForeignKey( Direccion, null = True, blank = True ) dependencia = models.ForeignKey( Dependencia, null = True, blank = True ) def __unicode__(self): return self.usuario.username class Meta: ordering = ['dependencia', 'usuario'] verbose_name_plural = 'Perfiles' def ultimo_folio_interno(): r = recepcion_oficio.objects.latest('folio_interno').folio_interno r += 1 return r def estatus_en_tramite(): return Estatus.objects.get(clave = 'T').id class recepcion_oficio(models.Model): folio_interno = models.IntegerField( 'Número de folio interno', max_length = 70, help_text = 'Ingrese el numero de folio de control interno', default = ultimo_folio_interno ) fecha_captura = models.DateTimeField( 'Fecha de recepción', help_text = 'Fecha del oficio', default = datetime.now() ) no_oficio = models.CharField( 'Número de Oficio', max_length = 50, help_text = 'Ingrese el numero de oficio, dependencia/consecutivo/año' ) fecha_oficio = models.DateField( 'fecha del oficio', help_text = 'Fecha del oficio', default = datetime.now() ) firma = models.CharField( 'firma', max_length = 150, help_text = 'Nombre de quien firma el oficio' ) dependencia = models.ForeignKey( Dependencia, verbose_name = 'Dependencia envia', null = True, blank = True ) dependencia_envia = models.CharField( 'Dependencia', max_length = 150, help_text = 'Dependencia origen' ) asunto = models.CharField('Asunto', max_length = 400, help_text = 'Ingrese el asunto del oficio') anexo = models.BooleanField('Incluye anexos', default = False , help_text = 'Marque si el oficio incluye anexos', ) captura = models.ForeignKey( User ) estatus = models.ForeignKey( Estatus, help_text = '', default = estatus_en_tramite ) otro_estatus = models.CharField('Especifique otro estado',max_length = 100, blank = True, null = True) responde_con_oficio = models.BooleanField(default=False, help_text='Marque si se responde con oficio') no_oficio_respuesta = models.CharField('Respondemos con oficio número', max_length = 50, help_text = 'Ingrese el numero de oficio, dependencia/consecutivo/año con el que se responde', null = True, blank = True ) no_oficio_respuesta_contestacion = models.ForeignKey("elaboracion_oficio", verbose_name = 'Recibimos respuesta al oficio número', max_length = 50, help_text = '', null = True, blank = True ) activo = models.BooleanField( default = True) observaciones = models.TextField('Observaciones', blank = True, null = True, help_text = 'Escriba aquí si desea agregar alguna Observacion') def __unicode__(self): return u'%s' % (self.folio_interno) class Meta: ordering = ['-folio_interno'] verbose_name_plural = 'Oficios (recepción)' # verbose_name = 'Oficio' unique_together = ['folio_interno', 'no_oficio', 'dependencia_envia', 'asunto'] def save(self, *args, **kwargs): for field_name in ['no_oficio','asunto', 'firma', 'dependencia_envia']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in []: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) self.fecha_ultima_modificacion = datetime.now() super(recepcion_oficio, self).save(*args, **kwargs) # b = bitacora_oficio(oficio = self, estatus = self.estatus, usuario = self.captura, observaciones = self.observaciones) # b.save() class asignacion_oficio(models.Model): folio_interno = models.ForeignKey ( recepcion_oficio ) direccion = models.ForeignKey( Direccion, verbose_name = 'Dirección recibe', null = True, blank = True ) direccion_recibe = models.CharField( 'Dirección', max_length = 150, help_text = 'Dirección a la que se envía' ) recibe = models.CharField( 'Recibió', max_length = 150, help_text = 'Recibió oficio' ) fecha_asignacion = models.DateTimeField( 'fecha del asignación', default = datetime.now(), help_text = 'Fecha del asignacion' ) fecha_tramite = models.DateField('fecha del tramite', default = datetime.now(), blank = True, null = True ) observaciones = models.TextField('Observaciones', blank = True, null = True, help_text = 'Escriba aquí si desea agregar alguna Observacion') asigna = models.ForeignKey( User ) activo = models.BooleanField( default = True) def __unicode__(self): return u'%s' % (self.folio_interno) class Meta: ordering = ['folio_interno', 'fecha_asignacion'] verbose_name_plural = 'Oficios (asignación)' # verbose_name = 'Oficio' unique_together = ['folio_interno', 'direccion'] def save(self, *args, **kwargs): for field_name in ['no_oficio']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['asunto', 'direccion_recibe', 'recibe']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) self.fecha_ultima_modificacion = datetime.now() super(asignacion_oficio, self).save(*args, **kwargs) b = bitacora_oficio(oficio = self.folio_interno, estatus = self.folio_interno.estatus, usuario = self.asigna, observaciones = self.observaciones) b.save() class bitacora_oficio(models.Model): fecha = models.DateTimeField(auto_now_add = True) oficio = models.ForeignKey(recepcion_oficio) estatus = models.ForeignKey(Estatus) usuario = models.ForeignKey(User) observaciones = models.TextField('Observaciones', blank = True, null = True, help_text = 'Escriba aquí si desea agregar alguna Observacion') def __unicode__(self): return self.oficio.no_oficio def oficios(self): return ',\n'.join([s.asunto for s in self.oficios.all()]) class Meta: ordering = ['fecha'] verbose_name = 'Bitacora' verbose_name_plural = 'Oficios (bitacora)' def ultimo_no_oficio(): try: r = elaboracion_oficio.objects.filter(dependencia = p.dependencia).latest('no_oficio').id r +=1 except Exception, e: r = 1 c = r if r < 10: c = '0%s' % r if r < 100: c = '0%s' % c if r < 1000: c = '0%s' % c if r < 10000: c = '0%s' % c r = 'SA/%s/%s' % ( c, datetime.now().year ) return r class elaboracion_oficio(models.Model): no_oficio = models.CharField( 'Número de Oficio', max_length = 50, help_text = 'Ingrese el número de oficio, SA/00000/año', default = ultimo_no_oficio ) dependencia = models.ForeignKey( Dependencia, verbose_name = 'Dependencia', null = True, blank = True ) dependencia_envia = models.CharField( 'Dependencia destino', max_length = 150, help_text = 'Dependencia destino' ) fecha_oficio = models.DateField( 'fecha del oficio', help_text = 'Fecha del oficio', default = datetime.now() ) destinatario = models.CharField( 'a quien va dirigido', max_length = 150, help_text = 'Persona a quien va dirigido el oficio' ) asunto = models.CharField('Asunto', max_length = 400, help_text = 'Ingrese el asunto del oficio') observaciones = models.TextField('Observaciones', blank = True, null = True, help_text = 'Escriba aquí si desea agregar alguna Observación') estatus = models.ForeignKey( Estatus, help_text = 'Seleccione un estado' ) otro_estatus = models.CharField('Especifique otro estado',max_length = 100, blank = True, null = True) direccion_responsable = models.CharField( 'Responsable del oficio', max_length = 150, help_text = 'Dirección o persona responsable del oficio' ) usuario = models.ForeignKey( User ) fecha_captura = models.DateTimeField( 'fecha de captura', auto_now_add = True) activo = models.BooleanField( default = True) espera_respuesta = models.BooleanField('espera respuesta del destinatario', default = False , help_text = 'Marque si el oficio espera respuesta', ) responde_al_folio = models.BooleanField(default=False, help_text="Marque si el oficio responde a un folio") no_oficio_respuesta = models.ForeignKey( recepcion_oficio, verbose_name = 'Número de folio que responde', max_length = 50, help_text = 'Seleccione el número de folio al que se responde', null = True, blank = True ) def __unicode__(self): return self.no_oficio class Meta: ordering = ['-no_oficio'] # verbose_name = 'Oficio' verbose_name_plural = 'Oficios (elaboración)' unique_together = ['id','no_oficio'] def save(self, *args, **kwargs): for field_name in ['no_oficio']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.upper()) for field_name in ['asunto', 'dependencia_envia', 'destinatario']: val = getattr(self, field_name, False) if val: setattr(self, field_name, val.capitalize()) self.fecha_ultima_modificacion = datetime.now() super(elaboracion_oficio, self).save(*args, **kwargs)