#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', )
fecha_termino = models.DateField(help_text='Fecha de Termino',auto_now_add=True, null=True, blank=True)
motivo = models.TextField('Motivo',null=True,blank=True)
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 Comentario(models.Model):
proyecto = models.ForeignKey('Proyecto', help_text='Nombre del proyecto')
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 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)
# from django.db.models import signals
# from Zalamero.models import UsuarioExtendidoDGTIC
# def create_user_profile(sender, instance, created, **kwargs):
# if created:
# UsuarioExtendidoDGTIC.objects.create(user=instance)
# signals.post_save.connect(create_user_profile, sender=User)