#encoding:utf-8 from django.db import models # Create your models here. class Catalogo(models.Model): nombre = models.CharField(max_length=150) clave = models.CharField(max_length=3) descripcion = models.CharField(max_length=200, blank=True) class Meta: abstract = True ordering = ['nombre'] class Dependencia(Catalogo): def __unicode__(self): return u'%s' % self.nombre class Estatus(Catalogo): color = models.CharField('color', max_length = 17, help_text = 'color de identificacion') prioridad = models.IntegerField() def __unicode__(self): return u'%s' % self.nombre def color_(self): return '    %s' % (self.color, self.nombre) color_.allow_tags = True class Meta: verbose_name_plural = 'estatus' from django.core.mail import send_mail, BadHeaderError from django.contrib.auth.models import User from django.db.models import Count, Min, Sum, Avg class Proyecto(models.Model): nombre = models.CharField(max_length=250, help_text='nombre del elemento', unique=True) creador = models.ForeignKey('auth.User', help_text='nombre del usuario que crea el proyecto', ) fecha = models.DateField('fecha de registro', help_text='fecha de registro del elemento', auto_now_add=True, ) fecha_inicio = models.DateField('fecha de inicio', help_text='fecha de inicio del proyecto', ) dependencia = models.ForeignKey('Dependencia', ) responsable = models.ManyToManyField('auth.User', related_name='responsables') estatus = models.ForeignKey('Estatus', default=1) fecha_estimada_entrega = models.DateField('fecha estimada de entrega', help_text='fecha estimada de entrega', ) def __unicode__(self): return u'%s' % self.nombre class Meta: ordering = ['nombre'] permissions = ( ("ver_proyecto", "Puede ver proyectos"), ("cambia_estatus","Puede modificar estatus del proyecto") ) def estatus_(self): return '    %s' %\ (self.estatus.color, self.estatus) estatus_.allow_tags = True def correos_(self): return ",\n".join([s.email for s in self.responsable.all()]) def porcentaje_(self): actividades = Actividad.objects.filter(proyecto = self.id, estatus=True)#.annotate(por=Sum('porcentaje')) porcentaje = 0 if actividades: porcentaje = actividades[0].porcentaje * actividades.count() return porcentaje class Actividad(models.Model): proyecto = models.ForeignKey('Proyecto') usuario = models.ManyToManyField('auth.User', through='ActividadesUsuario') estatus = models.BooleanField('Terminado', default=False) porcentaje = models.DecimalField(max_digits=7, decimal_places=2, blank=True, null=True, default=0 ) descripcion = models.TextField('descripciĆ³n', help_text='Contiene informacion y/o comentarios que se consideren importantes por el usuario, y son acerca del documento que se esta presentando.', ) fecha = models.DateTimeField('fecha de registro', help_text='fecha de registro del elemento', auto_now_add=True) def __unicode__(self): return u'%s' % self.descripcion class Meta: ordering = ['fecha'] verbose_name_plural = 'Actividades' permissions = ( ("ver_actividad", "Puede ver actividades"), ("cambia_estatus","Puede modificar estatus de la actividad") ) def correos_(self): return ",\n".join([s.email for s in self.usuario.all()]) class ActividadesUsuario(models.Model): usuario = models.ForeignKey('auth.User') actividad = models.ForeignKey('Actividad', null=True, blank=True) terminado = models.BooleanField( default=False ) porcentaje = models.DecimalField(max_digits=7, decimal_places=2, blank=True, null=True, default=100 ) def __unicode__(self): return u'%s %s %s' % (self.usuario, self.actividad, self.porcentaje) class Meta: unique_together = ['usuario', 'actividad', 'terminado', 'porcentaje'] class PerfilUser(models.Model): nombre = models.CharField('Nombre', max_length=20) clave = models.CharField('Clave',max_length=4) def __unicode__(self): return "%s" %(self.nombre) class UsuariosPerfil(models.Model): usuario = models.ForeignKey(User) perfil = models.ForeignKey(PerfilUser) def __unicode__(self): return "%s" %(self.perfil.nombre) class UsuarioExtendidoDGTIC(models.Model): user = models.OneToOneField('auth.User', related_name='profile') #depto = models.ForeignKey(Departamento) iniciales = models.CharField(max_length=5, blank=True, default=' ') def __unicode__(self): return "%s" %(self.iniciales) def save(self, force_insert=False, force_update=False): resultado = '' if self.user.first_name: nombres = self.user.first_name.split(' ') for nombre in nombres: if nombre not in('de', 'las', 'la', 'del', 'los', 'y' ): resultado = resultado + nombre[0].upper() if self.user.last_name: apellidos = self.user.last_name.split(' ') for apellido in apellidos: if apellido not in('de', 'las', 'la', 'del', 'los', 'y' ): resultado = resultado + apellido[0].upper() self.iniciales = resultado super(UsuarioExtendidoDGTIC, self).save(force_insert, force_update) class Areas(models.Model): nombre = models.CharField('Area',max_length=100) clave = models.CharField('Clave',max_length=4) color = models.CharField('color', max_length = 17, help_text = 'color de identificacion') def __unicode__(self): return "%s" %(self.nombre) class Requisiciones( models.Model): Dependencia = models.ForeignKey(Dependencia) oficioNumero = models.CharField(max_length=40) requisicionNumero = models.CharField(max_length=40) cuentaPresupuestal = models.CharField(max_length=40) proyecto = models.CharField(max_length=20) noLotes = models.IntegerField() usuario = models.ForeignKey(User) estatus = models.ForeignKey(Estatus) fecha = models.DateField(auto_now_add=True) area = models.ForeignKey(Areas) total = models.DecimalField(max_digits=12, decimal_places=2) fecha_termino = models.DateField(auto_now_add=True) def __unicode__(self): return "%s" %(self.oficioNumero) class Comentario(models.Model): requisicion = models.ForeignKey(Requisiciones) usuario = models.ForeignKey('auth.User' , help_text='Usuario a quien pertenece') descripcion = models.TextField('Comentarios', help_text='Contiene informacion y/o comentarios que se consideren importantes por el usuario, y son acerca del documento que se esta presentando.', ) fecha = models.DateTimeField('fecha de registro', help_text='fecha de registro del elemento', auto_now_add=True) def __unicode__(self): return u'%s' % self.descripcion class Meta: ordering = ['fecha'] def correo_(self): return u'%s' % self.usuario.email class Bitacora(models.Model): requisicion = models.ForeignKey(Requisiciones) montoFinal = models.DecimalField(max_digits=12, decimal_places=2,null=True,blank=True) lotes = models.IntegerField(null=True,blank=True) usuario = models.ForeignKey(User) fecha = models.DateField(auto_now_add=True) areaAnterior = models.ForeignKey(Areas, null=True, blank=True) estatus = models.ForeignKey(Estatus, null=True,blank=True) fecha_termino = models.DateField(auto_now_add=True) def __unicode__(self): return '%s' %(self.requisicion) class UsuarioArea(models.Model): area = models.ForeignKey(Areas) usuario = models.ForeignKey(User) def __unicode__(self): return '%s' %(self.area.clave)