pytask/taskapp/models.py
branchbuildout
changeset 227 3c8f3b0e5b00
equal deleted inserted replaced
214:679c7e237052 227:3c8f3b0e5b00
       
     1 import os
       
     2 
       
     3 from django.core.files.storage import FileSystemStorage
       
     4 from django.db import models
       
     5 from django.contrib.auth.models import User
       
     6 
       
     7 import tagging
       
     8 from tagging.fields import TagField
       
     9 
       
    10 from pytask.taskapp.utilities.helper import get_key
       
    11 
       
    12 GENDER_CHOICES = (( 'M', 'Male'), ('F', 'Female'))
       
    13 RIGHTS_CHOICES = (
       
    14 	("AD", "Admin"),
       
    15 	("MG", "Manager"),
       
    16 	("DV", "Developer"),
       
    17 	("CT", "Contributor"),)
       
    18 
       
    19 STATUS_CHOICES = (
       
    20     ("UP", "Unpublished"),
       
    21     ("OP", "Open"),
       
    22     ("LO", "Locked"),
       
    23     ("WR", "Working"),
       
    24     ("CD", "Closed"),
       
    25     ("DL", "Deleted"),
       
    26     ("CM", "Completed"))
       
    27 
       
    28 NOTIFY_CHOICES = (
       
    29     ("MT", "Add Mentor"),
       
    30     ("DV", "Developer"),
       
    31     ("MG", "Manager"),
       
    32     ("AD", "Admin"),
       
    33     ("PY", "Assign credits"),
       
    34     ("CM", "Task completed"),
       
    35     ("CD", "Task closed"),
       
    36     ("DL", "Task deleted"),
       
    37     ("NU", "New User"),
       
    38     ("NT", "New Mentor"),
       
    39     ("ND", "New Developer"),
       
    40     ("NG", "New Manager"),
       
    41     ("NA", "New Admin"),
       
    42     ("AU", "Assign user"), ## i mean assign the task
       
    43     ("RU", "Remove user"), ## remove from working users list in task
       
    44 )
       
    45 
       
    46 IMAGES_DIR = "./images"
       
    47 UPLOADS_DIR = "./uploads"
       
    48 
       
    49 class CustomImageStorage(FileSystemStorage):
       
    50 
       
    51     def path(self, name):
       
    52         """ we return images directory path.
       
    53         """
       
    54 
       
    55         return os.path.join(IMAGES_DIR, name)
       
    56 
       
    57     def get_available_name(self, name):
       
    58         """ here we are going with username as the name of image.
       
    59         """
       
    60     
       
    61         root, ext = os.path.splitext(name)
       
    62         file_name = get_key() + ext
       
    63         while self.exists(file_name):
       
    64             file_name = get_key() + ext
       
    65         return file_name
       
    66 
       
    67 class Profile(models.Model):
       
    68     
       
    69     user = models.ForeignKey(User, unique = True)
       
    70     dob = models.DateField(verbose_name = u"Date of Birth", help_text = "YYYY-MM-DD")
       
    71     gender = models.CharField(max_length = 1, choices = GENDER_CHOICES)
       
    72     rights = models.CharField(max_length = 2, choices = RIGHTS_CHOICES, default = u"CT")
       
    73     credits = models.PositiveSmallIntegerField(default = 0)
       
    74     
       
    75     aboutme = models.TextField(blank = True)
       
    76     foss_comm = TagField(verbose_name="FOSS Communities")
       
    77     phonenum = models.CharField(max_length = 15, blank = True, verbose_name = u"Phone Number")
       
    78     homepage = models.URLField(blank = True, verbose_name = u"Homepage/Blog")
       
    79     street = models.CharField(max_length = 80, blank = True)
       
    80     city = models.CharField(max_length = 25, blank = True)
       
    81     country = models.CharField(max_length = 25, blank = True)
       
    82     nick = models.CharField(max_length = 20, blank = True)
       
    83     photo = models.ImageField(storage = CustomImageStorage(),upload_to = IMAGES_DIR, blank = True)
       
    84 
       
    85     def __unicode__(self):
       
    86         return unicode(self.user.username)
       
    87 
       
    88 class Task(models.Model):
       
    89     
       
    90     prim_key = models.AutoField(primary_key = True)
       
    91     id = models.CharField(max_length = 10, unique = True)
       
    92     title = models.CharField(max_length = 100, verbose_name = u"Title", help_text = u"Keep it simple and below 100 chars.")
       
    93     desc = models.TextField(verbose_name = u"Description")
       
    94     status = models.CharField(max_length = 2, choices = STATUS_CHOICES, default = "UP")
       
    95     tags_field = TagField(verbose_name = u"Tags", help_text = u"Give comma seperated tags") 
       
    96     
       
    97     credits = models.PositiveSmallIntegerField(help_text = u"No.of credits a user gets on completing the task")
       
    98     progress = models.PositiveSmallIntegerField(default = 0)
       
    99         
       
   100     mentors = models.ManyToManyField(User, related_name = "%(class)s_mentors")
       
   101     created_by = models.ForeignKey(User, related_name = "%(class)s_created_by")
       
   102     claimed_users = models.ManyToManyField(User, blank = True, related_name = "%(class)s_claimed_users")
       
   103     assigned_users = models.ManyToManyField(User, blank = True, related_name = "%(class)s_assigned_users")
       
   104     
       
   105     creation_datetime = models.DateTimeField()
       
   106     published_datetime = models.DateTimeField()
       
   107     sub_type = models.CharField(max_length=1, choices = (('D','Dependency'),('S','Subtask')), default = 'D')   
       
   108     
       
   109     def __unicode__(self):
       
   110         return unicode(self.title)
       
   111 
       
   112 class Map(models.Model):
       
   113 
       
   114     main = models.ForeignKey('Task', related_name = "%(class)s_main")
       
   115     subs = models.ManyToManyField('Task', blank = True, null = True, related_name = "%(class)s_subs")
       
   116 
       
   117 class Comment(models.Model):
       
   118     
       
   119     task = models.ForeignKey('Task')
       
   120     data = models.TextField()
       
   121     created_by = models.ForeignKey(User, related_name = "%(class)s_created_by")
       
   122     creation_datetime = models.DateTimeField()
       
   123     deleted_by = models.ForeignKey(User, null = True, blank = True, related_name = "%(class)s_deleted_by")
       
   124     is_deleted = models.BooleanField()
       
   125     attachment = models.FileField(upload_to = UPLOADS_DIR, blank = True)
       
   126     
       
   127     def __unicode__(self):
       
   128         return unicode(self.task.title)
       
   129 
       
   130 class Request(models.Model):
       
   131 
       
   132     sent_to = models.ManyToManyField(User, related_name = "%(class)s_sent_to", blank = False)
       
   133     sent_by = models.ForeignKey(User, related_name = "%(class)s_sent_by", blank = False)
       
   134     role = models.CharField(max_length = 2, blank = False)
       
   135     reply = models.BooleanField(default = False, blank = False)
       
   136     remarks = models.TextField(default = "",blank = True)
       
   137     
       
   138     is_read = models.BooleanField(default = False, blank = False)
       
   139     is_valid = models.BooleanField(default = True, blank = False)
       
   140     
       
   141     creation_date = models.DateTimeField()
       
   142     reply_date = models.DateTimeField()
       
   143     is_replied = models.BooleanField(default = False)
       
   144     replied_by = models.ForeignKey(User, related_name = "%(class)s_replied_by", blank = True, null = True)
       
   145     
       
   146     task = models.ForeignKey(Task,related_name = "%(class)s_task", blank = True, null = True)
       
   147     receiving_user = models.ForeignKey(User, related_name = "%(class)s_receiving_user", blank = True, null = True)
       
   148     pynts = models.PositiveIntegerField(default=0)
       
   149 
       
   150     def __unicode__(self):
       
   151 
       
   152         return u"Request %s %s"%(self.sent_by.username, self.role)
       
   153 
       
   154 class Notification(models.Model):
       
   155 
       
   156     role = models.CharField(max_length = 2, choices = NOTIFY_CHOICES, blank = False)
       
   157     sent_to = models.ForeignKey(User, related_name = "%(class)s_sent_to", blank = False)
       
   158     sent_from = models.ForeignKey(User, related_name = "%(class)s_sent_from", null = True, blank = True)
       
   159     task = models.ForeignKey(Task, related_name = "%(class)s_task", null = True, blank = True)
       
   160 
       
   161     sub = models.CharField(max_length = 100)
       
   162     message = models.TextField()
       
   163     remarks = models.CharField(max_length = 100)
       
   164 
       
   165     sent_date = models.DateTimeField()
       
   166     is_read = models.BooleanField(default = False)
       
   167     is_deleted = models.BooleanField(default = False)
       
   168 
       
   169     def __unicode__(self):
       
   170         return u"%s %s %s"%(self.sent_to, self.message, self.sent_date.ctime())
       
   171     
       
   172 tagging.register(Profile)
       
   173 tagging.register(Task)