#encoding:utf-8 from django.db import models # python manage.py dumpdata --format=xml Zalamero > /home/guillermo/PycharmProjects/DGTIC/Zalamero/fixtures/initial_data.xml # python manage.py dumpdata --format=xml Zalamero > /home/guillermo/PycharmProjects/zalamero/Zalamero/fixtures/initial_data.xml # python manage.py dumpdata --format=xml Zalamero > /home/guillermo/PycharmProjects/zalameromil/zalamero/Zalamero/fixtures/initial_data.xml # 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) 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)