#encoding:utf-8 from django.db import models from dependencias.models import * from datetime import datetime # Create your models here. class bitacora(models.Model): fecha_registro = models.DateTimeField('fecha registro', help_text = 'fecha de registro del elemento', auto_now_add = True, ) fecha_ultimo_cambio = models.DateTimeField('fecha del ultimo cambio', help_text = 'fecha de la ultima modificación registrada', auto_now = True, ) activo = models.BooleanField('activo', help_text = 'estado del registro', default = True, ) usuario = models.ForeignKey( User ) class Meta: abstract = True class catalogo(bitacora): clave = models.CharField('clave', max_length=10, help_text = 'Clave de identificación', blank = True, ) nombre = models.CharField('nombre', max_length=150, help_text = 'nombre del elemento', ) descripcion = models.CharField('descripción', max_length=100, help_text = 'descripción breve del elemento', blank = True, ) class Meta: abstract = True ordering = ['clave', 'nombre'] def __unicode__(self): return u'%s - %s' % (self.clave, self.nombre, ) class proyectos(catalogo): class Meta: verbose_name = 'Proyectos' verbose_name_plural = 'Proyectos' unique_together = ['clave', 'nombre'] class partidas(catalogo): #proyectos=models.ForeignKey(proyectos) partidas=models.ManyToManyField('proyectos') class Meta: verbose_name = 'Partida' verbose_name_plural = 'Partidas' def __unicode__(self): return u'%s' % (self.clave) class estatus(catalogo): color = models.CharField('color', max_length = 17, help_text = 'color de identificacion') secuencia = models.IntegerField() class Meta: ordering = ['secuencia'] verbose_name = 'Estatus' verbose_name_plural = 'Estatus' def color_(self): return '%s' % (self.color, self.nombre) color_.allow_tags = True 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 class catalogoDependencias(models.Model): clave = models.CharField(max_length = 150) nombre = models.CharField(max_length = 150) def __unicode__(self): return u'%s - %s' % (self.clave, self.nombre) class anuencia_datos(bitacora): fecha_solicitud = models.DateTimeField('Fecha de solicitud', blank = True, null = True ) fecha_recepcion = models.DateTimeField('Fecha de recepción', blank = True, null = True, ) dependencias = models.ForeignKey(catalogoDependencias, help_text = 'Selecione el proyecto y la partida a la que pertenece') no_oficio = models.CharField('Número de Oficio', max_length=150, help_text = 'Ingrese el número de oficio, dependencia/consecutivo/año', ) contacto_tecnico = models.CharField('Contacto Técnico', help_text = 'Nombre de la persona de contacto', max_length = 150) telefono_fax = models.CharField('Teléfono / fax', max_length=15, help_text = 'Teléfono o fax', ) extension = models.CharField('Extensión', max_length=6, help_text = 'Extensión',blank= True, null= True,) correo_electronico = models.EmailField('Correo electrónico', max_length=100, help_text = 'Correo electrónico', blank = True, null = True, ) no_requisicion = models.CharField('Número de requisición', max_length=15, help_text = 'Número de requisición, si ya cuenta con ella', blank=True, null=True) estatus = models.ForeignKey(estatus, default = 1, help_text = 'Estatus de la anuencia') autorizacion_presupuesto = models.FileField('Autorización Presupuesto',upload_to = 'cargas', help_text = 'Digitalización de autorización presupuestal', blank = True, null = True) autorizacion_tecnica = models.FileField(upload_to = 'cargas', help_text = 'Digitalización de autorización técnica', blank = True, null = True) cotizaciones = models.FileField(upload_to = 'cargas', help_text = 'Digitalización de cotizaciones; ZIP o RAR de ser varias', blank = True, null = True) justificacion = models.TextField( 'Justificación', max_length = 300, help_text = 'Justificación técnica' ) def __unicode__(self): return u'%s' % ( self.id ) def estatus_(self): return '
    
%s
' % (self.estatus.color,self.estatus.color, self.estatus.nombre) estatus_.allow_tags = True def dependencia_(self): d = Perfil.objects.get(usuario_id = self.usuario) return u'%s' % (d.direccion.siglas) def autorizacion_presupuesto_tipo(self): r = None if self.autorizacion_presupuesto != '': r = u'%s' % (self.autorizacion_presupuesto) r = r.split('.')[1].upper() r = asigna_icono(r) return u'%s' % (r) def autorizacion_tecnica_tipo(self): r = None if self.autorizacion_tecnica != '': r = u'%s' % (self.autorizacion_tecnica) r = r.split('.')[1].upper() r = asigna_icono(r) return u'%s' % (r) def cotizaciones_tipo(self): r = None if self.cotizaciones != '': r = u'%s' % (self.cotizaciones) r = r.split('.')[1].upper() r = asigna_icono(r) return u'%s' % (r) def total_articulos(self): d = anuencia_detalle.objects.filter(anuencia_id = self.id) return u'%s' % ( d.count() ) class Meta: verbose_name = 'anuencia' verbose_name_plural = 'anuencias' class addProyectos(models.Model): clave=models.CharField(max_length=100) nombre=models.CharField(max_length=200) def __unicode__(self): return u'%s - %s' % (self.clave, self.nombre) class addPartidas(models.Model): clave=models.CharField(max_length=100) nombre=models.CharField(max_length=200) proyectos=models.ManyToManyField(addProyectos,blank=True,null=True) #proyecto=models.ForeignKey(addProyectos, null=True,blank=True) def __unicode__(self): return u'%s - %s' % (self.clave, self.nombre) class anuencia_detalle(bitacora): anuencia = models.ForeignKey( anuencia_datos ) proyecto = models.ForeignKey(addProyectos, help_text = 'Selecione el proyecto y la partida a la que pertenece') #proyecto = models.ForeignKey(addProyectos, help_text = 'Selecione el proyecto y la partida a la que pertenece') partida = models.ForeignKey(addPartidas, help_text = 'Selecione el proyecto y la partida a la que pertenece') no_lote = models.CharField(max_length=3, blank=True, null= True, help_text = 'Número de lote al que pertenece el artículo') articulo = models.CharField(max_length = 300, help_text = 'Nombre del artículo') categoria = models.CharField (max_length = 100, help_text = 'Categoria a la que pertenece el articulo') descripcion = models.TextField(max_length = 500, help_text = 'Descripción breve') cantidad = models.IntegerField(help_text = 'Número de piezas') precio = models.DecimalField(decimal_places = 2, max_digits = 20, help_text = 'Precio unitario') url = models.URLField(help_text = 'Página web del artículo', blank=True, null=True,) autorizado = models.BooleanField(default=False) observaciones = models.TextField('Observaciones', max_length = 300, blank = True, null = True, help_text = 'Escriba aquí si desea agregar alguna Observacion') def __unicode__(self): return u'%s - %s' % ( self.anuencia.id, self.id ) def subtotal(self): r = None if self.precio != '' and self.cantidad != '': r = u'%s' % (self.precio * self.cantidad) return u'%s' % (r) class Meta: verbose_name = 'detalle' verbose_name_plural = 'detalles' unique_together = ['proyecto', 'partida', 'articulo','anuencia'] def save(self, *args, **kwargs): for field_name in ['categoria', 'articulo', 'descripcion']: 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(anuencia_detalle, self).save(*args, **kwargs) # class articulos(bitacora): # anuencia = models.ForeignKey( anuencia_detalle ) # # no_lote = models.CharField('Número de lote', max_length=15, ) # articulo = models.CharField(max_length = 300, help_text = 'Nombre del artículo') # categoria = models.CharField (max_length = 100, help_text = 'Categoria a la que pertenece el articulo') # descripcion = models.CharField(max_length = 300, help_text = 'Descripción breve') # cantidad = models.IntegerField(help_text = 'Número de piezas') # precio = models.DecimalField(decimal_places = 2, max_digits = 7, help_text = 'Precio unitario') # url = models.URLField(help_text = 'Página web del artículo') # autorizado = models.BooleanField(default=False) # observaciones = models.CharField('Observaciones', max_length = 300, blank = True, null = True, help_text = 'Escriba aquí si desea agregar alguna Observacion') # def __unicode__(self): # return u'%s' % ( self.id ) # class Meta: # verbose_name = 'articulo' # verbose_name_plural = 'articulos' class revision(bitacora): anuencia = models.ForeignKey( anuencia_datos ) # usuario = quien revisa la anuencia # fecha_registro = fecha en que se inicia la revision # fecha_ultimo_cambio = fecha en que se termina la revision def __unicode__(self): return u'%s' % ( self.anuencia ) class Meta: verbose_name = 'revision' verbose_name_plural = 'revisiones' class autorizacion(bitacora): anuencia = models.ForeignKey( anuencia_datos ) # usuario = quien autoriza la anuencia # fecha_registro = fecha en que se registra la autorizacion def __unicode__(self): return u'%s' % ( self.anuencia ) class Meta: verbose_name = 'autorizacion' verbose_name_plural = 'autorizaciones' #class addPartidas(models.Model): # clave=models.CharField(max_length=100) # nombre=models.CharField(max_length=200) # proyecto=models.ForeignKey(addProyectos) # def __unicode__(self): # return self.nombre