pytask/taskapp/models.py
changeset 438 f861c753e55a
parent 437 b5a93feac34d
child 491 630719435d16
equal deleted inserted replaced
437:b5a93feac34d 438:f861c753e55a
     2 from django.contrib.auth.models import User
     2 from django.contrib.auth.models import User
     3 
     3 
     4 import tagging
     4 import tagging
     5 from tagging.fields import TagField
     5 from tagging.fields import TagField
     6 
     6 
       
     7 
     7 TASK_STATUS_CHOICES = (
     8 TASK_STATUS_CHOICES = (
     8         ("UP", "Unpublished"),
     9         ("Unpublished", "Unpublished"),
     9         ("OP", "Open"),
    10         ("Open", "Open"),
    10         ("LO", "Locked"),
    11         ("Locked", "Locked"),
    11         ("WR", "Working"),
    12         ("Working", "Working"),
    12         ("CD", "Closed"),
    13         ("Closed", "Closed"),
    13         ("DL", "Deleted"),
    14         ("Deleted", "Deleted"),
    14         ("CM", "Completed"))
    15         ("Completed", "Completed"))
    15 
    16 
    16 TB_STATUS_CHOICES = (
    17 TB_STATUS_CHOICES = (
    17     ("UP", "Unpublished"),
    18     ("Unpublished", "Unpublished"),
    18     ("OP", "Open"),
    19     ("Open", "Open"),
    19     ("WR", "All tasks have users selected"),
    20     ("All tasks have users selected", "All tasks have users selected"),
    20     ("CM", "Completed"))
    21     ("Completed", "Completed"))
    21 
    22 
    22 UPLOADS_DIR = "./pytask/static/uploads"
    23 UPLOADS_DIR = "/pytask/static/uploads"
       
    24 
    23 
    25 
    24 class Task(models.Model):
    26 class Task(models.Model):
    25     title = models.CharField(max_length = 100, verbose_name = u"Title", 
       
    26                              help_text = u"Keep it simple and below 100 chars.")
       
    27     desc = models.TextField(verbose_name = u"Description")
       
    28 
    27 
    29     status = models.CharField(max_length = 2, choices = TASK_STATUS_CHOICES, default = "UP")
    28     title = models.CharField(
    30     tags_field = TagField(verbose_name = u"Tags", 
    29       max_length=100, verbose_name=u"Title",
    31                           help_text = u"Give tags seperated by commas") 
    30       help_text=u"Keep it simple and below 100 chars.")
       
    31 
       
    32     desc = models.TextField(verbose_name=u"Description")
       
    33 
       
    34     status = models.CharField(max_length=255,
       
    35                               choices=TASK_STATUS_CHOICES,
       
    36                               default="Unpublished")
       
    37 
       
    38     tags_field = TagField(verbose_name=u"Tags", 
       
    39                           help_text=u"Give tags seperated by commas") 
    32     
    40     
    33     pynts = models.PositiveSmallIntegerField(help_text = u"No.of pynts a user \
    41     pynts = models.PositiveSmallIntegerField(
    34                                              gets on completing the task")
    42       help_text=u"No.of pynts a user gets on completing the task")
       
    43 
    35     created_by = models.ForeignKey(User,
    44     created_by = models.ForeignKey(User,
    36                                    related_name = "created_tasks")
    45                                    related_name="created_tasks")
    37     approved_by = models.ForeignKey(User, blank = True, null = True,
       
    38                                     related_name = "approved_tasks")
       
    39     reviewers = models.ManyToManyField(User, blank = True, null = True,
       
    40                                        related_name = "reviewing_tasks")
       
    41 
    46 
    42     claimed_users = models.ManyToManyField(User, blank = True, null = True, 
    47     approved_by = models.ForeignKey(User, blank=True, null=True,
    43                                            related_name = "claimed_tasks")
    48                                     related_name="approved_tasks")
    44     selected_users = models.ManyToManyField(User, blank = True, null = True, 
    49 
    45                                             related_name = "selected_tasks")
    50     reviewers = models.ManyToManyField(User, blank=True, null=True,
    46     
    51                                        related_name="reviewing_tasks")
       
    52 
       
    53     claimed_users = models.ManyToManyField(User, blank=True, null=True, 
       
    54                                            related_name="claimed_tasks")
       
    55 
       
    56     selected_users = models.ManyToManyField(User, blank=True, null=True, 
       
    57                                             related_name="selected_tasks")
       
    58 
    47     creation_datetime = models.DateTimeField()
    59     creation_datetime = models.DateTimeField()
    48     approval_datetime = models.DateTimeField(blank = True, null = True)
    60 
    49     
    61     approval_datetime = models.DateTimeField(blank=True, null=True)
       
    62 
    50     def __unicode__(self):
    63     def __unicode__(self):
    51         return unicode(self.title)
    64         return unicode(self.title)
    52 
    65 
       
    66 
    53 class TaskComment(models.Model):
    67 class TaskComment(models.Model):
    54 
    68 
    55     task = models.ForeignKey('Task', related_name = "comments")
    69     task = models.ForeignKey('Task', related_name="comments")
    56             
    70             
    57     data = models.TextField(verbose_name='Comment')
    71     data = models.TextField(verbose_name='Comment')
       
    72 
    58     commented_by = models.ForeignKey(User,
    73     commented_by = models.ForeignKey(User,
    59                                      related_name = "commented_taskcomments")
    74                                      related_name="commented_taskcomments")
    60     deleted_by = models.ForeignKey(User, null = True, blank = True,
    75 
    61                                    related_name = "deleted_taskcomments")
    76     deleted_by = models.ForeignKey(User, null=True, blank=True,
       
    77                                    related_name="deleted_taskcomments")
       
    78 
    62     comment_datetime = models.DateTimeField()
    79     comment_datetime = models.DateTimeField()
       
    80 
    63     is_deleted = models.BooleanField(default=False)
    81     is_deleted = models.BooleanField(default=False)
    64 
    82 
    65     def __unicode__(self):
    83     def __unicode__(self):
    66         return unicode(self.task.title)
    84         return unicode(self.task.title)
    67 
    85 
       
    86 
    68 class TaskClaim(models.Model):
    87 class TaskClaim(models.Model):
    69     task = models.ForeignKey('Task', related_name = "claims")
    88 
       
    89     task = models.ForeignKey('Task', related_name="claims")
    70             
    90             
    71     claimed_by = models.ForeignKey(User,
    91     claimed_by = models.ForeignKey(User,
    72                                    related_name = "claimed_claims")
    92                                    related_name="claimed_claims")
    73     proposal = models.TextField()
    93     proposal = models.TextField()
    74 
    94 
    75     claim_datetime = models.DateTimeField()
    95     claim_datetime = models.DateTimeField()
    76 
    96 
    77     def __unicode__(self):
    97     def __unicode__(self):
    78         return unicode(self.task.title)
    98         return unicode(self.task.title)
    79 
    99 
       
   100 
    80 class WorkReport(models.Model):
   101 class WorkReport(models.Model):
    81     task = models.ForeignKey(Task, related_name = "reports")
   102 
    82     submitted_by = models.ForeignKey(User, null = True, blank = True,
   103     task = models.ForeignKey(Task, related_name="reports")
    83                                      related_name = "submitted_reports")
   104 
    84     approved_by = models.ForeignKey(User, null = True, blank = True,
   105     submitted_by = models.ForeignKey(User, null=True, blank=True,
    85                                     related_name = "approved_reports")
   106                                      related_name="submitted_reports")
       
   107 
       
   108     approved_by = models.ForeignKey(User, null=True, blank=True,
       
   109                                     related_name="approved_reports")
    86 
   110 
    87     data = models.TextField(verbose_name="Report")
   111     data = models.TextField(verbose_name="Report")
       
   112 
    88     summary = models.CharField(max_length=100, verbose_name="Summary",
   113     summary = models.CharField(max_length=100, verbose_name="Summary",
    89                                help_text="A one line summary")
   114                                help_text="A one line summary")
    90     attachment = models.FileField(upload_to = UPLOADS_DIR)
   115 
       
   116     attachment = models.FileField(upload_to=UPLOADS_DIR)
    91 
   117 
    92     revision = models.PositiveIntegerField(default=0)
   118     revision = models.PositiveIntegerField(default=0)
       
   119 
    93     submitted_at = models.DateTimeField()
   120     submitted_at = models.DateTimeField()
    94 
   121 
       
   122 
    95 class ReportComment(models.Model):
   123 class ReportComment(models.Model):
    96     report = models.ForeignKey('WorkReport', related_name = "%(class)s_report")
   124 
       
   125     report = models.ForeignKey('WorkReport', related_name="%(class)s_report")
    97             
   126             
    98     data = models.TextField()
   127     data = models.TextField()
       
   128 
    99     commented_by = models.ForeignKey(User, 
   129     commented_by = models.ForeignKey(User, 
   100                                      related_name = "commented_reportcomments")
   130                                      related_name="commented_reportcomments")
   101     deleted_by = models.ForeignKey(User, null = True, blank = True,
   131 
   102                                    related_name = "deleted_reportcomments")
   132     deleted_by = models.ForeignKey(User, null=True, blank=True,
       
   133                                    related_name="deleted_reportcomments")
       
   134 
   103     comment_datetime = models.DateTimeField()
   135     comment_datetime = models.DateTimeField()
       
   136 
   104     is_deleted = models.BooleanField(default=False)
   137     is_deleted = models.BooleanField(default=False)
   105 
   138 
       
   139 
   106 class PyntRequest(models.Model):
   140 class PyntRequest(models.Model):
   107     task = models.ForeignKey(Task, related_name = "pynt_requests")
   141     task = models.ForeignKey(Task, related_name="pynt_requests")
       
   142 
   108     pynts = models.PositiveIntegerField(default=0, help_text="No.of pynts")
   143     pynts = models.PositiveIntegerField(default=0, help_text="No.of pynts")
   109 
   144 
   110     requested_by = models.ForeignKey(User, 
   145     requested_by = models.ForeignKey(User, 
   111                                      related_name = "requested_by_pynts")
   146                                      related_name="requested_by_pynts")
       
   147 
   112     requested_for = models.ForeignKey(User, 
   148     requested_for = models.ForeignKey(User, 
   113                                      related_name = "requested_for_pynts")
   149                                      related_name="requested_for_pynts")
   114 
   150 
   115     responded_by = models.ForeignKey(User, null = True, blank = True,
   151     responded_by = models.ForeignKey(User, null=True, blank=True,
   116                                     related_name = "responded_requests")
   152                                     related_name="responded_requests")
   117 
   153 
   118     is_accepted = models.BooleanField(default=False)
   154     is_accepted = models.BooleanField(default=False)
       
   155 
   119     remarks = models.CharField(max_length=100, blank=True,
   156     remarks = models.CharField(max_length=100, blank=True,
   120                                help_text="Reason in case of rejection")
   157                                help_text="Reason in case of rejection")
   121             
   158             
   122     request_datetime = models.DateTimeField()
   159     request_datetime = models.DateTimeField()
       
   160 
   123     is_responded = models.BooleanField(default=False)
   161     is_responded = models.BooleanField(default=False)
       
   162 
   124 
   163 
   125 class TextBook(models.Model):
   164 class TextBook(models.Model):
   126 
   165 
   127     name = models.CharField(max_length = 100)
   166     name = models.CharField(max_length=100)
       
   167 
   128     chapters = models.ManyToManyField(Task, related_name="textbooks")
   168     chapters = models.ManyToManyField(Task, related_name="textbooks")
       
   169 
   129     tags_field = TagField(verbose_name="Tags")
   170     tags_field = TagField(verbose_name="Tags")
   130 
   171 
   131     created_by = models.ForeignKey(User, related_name = "created_textbooks")
   172     created_by = models.ForeignKey(User, related_name="created_textbooks")
   132     approved_by = models.ForeignKey(User, null = True, blank = True,
       
   133                                     related_name = "approved_textbooks")
       
   134 
   173 
   135     status = models.CharField(max_length = 2, choices = TB_STATUS_CHOICES, default = "UP")
   174     approved_by = models.ForeignKey(User, null=True, blank=True,
       
   175                                     related_name="approved_textbooks")
       
   176 
       
   177     status = models.CharField(max_length=255,
       
   178                               choices=TB_STATUS_CHOICES,
       
   179                               default="Unpublished")
       
   180 
   136     creation_datetime = models.DateTimeField()
   181     creation_datetime = models.DateTimeField()
   137     approval_datetime = models.DateTimeField(blank = True, null = True)
   182 
       
   183     approval_datetime = models.DateTimeField(blank=True, null=True)
       
   184 
   138 
   185 
   139 tagging.register(Task)
   186 tagging.register(Task)
   140 tagging.register(TextBook)
   187 tagging.register(TextBook)